Страница 4 из 5

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

Добавлено: Пт апр 20, 2018 9:06 pm
fandaymon
directman66 писал(а): Пт апр 20, 2018 8:47 pm Там же в классе полно других функций, которые вызываются вроде без ссылки на самого себя. Я сейчас с телефона, детей укладываю, уже не проверить.
То-то и оно, что они вроде бы все как раз с this-> вызываются.

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

Добавлено: Сб апр 21, 2018 7:15 am
nick7zmail
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('имя класса', 'имя свойства', 'хранить историю', 'имя связанного метода');
Пулл реквест лень делать)) да и не проверял работоспособность вообще, если честно...но вроде должно работать.

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

Добавлено: Сб апр 21, 2018 11:58 am
Gelezako
я проверил, всё работает, спасибо!
С твоего позволения оформлю пулреквест.

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

Добавлено: Сб апр 21, 2018 12:12 pm
nick7zmail
Да пожалуйста)) я ж говорю - я ленив для этого)

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


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

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

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

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

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) Как из функции корректно изменять их значения, если оно не возвращается.

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

Добавлено: Ср апр 25, 2018 3:29 pm
fandaymon
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

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

Добавлено: Ср апр 25, 2018 3:37 pm
directman66
А как корректнее править? Через SQL? Или есть более удобное решение?

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

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

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

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

специальные методы класса написаны

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

Добавлено: Ср апр 25, 2018 3:49 pm
nick7zmail
Только перед this знак $...а так всё правильно говорят.

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


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

Добавлено: Чт апр 26, 2018 9:29 pm
directman66
Друзья, посмотрите тему https://majordomo.smartliving.ru/forum/ ... f=4&t=5432