Тема обработки данных в пользовательскую форму КМВ

Тема обработки данных в пользовательскую форму КМВ

23.11.2016 01:52:59 Просмотров 49 Источник

Я разработал модуль prestashop, который отображает форму, и теперь я хочу использовать данные POST для хранения моих данных в базе данных.

После некоторых уроков я могу отобразить форму и загрузить JS-файл, но мой вопрос-это два:

  • Каким будет параметр действия моей формы?

  • Как я могу обрабатывать параметры post и где??

Структура моего модуля такова-root is /modules/mymodule/ dir:

  • сборка mymodule.РНР

  • /вид/шаблоны/крюк/библиотека mymodule.ТПЛ

  • /вид/Яш/стойка.JS

Должен ли я вставить контроллер??

Спасибо.

Изменить-добавить код

сборка mymodule.РНР

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.ТПЛ

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

дисплей.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");


      }
    }

}

Это все...

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/40762425/prestashop-handle-post-data-in-custom-cms-form#comment68749670_40762425
Что это за форма? Конфигурация модуля? На первой полосе? Страница администратора? Если это главная страница или страница администратора, да, вам нужен контроллер. Вам нужно предоставить дополнительную информацию и некоторый код, чтобы мы могли помочь вам в дальнейшем.
https://stackoverflow.com/questions/40762425/prestashop-handle-post-data-in-custom-cms-form#comment68750832_40762425
@TheDrot я отредактировал сообщение, добавив свой код. Должен быть передний контроллер. Моя область действия-это добавление формы с некоторыми полями и логикой и сохранение данных в базе данных. Я опустил некоторые бесполезные коды, такие как configs.
https://stackoverflow.com/questions/40762425/prestashop-handle-post-data-in-custom-cms-form#comment68751726_40762425
Объявление класса контроллера неверно. Посмотрите здесь для правильного объявления.
https://stackoverflow.com/questions/40762425/prestashop-handle-post-data-in-custom-cms-form#comment68754605_40762425
@TheDrot, который решил поток вызовов. Не могу же я продолжать свое развитие!! Спасибо!

Ответы - Тема обработки данных в пользовательскую форму КМВ / Prestashop Handle post data in custom CMS form

G. Mansour

23.11.2016 02:11:31

Чтобы получить опубликованные данные из формы, вы должны использовать

Tools::getValue('PARAM_NAME');

И для вставки данных в базу данных вы должны использовать

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

Чтобы получить значения из базы данных ваших параметров используйте

Configuration::get('PARAM_NAME');
PixelWeb

24.11.2016 07:46:34

Вам не нужно добавлять передний контроллер. Вы можете просто отправить свою форму на фактический URL-адрес CMS и манипулировать данными POST внутри функции hookcustomCMS($params).

    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');
    }
https://stackoverflow.com/questions/40762425/prestashop-handle-post-data-in-custom-cms-form/40791400#comment68837591_40791400
это кажется работающим, но я нашел свое решение, следуя совету @TheDort в предыдущем комментарии.
Knowband Plugins

25.11.2016 07:11:51

Пожалуйста, найдите ответы на свои вопросы ниже:

  • Каким будет параметр действия моей формы?

Параметром действия для вашей формы будет

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

Вам нужно назначить его smarty с вашего контроллера (mymodule.php) в функции getContent (), а затем вы можете использовать его в качестве действия в вашем файле TPL.

  • Как я могу обрабатывать параметры post и где??

Вы можете получить значения параметров post в mymodule.php-getContent () функция с помощью следующего кода:

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

10.11.2018 10:47:59

Если только получить определенное значение (POST+GET), вы можете использовать:

Tools::getValue('param');

Если вы хотите получить все значения из POST + GET, пожалуйста, используйте:

Tools::getAllValues();

А также обратитесь к [prestashop_folder] / class / Tools.РНР

Закрыть X