2016-11-23 8 views
0

フォームを表示するプレスタシュモジュールを開発しましたが、POSTデータを使用してデータをデータベースに保存します。私は、フォームを表示し、いくつかのjsファイルをロードすることができるよいくつかのチュートリアル後PrestashopカスタムCMSフォームのデータを投稿する

が、私の質問は2つです:

  • 私のフォームのactionパラメータになりますか?

  • 投稿パラメータはどのように処理できますか?

    • mymodule.php

    • /views/templates/hook/mymodule.tpl

      :モジュール/のmymodule /ディレクトリ/ rootです -

    私のモジュールの構造は、これがあります

  • /views/js/front.js

コントローラーを挿入しましたか?

ありがとうございます。

編集 - (これはMyModuleという/コントローラ/前にコントローラでshoul

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いくつかのコードを追加します)

<?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投稿を編集して自分のコードを追加しました。フロントコントローラーでなければなりません。私の範囲は、いくつかのフィールドとロジックを含むフォームを追加し、そのデータをデータベースに格納することです。私はconfigsのような不自然なコードをいくつか省略しました。 – 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

あなたは必要ありませんoフロントコントローラーを追加する。実際の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'); 
    } 
+0

これは動作しているようだが、前のcommenで@TheDortのアドバイスに従って解決策を見つけた。 – Jack

1

以下のご質問をご覧ください:

  • 私のフォームのactionパラメータになりますか?

フォームのアクションパラメータは、あなたがのgetContent()関数内で自分のコントローラ(mymodule.php)からのsmartyに割り当てる必要があり、その後、あなたはアクションとしてそれを使用することができます

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

になりますあなたのTPLファイル

  • 投稿パラメータはどのように処理できますか?

あなたはmymodule.phpであなたのポストのパラメータの値を取得することができます - のgetContent()関数で次のコードを使用して:

$post_param = Tools::getValue('name_of_parameter'); 
関連する問題