» » Блок случайных новостей (by ПафНутиЙ)

Блок случайных новостей (by ПафНутиЙ)

15.05
71
28 081
Блок случайных новостей (by ПафНутиЙ)


С разрешения автора представляю вашему вниманию свою модификацию бесплатной версии модуля Блок случайных новостей написанного Андреем (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'];



Рекомендую скачать обновлённый архив.

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



P.S.
Если вы не знаете какие изменения вносили в скрипт, а какие нет, поможет утилита для сравнения текстовых фрагментов (diff).

Работу модуля можно видеть чуть ниже, я заменил модулем вывод случайных материалов (в портфолио - случайных работ) и в правой колонке сайта Новые материалы так же выводятся этим модулем.

Жду предложений и замечаний.

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

Комментарии

ravchik
ravchik 22 августа 2011 19:33
Здравствуйте. На счет вывода даты публикации:
Цитата: ПафНутиЙ
Собственно, всё. Проверил - дата показывается, осталось только разобраться как настраивать сам показ даты, т.к. она показывается полностью до секунд.

Не разобрались еще? Функция date("d:m:y") , например, не работает...
ПафНутиЙ
ПафНутиЙ 22 августа 2011 23:29
перед
///---Варианты вывода блока ------

вставляем:
$news_date = strtotime( $row['date'] );

далее после
'.$newspref.'

вставляем
'.date('d-m-Y',$news_date).'
в нескольки местах
ravchik
ravchik 23 августа 2011 07:13
Спасибо большое, всё работает!
bork
bork 26 августа 2011 06:51
ПафНутиЙ, спасибо за хак.
На 9.2 столкнулся с проблемой.
Версия 1.4. не выводит картинки.
Заменил кусок кода вывода картинок из первой версии и всё заработало.

Оставить так или это не лучший вариант. т.к. 1.4. реально стало по шустрее работать?

Ещё поймал баг
Если выводить по дате. то выводятся новости, дата публикации которых не наступила. Похожий баг и его решение я видел на оф. сайте модуля DLE News Slider

Да, и ещё. Видео не выводит.
реально видео вывести?

ПафНутиЙ , дружище, куда пропал? Очень жду ответа.
kol4erukij
kol4erukij 3 декабря 2011 17:53
ПафНутиЙ, у меня вот какая проблема.
Есть сайт на Денвере. Поставил туда модуль v.1.4, вывожу по 10 новостей в случайном порядке. Так вот, если картинки залиты на сайт, то страницы грузятся мгновенно, а если на любой картинкохостинг, то секунд 5. Как будто кеширование для этого случая не работает. Может дело в том, что сайт на Денвере, или картинки на хостинге...Х.З.
P.S.: DLE стоит 9.4, но тоже было и на 9.2 и 9.3. Порядок сортировки новостей менял - быстрее не становится.
ПафНутиЙ
ПафНутиЙ 3 декабря 2011 19:40
во первых модуль уже устаревший, актуальная версия - Block.Pro (но вообще советую подождать версию Block.Pro 2). Dj вторых скорее всего комп просто дохленький у вас или канал. Ведь картинку с удалённого сайта надо сначала скачать, а потом только обрезать )) отсюда и тормоза.
kol4erukij
kol4erukij 3 декабря 2011 21:27
Цитата: ПафНутиЙ
...картинку с удалённого сайта надо сначала скачать, а потом только обрезать )) отсюда и тормоза.

Это верно, но тогда выходит, что кэширование не работает, если картинка на другом сайте, поскольку комп и канал отметаю.
Спасибо, будем юзать Block.Pro v.1.1

popopa
popopa 21 января 2014 05:31
10.1 не работает
SlavchikRU
SlavchikRU 21 января 2014 08:11
а что, должен? feel
popopa
popopa 27 января 2014 03:13
http://i.shotnes.com/a/27/gl1lm2o0.oqu_52e596ab4b05a.png
ПафНутиЙ
ПафНутиЙ 28 января 2014 08:38
http://blockpro.ru/

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

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

Информация

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