2012-06-23 4 views
0

Я создал файл mymodule.php для Prestashop 1.4Prestashop базовый модуль, небольшой корректировки

<?php 
if (!defined('_CAN_LOAD_FILES_')) 
    exit; 

class MyModule extends Module 
{ 
    function __construct() 
    { 
     $this->name = "mymodule"; 
     $this->version = "1.0"; 
     $this->author = "Tomtop"; 
     $this->tab = "front_office_features"; 

     $this->_postErrors = array(); 

     parent::__construct(); 

     $this->displayName = $this->l("My Module Name"); 
     $this->description = $this->l("This is my module description."); 
    } 

    protected function setConfig($key,$value) 
    { 
     return Configuration::updateValue($this->name.$key,$value,true); 
    } 

    protected function getConfig($value) 
    { 
     return Configuration::get($this->name.$value); 
    } 

    protected function deleteConfig($value) 
    { 
     return Configuration::deleteByName($this->name.$value); 
    } 

    function install() 
    { 
     if (!parent::install() 
      OR !$this->registerHook('home') 
      OR !$this->registerHook('footer') 
     ) 
      return false; 
     return true; 
    } 

    public function uninstall() 
    { 
     parent::uninstall(); 

     return true; 
    } 


    public function hookHome($params) 
    {  

    } 

    public function hookfooter($params) 
    {  

    } 


    private function _postProcess() 
    { 
     $this->_html .= '<div class="conf confirm">'.$this->l("Updated")."</div>"; 
    } 

    public function getContent() 
    { 
     $this->_html .= "<h2>".$this->displayName."</h2>"; 

     if (Tools::isSubmit("submit")) 
     { 
      $this->_postProcess(); 
     } 

     $this->_displayForm(); 

     return $this->_html; 
    } 

    private function _displayForm() 
    { 
     $this->_html .= '<form action="'.$_SERVER['REQUEST_URI'].'" method="post"> 

      <fieldset> 
       <legend><img src="../modules/scroller/logo.gif" alt="" class="middle" />'.$this->l('Settings').'</legend> 

       <br /> 
       <center><input type="submit" name="submit" value="'.$this->l('Upgrade').'" class="button" /></center> 
      </fieldset> 
     </form>'; 
    } 
} 

Где в коде выше следует добавить шаблон mymodule.tpl, которые содержат основной HTML-код, т.е.

return $this->display(__FILE__, 'mymodule.tpl');

Кроме того, в каком месте в mymodule.php добавить JS и CSS файлы, которые связаны в головной метке, как это:

public function hookHeader() 
{ 
    Tools::addJS($this->_path.'js/myjscript1.js'); 
    Tools::addJS($this->_path.'js/myjscript2.js'); 
    Tools::addCSS($this->_path.'css/mymodule.css', 'all'); 
} 

И где следует добавить global $smarty;, если это необходимо в приведенном выше коде?

ответ

0

hookHeader должен быть объявлен в методе install.

Вы должны указать global $smarty в начале каждого метода класса, который должен использовать $smarty.

Это означает, что в методах, где вы будете использовать $this->display() для визуализации .tpl, вы также должны добавить global $smarty, чтобы использовать метод $smarty->assign().

+0

Крючки не обязательно связаны с визуальным где вы хотите показывать контент. Они используются во многих ситуациях, например, при вызове любого продукта будет вызываться воображаемый 'hookProductUpdate', чтобы вы могли отправлять сообщения электронной почты клиентам, говоря:« Вау цены были изменены для продукта X ». –

+0

Я думаю, что «встраиваемые решения» - это плохой способ узнать. Понять и сделать это самим лучше. Если у вас над головой, вы должны изучать основы, которые не погружаются в глубокий конец, и если это не так, вы можете понять и сделать это самостоятельно. –

0

Любое возвращаемое функциями hookHome() и hookFooter() будет отображаться при визуализации точек крючка. Не обращая внимания на Smarty, чтобы начать с вами можете просто сделать что-то вроде:

public function hookHome($params) 
{ 
    return "<h2>Wow, my module displays something</h2>"; 
} 

Вы можете, конечно, хотите, чтобы использовать файл шаблона с модулем - хотя вы не должны. Если вы собираетесь использовать шаблон smarty, вы можете объявить глобальный экземпляр внутри функций hook.

public function hookHome($params) 
{ 
    global $smarty; 
    ... 
    ... 

Как отмечено в ответе Михая вы также должны изменить функцию установки, если вы хотите, чтобы вставить CSS и JS с помощью «заголовок» крюк:

function install() 
{ 
    if (!parent::install() 
     OR !$this->registerHook('home') 
     OR !$this->registerHook('footer') 
     OR !$this->registerHook('header') 
    ) 
     return false; 
    return true; 
} 
+0

Код выше хорошо, но если вы не назначаете какие-либо переменные для использования smarty, добавление шаблона необязательно (и будет замедлять рендеринг страниц из-за чрезмерных издержек smarty). Единственное другое преимущество использования файла шаблона заключается в том, что его можно переопределить в теме, чтобы кто-то другой мог его изменить, но будет ли это то, что кто-то будет делать, это ваш модуль. –

 Смежные вопросы

  • Нет связанных вопросов^_^