CreateFormStart

Обсуждение CMS Made Simple в России.

Moderators: iturbay, wdwp

F@!nT
New Member
New Member
Posts: 9
Joined: Mon Oct 13, 2008 2:20 pm

CreateFormStart

Post 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, саму версию пока что не хотелось бы менять.
заранее спасибо за ответ
Last edited by F@!nT on Wed Oct 15, 2008 1:19 pm, edited 1 time in total.
Sonya

Re: CreateFormStart

Post by Sonya »

А как ты форму на странице вызываешь? В твоем случае должно быть

Code: Select all

{cms_module module='YourModule'}
.
F@!nT
New Member
New Member
Posts: 9
Joined: Mon Oct 13, 2008 2:20 pm

Re: CreateFormStart

Post by F@!nT »

дада, именно так
Sonya

Re: CreateFormStart

Post by Sonya »

1. При вызове формы action будет = 'default', если ничего другого в модуле не задано.
2. После отправления формы action должен быть ='mail'.

Где не передается (1 или 2)?
F@!nT
New Member
New Member
Posts: 9
Joined: Mon Oct 13, 2008 2:20 pm

Re: CreateFormStart

Post by F@!nT »

ни один из пунктов не понял :)
до нажатия кнопки action=default, после нажатия action=default
Sonya

Re: CreateFormStart

Post by Sonya »

:) А сама кнопка как сделана?

Code: Select all

$this->smarty->assign('submit', $this->CreateInputSubmit($id, 'submit', $this->Lang("submit")));
F@!nT
New Member
New Member
Posts: 9
Joined: Mon Oct 13, 2008 2:20 pm

Re: CreateFormStart

Post by F@!nT »

$this->smarty->assign('submit', $this->CreateInputSubmit($id, 'submit', '', '', 'images/cms2/ask.gif'));
Sonya

Re: CreateFormStart

Post by Sonya »

хммм... В принципе все верно, должно работать. У меня был давно баг на IE6, когда action не приходил, если кнопка была картинкой. Не твой вариант?
Sonya

Re: CreateFormStart

Post by Sonya »

И еще скопируй html формы, который генерируется там и добавь сюда, может там будет баг виден.
User avatar
Il_Burbero
Forum Members
Forum Members
Posts: 128
Joined: Tue Apr 15, 2008 10:36 am

Re: CreateFormStart

Post 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');
Само собой что ПХП и сервер должен быть правильно настроен на работу с сессиями.

Заранее извиняюсь если ошибся где в синтаксисе, думаю в редакторе подсветит ошибки...
F@!nT
New Member
New Member
Posts: 9
Joined: Mon Oct 13, 2008 2:20 pm

Re: CreateFormStart

Post by F@!nT »

А может ли быть проблема в том, что форма находится на site.ru/contacts/ а form action=index.php , т.е. при нажатии попадает на site.ru/index.php ?

В принципе, я могу какой-нибудь параметр передать через hidden, но это будет неграмотно..
Да и хотелось бы разобраться в самой структуре cms'а по-лучше.
User avatar
Il_Burbero
Forum Members
Forum Members
Posts: 128
Joined: Tue Apr 15, 2008 10:36 am

Re: CreateFormStart

Post by Il_Burbero »

Вот я тормыз. Ключевое слово Плагин не увидел...
Я вообще не представляю можно ли создать плагин (не модуль!) который будет обрабатывать данные формы. Плагин это просто кусок пхп кода и он работает как ФУНКЦИЯ, т.е. создавая плагин вы создаете просто пхп функцию, ессно за пределами оной все переменные умирают.

А по поводу форм лично я бы советовал http://dev.cmsmadesimple.org/projects/formbuilder/ вот эту штуку в паре с этой http://dev.cmsmadesimple.org/projects/formbrowser/ для быстрого создания форм и получения результатов самое оно. Только с кирилликом традиционные трудности, придется работать с ID. Форм можно наделать кучу и очень удобно, если нужно просто от пользователя какие то данные, без кардинальной обработки, хотя данные формы можно обработать и плагином!
F@!nT
New Member
New Member
Posts: 9
Joined: Mon Oct 13, 2008 2:20 pm

Re: CreateFormStart

Post by F@!nT »

тьфу ты...
модуль, модуль создал
ZYV
Language Partners
Language Partners
Posts: 868
Joined: Tue Nov 15, 2005 9:08 pm

Re: CreateFormStart

Post by ZYV »

Можно, можно создать плагин, обрабатывать просто $_REQUEST или $_GET/$POST. Чем и живы :)
unsigned double ZYV;
User avatar
Il_Burbero
Forum Members
Forum Members
Posts: 128
Joined: Tue Apr 15, 2008 10:36 am

Re: CreateFormStart

Post 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 не приходит, интересно просто как это делается. Хотя я в курсе как делать вызов формы и обработку на одном скрипте, но там используется разрыв кода пхп блоками.
Post Reply

Return to “Russian - русский”