我为Prestashop 1.4创建了文件mymodule.php
<?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中的哪个位置添加以head标签链接的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 :(得分:0)
hookHeader
应在install
方法中声明。
您应该在需要使用global $smarty
的每个类方法的开头引用$smarty
。
这意味着在您将使用$this->display()
呈现.tpl的方法中,您还应添加global $smarty
以便能够使用$smarty->assign()
方法。
答案 1 :(得分:0)
渲染挂钩点时,将显示函数hookHome()和hookFooter()返回的任何内容。从一开始就忽略聪明才能做到:
public function hookHome($params)
{
return "<h2>Wow, my module displays something</h2>";
}
您当然可以在模块中使用模板文件 - 尽管您不必。如果您打算使用smarty模板,那么您可以在钩子函数中声明一个全局实例。
public function hookHome($params)
{
global $smarty;
...
...
如Mihai的回答所述,如果你想使用“header”钩子插入css和js,你还必须修改安装功能:
function install()
{
if (!parent::install()
OR !$this->registerHook('home')
OR !$this->registerHook('footer')
OR !$this->registerHook('header')
)
return false;
return true;
}