Разработка модулей (Рекомендации)

Разработка дополнительных модулей, подключение различных приложений.

Модераторы: Bagir, Ivan, Vit, immortal, PAV

Аватара пользователя
nick7zmail
Сообщения: 5722
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 111 раз
Поблагодарили: 1397 раз

Re: Разработка модулей (Рекомендации)

Сообщение nick7zmail » Вт янв 17, 2017 10:16 am

Нужна помощь по модулю...
Ситуация: В папке modules валяется отдельный php-шник нужный для исполнения какого-либо кода, вызывается прямой командой из браузера (/modules/module_name/php_name.php?params=val например)....но чтобы этот код выполнить - ему нужны некоторые данные из таблиц.

Проблема: SQLSelect/SQLSelectOne не определены в этом php-шнике, и как следствие не запускаются...чтобы он корректно считал записи - что нужно сделать? Может библиотеку какую подключить?
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Аватара пользователя
sergejey
Site Admin
Сообщения: 4263
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1364 раза
Контактная информация:

Re: Разработка модулей (Рекомендации)

Сообщение sergejey » Вт янв 17, 2017 10:39 am

nick7zmail писал(а):Нужна помощь по модулю...
Ситуация: В папке modules валяется отдельный php-шник нужный для исполнения какого-либо кода, вызывается прямой командой из браузера (/modules/module_name/php_name.php?params=val например)....но чтобы этот код выполнить - ему нужны некоторые данные из таблиц.

Проблема: SQLSelect/SQLSelectOne не определены в этом php-шнике, и как следствие не запускаются...чтобы он корректно считал записи - что нужно сделать? Может библиотеку какую подключить?
Если php-шник в папке модуля, то подойдёт такой шаблон:

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

<?php
chdir(dirname(__FILE__) . '/../../');
include_once("./config.php");
include_once("./lib/loader.php");
$db = new mysql(DB_HOST, '', DB_USER, DB_PASSWORD, DB_NAME);
include_once("./load_settings.php");

// здесь ваш код
// ...

$db->Disconnect(); 
За это сообщение автора sergejey поблагодарили (всего 2):
nick7zmail (Вт янв 17, 2017 7:40 pm) • Bagir (Вт фев 14, 2017 9:40 am)
Рейтинг: 2.74%

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Аватара пользователя
nick7zmail
Сообщения: 5722
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 111 раз
Поблагодарили: 1397 раз

Re: Разработка модулей (Рекомендации)

Сообщение nick7zmail » Вт янв 17, 2017 7:40 pm

Спасибо, работает.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Аватара пользователя
Gelezako
Сообщения: 918
Зарегистрирован: Чт июн 02, 2016 9:33 pm
Благодарил (а): 200 раз
Поблагодарили: 86 раз
Контактная информация:

Re: Разработка модулей (Рекомендации)

Сообщение Gelezako » Пн янв 23, 2017 6:42 pm

извиняюсь за нубский вопрос, подскажите как програмно создать объекты класса, свойства, методы (табка "объекты"). Перерыл несколько плагинов, разобрался как создаать сам класс, но объекты почему-то не создаются. Вернее создаются, но только с таким же именем как сам класс. Спасибо.
Последний раз редактировалось Gelezako Пн янв 23, 2017 7:03 pm, всего редактировалось 1 раз.
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
Аватара пользователя
sergejey
Site Admin
Сообщения: 4263
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1364 раза
Контактная информация:

Re: Разработка модулей (Рекомендации)

Сообщение sergejey » Пн янв 23, 2017 6:48 pm

Gelezako писал(а):извиняюсь за нубскийвопрос, подскажите как програмно создать объекты класса, свойства, методы (табка "объекты"). Перерыл несколько плагинов, разобрался как создаать сам класс, но объекты почему-то не создаются. Вернее создаются, но только с таким же именем как сам класс. Спасибо.
Например так

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Аватара пользователя
Gelezako
Сообщения: 918
Зарегистрирован: Чт июн 02, 2016 9:33 pm
Благодарил (а): 200 раз
Поблагодарили: 86 раз
Контактная информация:

Re: Разработка модулей (Рекомендации)

Сообщение Gelezako » Пн янв 23, 2017 7:12 pm

Например так
спасибо за ссылку, класс создаётся, но объёкт всё равно создаётся с именем как сам класс, а не такйо как я указываю. В чём проблема?
Использую вот так:

$obj="newobj";
addClass('NewClass');
addClassObject('NewClass',$obj);
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
Аватара пользователя
nick7zmail
Сообщения: 5722
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 111 раз
Поблагодарили: 1397 раз

Re: Разработка модулей (Рекомендации)

Сообщение nick7zmail » Пн янв 23, 2017 7:57 pm

Лично я в БД сразу заносил в модуле

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

 $className = 'ya_traffic'; //имя класса
 $objectName = array('yt_settings', 'yt_info');//имя обьектов
 $objDescription = array('Настройки', 'Информация о пробках'); //даже описание объектов есть
 $rec = SQLSelectOne("SELECT ID FROM classes WHERE TITLE LIKE '" . DBSafe($className) . "'");
    if (!$rec['ID']) {
        $rec = array();
        $rec['TITLE'] = $className;
        $rec['DESCRIPTION'] = 'Пробки от Яндекс';
        $rec['ID'] = SQLInsert('classes', $rec);
    }
        for ($i = 0; $i < count($objectName); $i++) {
        $obj_rec = SQLSelectOne("SELECT ID FROM objects WHERE CLASS_ID='" . $rec['ID'] . "' AND TITLE LIKE '" . DBSafe($objectName[$i]) . "'");
        if (!$obj_rec['ID']) {
            $obj_rec = array();
            $obj_rec['CLASS_ID'] = $rec['ID'];
            $obj_rec['TITLE'] = $objectName[$i];
            $obj_rec['DESCRIPTION'] = $objDescription[$i];
            $obj_rec['ID'] = SQLInsert('objects', $obj_rec);
        }
    }
Вроде работает
За это сообщение автора nick7zmail поблагодарил:
Gelezako (Вт янв 24, 2017 5:02 pm)
Рейтинг: 1.37%
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Аватара пользователя
Gelezako
Сообщения: 918
Зарегистрирован: Чт июн 02, 2016 9:33 pm
Благодарил (а): 200 раз
Поблагодарили: 86 раз
Контактная информация:

Re: Разработка модулей (Рекомендации)

Сообщение Gelezako » Вт янв 24, 2017 5:10 pm

nick7zmail спасибо, заработало, до этого я выпиливал проверку существования ID-шника и с ней почему-то не работало. Вставил её и теперь всё норм. Поставил ваш плагин по пробкам. Теперь вот пытаюсь создать метод, беру пример как у вас:

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

addClassMethod('ya_traffic', 'update', 'include_once(DIR_MODULES."app_yatraffic/app_yatraffic.class.php");
вставляю свой класс, имя метода и подправляю путь и имя своего пхп файла, нажимаю реинстал, получаю ошибку:

Parse error: syntax error, unexpected 'DROP' (T_STRING) in C:\_majordomo\htdocs\modules\MiLight\MiLight.class.php on line 261

в этой строке у меня вот что:

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

SQLExec('DROP TABLE IF EXISTS MiLamp1');
Почему не получается удалить эту таблицу, я не пойму. Так же руками удалял свой класс и пробовать проинсталить как бы с нуля. Всё равно та же ошибка с поппыткой дропнуть таблицу. Подскажите что я делаю не так? Спасибо.
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
Аватара пользователя
Gelezako
Сообщения: 918
Зарегистрирован: Чт июн 02, 2016 9:33 pm
Благодарил (а): 200 раз
Поблагодарили: 86 раз
Контактная информация:

Re: Разработка модулей (Рекомендации)

Сообщение Gelezako » Вт янв 24, 2017 6:23 pm

разобрался, оказывается там параметров в функциюю передаётся очень много в 2 строки
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
Аватара пользователя
Gelezako
Сообщения: 918
Зарегистрирован: Чт июн 02, 2016 9:33 pm
Благодарил (а): 200 раз
Поблагодарили: 86 раз
Контактная информация:

Re: Разработка модулей (Рекомендации)

Сообщение Gelezako » Ср янв 25, 2017 6:10 pm

Продолжнаю учиться писать плагин и очередная загвоздка. Оформил страницу с настройками и не получается записать в свойство класса введённое пользователем значение. В файле action_admin.html сделал форму с полем и кнопкой:

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

<form action="?" method="post" enctype="multipart/form-data" name="save_settings" class="form-horizontal">
<fieldset>
<div class="form-actions">
<button type="submit" name="subm" value="Submit" class="btn btn-primary"><#LANG_UPDATE#></button>
<input type="hidden" name="view_mode" value="update_settings">
<input type="hidden" name="mode" value="update"><br>
<div class="form-group">
    <label class="col-md-3">Хост* :</label>
    <div class="col-md-3">
    <input type="text" name="host" class="form-control" placeholder="192.168.1.100" value="[#HOST#]"><br>
        <button type="submit" name="subm" value="settings" class="btn btn-primary">Сохранить</button>
    </div></div></fieldset></form> 
в файле myplugin.class.php создал функцию:

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

function save_settings()
{    global $host;
    if(isset($host)) sg('MiLamp1.Host',$host);
} 
Подскажите что не так и почему не сохраняется в свойстве введённое значение? Не могу понять, как работает конструкция action="?"

Ещё функции addClassMethod() и addClassProperty() не принимают параметр description. А мне их тоже надо добавить. Я нашёл реализацию этой функции в objects.class.php и добавил в качестве параметра description и в скуль запрос тоже добавить его, но почему-то это не сработало. Подскажите в чём ошибка?

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

function addClassMethod($class_name, $method_name, $code = '', $description=''){
   $class_id = addClass($class_name);
   if ($class_id)   {
      $sqlQuery = "SELECT * 
                     FROM methods
                    WHERE CLASS_ID = '" . $class_id . "'
                      AND TITLE LIKE '" . DBSafe($method_name) . "'
                      AND OBJECT_ID = 0";
      $method = SQLSelectOne($sqlQuery);
      if (!$method['ID'])      {
         $method = array();
         $method['CLASS_ID']    = $class_id;
         $method['OBJECT_ID']   = 0;
         $method['CODE']        = $code;
         $method['TITLE']       = $method_name;
         $method['DESCRIPTION'] = $description;
         $method['ID']        = SQLInsert('methods', $method);
      }
      else      {
         if ($code != '' && $method['CODE'] != $code)         {
            $method['CODE'] = $code;
            SQLUpdate('methods', $method);
         }
         return $method['ID'];
      }  } } 
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
Ответить