2014-01-23 30 views
1

正在關注this prestashop關於如何在後臺製作標籤的說明我做了一個類和控制器,就像它需要的一樣。但是如果我想在AdminTest控制器中使用幫助窗體創建表單呢?後臺選項卡和幫助程序窗體?

class AdminTest extends AdminTab 
    { 
    public function __construct() 
    { 

    $this->table = 'test'; 
    $this->className = 'Test'; 
    $this->lang = false; 
    $this->edit = true; 
    $this->delete = true; 
    $this->fieldsDisplay = array(
     'id_test' => array(
     'title' => $this->l('ID'), 
     'align' => 'center', 
     'width' => 25), 
     'test' => array(
     'title' => $this->l('Name'), 
     'width' => 200) 
    ); 

    $this->identifier = 'id_test'; 

    parent::__construct(); 

    } 


    public function displayForm() 
    { 
    global $currentIndex; 

    $defaultLanguage = intval(Configuration::get('PS_LANG_DEFAULT')); 
    $languages = Language::getLanguages(); 
    $obj = $this->loadObject(true); 

    $fields_form[0]['form'] = array(
     'legend' => array(  
     'title' => $this->l('Edit carrier'),  
     'image' => '../img/admin/icon_to_display.gif' 
    ), 
     'input' => array(  
     array(   
      'type' => 'text', 
      'name' => 'shipping_method', 
     ), 
    ), 
     'submit' => array(
     'title' => $this->l('Save'),  
     'class' => 'button' 
    ) 
    ); 

    $helper = new HelperForm(); 
    // Module, token and currentIndex 
    $helper->module = $this; 
    $helper->name_controller = $this->name; 
    $helper->token = Tools::getAdminTokenLite('AdminModules'); 
    $helper->currentIndex = AdminController::$currentIndex.'&configure='.$this->name; 

    // Language 
    $helper->default_form_language = $default_lang; 
    $helper->allow_employee_form_lang = $default_lang; 

    // Title and toolbar 
    $helper->title = $this->displayName; 
    $helper->show_toolbar = true;  // false -> remove toolbar 
    $helper->toolbar_scroll = true;  // yes - > Toolbar is always visible on the top of the screen. 
    $helper->submit_action = 'submit'.$this->name; 
    $helper->toolbar_btn = array(
      'save' => 
      array(
        'desc' => $this->l('Save'), 
        'href' => AdminController::$currentIndex.'&configure='.$this->name.'&save'.$this->name. 
        '&token='.Tools::getAdminTokenLite('AdminModules'), 
      ), 
      'back' => array(
        'href' => AdminController::$currentIndex.'&token='.Tools::getAdminTokenLite('AdminModules'), 
        'desc' => $this->l('Back to list') 
      ) 
    ); 

    return $helper->generateForm($fields_form); 

    } 

} 

但它不會工作。爲什麼助手形式不起作用?

p.s.順便說一句,我也想用$this->setTemplate('mytemplate.tpl')方法,但這是不可能的。

回答

1

要創建一個新的管理員選項卡,我更喜歡使用在模塊安裝時只安裝一個選項卡的模塊。 我認爲它更漂亮,更容易導出到其他網站。 我們可以用這樣的方式:模板,助手......

對於爲例:

你的模塊中創建此目錄:controllers/admin

創建先前創建一個新的類目錄adminTest.php

class AdminTestController extends ModuleAdminController { 

} 

在這個類中,您可以覆蓋所有ModuleAdminController功能和使用的模板,傭工(看在類AdminController

現在,在您的模塊:

class testModule extends Module { 

    public function __construct() { 
     $this->name = 'testmodule'; 
     $this->tab = 'administration'; 
     $this->version = '1.0'; 
     $this->author = 'You'; 
     $this->need_instance = 1; 
     $this->secure_key = Tools::encrypt($this->name); 

     parent::__construct(); 

     $this->displayName = $this->l('Admin Test Tab Module'); 
     $this->description = $this->l('Add a new Admin Tab in BO'); 
    } 

    public function install() { 
     return parent::install() && 
       $this->_installTab(); 
    } 

    public function uninstall() { 
     return $this->_unInstallTabs() && 
       parent::uninstall(); 
    } 

    private function _installTabs() { 
     if (!$AdminTestId = Tab::getIdFromClassName('AdminTest')): 
      $tab = new Tab(); 
      $tab->class_name = 'AdminTest'; 
      $tab->module = $this->name; 
      $tab->id_parent = Tab::getIdFromClassName('AdminParentOrders'); // Under Orders Tab, To add a new Tab on First level like Orders/Customers... put 0 
      $tab->active = 1; 
      foreach (Language::getLanguages(false) as $lang):    
       $tab->name[(int) $lang['id_lang']] = 'Admin Test'; 
      endforeach; 
      if (!$tab->save()): 
       return $this->_abortInstall($this->l('Unable to create the "Admin Test" tab')); 
      endif; 
     else: 
      $AdminTest = new Tab((int) $AdminTestId); 
     endif; 
    } 

    // Uninstall Tabs on Module uninstall 
    private function _unInstallTabs() { 

     // Delete the Module Back-office tab 
     if ($id_tab = Tab::getIdFromClassName('AdminTest')) { 
      $tab = new Tab((int) $id_tab); 
      $tab->delete(); 

     return true; 
    } 

} 

所以,當你安裝模塊,一個新的選項卡可用,你可以做你想做的事,你AdminTestController像一個真正的管理控制器