Powered by CodeIgniter
inetlover

inetlover

9
11 голосов
  ПрофильБлог (52)Комментарии (794)Закладки (7)Продукты (7) 
Делаю свою шестеренку на основе шестеренки mail, положительные эмоции появляются вновь и вновь, понимая как все гениально организовано в движке.

Вот, например, для себя открыл момент как очень легко и просто можно из личного сообщения сделать анкету. Для того что бы добавить дополнительные поля всего то надо в файле 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?
14:06 ← 01 декабря 2009 Отправить в Твиттер inetloverinetlover  RSS comments 41

Комментарии (41) ↓

admin admin time 15:19 ← 01 декабря 2009 #
Можно соединить какими-нибудь символами или же сохранить сериализованный массив в базу.
if($result = $this->form->result()){ $body = array($result['body'],$result['body2'],$result['body3']); // Объединить $result['body'] = implode('!@#!@#!@#',$body); // Или сеарилизовать $result['body'] = serialize($body); }
Разумеется, при простановке значений формы все это следует учитывать.

По-хорошему, рекомендую создавать раздельные поля для каждого из пунктов — вы же работаете с Базой Данных, а не с текстовым файлом :-)
Автор
inetlover inetlover time 19:54 ← 01 декабря 2009 #
Спасибо!
По-хорошему, рекомендую создавать раздельные поля для каждого из пунктов
Что-то сразу об этом не подумал, а вариант такой поперспективнее будет.
Автор
inetlover inetlover time 01:51 ← 02 декабря 2009 #
Дима, а функция function __call($func,$args) в шестеренке form была предназначена для любимой рюшечки с usemac.ru :-)?


И скажи, пожалуйста, а как можно добавить другие элементы форм такие, как select, radio, checkbox?

Таким способом ->radio(), что-то не выходит.
Автор
inetlover inetlover time 02:07 ← 02 декабря 2009 #
Таким способом ->radio(), что-то не выходит.

Точнее выходит только пока криво, например вот ошибка такая появляется:
A PHP Error was encountered Severity: Notice Message: Undefined index: checked Filename: templates/form_form.tpl Line Number: 197
А вопрос я хотел задать такой, шестеренка form она готова полностью или она еще не совсем готова? На ее основе можно делать поля select, radio, checkbox или их надо еще в самой шестеренке предусмотреть?
admin admin time 14:19 ← 02 декабря 2009 #
Если не заметил, такие поля как select, checkbox активно используются в движке :-)
Посмотрите шестеренки, которые были в движке ранее — типы нод, такономия и типы таксономии.
Дополнительные поля профиля были реализованы через них.
Автор
inetlover inetlover time 15:08 ← 02 декабря 2009 #
Спасибо!
Автор
inetlover inetlover time 17:29 ← 02 декабря 2009 #
типы нод, такономия и типы таксономии.

Дима, эти шестеренки постоянно обращаются к Базе Данных, и показывает ошибку. Решил в ручную для них сделать необходимые таблицы, заглянул в папки шестеренок и не обнаружил ни одного файла SQL. Может раньше эти шестеренки по-другому работали, и таблицы в БД для них как-то иначе создавались?
admin admin time 17:37 ← 02 декабря 2009 #
Да, точно, забыл, что раньше таблицы базы данных не устанавливались автоматически из файлов в папке.
Вот и дамп сразу на все шестеренки.
Автор
inetlover inetlover time 17:44 ← 02 декабря 2009 #
Спасибо!
Автор
inetlover inetlover time 23:40 ← 02 декабря 2009 #
Дима, а не подскажешь, как сделать следующее:

Когда мы жмем на конверт

То в поле Кому записывается логин

Вопрос, а как этот логин поместить не в поле, а в переменную? Еще хочу понять, как этот логин за одно поместить и в другие поля, например Тема сообщения * и также интересно, как в это поле поместить заранее заготовленный текст из файла ru.lng?

admin admin time 11:14 ← 03 декабря 2009 #
В данном случае значение поля «Кому» берется из URI. Советую просто заглянуть в код.
Автор
inetlover inetlover time 12:18 ← 03 декабря 2009 #
Дима, скажи, пожалуйста, а кроме файла mail/index.php и lang/ru.lng мне еще надо будет в какие файлы внести изменения, что бы реализовать задуманное?
Ildar Ildar time 12:41 ← 03 декабря 2009 #
Таким же способом сделать модули «жалобы на юзера» и «ошибки на сайте»
admin admin time 13:04 ← 03 декабря 2009 #
Нет.
Добавляешь в ru.lng переменную:
pm_subject = "Привет %s!" И 190 строку в /gears/mail/index.php заменяешь на:
$this->form->set_values(array('to'=>$id,'subject'=>t('pm_subject',$id)));
Автор
inetlover inetlover time 14:24 ← 03 декабря 2009 #
Спасибо большое!
Я только над строкой:
$this->form->set_values(array('to'=>$id,'subject'=>t('pm_subject',$id))); Добавил:
d('mail'); А то не работало. Думаю, что сделал правильно.
admin admin time 14:27 ← 03 декабря 2009 #
Да, все верно. Просто считал, что это само собой разумеется.
Автор
inetlover inetlover time 17:15 ← 03 декабря 2009 #
А на сколько верна такая запись?
$this->form->title(t('pm_subject',$id))->input('to') ... В данном случае делал заголовок перед формой:

admin admin time 18:35 ← 03 декабря 2009 #
Верна на все 100%.
Автор
inetlover inetlover time 19:04 ← 03 декабря 2009 #
Спасибо!
Автор
inetlover inetlover time 16:01 ← 05 декабря 2009 #
В файле mail/index.php после строк:
case 'send': default: написал:
d('mail'); $subject = array(t('msg'),$result['subject']); $result['subject'] = serialize($subject); Итого вышло:

Хотел сделать subject похожим на тот, который отсылает админ при редактировании чужого топикаpm_subject = "Комментарий к материалу ''%s''"
admin admin time 13:03 ← 08 декабря 2009 #
Надо сделать так:
d('mail'); $result['subject'] = t('msg',$result['subject']);
Автор
inetlover inetlover time 13:04 ← 08 декабря 2009 #
Спасибо!
Автор
inetlover inetlover time 16:36 ← 10 декабря 2009 #
Надо сделать так:
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. :(
admin admin time 16:56 ← 10 декабря 2009 #
Значит переменная у тебя не «msg» названа.
Автор
inetlover inetlover time 20:07 ← 10 декабря 2009 #
В файле ru.lng написано:
msg = "сообщение" Вот получается сейчас и выводится только msg, а то, что я пишу "Привет!" в поле subject, эти данные теряются, а надо, что бы они объединялись с msg.
admin admin time 20:17 ← 10 декабря 2009 #
Понятное дело, нужно установить плейсхолдеры, чтобы переданный на перевод параметр использовался во фразе.
msg = "Привет, %s!" Соответственно передаваться должен не subject, а имя автора.
Автор
inetlover inetlover time 20:38 ← 10 декабря 2009 #
Спасибо, большое!
Все работает, как надо.
Автор
inetlover inetlover time 18:12 ← 14 декабря 2009 #
А как можно форму из шестеренки mail поместить в теги div?
<div> <form id="create_mail" method="POST"> ... </form> </div>
admin admin time 00:13 ← 15 декабря 2009 #
Можно забрать вывод формы в переменную и обернуть его в div.
$form_code = $this->form->result(); $this->builder->div($form_code,TRUE);
Автор
inetlover inetlover time 13:54 ← 15 декабря 2009 #
Спасибо!
Я подставлял данный код в разные места, но обернуть форму в 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>
Хочу получить приблизительно следующие:

admin admin time 17:35 ← 15 декабря 2009 #
Стили в коде — зло :-) Только подключаемые CSS рекомендую использовать.
Автор
inetlover inetlover time 19:06 ← 15 декабря 2009 #
Дима, а куда этот код поставить, что бы форма между дивов оказалась? Очень много вариантов перепробовал, но форму в дивы не заключил. :-(
$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); Или надо сделать как-то по-другому?
admin admin time 20:39 ← 15 декабря 2009 #
$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));
Автор
inetlover inetlover time 21:54 ← 15 декабря 2009 #
Спасибо большое!
Все работает, как хотел.
Ощущения фантастические! :-)
admin admin time 22:02 ← 15 декабря 2009 #
И слава Богу!
Автор
inetlover inetlover time 19:18 ← 15 декабря 2009 #
А может мне где-нибудь нужно создать функцию по аналогии, как из файла engine/libraries/Pfofiler.php и через нее выводить свою форму?
Автор
inetlover inetlover time 21:42 ← 14 декабря 2009 #
И еще интересно, как можно стандартное поле <input type=«text» сделать со своим классом? Сейчас такое поле автоматом в шестеренки form получает class=«text», а хочется некоторые поля в моей анкете сделать со своими стилями.
admin admin time 00:15 ← 15 декабря 2009 #
Все просто.
... ->input('some_name',array('class'=>'some_class')) ...
Автор
inetlover inetlover time 14:02 ← 15 декабря 2009 #
Спасибо!
Используя этот код, получаю класс: 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; }
admin admin time 17:34 ← 15 декабря 2009 #
Создай новое правило после этого:
form div.field input.text.some_class{ ... }
Автор
inetlover inetlover time 18:54 ← 15 декабря 2009 #
Спасибо, все получилось!