2013-02-22 2 views
2

Я разрабатываю модуль для prestashop 1.5.3. Мне нужно создать пользовательскую вкладку admin во время установки модуля. Я делаю установки, как этотПользовательская вкладка Prestashop в Back Office

public function install() 
{ 
    if((parent::install() == false)||(!$this->_createTab()) ) 
     return false; 
    return true; 
} 

и метод _createTab является:

private function _createTab() 
{ 
    $tab = new Tab(); 
    $tab->id_parent = 7; // Modules tab 
    $tab->class_name='AdminWarranty'; 
    $tab->module='fruitwarranty'; 
    $tab->name[(int)(Configuration::get('PS_LANG_DEFAULT'))] = $this->l('Warranty'); 
    $tab->active=1; 
     if(!$tab->save()) return false; 
return true; 
} 

И ничего не происходит .. Что я делаю неправильно .. и где найти хорошую ссылку для разработчиков PrestaShop.?

ответ

6

Чтобы создать пользовательскую вкладку для модуля во время установки, вы можете использовать следующий код.

Примечание: Я рассматриваю тестовый модуль под названием News.

private function _createTab() 
{ 
    /* define data array for the tab */ 
    $data = array(
        'id_tab' => '', 
        'id_parent' => 7, 
        'class_name' => 'AdminNews', 
        'module' => 'news', 
        'position' => 1, 'active' => 1 
       ); 

    /* Insert the data to the tab table*/ 
    $res = Db::getInstance()->insert('tab', $data); 

    //Get last insert id from db which will be the new tab id 
    $id_tab = Db::getInstance()->Insert_ID(); 

    //Define tab multi language data 
    $data_lang = array(
        'id_tab' => $id_tab, 
        'id_lang' => Configuration::get('PS_LANG_DEFAULT'), 
        'name' => 'News' 
        ); 

    // Now insert the tab lang data 
    $res &= Db::getInstance()->insert('tab_lang', $data_lang); 

    return true; 

} /* End of createTab*/ 

Я надеюсь, что приведенный выше код поможет Спасибо

+0

что такое class_name в вашем случае? вы можете привести пример, пожалуйста? –

+0

Имя класса - это AdminNews в моем случае. Вы можете изменить его на имя класса AdminWarranty. –

+0

Да, я получил это, но что это за класс? что он представляет? можете ли вы показать фрагмент? Заранее спасибо. –

0

Ну, я сам разрабатывает модуль PrestaShop так в случае, если кто-то земли здесь, правильный путь.

Для корневых вкладок:

$rootTab = new Tab(); 
$rootTab->active = 1; 
$rootTab->class_name = 'YourAdminControllerName'; 
$rootTab->name = array(); 
foreach (Language::getLanguages(true) as $lang) { 
    $rootTab->name[$lang['id_lang']] = $this->l("Root tab"); 
} 
$rootTab->id_parent = 0; // No parent 
$rootTab->module = $this->name; 
$rootTab->add(); 

Примечание для версии 1.5: При создании вкладки корневая система будет искать YourAdminControllerName.gif в папке вашего модуля, как значок вкладки. Также обратите внимание, что вкладки root не работают как ссылки, несмотря на то, что им требуется имя класса.

Для некорневых закладок:

$tab = new Tab(); 
$tab->active = 1; 
$tab->class_name = 'YourAdminControllerName'; 
$tab->name = array(); 
foreach (Language::getLanguages(true) as $lang) { 
    $tab->name[$lang['id_lang']] = $this->l("Non-root tab"); 
} 
$tab->id_parent = $rootTab->id; // Set the root tab we just created as parent 
$tab->module = $this->name; 
$tab->add(); 

Если вы хотите установить существующую вкладку, как родитель, вы можете использовать функцию getIdFromClassName. Например, в вашем случае:

$tab->id_parent = (int)Tab::getIdFromClassName('AdminModules'); 

Надстройка() функция возвращает ложь, если это не удается, так что вы можете использовать его в случае(), как вы пытаетесь сделать с помощью функции сохранения().

Sadly PrestaShop на сегодняшний день является самой плохой документированной системой CMS, с которой мне пришлось работать, и единственный способ действительно кодировать ее - читать код, поэтому я надеюсь, что это поможет кому-то.