| Профиль | Блог (52) | Комментарии (794) | Закладки (7) | Продукты (7) |
Делаю свою шестеренку на основе шестеренки mail, положительные эмоции появляются вновь и вновь, понимая как все гениально организовано в движке.
Вот, например, для себя открыл момент как очень легко и просто можно из личного сообщения сделать анкету. Для того что бы добавить дополнительные поля всего то надо в файле mail/index.php в функции function create($id = FALSE) добавить поля, в данном случае два поля input и textarea:
Где input – это и есть поле input, а editor является полем textarea, прописать название полей в файле ru.lng в данном примере message2 и message3 и все анкета готова. Не надо делать для новых полей анкеты проверку (заполнил или нет юзер поле), для поля textarea не надо подключать редактор он появляется автоматом, одним словом получаешь удовольствие от движка.
Есть у меня маленький вопрос, который я сейчас решаю: Как правильно склеить содержимое полей из моего примера (body2 и body3), что бы они все вместе с полем body записались в базу данных в поле body таблицы pm?
Вот, например, для себя открыл момент как очень легко и просто можно из личного сообщения сделать анкету. Для того что бы добавить дополнительные поля всего то надо в файле mail/index.php в функции function create($id = FALSE) добавить поля, в данном случае два поля input и textarea:
->input('body2',array('label'=>t('message2'),'js_validation'=>'required','validation'=>'required'))
->editor('body3',array('label'=>t('message3'),'js_validation'=>'required','validation'=>'required'))
Где input – это и есть поле input, а editor является полем textarea, прописать название полей в файле ru.lng в данном примере message2 и message3 и все анкета готова. Не надо делать для новых полей анкеты проверку (заполнил или нет юзер поле), для поля textarea не надо подключать редактор он появляется автоматом, одним словом получаешь удовольствие от движка.
Есть у меня маленький вопрос, который я сейчас решаю: Как правильно склеить содержимое полей из моего примера (body2 и body3), что бы они все вместе с полем body записались в базу данных в поле body таблицы pm?


if($result = $this->form->result()){ $body = array($result['body'],$result['body2'],$result['body3']); // Объединить $result['body'] = implode('!@#!@#!@#',$body); // Или сеарилизовать $result['body'] = serialize($body); }Разумеется, при простановке значений формы все это следует учитывать.
По-хорошему, рекомендую создавать раздельные поля для каждого из пунктов — вы же работаете с Базой Данных, а не с текстовым файлом :-)
Что-то сразу об этом не подумал, а вариант такой поперспективнее будет.
И скажи, пожалуйста, а как можно добавить другие элементы форм такие, как select, radio, checkbox?
Таким способом ->radio(), что-то не выходит.
Точнее выходит только пока криво, например вот ошибка такая появляется:
A PHP Error was encountered Severity: Notice Message: Undefined index: checked Filename: templates/form_form.tpl Line Number: 197А вопрос я хотел задать такой, шестеренка form она готова полностью или она еще не совсем готова? На ее основе можно делать поля select, radio, checkbox или их надо еще в самой шестеренке предусмотреть?
Посмотрите шестеренки, которые были в движке ранее — типы нод, такономия и типы таксономии.
Дополнительные поля профиля были реализованы через них.
Дима, эти шестеренки постоянно обращаются к Базе Данных, и показывает ошибку. Решил в ручную для них сделать необходимые таблицы, заглянул в папки шестеренок и не обнаружил ни одного файла SQL. Может раньше эти шестеренки по-другому работали, и таблицы в БД для них как-то иначе создавались?
Вот и дамп сразу на все шестеренки.
Когда мы жмем на конверт
То в поле Кому записывается логин
Вопрос, а как этот логин поместить не в поле, а в переменную? Еще хочу понять, как этот логин за одно поместить и в другие поля, например Тема сообщения * и также интересно, как в это поле поместить заранее заготовленный текст из файла ru.lng?Добавляешь в ru.lng переменную:
pm_subject = "Привет %s!"И 190 строку в /gears/mail/index.php заменяешь на:$this->form->set_values(array('to'=>$id,'subject'=>t('pm_subject',$id)));Я только над строкой:
$this->form->set_values(array('to'=>$id,'subject'=>t('pm_subject',$id)));Добавил:d('mail');А то не работало. Думаю, что сделал правильно.$this->form->title(t('pm_subject',$id))->input('to') ...В данном случае делал заголовок перед формой:case 'send': default:написал:d('mail'); $subject = array(t('msg'),$result['subject']); $result['subject'] = serialize($subject);Итого вышло:
Хотел сделать subject похожим на тот, который отсылает админ при редактировании чужого топикаpm_subject = "Комментарий к материалу ''%s''"d('mail'); $result['subject'] = t('msg',$result['subject']);d('mail'); $subject = array(t('msg'),$result['subject']); $result['subject'] = serialize($subject);наd('mail'); $result['subject'] = t('msg',$result['subject']);Получил:
К сожалению, запись из поля subject не отобразилась, а только вывелась запись из msg. :(msg = "сообщение"Вот получается сейчас и выводится только msg, а то, что я пишу "Привет!" в поле subject, эти данные теряются, а надо, что бы они объединялись с msg.msg = "Привет, %s!"Соответственно передаваться должен не subject, а имя автора.Все работает, как надо.
<div> <form id="create_mail" method="POST"> ... </form> </div>$form_code = $this->form->result(); $this->builder->div($form_code,TRUE);Я подставлял данный код в разные места, но обернуть форму в div так и не вышло. :-(
Если быть совсем точным, я свою форму хочу поместить в следующие теги:
<fieldset style="border: 1px solid rgb(90, 0, 153); margin: 20px 0pt; padding: 6px 10px 10px; background-color: rgb(238, 238, 238);"> <legend style="color: rgb(90, 0, 153);"><a class="toggler s_on"> АНКЕТА </a></legend><div style="margin: 0px; overflow: hidden; position: static;"><div style="margin: 0px;" class="clear"><div style="padding: 4px 0pt; color: rgb(90, 0, 153); font-weight: normal;"> <form id="create_mail" method="POST"> ... </form> </div></div></div></fieldset>Хочу получить приблизительно следующие:
$form_code = $this->form->result(); $this->builder->div($form_code,TRUE);И еще, если я свою форму собираюсь заключить в несколько тегов (fieldset, div, div, div) с параметрами я напишу так:
$form_code = $this->form->result(); $this->builder->fieldset(array('class'=>'class_1'))->div(array('class'=>'class_2'))->div(array('class'=>'class_3'))->div($form_code,TRUE);Или надо сделать как-то по-другому?$form_code = $this->form->compile(TRUE); $this->builder->div($form_code,TRUE);Неверно. Просто напиши код в виде строки и потом выведи его в шаблон.
$form_code = $this->form->compile(); $code = "<fieldset><div><div><div>{$form_code}</div></div></div></fieldset>"; // Первый аргумент — массив, чтобы пояснить шаблонизатору, что надо выводить содержимое массива, а не какой-то определенный шаблон. $this->_template(array($code));Все работает, как хотел.
Ощущения фантастические! :-)
... ->input('some_name',array('class'=>'some_class')) ...Используя этот код, получаю класс: class=«text some_class» и поле не видоизменяется, так как этот класс, как и прежде, читает стили из:
form div.field input.text, form div.field input.input, form div.field input.password { border: 1px solid #9E9E9E; font-size: 1.6em; margin: 0.1em 0em; min-width: 300px; width: 100%; max-width: 760px; }form div.field input.text.some_class{ ... }