Page 1 of 2
CreateFormStart
Posted: Mon Oct 13, 2008 2:25 pm
by F@!nT
Создаю модуль, требуются поля для ввода ифномации.
Делаю так:
function DoAction($action, $id, $params, $returnid=-1) {
print_r($params);
if ($action == 'default')
{
$this->smarty->assign('startform',$this->CreateFormStart($id,'mail',$returnid));
...
$this->smarty->assign('endform',$this->CreateFormEnd());
echo $this->ProcessTemplate('feedback.tpl');
}
....
В шаблоне примерно следующее:
{$startform}
...
{$submit}
{$endform}
Но не передается параметр action. Как был default, так и остается.
print_r($params) выводит это
версия 1.3.1, саму версию пока что не хотелось бы менять.
заранее спасибо за ответ
Re: CreateFormStart
Posted: Mon Oct 13, 2008 2:31 pm
by Sonya
А как ты форму на странице вызываешь? В твоем случае должно быть
.
Re: CreateFormStart
Posted: Mon Oct 13, 2008 2:35 pm
by F@!nT
дада, именно так
Re: CreateFormStart
Posted: Mon Oct 13, 2008 2:41 pm
by Sonya
1. При вызове формы action будет = 'default', если ничего другого в модуле не задано.
2. После отправления формы action должен быть ='mail'.
Где не передается (1 или 2)?
Re: CreateFormStart
Posted: Mon Oct 13, 2008 2:49 pm
by F@!nT
ни один из пунктов не понял

до нажатия кнопки action=default, после нажатия action=default
Re: CreateFormStart
Posted: Mon Oct 13, 2008 2:54 pm
by Sonya

А сама кнопка как сделана?
Code: Select all
$this->smarty->assign('submit', $this->CreateInputSubmit($id, 'submit', $this->Lang("submit")));
Re: CreateFormStart
Posted: Mon Oct 13, 2008 3:00 pm
by F@!nT
$this->smarty->assign('submit', $this->CreateInputSubmit($id, 'submit', '', '', 'images/cms2/ask.gif'));
Re: CreateFormStart
Posted: Mon Oct 13, 2008 3:25 pm
by Sonya
хммм... В принципе все верно, должно работать. У меня был давно баг на IE6, когда action не приходил, если кнопка была картинкой. Не твой вариант?
Re: CreateFormStart
Posted: Mon Oct 13, 2008 3:37 pm
by Sonya
И еще скопируй html формы, который генерируется там и добавь сюда, может там будет баг виден.
Re: CreateFormStart
Posted: Tue Oct 14, 2008 7:45 am
by Il_Burbero
Че то я не понял в чем замуты, но не стоит забывать про область видимости в PHP который
не видит переменных полученных внутри функции за пределами этой функции если эти переменные не заданы глобально, возможно здесь и есть проблем.
И для примера F@!nT я правильно понимаю, что:
Вы вызываете форму на странице с функцией DoAction и передаете параметры на скрипт mail, значит данные должны считываться(обрабатываться) скриптом action.mail.php? Я надеюсь это все не на одном скрипте происходит?
$params считается глобальной переменной и в нее можно пихать значения, но при этом должно быть так:
Инициализация с пустым параметром
Code: Select all
$this->smarty->assign('startform',$this->CreateFormStart($id,'mail',$returnid, $method = 'post', $enctype = '', $inline = false, $idsuffix = '', $params = ("myparam"=>"")));
где то в форме $params[myparam] = 'Hello world!!'; а в action.mail.php:
Code: Select all
if (isset($params[myparam])
echo $params[myparam];
Подкину исчо несколько идей передачи переменных которые вроде как успешно работают.
в скрипте с формой
Code: Select all
$params[actionparam] = 'Hello world!';
в скрипте получателе
Code: Select all
if (isset($params[actionparam])
echo $params[actionparam];
Передавать еще можно тупо в адресной строке (аналог GET) но у в скрипте + шаблон я не знаю где это можно втыкнуть, по ходу эта фишка удобна только для админки.
Code: Select all
if ($submit== "OK")
Redirect($id, 'defaultadmin', $returnid, array("module_message"=>$this->Lang('module_message'),"tab"=>"mytab", "myparam"=>"Hello world!"));
Поясню эту фишку, здесь после подтверждения происходит редирект на скрипт action.defaultadmin.php и в массиве передается несколько параметров: module_message - сообщение модуля, выбор таба на странице генерируемой action.defaultadmin.php и собственно передается сам параметр который потом можно считать на action.defaultadmin.php.
Ну и не стоит пренебрегать сессиями.
В скрипте с формой
Code: Select all
session_start();
$_SESSION['param01'] = 'Hello world!';
в скрипте получателе
Code: Select all
if (isset($_SESSION['param01'] {
$_SESSION['param01'];
session_unregister('param01');
Само собой что ПХП и сервер должен быть правильно настроен на работу с сессиями.
Заранее извиняюсь если ошибся где в синтаксисе, думаю в редакторе подсветит ошибки...
Re: CreateFormStart
Posted: Tue Oct 14, 2008 4:27 pm
by F@!nT
А может ли быть проблема в том, что форма находится на site.ru/contacts/ а form action=index.php , т.е. при нажатии попадает на site.ru/index.php ?
В принципе, я могу какой-нибудь параметр передать через hidden, но это будет неграмотно..
Да и хотелось бы разобраться в самой структуре cms'а по-лучше.
Re: CreateFormStart
Posted: Wed Oct 15, 2008 1:05 pm
by Il_Burbero
Вот я тормыз. Ключевое слово Плагин не увидел...
Я вообще не представляю можно ли создать плагин (не модуль!) который будет обрабатывать данные формы. Плагин это просто кусок пхп кода и он работает как ФУНКЦИЯ, т.е. создавая плагин вы создаете просто пхп функцию, ессно за пределами оной все переменные умирают.
А по поводу форм лично я бы советовал
http://dev.cmsmadesimple.org/projects/formbuilder/ вот эту штуку в паре с этой
http://dev.cmsmadesimple.org/projects/formbrowser/ для быстрого создания форм и получения результатов самое оно. Только с кирилликом традиционные трудности, придется работать с ID. Форм можно наделать кучу и очень удобно, если нужно просто от пользователя какие то данные, без кардинальной обработки, хотя данные формы можно обработать и плагином!
Re: CreateFormStart
Posted: Wed Oct 15, 2008 1:18 pm
by F@!nT
тьфу ты...
модуль, модуль создал
Re: CreateFormStart
Posted: Wed Oct 15, 2008 5:48 pm
by ZYV
Можно, можно создать плагин, обрабатывать просто $_REQUEST или $_GET/$POST. Чем и живы

Re: CreateFormStart
Posted: Thu Oct 16, 2008 6:09 am
by Il_Burbero
тьфу ты...
модуль, модуль создал
Ну для модуля тогда я подсказал. Ну и конечно Get и Post, просто они как бы по умолчанию везде для работы с формами.
Я не думаю что имеет значение где вызывается модуль, главное чтобы были определены в скриптах правильно связи и обработчики, т.к. если в модуле не определено ЧПУ (см. пример мод. News) то он работает как обычно через строку с параметрами.
Поэтому
А может ли быть проблема в том, что форма находится на site.ru/contacts/ а form action=index.php , т.е. при нажатии попадает на site.ru/index.php ?
раз так происходит значит что то пошло не так, на главную страницу попадать не должно, должно попадать на скрипт обработчик.
Итак суммируя.
1. Модуль (Module.module.php) должен быть оформлен корректно, собственно чтобы КМС знала что оно существует в природе

И самое важное что там должно быть это:
Code: Select all
function IsPluginModule()
{
return true;
}
Иначе модуль при вызове {Module} не будет работать.
2. action.default.php вызывает модуль на страницах, т.е. {Module} там должно быть определение формы и прочего что нужно для инициализации модуля на страницах КМС.
Конкретно в примере там и должно быть определение формы
Code: Select all
$this->smarty->assign('startform',$this->CreateFormStart($id,'obrabotat_dannie_formy',$returnid));
, подписка данных и вызов шаблона Смарти.
3.А вот здесь action.obrabotat_dannie_formy.php вы считываете данные и обрабатываете.
Пока чепятал задумался а вообще зачем нужен параметр action? Если вы в форме см.п.2 пишите вызов скрипта обработчика см.п.3 то он вызовется, зачем какие то лишние проверки вызвался он или нет?
To ZYV
Можно, можно создать плагин, обрабатывать просто $_REQUEST или $_GET/$POST.
ZYV а можно маленький алгоритм именно для плагина т.н. тэга? Лично мне на ум ничего кроме case не приходит, интересно просто как это делается. Хотя я в курсе как делать вызов формы и обработку на одном скрипте, но там используется разрыв кода пхп блоками.