2016-11-23 117 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');