Prestashop:如何从管理面板模板向管理控制器提交数据?

时间:2014-01-23 23:30:35

标签: ajax controller admin form-submit prestashop

我正在尝试在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函数的一个例子。我的问题:

  • 其他tpl或js文件如何接收baseUri,其中是哪一个 变量集?
  • 该行中的?rand日期和时间的功能是什么?一种 安全令牌?
  • 控制器的网址是什么?我用的时候也是网址
  • 我猜processEvents:true和Ajax:true是为了安全 原因并检查表单是否由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默认工具可以做得更好。

1 个答案:

答案 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)
        )));
  }

经过测试和工作,就像一个魅力。

此致