Back Office中的Prestashop自定义选项卡

时间:2013-02-22 15:29:46

标签: prestashop prestashop-1.5

我正在为prestashop 1.5.3开发一个模块。我需要在模块安装期间创建自定义管理选项卡。我像这样安装

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开发者参考。?

2 个答案:

答案 0 :(得分: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*/

我希望上面的代码会有所帮助 感谢

答案 1 :(得分: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选项卡不能用作链接,尽管它们需要class_name。

对于非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');

如果add()函数失败,则返回false,因此您可以像尝试使用save()函数一样在if()中使用它。

可悲的是,PrestaShop是迄今为止我所不能使用的最糟糕的CMS系统,真正编写代码的唯一方法是阅读代码,所以我希望它可以帮助某人。