Хак - Новое в блогах (mod_latestblogs) - вывод части текста записи в модуле

1194
Мне не очень нравился вывод в модуле Новое в блогах (mod_latestblogs) только названия записи, количества комментариев, автора и названия блога, поэтому я решил дополнить его частичным выводом теста самой записи (240 символов, но Вы можете больше или меньше, "по вкусу").
Получится примерно следующее:



Для реализации хака потребовалось определение переменной смарти в самом скрипте модуля:
modules/mod_latestblogs/module.php

Находим строки подсоединения к базе данных:
Код PHP:
$sql = "SELECT  p.title as title,
                        p.id as id,
                        p.seolink as seolink, 
                        b.title as blog,
                        b.owner as owner,
                        b.id as blog_id,
                        b.seolink as bloglink,
                        p.pubdate as fpubdate,
						b.user_id as uid,
                        IFNULL(r.total_rating, 0) as rating,
                        b.ownertype as ownertype,
                        u.id as author_id,
                        u.nickname as author,
                        up.imageurl as author_image,
                        u.is_deleted as author_deleted
				FROM cms_blog_posts p
				LEFT JOIN cms_blogs b ON b.id = p.blog_id
				LEFT JOIN cms_users u ON u.id = p.user_id				
				LEFT JOIN cms_user_profiles up ON up.user_id = p.user_id
                LEFT JOIN cms_ratings_total r ON r.item_id=p.id AND r.target='blogpost'
				WHERE p.published = 1 AND b.allow_who = 'all'
				ORDER BY p.id DESC
                LIMIT 30";
Добавляем после
Код PHP:
p.title as title
Следующее:
Код PHP:
p.content as content,
то есть в базе данных в таблице cms_blog_posts находим колонку content и берем оттуда данные

Далее, находим строку
Код PHP:
$con['image'] = usrImageNOdb($con['author_id'], 'small', $con['author_image'], $con['author_deleted']);
и после нее вставляем:
Код PHP:
$con['content'] 	 = strip_tags($con['content']);
					if (strlen($con['content'])>240) { $con['content'] = substr($con['content'], 0, 240). '...'; }
В данном случае функцией strip_tags мы удалили из записи блога все данные форматирования, а функцией strlen определили ее длинну, и если она больше 240 символов, то берем из записи первые 240 символов функцией substr, где $con['content'] - нужная нам строка, 0- первый символ в строке, 240 - последний.

Смарти переменная готова. она будет иметь вид {$posts.content}, которая была унаследована этим - $posts[] = $con; (произошла передача массива)
В файле /templates/ШАБЛОН/modules/mod_latestblogs.tpl вставляем нашу переменную смарти в нужное место, в нашем случае после заголовка. Находим:
Код PHP:
<a class="mod_latest_blog_title" href="{$post.href}">{$post.title}</a>
После него сразу вставляем:
Код PHP:
<div >{$post.content}</div>
Хак готов.
Многие спросят для чего была такая детализация?
Отвечу: многие понятия не имеют, что они делают в хаке, данным постом я хоть немного просвещу людей. Понимание того, что делаешь уменьшает вероятность ошибки.
Хак: sip звонки пользователям сайта (сторонний сервис) | IP Cloudflare и решение на PHP
Комментарии (23)
Def 26 февраля 2012 в 10:36 0
а как тоже самое проделать с новостями?
Telema93 26 февраля 2012 в 13:35 0
все по аналогии, для того и расписал детально
picaboo 26 февраля 2012 в 10:54 0
а если делать обрезку по количеству символов не в функции,а в самом шаблоне в переменной - не быстрее будет?

{$post.content|truncate:240} - просто по ощущению что легче будет управлять выводом.
Telema93 26 февраля 2012 в 13:35 0
да, об этом я писал здесь, но во-первых, я решил показать другой метод, во-вторых - обработчик смарти немного "тяжелее" будет чистого php
picaboo 26 февраля 2012 в 15:53 0
ага. мерси. я чисто для общего развития уточнил.
GoodMade.ru 28 февраля 2012 в 16:45 0
а если обрежете конец html тега то верстка распадется.
deltas 27 февраля 2012 в 00:28 0
А что если в начале записи есть ссылка, картинка или видео? И обрезка произойдет например в таком месте : ТЕКСТ <a href="... или <img src="pic.jpg... То есть теги не закроются?
Telema93 27 февраля 2012 в 01:29 0
любое форматирование напрочь стирается, картинки и видео тоже
deltas 27 февраля 2012 в 01:47 0
О да, не заметил strip_tags
maia 27 февраля 2012 в 03:24 -1
Надо ж так - вот щас пришла на форум, спросить как это самое сделать )) Спасибо!
maia 27 февраля 2012 в 03:48 -1
Есть проблемка - если в посте первой стоит картинка, то в модуле текст начинается вот так:
Файл "/upload/blogs/e48199785f0f452ffc82208feb97a32a.jpg" не найден!
Решила сегодня...итд
Нельзя ль как то вырезать то, что находится до текста?
maia 27 февраля 2012 в 03:48 -1
А, надо было не так вставить
Код PHP:
[IMG]/upload/blogs/e48199785f0f452ffc82208feb97a32a.jpg[/IMG] Решила сегодня
maia 27 февраля 2012 в 03:49 -1
Блин! В общем, перед текстом стоит в тегах адрес картинки.
Telema93 27 февраля 2012 в 03:58 0
решить можно, но писанины много
maia 27 февраля 2012 в 04:22 -1
Что-то на сайте в модуле текст появился, а в RSS пропал.. Он мне там нужнее - как быть? Вернее, хотелось бы, чтобы он и там и там был.
maia 27 февраля 2012 в 05:20 -1
А не, извиняюсь - с RSS все нормально.
Def 27 февраля 2012 в 22:07 0
а за вывод новостей какй файл отвечает?
GoodMade.ru 28 февраля 2012 в 16:46 0
а я так сделал.

Код PHP:
{$post.content|strip_tags|truncate:330:"...":true}
удаляем html теги и обрезаем.
maia 28 февраля 2012 в 20:33 -1
А можно подробней - это гдейто так сделал?
GoodMade.ru 29 февраля 2012 в 18:57 0
в файле модуля modules/mod_latestblogs/module.php добавьте запрос.
p.content_html as content

добавляете строчку в файле шаблона mod_latestblogs.tpl
{$post.content|strip_tags|truncate:330:"...":true}
Def 28 февраля 2012 в 20:20 0
подскажите как сделать в новостях?
densvi 29 февраля 2012 в 09:27 0
Замечательный хак. Однако, наверное в подавляющем большинстве случаев потребуются следующие моменты доработать:
1) Присоединяюсь к maia. Остаются и видны теги типа
Файл ". Видимо функция strip_tags их не обрабатывает. Нужно ее доделать. 2) Обрезать бы не именно 240 (или сколько там) символов, т.к. обрезается прямо на середине слова, а с учетом окончания слов. 3)А более глобально - хотелось бы и картинку вставлять по принципу статей, т.е. при написании поста указываем картинку для вывода в анонсе. Вот это было бы здорово. Еще раз повторюсь. Хак нужный и полезный, вот только бы немного подкрутить." не найден!
densvi 29 февраля 2012 в 09:28 0
Ух, ну и вставилось. про тег img имел ввиду