自定义Prestashop管理模块

时间:2013-07-01 20:12:32

标签: templates module admin prestashop

我正在为prestashop开发一个模块(基本上,它是一个非常自定义的数据导入,我唯一需要的是拥有一个表单和流程数据)。我已经创建了从ModuleAdminController派生的控制器类,但问题是我应该在哪里放置包含自定义窗体外观的tpl文件?

我意识到我可以将tpl文件放到模板中,但我想将所有文件保存在我的模块文件夹中,是否可能(可能在某些地方像“/ views / templates / admin”)?

5 个答案:

答案 0 :(得分:4)

这是最简单的方法,可在Prestashop 1.6中创建基本的管理控制器/操作

创建基本配置:

<强> ./ config.xml中

<?xml version="1.0" encoding="UTF-8" ?>
<module>
    <name>foo</name>
    <displayName><![CDATA[Foo]]></displayName>
    <version><![CDATA[2.1.3]]></version>
    <description><![CDATA[Bar.]]></description>
    <author><![CDATA[your-name]]></author>
    <tab><![CDATA[administration]]></tab>
    <is_configurable>0</is_configurable>
    <need_instance>0</need_instance>
    <limited_countries></limited_countries>
</module>

<强> ./ foo.php

if (!defined('_PS_VERSION_'))
    exit;

class BarcodeEasyPrint extends Module
{
    public function __construct()
    {
        $this->name = 'foo';
        $this->tab = 'administration';
        $this->version = '1.0.0';
        $this->author = 'your-name-here';
        $this->need_instance = 0;
        $this->bootstrap = true;

        parent::__construct();

        $this->displayName = $this->l('Foo');
        $this->description = $this->l('Bar.');

        if ((int)Tools::getValue('p'))
            $this->page = (int)Tools::getValue('p');
    }


}

您需要使用基本功能创建控制器:

<强> ./控制器/管理/ AdminFooController.php

class AdminFooController extends ModuleAdminController {


    public function __construct()   {
        $this->bootstrap = true;
        parent::__construct();
    }

    public function createTemplate($tpl_name) {
        if (file_exists($this->getTemplatePath() . $tpl_name) && $this->viewAccess())
                return $this->context->smarty->createTemplate($this-    >getTemplatePath() . $tpl_name, $this->context->smarty);
            return parent::createTemplate($tpl_name);
    }

    public function initContent(){
        parent::initContent();
        $tpl = $this->createTemplate('content.tpl')->fetch();

        /* DO STUFF HERE */
        $posts = array();

        $this->context->smarty->assign('posts', $posts);

    }
}

您可以直接在模板文件中使用boostrap:

<强> ./视图/模板/管理/ content.tpl

<div class="row">
    <div class="col-md-6">
    </div>

    <div class="col-md-6">
    </div>
</div>

答案 1 :(得分:3)

如果它只是一个管理模块,那么您将无需创建任何视图。因为Prestashop为管理部分提供了一个很好的结构,它易于使用,我们不需要使用任何视图或.tpl文件。对于admin部分,通常需要三种类型的视图或.tpl文件,一种用于网格中的数据显示,第二种用于表单,第三种用于显示单个记录。

Prestashop已经为他们创建了.tpl文件,您可以在“admin_folder / themes / default / templates”中找到它们。在我们的管理控制器,表单和数据网格中,我们只需创建数组和PS句柄,根据我们创建的数组查看表单和数据网格。

因此,如果您需要在管理员处使用自定义表单,则创建一个公共函数renderForm并在其中创建表单数组,如下所示:

$this->fields_form = array(
        'legend' => array(
            'title' => $this->l('Video'),
            'image' => '../img/admin/tab-genders.gif'
        ),
        'input' => array(
            array(
                'type' => 'text',
                'label' => $this->l('Video Title:'),
                'name' => 'title',
                'lang' => true,
                'size' => 70,
                'hint' => $this->l('Invalid characters:').' 0-9!<>,;?=+()@#"�{}_$%:',
                'required' => true
            ),

            array(
                'type' => 'textarea',
                'label' => $this->l('Video Code'),
                'name' => 'video_code',
                'rows' => 5,
                'cols' => 70,
                'desc' => $this->l('Place the embed code for the video')
            ),

        ),
        'submit' => array(
            'title' => $this->l('Save'),
            'class' => 'button'
        )
    );

    return parent::renderForm();

} /* End of render member */

对于其他字段,请检查其他prestashop管理控制器,您将看到我们可以使用数组中的简单定义轻松地在PS中创建表单,而且我们不需要创建.tpl文件。

对于前端,我们可以使用新模块MVC结构,其中我们的模块文件夹具有用于控制器(控制器/前端,控制器/管理员),视图和模型的子文件夹。

希望这会对你有所帮助。

谢谢

答案 2 :(得分:0)

你需要使用帮助形式,这里是它的文档,它真的很容易使用;)。

http://doc.prestashop.com/display/PS15/HelperForm

您还可以找到有关如何以及在何处使用帮助程序表单的更多信息,查找函数getContent()和displayForm()。

http://doc.prestashop.com/display/PS15/Creating+a+PrestaShop+module

答案 3 :(得分:0)

答案 4 :(得分:0)

扩展@altafhussain的答案在你的模块中创建一个文件夹views / templates / admin并放置你的customview.tpl 比如下附加自由文本块。

$this->fields_form = array(
    'legend' => array(
        'title' => $this->l('Legend')
    ),
    'input' => array(
          array(
                'type' => 'free',
                'label' => 'Whatever label text',
                'desc' => $this->display(__FILE__,'views/templates/admin/customview.tpl'),
                'name' => 'FREE_TEXT',
                'required' => false
        )

    ),
    'submit' => array(
        'title' => $this->l('Save'),
        'class' => 'button'
    )
);

return parent::renderForm();

}