Сделать стартовойДобавить в закладки  
Главная страничка Главная страничка
В номере:

Выходит с 17 июля 2008 г. цена договорная

Опрос

Windows Mobile
Symbian
Android
iPhone
Linux
другая
не знаю
у меня обычный телефон



Календарь
«    Ноябрь 2009    »
ПнВтСрЧтПтСбВс
 1
2345678
9101112131415
16171819202122
23242526272829
30 

Архив новостей
Май 2019 (2)
Март 2019 (1)
Январь 2019 (1)
Декабрь 2018 (1)
Ноябрь 2018 (3)
Октябрь 2018 (2)

Информация
DLE хаки: Добавим краткое описание и картинку в topnews
Web » CMS » DLE
автор: dimon, опубликовано: 13 ноября 2009

Потребовалось немного изменить модуль topnews - нужно чтобы помимо названия новости еще отображалась маленькая картинка и краткое описание новости.

DLE хаки: Добавим краткое описание и картинку в 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. Как изменить код файлы Вы догадаетесь сами?

topnews_by_dimon.rar [26,94 Kb] (cкачиваний: 278)




Кстати если требуется выводить новости только из одной категории, то нужно просто подправить запрос, добавив в него фильтр категории.
Например будем выводить новости только из 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} - см. документацию

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

Другие новости по теме:

  • DLE: Как сделать для разных разделов свой вывод
  • DLE: Прикрутим Яндекс.карты для отображения меток новостей на карте
  • DLE: Как создать модуль или как я делал дополнительную форму обратной связи
  • DLE хаки: Изменение количества новостей отображаемых в topnews
  • DLE хаки: Отступ между картинками


  • Комментарии:

    Оставить комментарий

    #1 написал: Ramz3s (13 декабря 2009 16:41)
    Здравствуйте! Установил ваш модуль, всё отлично работает, только 1 проблемка есть. В добавлении новостей, строка для вставки изображения для вывода в topnews создается не под строкой "Полной новости", а рядом справа, таким образом сжимая всю страницу добавления новостей и вобщем очень огорчает это, незнаю как исправить. Помогите!
    Написал наверно не ясно, вот фотка http://s41.radikal.ru/i091/0912/7d/874dedc52f28.png , на ней показано всё.
    #2 написал: dimon (14 декабря 2009 10:21)
    Ramz3s, это косяк в файле addnews.tpl шаблона
    при добавлении любых дополнительных полей проявился бы такой косяк.
    нужно в нем подправить. ты на каком уровне с html общаешься?
    #3 написал: Ramz3s (14 декабря 2009 15:22)
    dimon с других шаблонов пробовал addnews.tpl, и 1 нормальный оказался, СПАСИБо за модуль. хороший у Вас сайт/блог)
    #4 написал: dimon (14 декабря 2009 17:26)
    feel
    #5 написал: alextrish (16 июля 2010 08:02)
    Хак работал удачно неделю, а потом почему то посинели ссылки. Как такой баг исправить? Стили не помогают
    #6 написал: dimon (16 июля 2010 10:22)
    alextrish, если ссылки посинели значит не все псевдоклассы заданы в стилях
    a:visited
    a:link
    a:hover
    a:active
    все заданы?
    #7 написал: alextrish (16 июля 2010 11:51)
    .copy {
    color: #000000;
    font-size: 11px; /* ! */
    font-family: tahoma; /* ! */
    text-decoration: none;

    }
    .copy a:active, .copy a:visited, .copy a:link {
    color: #000000;
    text-decoration: none;
    }
    .copy a:hover {
    color: #c11c1c;
    text-decoration: underline;
    }
    #8 написал: dimon (16 июля 2010 12:04)
    alextrish, дай ссылку на сайт - хочу посмотреть. т.к. должно все работать
    #9 написал: alextrish (16 июля 2010 12:31)
    dimon, смотри ЛС
    #10 написал: Konkordia (9 июня 2011 23:57)
    dimon, здравствуйте!
    Очень интересный и красивый хак! Особенно картинка )))))))
    А не подскажете, как таким же образом как и картинку можно вывести текстовые дополнительные поля?
    Вот чтобы картинка так и осталась, а вместо заголовка и краткой новости выводились дополнительные поля "название модели" вместо заголовка-ссылки, и "описание" - вместо краткой новости. Они у меня как [xfvalue_model] - (одна строка) и [xfvalue_opisanie] - (несколько строк) записаны. Про фотики сайт.
    Буду очень признательна за подсказку! :-)
    #11 написал: dimon (14 июня 2011 08:43)
    Konkordia, после строки //сформируем тег {topnews} в нужных местах вставь $xfieldsdata['model'] и $xfieldsdata['opisanie']
    #12 написал: Konkordia (15 июня 2011 05:53)
    dimon, спасибо за отзывчивость!!! smile
    Вот только плохо быть тупой как я sad Ровным счетом ничего не получается.
    Или я не туда вставляю. Сразу все кроме картинки пропадает.
    И еще там в коде остаются же эти все эти title и short_story, а я думала не вставить дополнительные поля к существующим, а подменить ими название и короткую новость.
    Сижу, ковыряюсь, подменяю одни слова на другие, а выходит бред сумасшедшего ((((
    #13 написал: dimon (15 июня 2011 10:07)
    Konkordia, скинь мне на мыло t*******@gmail.com свой topnews.php
    #14 написал: Konkordia (15 июня 2011 15:34)
    Я использую тот, который здесь в первом сообщении. Только кодировку пришлось поменять, потому что сказали, что у меня поставлена другая. Но все равно отправила и на всякий случай и старый тоже :)
    #15 написал: Konkordia (16 июня 2011 04:34)
    Спасибо большущее! Теперь все работает! :)
    Только наверно потому что у меня другая кодировка используется, после обрезки текста получается в конце вот так: высококач/знак вопроса в ромбике/ ... Далее
    Я наверно попробую схитрить и не topnews выведу, а вместо новостей партнеров rss из своего собственного раздела. ))) Там модуль очень корректно обрезает текст - на пробелах между слов. И попробую применить к rss ваш способ. Разберусь как так разберусь, если нет, то оставлю все как есть, вас напрягать уже просто неудобно будет.
    Спасибо большое!!!!!!
    #16 написал: dimon (16 июня 2011 09:46)
    Konkordia, пожалуйста smile
    #17 написал: russur (11 октября 2011 08:58)
    Здравствуйте!

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

    За ранее спасибо
    #18 написал: dimon (11 октября 2011 12:46)
    russur, модуль topnews берет популярные новости, а не случайные.
    чтобы брать случайные нужно делать другой запрос к базе.
    картинка noprev.jpg будет отображаться во всех новостях в которых поле с превью не заполненно - т.е. то что ты и хочешь - в старых новостях поле будет пустым
    #19 написал: psics (12 января 2012 16:37)
    А не подскажите как сделать такой же вывод новостей, но для dle 9.4, а то не работает он там...
    #20 написал: dimon (13 января 2012 10:14)
    не обновился еще до 9.4. обновлюсь - подскажу
    #21 написал: zimka (19 августа 2012 22:25)
    не подскажите под 9.6 ?
    #22 написал: dimon (20 августа 2012 09:59)
    zimka, пока нет.


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


    Поиск по сайту:


    Облако тегов
    Android, Arduino, backup, CentOS, cmd, css, div, DLE, DLE хаки, domoticz, dzvents, LCD, Linux, log, LUA, Monster, ogf3, RDP, Template, VBS, w2k8, windows, WSH, бумага, бумажный самолетик, верстка, иструкция, Карты, кино, Навигация, оригами, программа, рецензия, рецепт, скрипт, фигуры, шаблон, Яндекс, яндекс-карты

    Показать все теги
    Реклама
    раскрутка сайта бесплатно
    Главная страница | Регистрация | Добавить новость | Новое на сайте | Статистика | Поддержка | Правила ресурса Copyright © 2005-2018 by dimon - all right reserved!
    Тираж:       Счетчик тИЦ и PR     экземпляров.   Дизайн, верстка by dimon