VBsupport перешел с домена .ORG на родной .RU
Ура!
Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей
Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже: Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота. Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
Давно хотел сделать ленту новых тем, но не только по заглавию, как List All Threads, а с первым постом. Ну, руки дошли и заняло это 3 минуты.
Но. При выводе pagetext из post он выводится, естественно, в неизмененном виде (что, в общем-то, как раз противоетстественно)
Вопрос - как подключить соотвествующую (знал бы, как называется - не спрашивал) функцию форума для парсинга pagetext в нормальный HTML? Или это делается более запутанным путем?
перед циклом подключаем файл класса ббкодов (глобальный объект $vbulletin уже должен существовать в этой видимости скрипта, чаще всего, подключением файла глобал.пхп в самом начале кода)
PHP Code:
require_once(DIR. '/includes/class_bbcode.php'); $parser = new vB_BbCodeParser($vbulletin, fetch_tag_list());
и в цикле (while или foreach) выполняем парсинг текста
аргументы функции do_parse() можно посмотреть в самом файле класса
@Gostemilov
Специалист
Join Date: Jun 2007
Location: Одинцово Московская область
Награды в конкурсах:
Posts: 610
Версия vB: 3.8.4
Reputation:
Professional 629
Репутация в разделе: 495
2
Жесть. Нет, ты все-таки или гений или около того. Да, пришлось подправить 1 параметр в do_parse
Это именно то, чего я добивался. Преогромное спасибо!
UPD - мало ли кому пригодится
PHP Code:
while ($thread = $vbulletin->db->fetch_Array($result_thread) AND $counter++ < $perpage) { $count++;
// DIV $divnum= unhtmlspecialchars($thread['firstpostid']); $result_post = $vbulletin->db->query_read("SELECT * FROM " . TABLE_PREFIX . "post WHERE postid=$divnum");
require_once(DIR. '/includes/class_bbcode.php'); $parser = new vB_BbCodeParser($vbulletin, fetch_tag_list());
while ($div = $vbulletin->db->fetch_Array($result_post)) { $divtext=unhtmlspecialchars($div['pagetext']); $divtext = $parser->do_parse($divtext, false, true, true, true, true, false); } // DIV
kerk
k0t
Join Date: May 2005
Location: localhost
Posts: 28,748
Версия vB: 3.8.x
Пол:
Reputation:
Гуру 20279
Репутация в разделе: 8443
3
цикл в цикле - не очень хорошая затея =)
тем более создавать объекты в циклах без особой на то необходимости
код
PHP Code:
require_once(DIR. '/includes/class_bbcode.php'); $parser = new vB_BbCodeParser($vbulletin, fetch_tag_list());
вынести за пределы цикла
и вот это $divnum= unhtmlspecialchars($thread['firstpostid']); не имеет никакого смысла =)
т.к. в поле firstpostid всегда целое число
весь код можно уместить в 2-4 запроса
сначала считаем кол-во тем (для постраничной навигации)
затем собираем ID-шники тем
затем, собираем ID-шники первых постов из тем (ограничивая perpage в коде запроса)
затем, собираем текст постов по ID-шникам из первого запроса
итого должно получиться максимум 4 запроса на страницу, а не три-пять десятков =)
@Gostemilov
Специалист
Join Date: Jun 2007
Location: Одинцово Московская область
Награды в конкурсах:
Posts: 610
Версия vB: 3.8.4
Reputation:
Professional 629
Репутация в разделе: 495
0
Дык это, барин... Мы энто, сиволапые, с такой скоростью код писать не умеем... Работает - сейчас буду оптимизировать код, а насчет unhtmlspecialchars($thread['firstpostid']); - это не ко мне, это к GiveMeABreak, это его
А вообще логика-то понятна, сам так и думал, просто не успел. Но пока не представляю, как сделать это
Quote:
сначала считаем кол-во тем (для постраничной навигации)
затем собираем ID-шники тем
затем, собираем ID-шники первых постов из тем (ограничивая perpage в коде запроса)
затем, собираем текст постов по ID-шникам из первого запроса
Вместо кучи запросов я , помозговав, уложился в один
Code:
$result_thread = $vbulletin->db->query_read("SELECT * FROM " . TABLE_PREFIX . "thread LEFT JOIN " . TABLE_PREFIX . "post ON thread.firstpostid = post.postid ORDER BY " . TABLE_PREFIX . "$sqlsort $order LIMIT $pos,$perpage");
$counter = 0;
$count = 0;
require_once(DIR. '/includes/class_bbcode.php');
$parser = new vB_BbCodeParser($vbulletin, fetch_tag_list());
while ($thread = $vbulletin->db->fetch_Array($result_thread) AND $counter++ < $perpage)
{
$count++;
$divtext=unhtmlspecialchars($thread['pagetext']);
$divtext = $parser->do_parse($divtext, false, true, true, true, true, false);
Мна все правильно сделал или можно еще улучшить?
UPD. Включив остатки головного мозга, сообразил, что даже в 15 постах на страницу может быть куча текста и иллюстраций, что вызовет непомерный вес страницы с вытекающими