W dniu 13 lipca 2016 03:27 użytkownik lole11 <lole11@o2.pl> napisał:
Dzień dobry,
przerabiam po trochu moje modyfikacje w LMS na moduły.
Jedna z modyfikacji polega na dodaniu dodatkowych tabel z informacjami w podglądzie klienta customerinfo.
Moje modyfikacje mam zaimplemetnowane po części w customer.inc.php w postaci jak poniżej:
$radaccts = $LMS->GetRadAccts($customerid, 10);
$msglogs = $LMS->GetMsgLogs($customerid, 10);

i dalej pod koniec

$SMARTY->assignByRef('radaccts', $radaccts);
$SMARTY->assignByRef('msglogs', $msglogs);

Teraz chcę zapytania które mam umieszczone w LMS.Class.php chcę przerzucić do pluginu.
Z tego co widzę to w customerinfo.php wykonywany jest kod:
$hook_data = $LMS->executeHook(
'customerinfo_before_display',
array(
'customerinfo' => $customerinfo,
'smarty' => $SMARTY,
)
);

Doczytałem, że muszę zarejestrować takiego hook-a i tam umieścić funkcje z zapytaniami, wykonać je i przypisać do zmiennych , ale właśnie nie bardzo wiem jak to zrobić.
Czy mógłby ktoś coś pomóc, jak powinien taki plugin wyglądać?


Rejestracja hoka robisz w pluginie. np plugin nazywa się LMSTVPlugin,
robisz katalog plugins/LMSTVPlugin a w nim obowiązkowy plik z definicją klasy. plik musi nazywać się jak plugin w tym przypadku powinien być /plugins/LMSTVPlugin/LMSTVPlugin.php
w nim robisz swoją klasę, która rozszerza klasę LMSPlugin i w registerHandlers rejestrujesz swoje akcje
np.

#v+
class LMSTVPlugin extends LMSPlugin {
const PLUGIN_NAME = 'TV Plugin';
const PLUGIN_DESCRIPTION = 'Plugin for TV';
const PLUGIN_DIRECTORY_NAME = 'LMSTVPlugin';
const PLUGIN_MODULES_DIRECTORY = 'modules';
const PLUGIN_DBVERSION = '2015111001';

    public function registerHandlers()
    {
        $this->handlers = array(
            'menu_initialized' => array(
                'class' => 'InitHandler',
                'method' => 'menuEntry'
            ),
'smarty_initialized' => array(
                'class' => 'InitHandler',
                'method' => 'smartyInit'
            ),
            'modules_dir_initialized' => array(
                'class' => 'InitHandler',
                'method' => 'modulesDirInit'
            ),

'customerinfo_before_display' => array(
'class' => 'TVCustomerList',
'method' => 'stbCustomerInfo'
),
            
        );
    }
#v-
 
czyli rejestrujesz klasy i metody.  Robisz katalog handles w którym trzymasz klasy (TVCustomerList, InitHandler) a w klasach metody (stbCustomerInfo, modulesDirInit). ważne by pliki z definicjami klas nazywały się jak definiowane tu klasy z rozszerzeniem .php

tu np. co robię w klasie InitHandler, jak widzisz powyżej właśnie przy wywołoaniu hooka "menu_initialized" wywołuję metodę menuEntry z klasy InitHandler

#v+
class InitHandler {
 /**
     * Sets plugin Smarty templates directory
     * 
     * @param Smarty $hook_data Hook data
     * @return \Smarty Hook data
     */
    public function smartyInit(Smarty $hook_data)
    {
        global $SMARTY;      
        $template_dirs = $hook_data->getTemplateDir();
        $plugin_templates = PLUGINS_DIR . DIRECTORY_SEPARATOR . LMSTVPlugin::PLUGIN_DIRECTORY_NAME . DIRECTORY_SEPARATOR . 'templates';
        array_unshift($template_dirs, $plugin_templates);
        $hook_data->setTemplateDir($template_dirs);
$SMARTY->assign('plugin_name', LMSTVPlugin::PLUGIN_DIRECTORY_NAME);
        return $hook_data;
    }

    /**
     * Sets plugin Smarty modules directory
     * 
     * @param array $hook_data Hook data
     * @return array Hook data
     */
    public function modulesDirInit(array $hook_data = array())
    {
        $plugin_modules = PLUGINS_DIR . DIRECTORY_SEPARATOR . LMSTVPlugin::PLUGIN_DIRECTORY_NAME . DIRECTORY_SEPARATOR . 'modules';
        array_unshift($hook_data, $plugin_modules);
        return $hook_data;
    }
/**
*  Sets menu entry to menu
*/
public function menuEntry(array $hook_data = array()) {
$tvmenu = array(
'tv' => array(
'name' => trans('TV'),
'img' => LMSTVPlugin::PLUGIN_DIRECTORY_NAME.'/tv_icon.png',
'tip' => trans('TV Plugin'),
'accesskey' =>'t',
'prio' => 1,
'submenu' => array(
array(
'name' => trans('List'),
'link' =>'?m=stblist',
'tip' => trans('List of STB'),
'prio' => 10,
),
array(
'name' => trans('Groups'),
'link' =>'?m=stbgrouplist',
'tip' => trans('List of STB Groups'),
'prio' => 20,
),
array(
'name' => trans('New STB'),
'link' =>'?m=stbdevadd',
'tip' => trans('Add STB to database'),
'prio' => 30,
),
array(
'name' => trans('Producers and models'),
'link' =>'?m=stbdevmodels',
'tip' => trans('Producers and models of STBs'),
'prio' => 40,
),
),  
),
);
$hook_data = array_merge(array_slice($hook_data, 0, 4), $tvmenu, array_slice($hook_data, 4));
return $hook_data;
}
#v-

Mam nadzieję, że pomoże



_______________________________________________
lms mailing list
lms@lists.lms.org.pl
http://lists.lms.org.pl/mailman/listinfo/lms




--
Pozdrawiam
Marcin / nicraM