0

我为 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;如果在上面的代码中需要,应该在哪里添加?

4

2 回答 2

0

hookHeader应该在方法中声明install

您应该global $smarty在每个需要使用的类方法的开头引用$smarty.

这意味着在您将$this->display()用于呈现 .tpl 的方法中,您还应该添加global $smarty以能够使用该$smarty->assign()方法。

于 2012-06-23T23:18:34.363 回答
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;
}
于 2012-06-25T22:24:44.620 回答