8Dle
Авторизация

Advanced-Related - Похожие новости с картинкой

Advanced-Related - Похожие новости с картинкой

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

Возможности:
- Вывод обрезанного, до заданного количества символов, краткого содержания (настраивается в админке);
- Вывод уменьшенной, до заданного размера, копии изображения из краткого содержания. Изображение уменьшается и обрезается через crop до квадрата, и сохраняется в папке кеша сайта с префиксом, соответствующим размеру. Таким образом можно вывести одни и те же новости в разных местах с картинками разного размера, а при редактировании или удалении новостей, либо очистке кеша сервер не будет захламляться лишними файлами. (размер настраивается в админке)


Установка:

1. Открыть /engine/inc/options.php
Ищем:
showRow( $lang['opt_sys_related'], $lang['opt_sys_relatedd'], makeDropDown( array ("1" => $lang['opt_sys_yes'], "0" => $lang['opt_sys_no'] ), "save_con[related_news]", "{$config['related_news']}" ) );

Ниже вставляем:
showRow( $lang['opt_sys_related_n'], $lang['opt_sys_relatedd_n'], "<input class=edit type=text style=\"text-align: center;\" name='save_con[related_news_n]' value=\"{$config['related_news_n']}\" size=5>" );
showRow( $lang['opt_sys_related_img'], $lang['opt_sys_relatedd_img'], "<input class=edit type=text style=\"text-align: center;\" name='save_con[related_img]' value=\"{$config['related_img']}\" size=5>" );


2. Открыть /engine/modules/show.full.php
Ищем:
SELECT id, title, date, category, alt_name, flag FROM

Меняем на:
SELECT id, title, date, category, alt_name, short_story, flag FROM


Ищем:
$buffer .= "<li><a href=\"" . $full_link . "\">" . stripslashes( $related['title'] ) . "</a></li>";

Меняем на:

// *************************
    // START MODERN RELATED NEWS
    // *************************
    //-----Обработка картинок --->
    $pictitle = stripslashes( $related['title'] );
    $related_count_img = preg_match_all('%(((http://www)|(http://)|(www))[[email protected]:\%_\+.~#?&//=]+)\.(jpg|jpeg|gif|png)%i', $related['short_story'], $related_img_match);
if ($related_count_img != ""){

    $related_img_parts = pathinfo($related_img_match[0][0]);
    $related_images = $related_img_parts['dirname'].'/'.$related_img_parts['basename'];
    $not_resized_img = $related_img_parts['dirname'].'/'.$related_img_parts['basename'];
    
    $related_upload_path = ROOT_DIR."/engine/cache/";
    $rel_image_name = explode ("/",$related_images);
    $rel_image_name = end ($rel_image_name);
    $rel_image_name = $config['related_img']."_".$rel_image_name;
    
        if (!file_exists($related_upload_path.$rel_image_name)) {
        include_once ENGINE_DIR . '/classes/thumb.class.php';
        $thumb=new thumbnail($related_images);
        $thumb->crop($config['related_img'],$config['related_img']);
        $thumb->jpeg_quality(85);
        $thumb->save($related_upload_path.$rel_image_name);
        @chmod( $related_upload_path.$rel_image_name, 0666 );
        }
        
    $related_images = $config['http_home_url']."engine/cache/".$rel_image_name;
    $related_images = '<img src="'.$related_images.'" width="'.$config['related_img'].'" height="'.$config['related_img'].'"  border="0" alt="'.$row['title'].'">';
} else {
    $not_resized_img = "/templates/Simple/images/nothumb.gif";
    $related_images = '<img src="/templates/Simple/images/nothumb.gif" width="'.$config['related_img'].'" height="'.$config['related_img'].'"  border="0" alt="'.$row['title'].'">';
}
    //<-----Обработка картинок ---
            
    $related['short_story'] = preg_replace("/\[attachment=[[:digit:]]*\]/si","",stripslashes($related['short_story']));
    $related['short_story'] = preg_replace("/<!--*-->/si","",$related['short_story']);
    $related['short_story'] = strip_tags(str_replace(array('<br>','<br />')," ",$related['short_story'])); //-- замена переносов на пробелы --
    if( strlen( $related['short_story'] ) > $config['related_news_n'] ) $related['short_story'] = substr( $related['short_story'], 0, $config['related_news_n'] ) . " ..."; //--обрезка содержания --
    
    // -- вывод блока -->
    $buffer .=' 
        <div class="related_block">
        <a href="'.$full_link.'" title="'.$pictitle.'">'.$pictitle.'</a>
        <div class="related_image" style="width:'.$config['related_img'].'; height:'.$config['related_img'].';">'.$related_images.'</div>
        <div class="related_descript">'.stripslashes($related['short_story']).'</div>
        <div class="clr"></div>
        </div>';
    // <-- вывод блока --

    // *************************
    // END MODERN RELATED NEWS
    // *************************


3. Открыть /language/Russian/adminpanel.lng

В любое удобное место вставляем:
'opt_sys_related_n' => "Обрезание описания",
'opt_sys_relatedd_n' => "Количество символов в описании к похожей новости.",
'opt_sys_related_img' => "Размер изображения",
'opt_sys_relatedd_img' => "Масимальный размер бОльшей стороны изображения в похожей новости.",


4. Кладём в папку /templates/Simple/images/ файл nothumb.gif желаемого размера.

5. Настраиваем вывод в админке.
Настройка обрезания содержания и размера картинки производится в админке, в разделе Настройка системы -> Оптимизация запросов к базе данных.

Вывод блока осуществляется тегом
{related-news}

.
Вот и всё. Теперь имеем удобный вид похожих новостей.

Стоит обратить внимание на то, что если например и для похожих новостей и для custom установлен одинаковый размер картинки, то одна и та же картинка будет показываться и в похожей новости и в custom-новости, естественно при совпадении id новости это немного уменьшает "захламлённость" сервера.
Так же при очистке кеша все превьюшки будут удалены.

Жмите на Кнопу ниже, или подписывайтесь!


Читайте также
  1. TestedOK
    8 декабря 2010 14:48
    Всё работает! Спасибо!
    http://testedok.ru/
  2. dmitris25
    18 декабря 2010 13:59
    а будет он выводить уменьшеные копии картинок, если они залиты на хостинги изображений, типа радикала ?
  3. GROB666
    25 декабря 2010 14:56
    Не работает, ошибку выдает...в файле show.full.php
  4. _maloy_
    1 января 2011 03:25
    На dle 9.0 не работает, картинок нет и даже текст перестал отображаться.
    Как исправить?
  5. Arbat
    16 января 2011 20:27
    4. Кладём в папку /templates/Simple/images/ файл nothumb.gif желаемого размера.

    я несовсем понял что это за файл? и кде ево взять ?? а так класный хак спасибо !
  6. souz21
    5 февраля 2011 14:42
    Не работает.Ни на 8.5,ни на 9.0. Нет картинок и текста.
  7. chiko
    10 февраля 2011 01:57
    На 9.2 все работает отлично.
    Arbat
    В коде находим путь к картинке:
    /templates/Simple/images/nothumb.gif
    Заменяем Simple на название своего шаблона и ложим туда картинку, что будет выводится если новост без картинки.
    А так работает на УРА. wink


    souz21
    Чтоб работало, попробуйте в файле
    engine/cache/.htaccess
    Удалить все и прописать код:
    ______________
    Order Deny,Allow
    #Deny from all
    <Files *.tmp>
    Deny from all
    </Files>
    <Files "\.(jpg|gif|png)$">
    Allow from all
    </Files>
    -----------------------
    Должно заработать.
  8. prizrak13
    18 февраля 2011 17:03
    Arbat,
    souz21,
    все работает на 8.5 а файло gif это каринка которая отображается при отсутствии картинки у новости
  9. viktor1111
    25 марта 2011 20:34
    чето у меня картинки не отображает , воще никаких
    а так работает норм вроде
  10. Socolino
    29 мая 2011 12:39

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


Dle это движок который изначально проектировался для создания новостных сайтов, но по мере своего развития движка значительно расширил свою функциональность и стал универсальным средством разработки и сопровождения сайтов и блогов различной направленности и тематики. По сравнению с другими бесплатными (и некоторыми платными) CMS системами движок dle обладает довольно обширными возможности.

Авторизация