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

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

Опрос

конечно, он настанет в 2012 г.
да, но не в 2012 г.
нет, это фантастика
а что такое конец света
а мне пофиг - я буду уже мертв


Календарь
«    Ноябрь 2009    »
ПнВтСрЧтПтСбВс
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 

Архив новостей
Апрель 2012 (4)
Март 2012 (1)
Январь 2012 (2)
Декабрь 2011 (2)
Ноябрь 2011 (1)
Октябрь 2011 (4)

Информация
 
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качиваний: 220)




Кстати если требуется выводить новости только из одной категории, то нужно просто подправить запрос, добавив в него фильтр категории.
Например будем выводить новости только из 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 хаки: Изменение количества новостей отображаемых в topnews
  • DLE: Прикрутим Яндекс.карты для отображения меток новостей на карте
  • DLE: Как сделать для разных разделов свой вывод
  • DLE: Как создать модуль или как я делал дополнительную форму обратной связи
  • 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. обновлюсь - подскажу


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


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


    Аккаунт
    Логин
    Пароль
     
    Облако тегов

    Требуется для просмотра Flash Player 9 или выше.

    Показать все теги
    Реклама
    раскрутка сайта бесплатно






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