Потребовалось немного изменить модуль topnews - нужно чтобы помимо названия новости еще отображалась маленькая картинка и краткое описание новости.
Порывшись в интернете, нашел два варианта решения данной задачи:
1. Купить платный модуль с кучей настроек
2. ХАК "thumbs в topnews" от
prime. В этом хаке изображения кладутся в папку
/uploads/topnews/Поэтому подумав, решил написать свой хак.
Для хранения урла изображения с превьювом будем использовать дополнительное поле новости (xfields). Такой способ удобен тем, что создавая новость, можно загрузить изображение, уменьшив его до определенного размера, средствами движка, а потом адрес этой картинки просто скопировать в дополнительное поле внизу формы добавления новости.
Поэтому создаем дополнительное поле:
Название поля = k_foto_pre
Описание поля = Изображение краткой новости
Категории = по выбору (я выбирал все)
Тип поля = одна строка
Значение по умолчанию = пусто (но можно указать url изображения которое будет отображаться по-умолчанию)
Использовать при желании = да (чтобы можно было не заполнять поле)
Теперь заменяем файл
/engine/modules/topnews.php на вот такой:
<?php
/*
=====================================================
DataLife Engine - by SoftNews Media Group
-----------------------------------------------------
http://dle-news.ru/
-----------------------------------------------------
Copyright (c) 2004,2009 SoftNews Media Group
=====================================================
Данный код защищен авторскими правами
=====================================================
Файл: topnews.php
-----------------------------------------------------
Назначение: вывод рейтинговых статей с картирнкой,
хранящейся в дополнительных полях новости
----------------------------------------------------
ХАК by dimon
http://tudimon.com/
=====================================================
*/
if( ! defined( 'DATALIFEENGINE' ) ) {
die( "Hacking attempt!" );
}
// ====================================================
// дополнительные параметны вывода top-новостей
$w = "100"; // ширина картинок
$wt = "99%"; // ширина таблицы topnews
$lim = "10"; // кол-во выводимых новостей
$xf = "k_foto_pre"; // название дополнительного поля в котором хранится адрес картинки
$ls = "150"; // кол-во символов в описании ( до стольких обрезаем)
$noimg = "/uploads/noprev.jpg"; // этот файл отображаем если не заполнено поле в новости с url-ом картинки
// ====================================================
$topnews = dle_cache( "topnews", $config['skin'] );
if( ! $topnews ) {
$topnews .= '<table width="'.$wt.'" border="0">';
$this_month = date( 'Y-m-d H:i:s', $_TIME );
$db->query( "SELECT id, title, date, alt_name, category,_
short_story, xfields, flag FROM " . PREFIX . "_post WHERE_
approve='1' AND date >= '$this_month' - INTERVAL 1 MONTH AND_
date < '$this_month' ORDER BY rating DESC, comm_num DESC,_
news_read DESC, date DESC LIMIT 0, $lim" );
while ( $row = $db->get_row() ) {
$row['date'] = strtotime( $row['date'] );
$row['category'] = intval( $row['category'] );
if( $config['allow_alt_url'] == "yes" ) {
if( $row['flag'] and $config['seo_type'] ) {
if( $row['category'] and $config['seo_type'] == 2 ) {
$full_link = $config['http_home_url'] . get_url( $row['category'] ) . "/" . $row['id'] . "-" . $row['alt_name'] . ".html";
} else {
$full_link = $config['http_home_url'] . $row['id'] . "-" . $row['alt_name'] . ".html";
}
} else {
$full_link = $config['http_home_url'] . date( 'Y/m/d/', $row['date'] ) . $row['alt_name'] . ".html";
}
} else {
$full_link = $config['http_home_url'] . "index.php?newsid=" . $row['id'];
}
if( strlen( $row['title'] ) > 55 ) $title = substr( $row['title'], 0, 55 ) . " ...";
else $title = $row['title'];
$go_page = ($config['ajax']) ? "onclick=\"DlePage('newsid=" . $row['id'] . "'); return false;\" " : "";
if( $config['allow_comments_wysiwyg'] == "yes" ) $go_page = '';
$link = "<a {$go_page}href=\"" . $full_link . "\">далее</a>";
// очистим короткую новость от каментов, картинок, ..
$row['short_story'] = preg_replace("/\[attachment=[[:digit:]]*\]/si","",stripslashes($row['short_story']));
$row['short_story'] = preg_replace("/<!--*-->/si","",$row['short_story']);
$row['short_story'] = strip_tags($row['short_story']);
// сделаем массив с xfields-ами
$xfieldsdata = xfieldsdataload( $row['xfields'] );
// проверим, что поле с адресом картиник заполнено. если не заполнено, то отобразим $noimg
if($xfieldsdata[$xf]<>"") $preview = $xfieldsdata[$xf];
else $preview = $noimg;
// укоротим короткую новость до $ls символов
if( strlen( $row['short_story'] ) > $ls ) $row['short_story'] =_
substr( $row['short_story'], 0,$ls ) . " ... <br/><br/><div align=\"right\">$link</div>";
//сформируем тег {topnews}
$topnews .= '
<tr>
<td widht="'.$w.'" valign="top"><img style="border: medium none;"_
src="'.$preview.'" width="'.$w.'"></td>
<td style="padding-left: 4px;"><strong><a href="'.$full_link.'"_
title="'.stripslashes( $row['title']).'">'.stripslashes( $row['title']).'</a></strong><br>
'.stripslashes($row['short_story']).'</td>
</tr>
<tr>
<td class="news" valign="top" colspan="2"><div class="hr_line"></div></td>
</tr>
';
}
$topnews .= '</table>';
$db->free();
create_cache( "topnews", $topnews, $config['skin'] );
}
?>
Дополнительные параметры настройки этого модуля записаны прямо в файле
topnews.php, если необходимо – отредактируйте их в соответствии со своим вкусом.
В приложенном файле – архив со всеми файлами.
Тестировал на DLE 8.2, но думаю что с другими версиями проблем не будет.
Я тут подумал - можно в дополнительном поле хранить адрес уменьшиной картинки из новости, и выводить картинку с тегом thumb. Как изменить код файлы Вы догадаетесь сами?
Кстати если требуется
выводить новости только из одной категории, то нужно просто подправить запрос, добавив в него фильтр категории.
Например будем выводить новости только из 666 категории:
$db->query( "SELECT id, title, date, alt_name, category,_
short_story, xfields, flag FROM " . PREFIX . "_post WHERE category='666'_
AND approve='1' AND date >= '$this_month' - INTERVAL 1 MONTH AND_
date < '$this_month' ORDER BY rating DESC, comm_num DESC,_
news_read DESC, date DESC LIMIT 0, $lim" );
В версии DLE 9.4 модуль популярных новостей полностью переведен на использование шаблонной системы, картинки можно вставлять с помощью тэга {image-1} - см. документацию
Группа: Гости
Регистрация: --
Статус:
Написал наверно не ясно, вот фотка http://s41.radikal.ru/i091/0912/7d/874dedc52f28.png , на ней показано всё.