Программно инициализировать метод

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: Программно инициализировать метод

Сообщение fandaymon » Пт апр 20, 2018 9:06 pm

directman66 писал(а):
Пт апр 20, 2018 8:47 pm
Там же в классе полно других функций, которые вызываются вроде без ссылки на самого себя. Я сейчас с телефона, детей укладываю, уже не проверить.
То-то и оно, что они вроде бы все как раз с this-> вызываются.
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Программно инициализировать метод

Сообщение nick7zmail » Сб апр 21, 2018 7:15 am

Gelezako писал(а):
Пт апр 20, 2018 3:17 pm
nick7zmail, а у тебя нет понимания как самому клепать "встроенные функции", типа setGlobal, getGlobal итд? Можно было бы сделать функцию линковки метода к свойству, рас он так популярен.
Модифицировал функцию addClassProperty, иначе если писать новую - она почти такая же выходит)))
Зайдите в /lib/objects.class.php, найдите там её и замените на

Код: Выделить всё

function addClassProperty($class_name, $property_name, $keep_history = 0, $method_name='')
{
   $class_id = addClass($class_name);
   $method_id = addClassMethod($class_name, $method_name);
   
   $sqlQuery = "SELECT ID
                  FROM properties
                 WHERE TITLE LIKE '" . DBSafe($property_name) . "'
                   AND OBJECT_ID = 0
                   AND CLASS_ID  = '" . $class_id . "'";
   $prop = SQLSelectOne($sqlQuery);
   
   if (!$prop['ID'])
   {
      $prop = array();
      $prop['CLASS_ID']     = $class_id;
      $prop['TITLE']        = $property_name;
      $prop['KEEP_HISTORY'] = $keep_history;
      $prop['ONCHANGE'] = $method_name;
      $prop['OBJECT_ID']    = 0;
	  
      $prop['ID']           = SQLInsert('properties', $prop);
   }
   return $prop['ID'];
}
addClassProperty после этого будет доступна для вызова с 4 параметрами (2 последних, понятное дело, не обязательные):

Код: Выделить всё

addClassProperty('имя класса', 'имя свойства', 'хранить историю', 'имя связанного метода');
Пулл реквест лень делать)) да и не проверял работоспособность вообще, если честно...но вроде должно работать.
За это сообщение автора nick7zmail поблагодарили (всего 2):
Gelezako (Сб апр 21, 2018 11:47 am) • directman66 (Сб апр 21, 2018 2:54 pm)
Рейтинг: 2.33%
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Аватара пользователя
Gelezako
Сообщения: 963
Зарегистрирован: Чт июн 02, 2016 9:33 pm
Благодарил (а): 205 раз
Поблагодарили: 106 раз
Контактная информация:

Re: Программно инициализировать метод

Сообщение Gelezako » Сб апр 21, 2018 11:58 am

я проверил, всё работает, спасибо!
С твоего позволения оформлю пулреквест.
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Программно инициализировать метод

Сообщение nick7zmail » Сб апр 21, 2018 12:12 pm

Да пожалуйста)) я ж говорю - я ленив для этого)

Отправлено с моего Xperia XZ1 Compact через Tapatalk

Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Re: Программно инициализировать метод

Сообщение directman66 » Ср апр 25, 2018 3:14 pm

Друзья, спрошу тут, так как тут самые помощники ))

Есть главная функция из примеров модуля

Код: Выделить всё

function admin(&$out) {
 $this->getConfig();
 $out['DEBUG'] = $this->config['DEBUG'];
 
  if ($this->view_mode=='update_settings') {
	global $debug;
	$this->config['DEBUG']=$debug;  
  }
По ней у меня несколько вопросов:
1) В этих переменных обычно хранят настройки модулей. Я так и не нашел, где физически эти данные хранятся и как они передаются в БД
2) Как из функции корректно читать их значения, если оно не передается функции
3) Как из функции корректно изменять их значения, если оно не возвращается.
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: Программно инициализировать метод

Сообщение fandaymon » Ср апр 25, 2018 3:29 pm

directman66 писал(а):
Ср апр 25, 2018 3:14 pm
Друзья, спрошу тут, так как тут самые помощники ))

Есть главная функция из примеров модуля

Код: Выделить всё

function admin(&$out) {
 $this->getConfig();
 $out['DEBUG'] = $this->config['DEBUG'];
 
  if ($this->view_mode=='update_settings') {
	global $debug;
	$this->config['DEBUG']=$debug;  
  }
По ней у меня несколько вопросов:
1) В этих переменных обычно хранят настройки модулей. Я так и не нашел, где физически эти данные хранятся и как они передаются в БД
2) Как из функции корректно читать их значения, если оно не передается функции
3) Как из функции корректно изменять их значения, если оно не возвращается.

Код: Выделить всё

public function getConfig()
   {
      $sqlQuery = "SELECT *
                     FROM project_modules
                    WHERE NAME = '" . $this->name . "'";

      $rec  = SQLSelectOne($sqlQuery);
      $data = $rec["DATA"];

      $this->config = unserialize($data);

      return $this->config;
   }
Определяется в классе модули. Ну и если смотреть по коду, то хранится всё в таблице project_modules
За это сообщение автора fandaymon поблагодарил:
directman66 (Ср апр 25, 2018 3:36 pm)
Рейтинг: 1.16%
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Re: Программно инициализировать метод

Сообщение directman66 » Ср апр 25, 2018 3:37 pm

А как корректнее править? Через SQL? Или есть более удобное решение?
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: Программно инициализировать метод

Сообщение fandaymon » Ср апр 25, 2018 3:44 pm

directman66 писал(а):
Ср апр 25, 2018 3:37 pm
А как корректнее править? Через SQL? Или есть более удобное решение?
Ну вот же оно и есть - $this->getConfig(); получить

$this->config['название параметра']=значение параметра; - изменить вручную значение

$this->saveConfig(); сохранить

специальные методы класса написаны
Последний раз редактировалось fandaymon Ср апр 25, 2018 3:49 pm, всего редактировалось 1 раз.
За это сообщение автора fandaymon поблагодарил:
directman66 (Ср апр 25, 2018 6:09 pm)
Рейтинг: 1.16%
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Программно инициализировать метод

Сообщение nick7zmail » Ср апр 25, 2018 3:49 pm

Только перед this знак $...а так всё правильно говорят.

Отправлено с моего Xperia XZ1 Compact через Tapatalk

Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Re: Программно инициализировать метод

Сообщение directman66 » Чт апр 26, 2018 9:29 pm

Друзья, посмотрите тему https://majordomo.smartliving.ru/forum/ ... f=4&t=5432
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
Ответить