Страница 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