我正在为prestashop开发一个模块(基本上,它是一个非常自定义的数据导入,我唯一需要的是拥有一个表单和流程数据)。我已经创建了从ModuleAdminController派生的控制器类,但问题是我应该在哪里放置包含自定义窗体外观的tpl文件?
我意识到我可以将tpl文件放到模板中,但我想将所有文件保存在我的模块文件夹中,是否可能(可能在某些地方像“/ views / templates / admin”)?
答案 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)
不幸的是,任何文件都不存在直接指向解决这个问题,但听说我有一些网址非常有用,你应该结合主题并实现你的意识: http://presthemes.com/prestashop-news/modules-classes-and-controller-override-by-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
最好的问候
答案 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();
}