Prestashop处理自定义CMS表单中的帖子数据

时间:2016-11-23 10:53:00

标签: php prestashop prestashop-1.6

我开发了一个显示表单的prestashop模块,现在我想使用POST数据将我的数据存储在数据库中。

按照一些教程我可以显示表单并加载一些js文件,但我的问题是两个:

  • 我的表单的动作参数是什么?

  • 我如何处理post参数,以及??

我的模块的结构是这样的 - 根是/ modules / mymodule / dir:

  • mymodule.php

  • /views/templates/hook/mymodule.tpl

  • /views/js/front.js

我要插入控制器吗?

谢谢。

编辑 - 添加一些代码

mymodule.php

class MyModule extends Module
{
    public function __construct()
    {
        $this->name = 'mymodule';
        $this->controllers = array( 'display' ); // <- my controller name

        parent::__construct();
    }

    public function install()
    {
       if (Shop::isFeatureActive())
         Shop::setContext(Shop::CONTEXT_ALL);

       if (!parent::install() ||
         !$this->registerHook('customCMS') ||
         !$this->registerHook('header')
       )
          return false;

       return true;
     }

    public function hookcustomCMS($params)
    {
        if (Tools::getValue('id_cms') != 7)
            return;

      $this->context->smarty->assign(
          array(
              'form_link' => $this->context->link->getModuleLink('mymodule', 'display')
          )
      );

      return $this->display(__FILE__, 'mymodule.tpl');
    }
}

mymodule.tpl

<form id="myform" action="{$link->getModuleLink('mymodule', 'display')|escape:'html'}" method="post">
<!-- all fields...  + submit button -->
</form>

display.php(这应该是mymodule / controllers / front中的控制器)

<?php
class mymoduledisaplyFrontController extends ModuleFrontController
{


    public function initContent()
    {
        parent::initContent();


        $this->context->controller->addJS($this->module->getLocalPath().'views/js/front.js');
        $this->setTemplate('mymodule.tpl');
    }



    public function postProcess()
    {
      if (Tools::isSubmit('submit_requestform'))
      {
          // form processing

          ppp("OK");


      }
    }

}

这就是......

4 个答案:

答案 0 :(得分:1)

请在下面找到问题的答案:

  • 我的表单的动作参数是什么?

表单的操作参数将是

$this->smarty->assign('action', 'index.php?controller=AdminModules&token='.Tools::getAdminTokenLite('AdminModules').'&configure='.$this->name)

您需要在getContent()函数中从控制器(mymodule.php)将其分配给smarty,然后您可以将其用作TPL文件中的操作。

  • 我如何处理post参数,以及??

您可以使用以下代码在mymodule.php - getContent()函数中获取post参数的值:

$post_param = Tools::getValue('name_of_parameter');

答案 1 :(得分:0)

要从您必须使用的表单中获取发布的数据

Tools::getValue('PARAM_NAME');

要将数据插入数据库,您应该使用

Configuration::updateValue('PARAM_NAME', Tools::getValue('PARAM_NAME'));

要从params的数据库中获取值,请使用

Configuration::get('PARAM_NAME');

答案 2 :(得分:0)

您无需添加前端控制器。您只需将表单提交到实际的CMS URL并操作hookcustomCMS($ params)函数中的POST数据。

    public function hookcustomCMS($params)
    {
        if (Tools::getValue('id_cms') != 7)
            return;
        if (Tools::isSubmit('submit_requestform'))
        {
              //form proccessing
        }

      $this->context->smarty->assign(
          array(
              'form_link' => $this->context->link->getModuleLink('mymodule', 'display')
          )
      );

      return $this->display(__FILE__, 'mymodule.tpl');
    }

答案 3 :(得分:0)

如果仅获取特定值(POST + GET),则可以使用:

Tools::getValue('param');

如果要从POST + GET获取所有值,请使用:

Tools::getAllValues();

也可以从[prestashop_folder] /class/Tools.php

进行引用