Как добавить таб в админ панель в модуле Prestashop 1.5 - 1.7

Category: Main. Date publication: 24 May 2017

Сегодня я хочу рассказать вам, как добавить в модуле таб, который будет расположен в админ панели вашего магазина. По табам вы можете отсортировать весь функционал модуля. Это удобная вещь, когда вам нужно быстро попасть в настройки модуля и изменить какую-либо опцию. Давайте посмотрим, на моем примере, как можно добавить вкладку в панели.

Откройте главный файл вашего модуля, он совпадает в названием папки модуля и добавим туда эти два метода 

	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'
        )
    );
}

Leave a reply
Leave a comment can only registered users. By specifying an email, your name and the comment you pass a simple registration. On your specified email password will be sent from your account. If you already have an account then
XZero
Thank you so much, you saved me from despair and wasting a lot of time!
20 Mar 2019 19:44:22 | Answer
Товары и услуги реализуются совместно с plentr