Ну, я сам разрабатываю модуль 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 в папке вашего модуля в качестве значка вкладки. Также обратите внимание, что корневые вкладки не работают как ссылки, несмотря на то, что для них требуется class_name.
Для некорневых вкладок:
$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, с которой мне приходилось работать, и единственный способ действительно кодировать для нее — это читать код, поэтому я надеюсь, что это кому-то поможет.
person
Marc
schedule
26.06.2015