Prestashop基本模块,小调整

时间:2012-06-23 23:09:24

标签: php javascript jquery prestashop

我为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;

2 个答案:

答案 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;
}