Пытаюсь сделать infinite scroll, с php, smarty и jquery ajax. Как я понял, для того, чтоб не нагружать сильно сервер идеально осуществлять весь процесс на клиентской части и получать ответ в формате json. Проблема в том, что мне необходимо использовать функции движка smarty. Немного кода, чтоб вы поняли, что я имею в виду:
$.each(data.content, function(key, value ){
if(value.comment !=''){
//Что касается даты, то smarty здесь работает и можно использовать date_format
html += '<div class="timeline-date"><i class="fa fa-calendar"></i>
{'+value.date+'|date_format:"%B %d, %Y %I:%M %p"}</div>';
html += '</div>';
//Но вот с функциями, беда
html += '<p>{'+value.comment+'|smarty_modifier_autolink|nl2br|mention}</p>';
}
}
В браузере, все, что я получаю - +value.comment+
вместо самого комментария.
Я не дружу с json
или javascript-ом
может есть еще, какой нибудь способ рендерить json, чтоб можно было использовать smarty
функции? Буду рад любому совету или подсказке! Всем большое спасибо!
Не знаю какой движок вы используете, если испольузете, и как именно вы используете smarty
. Но вот такой пример, возможно он будет несколько в виде "псевдокода".
Допустим, вы на странице прокручиваете комментарии. и в какой то момент, вам нужно запросить у сервера новую порцию данных. Сервер вам возвращает некоторый объект data
(судя по вашему коду). В этом объекте есть data.content
- сведения комментах (ну или еще чем-нибудь). Видимо помимо данного поля, там имеются и другие поля, может быть data.count
с количеством комментариев, и т.п.
вариант, как это можно устроить следующий:
у вас имеется скрипт ajax_comments.php
(либо это метод контроллера, или еще что-нибудь, в зависимости от архитектуры). Данный скрипт генерирует этот объект $data
.
$comments = Comments->find() // условное получение части комментов из БД
->where(['published' => 1])
->toArray();
// ваши данные
$data = [
'content' => null,
'count' => count($comments),
.... // еще какие-то поля
];
$smarty = new Smarty();
// передали данные в шаблон
$smarty->assign('comments', $comments);
// получили вывод шаблона в переменную
$data['content'] = $smarty->fetch('comments.tpl');
// упаковали все в JSON. вывод шаблона в виде строки
echo json_encode($data);
exit;
ваш шаблон для комментариев comments.tpl
, будет примерно следующий (не очень ясна структура):
{foreach $comments as $c}
<div class="timeline-date">
<i class="fa fa-calendar"></i>
{$c.date|date_format:"%B %d, %Y %I:%M %p"}
</div>
<div>
<p>{$c.comment|nl2br}</p>
</div>
{/foreach}
Ваш ajax-запрос к серверу для получения новой порции комментариев, должен быть примерно такой:
$.post("ajax_comments.php", { ... параметры ...}, function(data){
// делаете что-то с дополнительными данными
alert(data.count);
// добавляете комментарии к странице
$("#comments").append(data.content);
});
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Перечитал варианты, но почему-то они не работают на конкретном сайтеКак сделать меню по центру страницы корректно? Имеется ввиду margin 0 auto
Стили подтягиваются через скрипт во фрейм, динамически
Подскажите как сделать запрос на определение что прошло время не больше 5 минут?