Тема обработки данных в пользовательскую форму КМВ
Я разработал модуль 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");
}
}
}
Это все...




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

23.11.2016 02:11:31
Чтобы получить опубликованные данные из формы, вы должны использовать
Tools::getValue('PARAM_NAME');
И для вставки данных в базу данных вы должны использовать
Configuration::updateValue('PARAM_NAME', Tools::getValue('PARAM_NAME'));
Чтобы получить значения из базы данных ваших параметров используйте
Configuration::get('PARAM_NAME');

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');
}


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');

10.11.2018 10:47:59
Если только получить определенное значение (POST+GET), вы можете использовать:
Tools::getValue('param');
Если вы хотите получить все значения из POST + GET, пожалуйста, используйте:
Tools::getAllValues();
А также обратитесь к [prestashop_folder] / class / Tools.РНР