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

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

Иллюстрация

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

Находим строки подсоединения к базе данных:
  1.  
  2. $sql = "SELECT p.title as title,
  3. p.id as id,
  4. p.seolink as seolink,
  5. b.title as blog,
  6. b.owner as owner,
  7. b.id as blog_id,
  8. b.seolink as bloglink,
  9. p.pubdate as fpubdate,
  10. b.user_id as uid,
  11. IFNULL(r.total_rating, 0) as rating,
  12. b.ownertype as ownertype,
  13. u.id as author_id,
  14. u.nickname as author,
  15. up.imageurl as author_image,
  16. u.is_deleted as author_deleted
  17. FROM cms_blog_posts p
  18. LEFT JOIN cms_blogs b ON b.id = p.blog_id
  19. LEFT JOIN cms_users u ON u.id = p.user_id
  20. LEFT JOIN cms_user_profiles up ON up.user_id = p.user_id
  21. LEFT JOIN cms_ratings_total r ON r.item_id=p.id AND r.target='blogpost'
  22. WHERE p.published = 1 AND b.allow_who = 'all'
  23. ORDER BY p.id DESC
  24. LIMIT 30";
  25.  
Добавляем после
  1. p.title as title
Следующее:
  1. p.content as content,
то есть в базе данных в таблице cms_blog_posts находим колонку content и берем оттуда данные

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

Смарти переменная готова. она будет иметь вид {$posts.content}, которая была унаследована этим — $posts[] = $con; (произошла передача массива)
В файле /templates/ШАБЛОН/modules/mod_latestblogs.tpl вставляем нашу переменную смарти в нужное место, в нашем случае после заголовка. Находим:
  1.  
  2. <a class="mod_latest_blog_title" href="{$post.href}">{$post.title}</a>
  3.  
После него сразу вставляем:
  1.  
  2. <div >{$post.content}</div>
  3.  
Хак готов.
Многие спросят для чего была такая детализация?
Отвечу: многие понятия не имеют, что они делают в хаке, данным постом я хоть немного просвещу людей. Понимание того, что делаешь уменьшает вероятность ошибки.
0
Def Def 9 лет назад #
а как тоже самое проделать с новостями?
0
Telema93 Telema93 9 лет назад #
все по аналогии, для того и расписал детально
0
picaboo picaboo 9 лет назад #
а если делать обрезку по количеству символов не в функции,а в самом шаблоне в переменной - не быстрее будет?

{$post.content|truncate:240} - просто по ощущению что легче будет управлять выводом.
0
Telema93 Telema93 9 лет назад #
да, об этом я писал здесь, но во-первых, я решил показать другой метод, во-вторых - обработчик смарти немного "тяжелее" будет чистого php
0
picaboo picaboo 9 лет назад #
ага. мерси. я чисто для общего развития уточнил.
0
Денис Васильевич Денис Васильевич 9 лет назад #
а если обрежете конец html тега то верстка распадется.
0
deltas deltas 9 лет назад #
А что если в начале записи есть ссылка, картинка или видео? И обрезка произойдет например в таком месте : ТЕКСТ <a href="... или <img src="pic.jpg... То есть теги не закроются?
0
Telema93 Telema93 9 лет назад #
любое форматирование напрочь стирается, картинки и видео тоже
0
deltas deltas 9 лет назад #
О да, не заметил strip_tags
-1
maia maia 9 лет назад #
Надо ж так - вот щас пришла на форум, спросить как это самое сделать )) Спасибо!
-1
maia maia 9 лет назад #
Есть проблемка - если в посте первой стоит картинка, то в модуле текст начинается вот так:
Файл "/upload/blogs/e48199785f0f452ffc82208feb97a32a.jpg" не найден!
Решила сегодня...итд
Нельзя ль как то вырезать то, что находится до текста?
-1
maia maia 9 лет назад #
А, надо было не так вставить
Код PHP:
[IMG]/upload/blogs/e48199785f0f452ffc82208feb97a32a.jpg[/IMG] Решила сегодня
-1
maia maia 9 лет назад #
Блин! В общем, перед текстом стоит в тегах адрес картинки.
0
Telema93 Telema93 9 лет назад #
решить можно, но писанины много
-1
maia maia 9 лет назад #
Что-то на сайте в модуле текст появился, а в RSS пропал.. Он мне там нужнее - как быть? Вернее, хотелось бы, чтобы он и там и там был.
-1
maia maia 9 лет назад #
А не, извиняюсь - с RSS все нормально.
0
Def Def 9 лет назад #
а за вывод новостей какй файл отвечает?
0
Денис Васильевич Денис Васильевич 9 лет назад #
а я так сделал.

Код PHP:
{$post.content|strip_tags|truncate:330:"...":true}
удаляем html теги и обрезаем.
-1
maia maia 9 лет назад #
А можно подробней - это гдейто так сделал?
0
Денис Васильевич Денис Васильевич 9 лет назад #
в файле модуля modules/mod_latestblogs/module.php добавьте запрос.
p.content_html as content

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

Еще от автора

[Хак] ICQ чат на сайте
Помнится, был раньше такой мессенджер Multul (http://instantcms.ru/blogs/tanatognozija/plagin-mesedzher.html), который скончался.
IP Cloudflare и решение на PHP
Нашел другие файлы, где заменить также!!! Извиняюсь, не досмотрел... Есть такой замечательный CDN сервис - Cloudflare.
Хак: sip звонки пользователям сайта (сторонний сервис)
У многих соцсетей появляются звонки прямо с сайта. Здесь я предлагаю не совсем полноценный сервис звонков по sip/voip телефонии.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.