Блок случайных новостей (by ПафНутиЙ)
15.05
71
29 539
С разрешения автора представляю вашему вниманию свою модификацию бесплатной версии модуля Блок случайных новостей написанного Андреем (aka kand).
Это моя первая работа в области php и сразу хочу предупредить народ - я не программист, с php практически не дружу, а с синтаксисом вообще проблемы, дорабатывал модуль для себя и поэтому код модуля может быть не совсем корректен в плане оптимизации, или может содержать ошибки о которых я впринципе знать не могу. Отсюда просьба не закидывать камнями, а лучше помочь словом, и адекватно оценить проделанную работу, и возможно помочь словом и делом, хотя бы по той причине, что я не присваиваю себе авторство модуля, а честно спросил разрешения у автора, за что ему отдельное спасибо.
Назначение: Вывод в любом месте сайта неограниченного количества блоков с заданным количеством новостей, с возможностью гибкой настройки вида для каждого блока в отдельности.
Версия DLE: 8.2 и выше (тестировалось на 8.5)
А теперь о бо всём более подробно.
1. Возможности:
- Простота установки и настройки модуля. Модуль не требует установки, нужно просто залить php-файл в папку engine/modules и прописать в любом tpl, в нужном месте одну строчку для подключения модуля.
- Неограниченное количество выводимых блоков с новостями.
- Возможность настройки вывода новостей для каждого блока отдельно (производятся в строке подключения модуля непосредственно в шаблоне).
- Настройка вида блока полностью в CSS, причём для каждого блока можно задать свой класс и html-тег в который будет заключаться как блок целиком, так и каждая новость в отдельности.
- Кеширование каждого подключаемого блока отдельно.
2. Настройки (каждый блок можно настроить отдельно).
- Настройка количества выводимых новостей.
- Настройка максимальной длинны заголовка новости.
- Настройка максимальной длинны краткого содержания.
- Включение и отключение вывода краткого содержания.
- Настройка размера картинки (берётся из короткой новости)
- Включение и отключение вывода картинки из короткой новости. (если картинка в новости отсутствует - выводится заглушка)
- 4 варианта порядка сортировки новостей (случайно, по дате, самые комментируемые, самые часто просматриваемые)
- Возможность задать исключаемые из показа категории.
- Возможность задать показ только определённых категорий. (по умолчанию выводятся все категории)
- Возможность задать html-тег, в который будет заключаться блок с новостями и html-тег, в который будет заключаться сама новость.
- Возможность задать или отключить префикс перед заголовком.
- Возможность задать класс для блока с новостями.
Обновление от 18.05.2010
Немного обновим модуль, добавим вывод только заголовка и картинки, без краткого содержания, для этого найдём (строки 123-149):
///---Варианты вывода блока ------
$noimage_block .= '
<'.$newswrap.'>
<b>'.$newspref.' <a href="'.$full_link.'" title="'.$ttl.'">'.$title_short.'</a></b> '.$comm_n.'<br />
'.$s_story.'</'.$newswrap.'>';
$titleonly_block .= '
<'.$newswrap.'>
<b>'.$newspref.' <a href="'.$full_link.'" title="'.$ttl.'">'.$title_short.'</a></b> '.$comm_n.' </'.$newswrap.'>';
$image_block .= '
<'.$newswrap.'>
<div style="margin-bottom: 5px;"><b>'.$newspref.' <a href="'.$full_link.'" title="'.$ttl.'">'.$title_short.'</a></b> '.$comm_n.'</div>
<div style="padding-right: 3px; padding-bottom: 3px; float: left; width:'.$img_maxsize.'; height:'.$img_maxsize.';">'.$img_code.'</div>
<div style="margin-top: -3px;">'.$s_story.'</div><div style="clear: both; height:0;"></div></'.$newswrap.'>';
if ($titleonly == '0') {
$r_news = $noimage_block; }
if ($titleonly == '1') {
$r_news = $titleonly_block; }
if ($titleonly == '2') {
$r_news = $image_block; }
};
$r_news_block = '<'.$boxwrap.' class="'.$boxclass.'">'.$r_news.'</'.$boxwrap.'>';
$db->free();
create_cache( "r_news_block". $block_num, $r_news_block);
}
///---вывод блока ------
и заменим на:
///---Варианты вывода блока ------
$noimage_block .= '
<'.$newswrap.'>
<b>'.$newspref.' <a href="'.$full_link.'" title="'.$ttl.'">'.$title_short.'</a></b> '.$comm_n.'<br />
'.$s_story.'</'.$newswrap.'>';
$titleonly_block .= '
<'.$newswrap.'>
<b>'.$newspref.' <a href="'.$full_link.'" title="'.$ttl.'">'.$title_short.'</a></b> '.$comm_n.' </'.$newswrap.'>';
$image_block .= '
<'.$newswrap.'>
<div style="margin-bottom: 5px;"><b>'.$newspref.' <a href="'.$full_link.'" title="'.$ttl.'">'.$title_short.'</a></b> '.$comm_n.'</div>
<div style="padding-right: 3px; padding-bottom: 3px; float: left; width:'.$img_maxsize.'; height:'.$img_maxsize.';">'.$img_code.'</div>
<div style="margin-top: -3px;">'.$s_story.'</div><div style="clear: both; height:0;"></div></'.$newswrap.'>';
$image_block_s .= '
<'.$newswrap.'>
<div style="margin-bottom: 5px;"><b>'.$newspref.' <a href="'.$full_link.'" title="'.$ttl.'">'.$title_short.'</a></b> '.$comm_n.'</div>
<div style="width:'.$img_maxsize.'; height:'.$img_maxsize.';">'.$img_code.'</div>';
if ($titleonly == '0') {
$r_news = $noimage_block; }
if ($titleonly == '1') {
$r_news = $titleonly_block; }
if ($titleonly == '2') {
$r_news = $image_block; }
if ($titleonly == '3') {
$r_news = $image_block_s; }
};
$r_news_block = '<'.$boxwrap.' class="'.$boxclass.'">'.$r_news.'</'.$boxwrap.'>';
$db->free();
create_cache( "r_news_block". $block_num, $r_news_block);
}
///---вывод блока ------
И по желанию в конец строки 33 допишем
3 - только заголовок и картинка
Всё. Теперь если в строке подключения модуля дописать titleonly=3, будет выводиться только заголовок и картинка.
Обновление от 20.05.2010
Найден небольшой, но не очень приятный баг:
когда вносил последние изменения, в строку 140, в конец не дописал закрывающий тег для новости.
Исправляем:
<div style="width:'.$img_maxsize.'; height:'.$img_maxsize.';">'.$img_code.'</div>';
на
<div style="width:'.$img_maxsize.'; height:'.$img_maxsize.';">'.$img_code.'</div></'.$newswrap.'>';
Обновление от 08.06.2010
Устранена ошибка при переходе в полную новость по нажатию на картинку, если в строке подключения задан её вывод.
Для исправления нужно перенести строку:
$full_link = $config['http_home_url'].get_url($row['category'])."/".$row['id']."-".$row['alt_name'].".html"; //--ссылка на новость --
ПЕРЕД
//-----Обработка картинок --->
preg_match('|<img(.*) src="([^"]*)"[^>]*>|is', $row['short_story'], $ps);
Обновление от 06.07.2010
Сегодня был обнаружен интересный баг - если в короткой новости присутствовало видео, то вместо картинки в блок выводилась ссылка на видео из новости.
Так же поправлен вывод картинки , теперь берётся самая первая картинка из короткого содержания.
Для обновления нужно найти строки:
//-----Обработка картинок --->
preg_match('|<img(.*) src="([^"]*)"[^>]*>|is', $row['short_story'], $ps);
if($ps[2])
{
$img_parts = pathinfo($ps[2]);
$img_link = $img_parts['dirname'].'/'.$img_parts['basename'];
и заменить на:
//-----Обработка картинок --->
$count_img = preg_match_all('%(((http://www)|(http://)|(www))[-a-zA-Z0-9@:%_+.~#?&//=]+).(jpg|jpeg|gif|png|bmp|tiff|tga|svg)%i', $row['short_story'], $img_match);
if ($count_img > 0){
$img_parts = pathinfo($img_match[0][0]);
$img_link = $img_parts['dirname'].'/'.$img_parts['basename'];
Рекомендую скачать обновлённый архив.
Все настройки, строка подключения, а так же используемый по умолчанию стиль для отображения блока находятся в файле модуля, и достаточно хорошо прокомментированы, что значительно облегчит работу с модулем.
Скачать Модуль Блок случайных новостей (by ПафНутиЙ)
С кешированием блоков (обновлено 06.07.2010):
P.S.
Если вы не знаете какие изменения вносили в скрипт, а какие нет, поможет утилита для сравнения текстовых фрагментов (diff).
Работу модуля можно видеть чуть ниже, я заменил модулем вывод случайных материалов (в портфолио - случайных работ) и в правой колонке сайта Новые материалы так же выводятся этим модулем.
Жду предложений и замечаний.
Комментарии
Добавить комментарий
Комментировать могут только зарегистрированные пользователи