我正在为 prestashop 开发一个模块(基本上,这是一个非常自定义的数据导入,我唯一需要的是拥有一个表单和处理数据)。我创建了从 ModuleAdminController 派生的控制器类,但问题是我应该将包含自定义表单外观的 tpl 文件放在哪里?
我意识到我可以将 tpl 文件放入模板中,但我想将所有文件保留在我的模块文件夹中,这可能吗(可能像“/views/templates/admin”之类的地方)?
我正在为 prestashop 开发一个模块(基本上,这是一个非常自定义的数据导入,我唯一需要的是拥有一个表单和处理数据)。我创建了从 ModuleAdminController 派生的控制器类,但问题是我应该将包含自定义表单外观的 tpl 文件放在哪里?
我意识到我可以将 tpl 文件放入模板中,但我想将所有文件保留在我的模块文件夹中,这可能吗(可能像“/views/templates/admin”之类的地方)?
这是在 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>
如果它只是一个管理模块,那么您将无需创建任何视图。因为 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 结构,其中我们的模块文件夹包含控制器(控制器/前端、控制器/管理员)、视图和模型的子文件夹。
希望这会帮助你。
谢谢
不幸的是,没有任何文档可以直接解决这个问题,但听说我有一些非常有用的 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
此致
你需要使用辅助表单,这里是它的文档,它真的很容易使用;)。
http://doc.prestashop.com/display/PS15/HelperForm
您还可以找到有关如何以及在何处使用帮助表单的更多信息,查找函数 getContent() 和 displayForm()。
http://doc.prestashop.com/display/PS15/Creating+a+PrestaShop+module
从@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();
}