PrestaShop创建新的AdminTab

时间:2014-05-25 00:10:43

标签: prestashop

在我的文件模块中

class Mymodule extends Module
{
   public function install()
   {
      ...
      $this->installModuleTab('AdminMymodule', array(1=>'My Module Admin Tab'), 13)
   }

   private function installModuleTab($tabClass, $tabName, $idTabParent)
   {
      $tab = new Tab();
      $tab->name = $tabName;
      $tab->class_name = $tabClass;
      $tab->module = $this->name;
      $tab->id_parent = $idTabParent;
      $tab->active = 1;
      if(!$tab->save())
        return false;
      return true;
  }
}

它工作,管理标签:'我的模块管理标签'已创建。现在,在文件AdminMymodule中:

include_once(PS_ADMIN_DIR.'/../classes/AdminTab.php');

class AdminMymodule extends AdminTab
{
    public function __construct()
    {
        parent::__construct();
    }

    public function display()
    {
        echo $this->l('This is admin my module tab !');
    }
}

当我点击链接“我的模块管理标签”时,结果为空白页面。有人可以帮帮我吗?

3 个答案:

答案 0 :(得分:1)

prestashop管理员标签中的每个标签都是管理员控制器。 您需要将管理控制器文件放在模块中 像mymodule \ controllers \ admin \ AdminAboutUsController.php 在你需要放置的控制器内:

class AdminAboutUsController extends ModuleAdminController {
   public $asso_type = 'shop';
   public function __construct() {
      $this->module = 'mymodule';
      $this->lang = true;
      $this->context = Context::getContext();
      $this->bootstrap = true;
    parent::__construct();
}

public function initContent()
 {

 }
 }

模块创建中的类名是

   'class_name' => 'AdminAboutUs',

希望这有助于您找到解决方案。

答案 1 :(得分:0)

是的,你可以在这样的模块中添加一个标签。 我们以模块homeslider为例。 首先在controllers/admin/AdminHomeSliderController.php中创建控制器 并把这段代码:

<?php

class AdminHomeSliderController extends ModuleAdminController
{
   public function __construct() {

     $token = Tools::getAdminTokenLite('AdminModules');
     $currentIndex='index.php?       controller=AdminModules&token='.$token.'&configure=homeslider&tab_module=front_office_features&module_name=homeslider';

     parent::__construct();
     Tools::redirectAdmin($currentIndex);
  }
}

并在模块文件homeslider.php中, 添加这两个功能:

private function createInnovativesLabsTabs() {
  $langs = Language::getLanguages();
  $id_lang = (int)Configuration::get('PS_LANG_DEFAULT');
  $ndiaga_tab = new Tab();
  $ndiaga_tab->class_name = 'AdminHomeSlider';
  $ndiaga_tab->module = 'homeslider';
  $ndiaga_tab->id_parent = 0;
  foreach($langs as $l){
    $ndiaga_tab->name[$l['id_lang']] = $this->l('HomeSlider');
  }
  $ndiaga_tab->save();
  $tab_id = $ndiaga_tab->id;
  @copy(dirname(__FILE__).'/AdminHomeSlider.gif',_PS_ROOT_DIR_.'/img/t/AdminHomeSlider.gif'); 
  Configuration::updateValue('HOME_SLIDER_TAB_ID',$tab_id);             
  return true;
}

public function deleteInnovativesLabsTabs(){    
  $tab = new Tab(Configuration::get('HOME_SLIDER_TAB_ID'));   

  $tab->delete();
  Configuration::deleteByName('HOME_SLIDER_TAB_ID');    

  return true;
}

您需要在安装和卸载过程中调用它们:

 //install
 $this->createInnovativesLabsTabs();

 //uninstall
 $this->deleteInnovativesLabsTabs();

答案 2 :(得分:-1)

您必须创建后台控制器。在您的模块文件夹中,这将是结构

controllers/admin/AdminModuleName.php

此文件类必须命名为

class AdminmodulenameController extends ModuleAdminController.

您可以选择在安装模块时添加它,或者您可以从管理菜单手动添加它。您可以在prestashop文档(Creating a PrestaShop module

中找到扩展说明