2

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

我意识到我可以将 tpl 文件放入模板中,但我想将所有文件保留在我的模块文件夹中,这可能吗(可能像“/views/templates/admin”之类的地方)?

4

5 回答 5

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');
    }


}

您需要创建具有基本功能的控制器:

./controllers/admin/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 :

./views/templates/admin/content.tpl

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

    <div class="col-md-6">
    </div>
</div>
于 2015-12-04T06:13:06.133 回答
3

如果它只是一个管理模块,那么您将无需创建任何视图。因为 Prestashop 为管理部分提供了一个很好的结构,它易于使用,我们不需要使用任何视图或 .tpl 文件。对于管理部分,通常需要三种类型的视图或 .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 结构,其中我们的模块文件夹包含控制器(控制器/前端、控制器/管理员)、视图和模型的子文件夹。

希望这会帮助你。

谢谢

于 2013-07-02T06:00:39.703 回答
0

不幸的是,没有任何文档可以直接解决这个问题,但听说我有一些非常有用的 URL,您应该结合主题并实现: http: //presthemes.com/prestashop-news/modules-classes-and-controller-由 julien-breux-4.html 覆盖

http://doc.prestashop.com/display/PS15/Diving+into+PrestaShop+Core+development

http://doc.prestashop.com/display/PS15/New+Developers+Features+In+PrestaShop+1.5

http://blog.belvg.com/how-to-implement-a-controller.html

此致

于 2013-11-24T02:20:28.203 回答
0

你需要使用辅助表单,这里是它的文档,它真的很容易使用;)。

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

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

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

于 2013-07-02T13:52:33.753 回答
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();

}

于 2015-07-27T12:49:22.090 回答