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

Расширенный вывод Новых материалов.

Расширенный вывод Новых материалов.

Мне много раз встречались разнообразные хаки для расширенного вывода новостей, выводимых тегами {custоm} и {rеlated-news}, но ни один из них не подходил для моих целей на 100%. Поэтому и было решено написать человеческий хак вывода похожих новостей и пользовательского вывода новостей. Основной загвоздкой была обработка картинок, по задумке должны были создаваться уменьшенные копии и складываться в папку на сервере, но моих знаний php никак не хватало на это. В итоге, после активного нагугливания, было найдено несколько вариантов и хаки были готовы. А что получилось - судить вам.

Итак первый представленный хак:
Advanced-Custom

Расширенный вывод Новых материалов.

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

Установка:
1. Открываем index.php

Находим:
$tpl->copy_template = preg_replace ( "#\\{custom category=['\"](.+?)['\"] template=['\"](.+?)['\"] aviable=['\"](.+?)['\"] from=['\"](.+?)['\"] limit=['\"](.+?)['\"] cache=['\"](.+?)['\"]\\}#ies", "custom_print('\\1', '\\2', '\\3', '\\4', '\\5', '\\6', '{$dle_module}')", $tpl->copy_template );

Заменяем на:
$tpl->copy_template = preg_replace ( "#\\{custom category=['\"](.+?)['\"] template=['\"](.+?)['\"] aviable=['\"](.+?)['\"] from=['\"](.+?)['\"] limit=['\"](.+?)['\"] cache=['\"](.+?)['\"] title=['\"](.+?)['\"] short=['\"](.+?)['\"] img_size=['\"](.+?)['\"]\\}#ies", "custom_print('\\1', '\\2', '\\3', '\\4', '\\5', '\\6', '\\7', '\\8', '\\9',  '{$dle_module}')", $tpl->copy_template );

2. Открываем engine/modules/functions.php
Находим:
function custom_print($custom_category, $custom_template, $aviable, $custom_from, $custom_limit, $custom_cache, $do) {

меняем на:
function custom_print($custom_category, $custom_template, $aviable, $custom_from, $custom_limit, $custom_cache, $custom_title, $custom_short, $custom_img_size, $do) {

Находим:
$custom_limit = intval( $custom_limit );

Ниже добавляем:

        $custom_title = intval( $custom_title );
        $custom_short = intval( $custom_short );
        $custom_img_size = intval( $custom_img_size );

Находим:
$custom_cache_id = "cat_" . $custom_category . "template_" . $custom_template . "from_" . $custom_from . "limit_" . $custom_limit;

меняем на:
$custom_cache_id = "cat_" . $custom_category . "template_" . $custom_template . "from_" . $custom_from . "limit_" . $custom_limit . "title_" . $custom_title . "custom_short_" . $custom_short;

3. Открываем engine/modules/show.custom.php:
Находим:

// Обработка дополнительных полей
$tpl->set( '{title}', stripslashes( $row['title'] ) );

Заменяем на:

     // Обработка дополнительных полей

    if ($custom_title != 0) {
    if (strlen($row['title'])>$custom_title) $row['title'] = substr($row['title'],0,$custom_title)."...";
    } else {$row['title'] = $row['title']; }    
    $tpl->set('{title}', stripslashes($row['title']));

        //-----Обработка картинок ---
$c_def_img = "/templates/Simple/images/nothumb.gif"; // - ПУТЬ до картинки по умолчанию, на тот случай если в новости нет картинки.

$custom_count_img = preg_match_all('%(((http://www)|(http://)|(www))[[email protected]:\%_\+.~#?&//=]+)\.(jpg|jpeg|gif|png)%i', $row['short_story'], $custom_img_match);
if ($custom_count_img != ""){

    $custom_img_parts = pathinfo($custom_img_match[0][0]);
    $images = $custom_img_parts['dirname'].'/'.$custom_img_parts['basename'];
    $not_resized_img = $custom_img_parts['dirname'].'/'.$custom_img_parts['basename'];
    
    $c_upload_path = ROOT_DIR."/engine/cache/";
    $image_name = explode ("/",$images);
    $image_name = end ($image_name);
    $image_name = $custom_img_size."_".$image_name;
    
        if (!file_exists($c_upload_path.$image_name)) {
        include_once ENGINE_DIR . '/classes/thumb.class.php';
        $thumb=new thumbnail($images);
        $thumb->crop($custom_img_size,$custom_img_size);
        $thumb->jpeg_quality(85);
        $thumb->save($c_upload_path.$image_name);
        @chmod( $c_upload_path.$image_name, 0666 );
        }
        
    $images = $config['http_home_url']."engine/cache/".$image_name;
    $images = '<img src="'.$images.'" width="'.$custom_img_size.'" height="'.$custom_img_size.'"  border="0" alt="'.$row['title'].'">';
} else {
    $not_resized_img = "/templates/Simple/images/nothumb.gif";
    $images = '<img src="'.$c_def_img.'" width="'.$custom_img_size.'" height="'.$custom_img_size.'"  border="0" alt="'.$row['title'].'">';
}
$tpl->set( '{image}',$images);
$tpl->set( '[full-img]', "<a href=\"" . $not_resized_img . "\"  onclick=\"return hs.expand(this)\" >" );
$tpl->set( '[/full-img]', "</a>" );
$tpl->set( '{full-img}','<img src="'.$not_resized_img.'" border="0" alt="'.$row['title'].'">' );
    //<-----Обработка картинок ---

Находим:
    $tpl->set( '{short-story}', stripslashes( $row['short_story'] ) );

Заменяем на:
$row['short_story'] = stripslashes( $row['short_story'] );
    if ($custom_short != 0) {
    $custom_short_story = strip_tags(str_replace(array('<br>','<br />')," ",$row['short_story']));
    if (strlen($custom_short_story)>$custom_short) $custom_short_story = substr($custom_short_story,0,$custom_short)."...";
       }else {$custom_short_story = $row['short_story'];}
    $tpl->set('{short-story}', $custom_short_story);


4. Открываем /engine/cache/.htaccess
Удаляем всё, что там написано и вставляем:
Order Deny,Allow
#Deny from all
<Files *.tmp>
Deny from all 
</Files>
<Files "\.(jpg|gif|png)$"> 
Allow from all
</Files>

Это для того, чтобы дать доступ чтения для картинок.

5. Кладём в папку images текущего шаблона картинку nothumb.gif
Для вывода новостей используем:
{custom category="1" template="shortstory" aviable="main" from="0" limit="5" cache="yes" title="30" short="100" img_size="50"}


Указание всех тегов обязательно, иначе будет глюк...

Где:

category, template, aviable, from, limit, cache - это стандартные теги для настройки вывода.
title - обрезка заголовка
short - обрезка краткой новости
img_size - ширина и высота картинки.

title="0" - отключить обрезание заголовка.
short="0" - отключить образание краткого содержимого новости

- Для вывода миниатюры изображения используем тег {image}
- Для вывода оригинала - {full-img}
- Если поставить: [full-img] {image}[/full-img] - будет выводиться кликабельная уменьшенная копия, при клике на HightSlide будет показано оригинальное изображение.

CSS я не буду описывать, так как это сугубо индивидульно для каждого сайта.

ВСЁ! теперь имеем красивый и единообразный пользовательский вывод новостей.

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


Читайте также
  1. TestedOK
    7 декабря 2010 14:52
    Автору спасибо!

    У меня есть пару вопросов:
    1. /engine/cache/.htaccess (не нашел этот файл)
    2. nothumb.gif (где ее взять)

    Если это поможет - пользуюсь FileZilla

    Заранее благодарен!
    http://testedok.ru/
  2. 8Dle
    8 декабря 2010 04:07
    Цитата: TestedOK
    Удаляем всё, что там написано и вставляем:Order Deny,Allow#Deny from all<Files *.tmp>Deny from all </Files><Files "\.(jpg|gif|png)$"> Allow from all</Files>

    . нет тонда создай и впиши новые строоки.
    Aлаh аkбap =)
  3. souz21
    25 января 2011 12:35
    У меня нет строки в functions.php:
    $custom_cache_id = "cat_" . $custom_category . "template_" . $custom_template . "from_" . $custom_from . "limit_" . $custom_limit;

    Версия 8.5
  4. souz21
    8 февраля 2011 17:27
    Короче ху... все это
  5. xak_86
    30 марта 2011 01:03

    Цитата: souz21
    У меня нет строки в functions.php:
    $custom_cache_id = "cat_" . $custom_category . "template_" . $custom_template . "from_" . $custom_from . "limit_" . $custom_limit;

    Версия 8.5

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


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

Авторизация