Powered by CodeIgniter
inetlover

inetlover

9
11 голосов
  ПрофильБлог (52)Комментарии (794)Закладки (7)Продукты (7) 
Хочу понять, как передавать значение из поля datetime в даном случае в тело письма.

Для примера добавил поле datetime в функцию: function create() шестеренки mail.

function create($id = FALSE){ $this->form->set('create_mail'); d('mail'); $this->form->input('to',array('label'=>t('to'),'description'=>t('to_description'),'js_validation'=>'required','validation'=>'required')) ->input('subject',array('label'=>t('subject'),'js_validation'=>'required','validation'=>'required')) ->datetime('created_date',array('range'=>'1900-'.date('Y'),'value'=>date('Y-m-d H:i:s'))) // Добавил ->editor('theme',array('label'=>t('message'),'js_validation'=>'required','validation'=>'required')) // Изменил ->buttons('preview','send'); if($result = $this->form->result(TRUE)){ switch($result['action']){ case 'preview': $result['body'] = nl2br($result['body']); $this->_template("preview",$result,3); $this->form->set_values($result); $this->form->compile(); break; case 'send': default: $result['subject'] = t('title1',$result['subject']); // Добавил $result['body'] = ($result['subject'])."\n"; // Добавил $result['body'] .= t('title2',$result['created_date'])."\n"; // Добавил $result['body'] .= t('title3',$result['theme']); // Добавил if($this->pm->send($result)){ redirect(l("/mail/inbox/")); } else { $this->form->compile(); } ...

Файл: mail/lang/ru.lng [mail] title1 = "<b>Тема:</b> %s" title2 = "<b>Дата:</b> %s" title3 = "<b>Сообщение:</b> %s" ...

В итоге: Дата:Array. :-(


Вместо человекопонятной даты.


Понимаю, что в моем случае по-другому и не должно быть, пытаюсь понять разбирая код в движке где используется datetime но пока не нашел решение.
18:17 ← 23 декабря 2009 Отправить в Твиттер inetloverinetlover  RSS comments 19

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

admin admin time 18:20 ← 23 декабря 2009 #
Не видно кода шаблона — это раз.
Почему бы просто не сделать:
if($result = $this->form->result()){ debug($result['created_date']); }
Автор
inetlover inetlover time 18:36 ← 23 декабря 2009 #
Только вот беда, не пойму, куда этот код вставить. :-(
admin admin time 19:22 ← 23 декабря 2009 #
После
if($result = $this->form->result(TRUE)){ вставить
debug($result['created_date']);
Автор
inetlover inetlover time 19:54 ← 23 декабря 2009 #
Спасибо!
Автор
inetlover inetlover time 22:21 ← 24 декабря 2009 #
Вставил debug($result['created_date']);, но после нажатия кнопки отправить попадаешь на страницу:

admin admin time 23:05 ← 24 декабря 2009 #
Это и есть ответ на твой вопрос — содержимое массива :-)
Вместо
$result = $this->form->result(TRUE); Напиши
$result = $this->form->result(); И будет тебе счастье!
Автор
inetlover inetlover time 23:42 ← 24 декабря 2009 #
Спасибо!

А почему сейчас выполнение кода обрывается на строке debug($result['created_date']); и в окне браузера наблюдаю string(16) «2009-12-25 01:30» вместо редиректа на страницу /mail/inbox/?
admin admin time 07:33 ← 25 декабря 2009 #
Потому что debug — это отладочная функция :-D
Автор
inetlover inetlover time 11:06 ← 25 декабря 2009 #
Не видно кода шаблона — это раз.
Код шаблона нужен для элемента datetime?
admin admin time 11:10 ← 25 декабря 2009 #
Все уже решено — ничего не надо.
Автор
inetlover inetlover time 12:01 ← 25 декабря 2009 #
Согласен, что в движке все очень и очень продумано, только вот я пытаюсь доделать свою шестеренку, где за аналогию взял функцию: function create() шестеренки mail, в которую добавил элемент формы datetime, выставленная там дата должна записываться в тело письма вместе с текстом письма.

Мне не хочется делать отдельное, дополнительное поле аналогичное created_date в таблице pm, чтобы не было дополнительных запросов к БД, а хочется перед отправкой анкеты собрать все из полей формы в тело письма и записывать их все вместе в поле body. Сейчас все так и работает за исключением created_date.
admin admin time 12:07 ← 25 декабря 2009 #
Так проблемы уже нет.
После этого коммента все встало на свои места.
Теперь нужно просто присоединить нужные строки к $result['body'].
Автор
inetlover inetlover time 20:11 ← 25 декабря 2009 #
Спасибо!
Автор
inetlover inetlover time 19:55 ← 28 декабря 2009 #
Теперь нужно просто присоединить нужные строки к $result['body'].

Скажите, пожалуйста, а разве строка №21 из кода в посте
$result['body'] .= t('title2',$result['created_date'])."\n"; // Добавил не то, что надо? Ведь при такой записи очень хорошо передаются данные из любых других полей кроме datetime.
admin admin time 19:57 ← 28 декабря 2009 #
Все верно. Ошибка была в том, что неверно вызывалась функция проверки формы:
if($result = $this->form->result(TRUE)){ ... } Нужно было:
# if($result = $this->form->result()){ ... }
Автор
inetlover inetlover time 20:21 ← 28 декабря 2009 #
Когда пишу:
if($result = $this->form->result(TRUE)){ ... } браузер выводит:
array(5) { ["day"]=> string(2) "28" ["month"]=> string(2) "12" ["year"]=> string(4) "2009" ["hour"]=> string(2) "22" ["minute"]=> string(2) "05" }
А когда пищу:
if($result = $this->form->result()){ ... } то браузере:
string(16) "2009-12-28 22:05"
Если убираю:
debug($result['created_date']); то тогда все в порядке, только в теле письма Дата:Array :-(
admin admin time 21:19 ← 28 декабря 2009 #
Друг, ты совсем запутался :-)
Если debug выдает значение «2009-12-28 22:05», то после того, как ты его уберешь, значение останется таким же :-)
Автор
inetlover inetlover time 20:28 ← 30 декабря 2009 #
Спасибо большое-пребольшое! И в правду без debug все заработало, как надо и значение передалось корректно.
Итого Было:
$result['body'] .= t('title2',$result['created_date'])."\n"; Добавил скобки (...) $result['body'] .= t('title2',($result['created_date']))."\n"; И получил приподнятое Новогоднее настроение :-)
admin admin time 01:09 ← 31 декабря 2009 #
Безмерно рад, что смог приподнять настроение.