我正在尝试在Prestashop的管理面板中创建一个自定义页面,其中店主可以填写他将在header.tpl页面的列中显示的即将发生的事件。到目前为止,模板和控制器正在运行,其结构基于Stack Overflow的答案:
How to create a new page in prestashop admin panel?
现在我在content.tpl(添加了自定义JavaScript和CSS文件)中创建了带有输入字段的表单。下一步是将其发送到控制器以将其保存在数据库中。但我坚持这一部分。我找不到如何将表单很好地提交给控制器。首先,我尝试使用Ajax函数,但我找不到正确的方法。也没有Ajax没有成功。
$.ajax({
type: 'POST',
headers: { "cache-control": "no-cache" },
url: baseUri + '?rand=' + new Date().getTime(),
async: true,
cache: false,
dataType : "json",
data:{
processEvents: true,
ajax: 'true',
controller: 'AdminEvents',
token: static_token
},
//success: function(jsonData){
//}
});
这是我尝试过的Ajax函数的一个例子。我的问题:
有关控制器的问题:
哪些(Prestashop默认功能)可以或者确实需要使用?对于 例如:
if (Tools::isSubmit('name')){
等
if (Tools::getValue('create_account')){
等
我可以在任何地方使用这些功能,也可以只在Init功能中使用?
很多问题,请随意回答其中的一部分,我只需要在正确的方向上进行良好的推动,在在线文档中搜索和阅读,并且在互联网上没有给我带来解决方案并且洗脑了我一点点。
编辑:
我自己做了一点进步:
使用工具getAdminTokenLite和控制器名称,我生成了控制器URL:
$token = '?controller=AdminEvents&token='.Tools::getAdminTokenLite('AdminEvents');
要发布的网址是令牌加上域名,管理目录和index.php。
使用getValue工具,我在PHP中使用$ _POST [“name”]获取POST数据。
Tools::getValue('event_name')
所以它的工作原理,但我想用其他Presta默认工具可以做得更好。
答案 0 :(得分:0)
我知道现在回答你已经很晚了,但肯定会帮助其他有同样问题的伙伴。
这是一个关于如何使用BackOffice中的ANY Controller在Admin面板上的Prestashop 1.6中实现ajax调用的示例(如果你还需要,你可以使用ajax.php控制器,但我正在使用这个AdminImportController())< / p>
tpl part:
$('#mybtn').click(function(e) {
var data = $('#datalist').val();
// Ajax call with secure token
$.post( "{$current|escape:'html':'UTF-8'}&token= {$token|escape:'html':'UTF-8'}",
{ ajax: true, action: "MyFunction", mydata: data } );
});
在管理员控制器方面:
public function ajaxProcessMyFunction()
{
// Get param
$mydata = (int)Tools::getValue('mydata');
$answer = 0;
if( $mydata > 0 ) {
$this->importProfList = Db::getInstance()->executeS(
"SELECT * FROM .... LIMIT 1"
);
...
$answer = $someOperationResult;
}
// Response
die(Tools::jsonEncode(array(
'answer' => htmlspecialchars($answer)
)));
}
经过测试和工作,就像一个魅力。
此致