2016-11-23 119 views
0

我开发了一个显示表单的prestashop模块,现在我想使用POST数据将我的数据存储在数据库中。Prestashop在自定义CMS表格中处理发布数据

以下一些教程,我能够显示表格,加载一些js文件,但我的问题有两个:

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

  • 我如何处理帖子参数,以及在哪里?

我的模块的结构是这样的 - 根/模块/ 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的/控制器/前面的控制器)

<?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"); 


     } 
    } 

} 

这一切......

+0

这是什么形式?模块配置?首页?管理页面?如果它是首页或管理页面,那么你需要一个控制器。您需要提供更多信息和一些代码,以便我们可以进一步帮助您。 – TheDrot

+0

@TheDrot我编辑了添加我的代码的帖子。应该是前端控制器。我的范围是添加一个表单,其中包含一些字段和逻辑,并将数据存储在数据库中。我省略了一些无用的代码,如配置。 – Jack

+0

控制器的类声明是错误的。看看[这里](http://stackoverflow.com/questions/40491693/prestashop-module-with-controller-throws-404/40492153#40492153)适当的声明。 – TheDrot

回答

0

若要从表单中发布的数据,你必须使用

Tools::getValue('PARAM_NAME'); 

并插入数据的数据库,你应该使用

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

要从中获取值你的参数数据库使用

Configuration::get('PARAM_NAME'); 
0

你不需要t o添加一个前端控制器。您可以将表单提交给实际的CMS网址,并在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'); 
    } 
+0

这似乎工作,但我发现我的解决方案,在以前的commen @TheDort建议。 – Jack

1

请找到问题的答案如下:

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

为您的表单的操作参数将是

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

你需要把它从你在的getContent()函数控制器(mymodule.php)分配给智者,然后你可以使用它作为在行动你的TPL文件。

  • 如何处理帖子参数,以及在哪里?

你可以得到你的文章参数的mymodule.php值 - 使用下面的代码的getContent()函数:

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