Посмотрите эту ссылку для создания adminCOntroller на модуле: https://webkul.com/blog/create-modules-admin-controllers-without-creating-tab-prestashop/
В Prestashop при создании модуля в основном нам нужно создавать контроллеры администратора. В модуле, чтобы заставить работать контроллер администратора, мы должны создать запись о классе этого администратора в таблице _DB_PREFIX _. ’tab
. И вообще, мы делаем все эти записи во время установки модуля.
Таким образом, если вы создаете свои административные контроллеры в своем модуле, вы можете создать его в двух случаях -
Вы хотите создать вкладку для вашего администратора.
Вы хотите создать свой контроллер администратора, не создавая для него вкладку.
Например, вам нужен контроллер, который открывается по щелчку ссылки и во многих других случаях.
Давайте разберем процесс обоих случаев с примерами-
Позволяет нам создать функцию с именем inatallTab (), которая делает записи в таблице «tab» для контроллеров администратора нашего модуля.
// Lets you want to create a child tab under 'Shipping' Tab. As we know Shipping Tab's class name is 'AdminParentShipping'
$this->installTab('AdminMyControllerName', 'My Tab Name', 'AdminParentShipping');
// Lets you want to create a parent tab. Then call the installTab() like below example-
$this->installTab('AdminMyControllerName', 'My Parent Tab Name');
CASE-1: Контроллер администратора с вкладкой
/*
* 2007-2016 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2016 PrestaShop SA
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
public function installTab($yourControllerClassName, $yourTabName, $tabParentControllerName = false)
{
$tab = new Tab();
$tab->active = 1;
$tab->class_name = $yourControllerClassName;
// e.g. $yourControllerClassName = 'AdminMyControllerName'
// Here $yourControllerClassName is the name of your controller's Class
$tab->name = array();
foreach (Language::getLanguages(true) as $lang) {
$tab->name[$lang['id_lang']] = $yourTabName;
// e.g. $yourTabName = 'My Tab Name'
// Here $yourTabName is the name of your Tab
}
if ($tab_parent_controller_name) {
$tab->id_parent = (int) Tab::getIdFromClassName($tabParentControllerName);
// e.g. $tabParentControllerName = 'AdminParentAdminControllerName'
// Here $tabParentControllerName is the name of the controller under which Admin Controller's tab you want to put your controller's Tab
} else {
// If you want to make your controller's Tab as parent Tab in this case send id_parent as 0
$tab->id_parent = 0;
}
// $this->name is the name of your module to which your admin controller belongs.
// As we generally create it in module's installation So you can get module's name by $this->name in module's main file
$tab->module = $this->name;
// e.g. $this->name = 'MyModuleName'
$tab->add();
// make an entry of your tab in the _DB_PREFIX_.'tab' table.
}
Давайте посмотрим, как создаются ваши дочерние или родительские вкладки в вашем бэк-офисе с помощью приведенного ниже снимка экрана.
CASE-2: Admin Controller без создания вкладки
Если вы хотите создать свой административный контроллер без создания вкладки в своем модуле, вам нужно внести небольшие изменения в приведенный выше код, который создает записи вашего административного контроллера в таблице _DB_PREFIX _. ’Tab.
Нам просто нужно передать -1 для поля id_parent в коде. Давайте посмотрим на код для этого случая.
/*
* 2007-2016 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2016 PrestaShop SA
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
$tab = new Tab();
$tab->active = 1;
$tab->class_name = $class_name;
$tab->name = array();
foreach (Language::getLanguages(true) as $lang) {
$tab->name[$lang['id_lang']] = $tab_name;
}
//If you don't want to create a tab for your admin controller then Pass id_parent value as -1.
$tab->id_parent = -1;
$tab->module = $this->name;
return $tab->add();
Итак, как вы видели, если мы установим значение if_parent в таблице вкладок _DB_PREFIX _. ’Как -1. Оно не создаст никакой вкладки для вашего контроллера администратора, и ваш контроллер администратора будет работать нормально.
После вышеописанного процесса вам просто нужно создать класс вашего контроллера администратора в вашем модуле и написать код для функций, которые вам нужны, с вашего контроллера администратора.
Привет