akula22: Несколько вариантов: или передаешь через json и на клиенте формируешь DOM, или на контроллере рендеришь вьюху без шаблона. Хотя неоднократно встречал, некоторые рендерят полную версию страницы, и потом выдергивают из нее нужный тебе кусок и ставят куда надо (на сколько помню, в 1 версии именно так и работает виджет грида с постраничной навигацией на ajax).
Я что-то уже совсем запутался.
В контроллере получаешь id, вытаскиваешь AR и пытаешься сделать return json_encode? Как минимум надо отобразить через echo json_encode.
akula22: Но в целом, у вас все есть в самой ссылке (через get-параметр), так что получится еще проще:
$('.btn').on('click', function(e){
e.preventDefault();
var href = $(this).attr('href');
$.post(
href,
function(data){$('#content').html(data)}
);
});
akula22: ID можно передать, считав атрибут, из вашего примера, у вас будет так:
$('.btn').on('click', function(e){
e.preventDefault();
var id = $(this).attr('id');
$.post(
"/site/default/news",
{id : id},
function(data){
$('#content').html(data);
}
);
});
Роман Мирр: Да, ошибся, в данном случае ready не годится, он ждет полной загрузки DOM-дерева, а не всего контента. Но load ждет весь контент.
Или про что вопрос?
Ильяс Галиев: Да, не так понял изначальный вопрос, каюсь... В целом, можно сделать и через поведения, т.к. это все таки работа с данными БД, что относится именно к модели, а не к компонентам или т.п. Это если преобразования данных могут быть одинаковыми в разных моделях. А если в каждой модели свои преобразования, отличные от всех других, то я бы оставил все методами модели, только сделал бы их, скорее, не статикой, чтобы внутри модели не было вызовов самой себя.
EVOSandru6: Рад помочь!
Причина была в том, что не указав Encoding, у вас не выставлялся системный заголовок, что письмо закодировано base64, а потом, пока вы не убрали эту строчку $body = "=?utf-8?B?".base64_encode($body)."?="; у вас тело письма кодировалось дважды.
Можете еще попробовать вместо
$mail->MsgHTML($message);
указать
$mail->IsHTML(true);
$mail->Body = $message;
Я всегда так пишу, и проблем не возникало.
EVOSandru6: не забудьте удалить строку $body = "=?utf-8?B?".base64_encode($body)."?=";
а строку написать $subject = 'Запрос прайс-листа oт '.$model->name;
Т.к. указав $mail->Encoding = 'base64'; он сам все закодирует, вашего вмешательства уже не надо будет.
В $mail->CharSet не забудьте указать именно вашу кодировку текста (если у вас скрипт не utf-8).
arab789: Да, можно и в модель добавить. На сколько могу судить, замысел автора был таким, что комментарии можно делать к разным моделям (товар, статья и т.п.), и у него все они хранятся в единственной таблице в которой owner_name должен быть именно названием класса модели.
Например, комментарий на отзыв: Создаете модель class CommentReview extended Comment. И в конфиге прописываете правила для CommentReview. И таких моделей можно создать несколько.
arab789: Пожалуйста!
Кстати, можете попробовать заменить в модели Comment в 317 строке $this->owner_name на просто $this, тогда он всегда будет брать конфиг именно этой модели. В этом кроется какая-то фигня, т.к. у вас возникло исключение в строке 192 при условии $attribute === 'owner_name'.
evgenybuckharev: В encoding можно передать пустую строку, и тогда у вас он войдет в условие и отработает charset приложения, так что такое условие имеет право жить (но согласен, что немного бредовая).
У вас проверка на клиенте происходит через js без ajax на сервер? То тогда это просто недостаток именно этой валидации. Как раз из-за этого несчастного переноса строк. Тут только методом, который вы уже реализовали: сделать так, чтобы сервер считал перевод каретки как один символ, а не 2.
На сколько могу судить, валидатор CStringValidator подразумевался разработчиками для валидация именно строк, а не текста с переносами строк.
arab789: Да, немного поспешил, признаюсь... Но получение конфига все равно дико странное для меня :) Хранение в таблице название класса модели в поле owner_name...
В Модели Comment у вас возникает ошибка на этом $this->config['orderComments'] (строка 248), она вызывает метод getConfig() (строка 310), он вызывает метод Модуля getModelConfig($this->ownew_name), этот метод ожидает получить объект модели или название класса модели. В любом случае, в этом методе у вас должно получиться название класса модели. И в этом методе у вас он не входит в условие if и просто возвращает пустой массив. Вот и возникает ошибка при попытке получить элемент массива orderComments из пустого массива.
Т.е. в конфиге у вас должно быть так
commentableModels => array('Comment')
или так
commentableModels => array('Comment' =>array('orderComments' => 'DESC'))
А все предыдущие изменения, можно вернуть на место (я про defaultModelConfig и про получение конфига через $this->config['orderComments']).