Сегодня я хочу рассказать вам, как добавить в модуле таб, который будет расположен в админ панели вашего магазина. По табам вы можете отсортировать весь функционал модуля. Это удобная вещь, когда вам нужно быстро попасть в настройки модуля и изменить какую-либо опцию. Давайте посмотрим, на моем примере, как можно добавить вкладку в панели.
Откройте главный файл вашего модуля, он совпадает в названием папки модуля и добавим туда эти два метода
public function createTab($class_name, $parent = null, $name)
{
if (!is_array($name))
$name = array('en' => $name);
elseif (is_array($name) && !count($name))
$name = array('en' => $class_name);
elseif (is_array($name) && count($name) && !isset($name['en']))
$name['en'] = current($name);
$tab = new Tab();
$tab->class_name = $class_name;
$tab->module = $this->name;
$tab->id_parent = (!is_null($parent) ? Tab::getIdFromClassName($parent) : 0);
if (is_null($parent) && version_compare(_PS_VERSION_, '1.6.0.0', '<'))
$this->copyTabIconInRoot($class_name);
$tab->active = 1;
foreach (Language::getLanguages() as $l)
$tab->name[$l['id_lang']] = (isset($name[$l['iso_code']]) ? $name[$l['iso_code']] : $name['en']);
return $tab->save();
}
public function copyTabIconInRoot($icon)
{
$icon = $icon.'.gif';
$path = _PS_MODULE_DIR_.basename(dirname(__FILE__)).'/';
if (!file_exists($path.$icon) && file_exists($path.'views/img/'.$icon) && _PS_VERSION_ < 1.6)
copy($path.'views/img/'.$icon, $path.$icon);
}
Рассмотрим метод createTab у него есть 3 параметра:
Параметр $class_name это название класса вашего контроллера таба например: AdminCustomTab. Полностью название файла с классом AdminCustomTabController, но мы Controller не пишем.
Второй параметр $parent у нас название вкладки, куда будет добавлен наш новый таб, то есть например я хочу добавить свой таб в подменю "Каталог", название этого класса контроллера AdminCatalog. Если вы укажете значение null, то вкладка будет добавлена в самый конец главного меню.
Последний параметр $name это название вашей вкладки, это может быть просто значение "Моя новая вкладка" или же массив значений, где ключ массива будет iso_code языка. В массиве обязательно должен присутствовать элемент в ключом "en", он будет служить значением по умолчанию в случае если вы не укажете перевод таба на другом языке.
В 1.5.x.x версиях Prestashop у каждой вкладки в главном меню есть своя иконка, чтобы и у вашего таба появилась своя иконка, для этого добавьте ее в папку с модулем по пути views/img/. Название картинки должно быть обязательно в таком формате AdminCustomTab.gif, то есть название класса контроллера и формат изображения gif.
Теперь, как использовать эти методы? В методе install модуля добавьте такой код.
public function install()
{
if (!parent::install()
|| !$this->createTab('AdminCustomTab', 'AdminCatalog', array(
'ru' => 'Мой новый таб',
'en' => 'My custom tab'
)))
return false;
return true;
}
Следующий вопрос, как теперь удалить таб, добавьте этот код в ваш модуль
public static function deleteTab($class_name)
{
$tab = Tab::getInstanceFromClassName($class_name);
return $tab->delete();
}
В качестве параметра передается название класса контроллера. Вызовем этот метод в uninstall модуля
public function uninstall()
{
if (!parent::uninstall()
|| $this->deleteTab('AdminCustomTab'))
return false;
return true;
}
Начиная с 1.7.1.0 версии Prestashop, теперь табы модуля создаются автоматически, для этого в методе __construct в свойстве tabs модуля, пропишите конфигурацию вкладок.
public function __construct()
{
/*
Some code
*/
parent::__construct();
/*
Some code
*/
$this->tabs = array(
array(
'class_name' => 'AdminCustomTab',
'ParentClassName' => 'AdminCatalog',
'name' => array(
'en-US' => 'My custom tab',
'ru-RU' => 'Мой таб'
),
'visible' => true,
'icon' => 'store'
)
);
}