后台办公室中的Prestashop自定义选项卡
我正在为prestashop 1.5.3开发一个模块。我需要在模块安装期间创建一个自定义管理选项卡。我这样安装后台办公室中的Prestashop自定义选项卡,prestashop,prestashop-1.5,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 =
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开发人员参考。要在安装过程中为模块创建自定义选项卡,可以使用以下代码 注意:我正在考虑一个名为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*/
我希望上面的代码会有所帮助
谢谢好吧,我自己正在开发一个前置模块,以防有人在这里着陆,正确的方法 对于根选项卡:
$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();
$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();
版本1.5的注意事项:创建根选项卡时,系统将在模块文件夹中查找YourAdminControllerName.gif作为选项卡图标。另外请注意,根选项卡不作为链接使用,尽管它们需要一个类名
对于非根选项卡:
$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();
$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,因此您可以在if()中使用它,就像您尝试使用save()函数一样
遗憾的是,PrestaShop是迄今为止我使用过的最糟糕的CMS系统,要真正为它编码,唯一的方法就是阅读代码,所以我希望它能帮助别人。在你的情况下,class_name是什么?你能举个例子吗?在我的例子中,类名是AdminNews。你可以把它改成你的类名。是的,我知道了,但那是什么类?它代表什么?你能给我看一段吗?提前谢谢。如果你知道的话,admin的每个标签实际上都代表一个类文件。如果您查看controllers/admin/则会看到一些控制器类,这些类与admin的每个选项卡关联。此类提供了管理端的所有功能。另外请注意,每个控制器类可能有另一个类,我们可以称之为模型类,它处理所有数据库相关和数据相关的操作。Prestashop完全基于MVC模式。如需进一步学习,请阅读。也请阅读和