» » Большой пост о Block.Pro.3 или как с лёгкостью заменить custom, related-news и topnews в DLE 9.6-10.0 всего одной строкой.

Большой пост о Block.Pro.3 или как с лёгкостью заменить custom, related-news и topnews в DLE 9.6-10.0 всего одной строкой.

3.07
132
32 866
Большой пост о Block.Pro.3 или как с лёгкостью заменить custom, related-news и topnews в DLE 9.6-10.0 всего одной строкой.



Внимание!
Развитие и техподдержка модуля прекращены.
Актуальная версия модуля — BlockPro 4



Сегодня я хочу подробно рассказать вам о модуле Block.Pro.3 и показать немного примеров реализации задуманного функционала.

Для чего нужен модуль

Если кратко – модуль предназначен для пользовательского вывода новостей на сайте под управлением CMS DLE.
Модуль может выводить:
  • стандартный топ новостей (алгоритм такой же как в DLE);
  • топ по комментариям;
  • топ по просмотрам;
  • топ по рейтингу;
  • похожие новости (причём не обязательно в полной новости, но об этом ниже);
  • последние новости;
  • новости в алфавитном порядке;
  • новости в случайном порядке.

Основные преимущества модуля

  • Подключение одной строкой в любой шаблон сайта.
  • Полноценный вывод дополнительных полей.
  • Полноценный вывод похожих новостей без правок движка.
  • Гибкое кеширование каждого блока.
  • Работа с картинками.
  • Фильтры.

Благодаря удобному генератору строк подключения настройка вывода новостей через модуль занимает минимум времени и не требует глубокого изучения документации.

Работа с картинками

Одно из основных преимуществ Block.Pro.3 – гибкая работа с картинками.
У модуля собственный php-класс для работы с изображениями, благодаря которому можно выводить картинки именно так, как это требуется в конкретной ситуации.

Допустим нам нужно вывести картинку, взятую из полной новости, уменьшить её так, чтобы каждая сторона была не более 100px, при этом некоторые картинки у нас лежат на радикале, а для оптимизации изображений качество картинки должно быть 75. Спустя минуту работы с генератором мы имеем вот такую строку подключения:
{include file="engine/modules/blockpro/block.pro.3.php?image=full_story&remoteImages=y&grabRemote=y&imgSize=100&imgQuality=75"}

Разберём её подробнее:
image=full_story – берём картинку из полной новости.
remoteImages=y – разрешаем показывать сторонние картинки (в нашем случаи это радикал)
grabRemote=y – разрешаем тянуть сторонние картинки к себе на сайт
imgSize=100 – устанавливаем размер создаваемой миниатюры
imgQuality=75 – устанавливаем требуемое качество изображений
Опытные пользователи заметят, что не хватает параметра, отвечающего за метод ресайза изображений, которых в модуле аж пять штук – авто (вписывание в рамки), уменьшение по ширине, уменьшение по высоте, точный размер и crop (уменьшение до заданных размеров с обрезкой лишнего).
Он не указан, т.к. вписывание в рамки – это значение по умолчанию.
Теперь достаточно прописать в шаблоне модуля тег
{image}
– для вывода уменьшенной копии, и
{full-image}
– для вывода оригинала.
Все уменьшенные картинки будут загружены в созданную папку uploads/blockpro/100/{год и месяц новости}/ при первом вызове модуля, и после этого будут браться уже готовые картинки из нужных папок. Создание подобной иерархии папок даёт возможность удалять только те картинки, которые не нужны в данный момент, к примеру вы меняете размер изображений в блоке со 100 на 150 и удаляете всю папку uploads/blockpro/100. К тому же при очень большом количестве картинок сервер не будет тупить, как если бы картинки лежали в одной папке.
В случаи, если вдруг в полной новости не окажется картинки – будет подставлена заглушка, которую так же можно легко настроить. Достаточно прописать переменные:
noimage=small.jpg – для маленькой заглушки (вместо уменьшенной копии изображения)
noimageFull=big.png – для большой заглушки (вместо оригинальной картинки)
При этом указанные изображения должны лежать в папке /blockpro/ текущего шаблона сайта.

А вот такая строка:
{include file="engine/modules/blockpro/block.pro.3.php?&image=image&remoteImages=y&showSmall=y"}

Будет выводить картинки из дополнительного поля с именем image при этом будут выводиться уменьшенные копии, если в допполе вписывается конструкция типа
[thumb]image.jpg[/thumb]
, а так же будут показываться картинки со сторонних сайтов.

Ну и на последок ещё один пример с картинками:
{include file="engine/modules/blockpro/block.pro.3.php?&cacheLive=1440&limit=5&catId=1,2,3&sort=date&remoteImages=y&grabRemote=y&imgSize=250x150&imgQuality=80&resizeType=crop&titleLimit=50&textLimit=140"}

Пять последних новостей из категорий 1,2,3 с картинкой из краткой новости, уменьшенной по меньшей стороне и обрезанной по большей до размера 250x150px, качества 80% не зависимо от расположения картинки (радикал тоже подтянется на сайт), с обрезанным до 50 символов, заголовком и до 140 символов текстом новости, кеш блока будет обновляться не чаще одного раза в сутки.
При этом в модуле есть защита от кривых рук админа, когда он не склеивает домены с www и без www, картинки всё равно будут отображаться правильно (в предыдущих версиях модуля на одном из сайтов выводились заглушки).

С картинками разобрались, идём дальше…

Похожие новости

Возможность вывода похожих новостей в любом месте сайта – не менее значимая возможность модуля.
Приведу простой пример того, как можно заменить вывод стандартных похожих новостей.
Простая строка подключения, расположенная в fullstory.tpl:
{include file="engine/modules/blockpro/block.pro.3.php?&template=blockpro/relates8&cacheLive=7200&limit=8&sort=none&titleLimit=30&textLimit=150&related=this"}

Выведет нам блок с 8-ю новостями, похожими на просматриваемую в данный момент, блок будет обновляться не чаще чем раз в пять дней, для вывода будет использован шаблон {ТЕКУЩИЙ_ШАБЛОН}/blockpro/related8.tpl (его конечно же необходимо предварительно создать).
sort=none - обязательная переменная для того, что бы полностью повторить функционал стандартных похожих новостей
А вот самое интересное начинается в шаблоне:
<div class="related-item">
    <a href="{full-link}" title="{full-title}">Большой пост о Block.Pro.3 или как с лёгкостью заменить custom, related-news и topnews в DLE 9.6-10.0 всего одной строкой. [comments]({comments-num})[/comments]</a>
    {category-icon} <span>{date="d.m.Y"}</span> | <span>{short-story}</span>
</div>

Помимо заголовка и текста новости, обрезанных до заданного количества символов (до логического завершения слова) в похожих новостях будет выведено количество комментариев, иконка, или иконки категорий и дата новости, стандартные похожие новости этого пока не умеют. И всё это без каких либо правок движка.

А теперь усложним задачу, и выведем на главной странице блок из трёх новостей, у каждой из которых будет свой блок похожих новостей, примерно как на картинке.

Большой пост о Block.Pro.3 или как с лёгкостью заменить custom, related-news и topnews в DLE 9.6-10.0 всего одной строкой.


Первая строка подключения выведет три основных новости:
{include file="engine/modules/blockpro/block.pro.3.php?&template=advanced&limit=3&sort=date"}

А в шаблоне {ТЕКУЩИЙ_ШАБЛОН}/advanced.tpl прописываем ещё одну строку подключения:
{include file="engine/modules/blockpro/block.pro.3.php?&template= blockpro/relatedmain &cacheLive=7200&limit=3&sort=none &related={news-id}"}

Таким образом переменная: related={news-id} будет принимать значение id новости, а уже по этому id ищутся похожие новости и выводятся отдельным шаблоном {ТЕКУЩИЙ_ШАБЛОН}/blockpro/relatedmain.tpl.

Идём дальше…

Фильтры

Фильтры – основной способ сократить выборку новостей до интересующего диапазона. Block.Pro.3 имеет следующие фильтры:
  • по авторам
  • по категориям
  • по id новостей
  • по дополнительным полям (заполнено/не заполнено)

Все фильтры могут принимать множественные свойства, перечисляемые через запятую. Могут исключать из вывода указанные значения, а так же могут сочетаться исключающие и разрешающие фильтры.

Самый простой пример практического применения фильтров – вывод новостей пользователя при просмотре его профиля. Расположим вот такую строку в файле userinfo.tpl:
{include file="engine/modules/blockpro/block.pro.3.php?&author=this&day=15"}

И выведутся топ 10 новостей за последние 15 дней того пользователя, чей профиль мы в данный момент просматриваем. При этом для каждого просмотренного профиля пользователя будет создан свой кеш-файл, что значительно снижает нагрузку на хостинг, а если указать время жизни кеша – так и вообще сводит её к минимуму.

Рассмотрим пример по сложнее.
Допустим нам необходимо дать возможность модератору самостоятельно регулировать вывод конкретных новостей в блок «Выбор редакции» на сайте, при этом ему запрещен доступ к правке шаблона, но имеется доступ к управлению рекламными материалами. Всё очень просто: создадим баннер с произвольным именем, например newsid и в контент баннера напишем: 1-6,8-15,22-30, а в строке подключения пропишем так:
{include file="engine/modules/blockpro/block.pro.3.php?postId={banner_newsid}"}
таким образом в блоке будет выведен топ 10 новостей, имеющих id с 1 по 6, с 8 по 15 и с 22 по 30 включительно. При этом модератор спокойно может управлять содержимым блока.

Ещё один пример
Требуется вывести самые просматриваемые новости за прошлую неделю. Нет проблем!
{include file="engine/modules/blockpro/block.pro.3.php?cacheLive=10080&day=14&dayCount=7&sort=views&showSmall=y"}

где cacheLive=10080 - время кеширования блока равное одной неделе (60мин*24ч*7д).

И на последок сложный пример:
{include file="engine/modules/blockpro/block.pro.3.php?cacheLive=60&limit=5&catId=14,15&notPostId=1,5&notAuthor=admin,user&sort=random&avatar=y"}

в блоке будут показаны 5 случайных новостей с аватарками авторов, находящихся в категориях 14 и 15, при этом новости авторов admin и user, а так же новости с id 1 и 5 не будут выводиться в блоке. Кеш блока будет обновляться не чаще, чем раз в час.

В заключение

Если вы всё же не можете определиться использовать стандартные средства DLE или модуль, для вас есть специальная таблица сравнения функционала custom и Block.Pro.3.

Большой пост о Block.Pro.3 или как с лёгкостью заменить custom, related-news и topnews в DLE 9.6-10.0 всего одной строкой.


В статье рассмотрены далеко не все возможности модуля, а лишь те, что явно выделяют модуль среди других подобных и отличают его от custom, topnews и related-news. Наиболее полная документация по Block.Pro.3 и удобный генератор строк подключения представлена на официальном сайте модуля.

Похожие материалы

Комментарии

Korobasow
Korobasow 4 июля 2013 18:08
Спасибо Павел!

fellow
ПафНутиЙ
ПафНутиЙ 4 июля 2013 20:53
На здоровье! )
MAPKOBKA
MAPKOBKA 5 июля 2013 15:31
ПафНутиЙ,
Добавьте в Ваш BlockPro, сортировку по Вашему хаку Индекс новости. Возможности применение и того и другого серьезно вырастут. winked
Можно будет создавать произвольные блоки новостей, отсортированные по индексу. (например, скрыть или показать рекламные статьи с определенным индексом.)
Да и много еще чего можно нафантазировать
MAPKOBKA
MAPKOBKA 5 июля 2013 15:32
Уже не в первый раз конючу :)
ПафНутиЙ
ПафНутиЙ 5 июля 2013 16:06
Ок, вечером добавлю, если не забуду)
Aper
Aper 8 июля 2013 03:59
Спасибо за ваш труд Павел,
Вопрос у меня связан с картинками, у меня в шаблоне вот такая конструкция для показа картинок: <img src="[xfgiven_img1][xfvalue_img1][/xfgiven_img1][xfgiven_img2]хттп://сервер/ид=[xfvalue_img2][/xfgiven_img2]" />, в админке ставлю либо имг1 либо имг2. Можете сделать так чтобы было возможно указать несколько доп. поля в строке ?

Можно ли использовать теги [едит][/едит] в шаблоне ?

Спасибо
ПафНутиЙ
ПафНутиЙ 8 июля 2013 09:52
несколько допполей можно сейчас указывать только при фильтрации по допполям. Картинка может браться только из одного допполя.
Тег edit использовать нельзя т.к. блоки кешируются без учёта прав доступа пользователей.
sanyaray
sanyaray 9 июля 2013 03:27
Спасибо,а как вам идейка сделать слайдер в модуле? Тоесть чтобы через n-ое кол-во секунд менялось содержимое?
ПафНутиЙ
ПафНутиЙ 9 июля 2013 09:45
Это не относится к модулю. Можно взять любой слайдер и натянуть вёрстку на шаблон модуля.
Skyter
Skyter 9 июля 2013 15:23
Здравствуйте, Павел. Можно ли создать собственный алгоритм сортировки через дополнительное поле по дате выхода, в формате "число и месяц"?
ПафНутиЙ
ПафНутиЙ 9 июля 2013 15:38
По значению допполя сортировать пока нельзя. Точнее можно сделать, но это сложно и я не вижу пока простого решения.
Возможно проще завести отдельный параметр - дата выхода (хак), тогда можно реализовать сортировку на уровне стандартных средств DLE, а в blockpro можно добавить сортировку по любому полю из таблицы _posts или _posts_extras в течении 10 минут.
YULYS
YULYS 17 июля 2013 13:30
Я обновил движок до 10 и теперь картинки не обрезает , а делает простые черные квадраты по размерам! Может подскажете, что это за хрень?
ПафНутиЙ
ПафНутиЙ 17 июля 2013 22:33
Понятия не имею.
daez474
daez474 18 июля 2013 21:19
Здравствуйте,как в блоке можно вывести картинка в 2 колонки?
ПафНутиЙ
ПафНутиЙ 18 июля 2013 21:27
с помощью стиля float:left;
daez474
daez474 18 июля 2013 21:34
Я прописал float:left; они выводятся в 2 колонки но одна колонка выше другой=(((
daez474
daez474 18 июля 2013 21:43
Все разобрался=) глупая ошибка в шаблоне файла после вывода картинки было прописано <br>=)
fox1q
fox1q 30 июля 2013 06:25
Здравствуйте! Случайно наткнулся на ваш сайт, хотелось бы узнать, можно ли как нибудь сделать вывод доп. поля с одной новости в другой нужной? Поясню: хочу сделать несколько категорий для игрового сайта, к примеру: локации, монстры, предметы. И в каждой категории эти новости будут пересекаться, то есть в каждой новости к монстрам нужно будет строить таблицу со списком предметов которые с них падают и выводить шанс выпадения с др. новости, и наоборот. В каждой локации строить списки монстров и т.п. Вообщем нужно как-нибудь реализовать как бы сборку таблиц из готовых "модулей-новостей". Возможно ли это?
На одном сайте наткнулся на подобную реализацию с помощью отдельных sql таблиц, но там другая CMS стояла, к сожалению не нашел информации о подключении дополнительных таблиц в DLE.
ПафНутиЙ
ПафНутиЙ 30 июля 2013 09:12
Нет, стандартными средствами такое не сделать, нужно писать отдельный модуль.
77jj77
77jj77 7 августа 2013 00:25
уважаемый панфутий скажите пожалуиста как мле узнать номер картинки используемой в краткой новости.нодо вот такой тег добавить {image-short="номер картинки"} в краткой новости использую одну картинку
ceroz
ceroz 10 августа 2013 16:19
поддерживаю
ПафНутиЙ
ПафНутиЙ 10 августа 2013 17:49
Модуль автоматически выводит только первую картинку.
grigorys
grigorys 18 августа 2013 13:14
Спасибо за модуль, а можно ли кропать изображения для краткой новости? Или модуль служит только для вывода в main.tpl?
ПафНутиЙ
ПафНутиЙ 18 августа 2013 15:31
модуль можно выводить в любой шаблон, но для уменьшения только картинок он вряд ли подойдёт.
login_xxx
login_xxx 21 августа 2013 22:10
Здравствуйте!!! ПафНутиЙ не подскажите ли Вы, как можно сделать автоматическую смену новостей на главной из данного раздела... Вот никак не могу разобраться для этого нужен модуль или что?? Подскажите пожалуйста! код на главной выглядит так
<div class="sideblock"><div class="sideheader">
{custom category="12" template="custom-7" aviable="global" from="0" limit="1" cache="yes" order="date"}<div class="clear"></div></div>

Заранее благодарен!!!
ПафНутиЙ
ПафНутиЙ 21 августа 2013 23:23
т.е. вы хотите вывести новости в случайном порядке?
login_xxx
login_xxx 22 августа 2013 11:27
нет хотелось бы что бы новости из раздела менялись и выводились автоматически на главную допустим через 30мин или 2 часа.
login_xxx
login_xxx 22 августа 2013 11:29
чтобы на главной новость постоянно менялась выводилась другая новость из данного раздела! Вот так как-то!!
ПафНутиЙ
ПафНутиЙ 22 августа 2013 12:00
И чем это отличается от рандомного вывода новостей?
login_xxx
login_xxx 22 августа 2013 16:20
аагга а как указать-то? в aviable ?? или как??

Добавить комментарий

Комментировать могут только зарегистрированные пользователи

Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.