Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Хаки » Вывод похожих новостей картинками

Вывод похожих новостей картинками


     11.08.2011    картинка, похожие новости    Все вопросы » Хаки    15539

вопрос
Как вывести похожие новости картинками?
Я знаю что везде много хаков и модулей, но хотелось бы на вашем сайте ответ узнать, может вообще посоветуете не ставить? это очень удобный вывод, давно хочу так сделать. версия движка 9.3

Ответил: ПафНутиЙ


Открываем engine/modules/show.full.php
Находим:
                $db->query( "SELECT id, title,  date, category, alt_name, flag FROM " . PREFIX . "_post WHERE MATCH (title, short_story, full_story, xfields) AGAINST ('$body') AND id != " . $row['id'] . " AND approve='1'" . $where_date . " LIMIT " . $config['related_number'] );

заменяем на
$db->query( "SELECT id, title, short_story, date, category, alt_name, flag FROM " . PREFIX . "_post WHERE MATCH (title, short_story, full_story, xfields) AGAINST ('$body') AND id != " . $row['id'] . " AND approve='1'" . $where_date . " LIMIT " . $config['related_number'] );

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

Заменяем на:
//Настраиваем размер картинки похожих новостей
                    $rel_img_w = 100; //Ширина
                    $rel_img_h = 120; //Высота
                    
                        preg_match("#<img.+?src=['\"](.+?)['\"]#is", $related['short_story'], $match);
                        if($match[1]){
                          $rel_dir = ROOT_DIR . '/uploads/relatednews/';
                          $rel_file_name = strtolower ( basename ( $match[1] ));
                          $rel_file_name = $rel_img_w."x".$rel_img_h."_".$rel_file_name;
                          if (!file_exists($rel_dir.$rel_file_name)) {
                            require_once ENGINE_DIR . '/classes/thumb.class.php';
                            $thumb = new thumbnail( $match[1] );
                            $thumb->crop( $rel_img_w, $rel_img_h );
                            $thumb->save( $rel_dir . $rel_file_name );    
                          }
                          $image_related = '<img src="'.$config['http_home_url']."uploads/relatednews/".$rel_file_name.'" alt="'.$related['title'].'" />';
                        } else $image_related = '<img src="{THEME}/images/nothumb.gif" alt="'.$related['title'].'" width="'.$rel_img_w.'" height="'.$rel_img_h.'" />'; //Если в новости нет картинки - будет выводиться "заглушка"
                        
                        $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'] ) > 100 ) $related['short_story'] = substr( $related['short_story'], 0, 100 ) . " ..."; //--обрезка содержания до 100 символов
                        
                        $related_adv .= '<div class="news_rel"><a href="'.$full_link.'" title="'.$related['title'].'-'.$related['short_story'].'">'.$image_related.'</a></div>';
                        $adv_related = '<div class="relatedblock">'.$related_adv.'</div>';
                        $buffer = $adv_related;
                    
                /**/

Настраиваем вывод в CSS по своему усмотрению, где relatedblock - класс блока с новостями, news - класс блока, в котором находится ссылка-картинка.
Не забываем:
1 - Кинуть в папку с шаблоном картинку-заглушку (на случай отсутствия картинки в новости) с именем nothumb.gif
2 - Создать в папке uploads папку relatednews и выставить на неё CHMOD 777

Всё.

33 комментария

rabidabi
Юзер

rabidabi - 11 августа 2011 05:06 -

Спасибо! попробую lol

WEZANGO
Юзер

WEZANGO - 11 августа 2011 06:56 -

А если картинки выводятся в новости с помощью хака n0wheremany, то как быть ?

ПафНутиЙ
Админ

ПафНутиЙ - 11 августа 2011 07:21 -

Добавляем в запрос xfields,
а перед $rel_img_w = 100; добавляем:
//обработка допполей ->
        $xfieldsdata = xfieldsdataload( $related['xfields'] );
        $xf_t_val = $xfieldsdata[''fieldname''];
    // <- обработка допполей

где fieldname - имя дополнительного поля
Эта конструкция будет возвращать значение дополнительного поля, что с этим значением делать в вашем конкретном случаи - решайте сами.

Каков вопрос - таков и ответ. Просто помните об этом.

Windows
Юзер

Windows - 11 сентября 2011 22:19 -

Спасибо ПафНутиЙ, хорошо бы картинки в похожих новостях выводились с короткими описаниями и названиями в DLE 9.3. Хак установил, картинки отображаются, не более.

ПафНутиЙ
Админ

ПафНутиЙ - 11 сентября 2011 22:21 -

погодите до выхода 9.4 - там это будет )

Каков вопрос - таков и ответ. Просто помните об этом.

Windows
Юзер

Windows - 17 сентября 2011 11:43 -

Обновился до 9.4. Вывел похожие новости с картинками, хотелось бы вывести картинки маленькими для экономии трафика. Можно ли в 9.4 реализовать вывод картинок по принципу этой темы, чтобы кинуть в папку с шаблоном картинку-заглушку nothumb.gif
и создать в папке uploads папку relatednews?

Бахмут
Юзер

Бахмут - 25 сентября 2011 20:06 -

Хотел сделать подобное на дле 9.4, но не смог. В файле engine/modules/show.full.php нет следующей строчки:
$buffer.....


Кто поможет реализовать точно такой же хак вывода похожих новостей с картинками на dle 9.4?

Бахмут
Юзер

Бахмут - 25 сентября 2011 21:49 -

В общем прочитав внимательно faq по движку 9.4 сделал тоже самое, единственный минус - нет замены удаленной или несуществующей картинки, но это не так уж и важно. Итак, в файле relatednews.tpl удаляем все и прописываем:
<li><a href="{link}"><img class="imagestory" src="{image-1}" alt="{title}"/><b>{title}</b><br>{text limit="255"}<hr> 
  </a></li>


где {image-1} - вывод первой картинки с новости
{text limit="255"} - 255 символов с текста краткой новости
Естественно все это можно изменить

и в style.css для изменения размера картинок в конце прописываем:

.imagestory { float: center; width: 80px; height: 80px; margin: 0 8px 6px 0; }


Я поставил размер картинок в 80 пикселей. Вы можете это изменить на свой лад.
Количество выводимых картинок регулируется в Настройка системы - Настройки вывода новостей - Количество похожих новостей. По умолчанию их пять.

Просьба гуру не клевать за коммент, как бы все элементарно и выводится движком. Изначально в файле relatednews.tpl ничего подобного нети поиском не нашел сразу готового файла похожих новостей с выводом картинок. Может кому-то и поможет.

king
Юзер

king - 4 октября 2011 23:50 -

можно ли каким-то образом вручную указывать ссылки на выводимые новости?

nowheremany
Эксперт

nowheremany - 5 октября 2011 08:18 -

В шабе только

Благодарность принимаю тут Связь

Бахмут
Юзер

Бахмут - 5 октября 2011 07:51 -

Так они и так будут выводиться уже кликабельные. То есть, с сылками. И как вы вообще представляете прописать в каждой новости 3-5 похожих новостей ручками?
если прописать вот так:
<a href="{link}"><img class="imagestory" src="{image-1}" alt="{title}"/><b>{title}</b><br>{text limit="255"}<hr></a></li>


то полностью весь текст и заглавие похожей новости будет идти ссылкой, если же так:
[code]<a href="{link}"><img class="imagestory" src="{image-1}" alt="{title}"/><b>{title}</b></a><br>{text limit="255"}<hr></li>
[/code]

то только заглавие новости кликабельное, текст сам - нет.

Timur
Юзер

Timur - 5 октября 2011 18:50 -

а на 9,2 это работает?

Бахмут
Юзер

Бахмут - 6 октября 2011 09:09 -

Timur, нет, только на 9.4. На 9.2 должно работать, если сделаете так, как отписался уважаемый Пафнутий выше.

efr07
Юзер

efr07 - 12 октября 2011 01:45 -

А они будут выводится горизонтально ?

ПафНутиЙ
Админ

ПафНутиЙ - 12 октября 2011 01:49 -

Если слово из трёх букв (CSS) вам ни о чём не говорит, то они вообще хреново будут выводиться)))

Каков вопрос - таков и ответ. Просто помните об этом.

andreu
Юзер

andreu - 24 октября 2011 13:37 -

Очень классный хак! Спасибо! Но хотелось бы узнать, нельзя ли (у меня по русскому языку двойка, я не знаю, что в русском языке не существует приставки з и поэтому пишу так, как слышу) зделать что бы описание было рядом с картинкой а не появлялось при наведении курсора? winked
Или если можно преобразовать эти новости не вертикально (как в хаке) а горизонтально, как по мне смотрелось бы намного лучше ))

ПафНутиЙ
Админ

ПафНутиЙ - 24 октября 2011 21:18 -

нужно редактировать эту строку:
 $related_adv .= '<div class="news_rel"><a href="'.$full_link.'" title="'.$related['title'].'-'.$related['short_story'].'">'.$image_related.'</a></div>';

Каков вопрос - таков и ответ. Просто помните об этом.

andreu
Юзер

andreu - 25 октября 2011 10:27 -

а нельзя по конкретнее что именно удалить или добавить, а то я в этом полный ноль (( Зарание спасибо!

Ad-min
Юзер

Ad-min - 9 ноября 2011 22:29 -

Как сделать в dle 9.4 вывод похожих новостей в картинках горизонтально?

ПафНутиЙ
Админ

ПафНутиЙ - 10 ноября 2011 17:49 -

float:left; вам поможет.

Каков вопрос - таков и ответ. Просто помните об этом.

alexcreew
Юзер

alexcreew - 10 ноября 2011 18:31 -

При использовании кода, от Бахмута получилось что заголовок выровнян по нижней стороне картинки, а описание вовсе снизу. Немного пдумав я сделал так:

<table border="0">
<tbody>
<tr>
<td style="width: 20%;"> <a href="{link}"><img class="imagestory" src="{image-1}" alt="{title}"/></a> </td>
<td style="width: 80%;">
<a href="{link}"><b>{title}</b> <br>  <br> </a>
<a href="{link}"> {text limit="255"}</a> </td>
</tr>
</tbody>
</table> <hr>


получилось вроде хорошо)

alexcreew
Юзер

alexcreew - 10 ноября 2011 19:03 -

НО, как быть если новость без картинки...

Ad-min
Юзер

Ad-min - 10 ноября 2011 20:59 -

Как сделать вывод в две колонки? ставил float: left; в css, становится в 2 колонки и начинает косить шаб



<li><div style="width: 50%;float: left;"><a href="{link}"><img class="imagestory" src="{image-1}" alt="{title}"/><b>{title}</b><hr>
  </a></div></li>

ПафНутиЙ
Админ

ПафНутиЙ - 10 ноября 2011 23:38 -

тут об этом написано.

Каков вопрос - таков и ответ. Просто помните об этом.

Ad-min
Юзер

Ad-min - 11 ноября 2011 18:42 -

Пафнутий, вот ты всегда отвечаешь загадками, чтоб другие включали мозг)) Но у меня всё равно не получается. Помоги прямым текстом plizzzz....

ПафНутиЙ
Админ

ПафНутиЙ - 12 ноября 2011 08:52 -

чтобы помочь конкретно в вашем случаи - нужно видеть сайт, ибо на отображение блока может влиять что годно

Каков вопрос - таков и ответ. Просто помните об этом.

kol4erukij
Юзер

kol4erukij - 12 ноября 2011 00:52 -

Владыка, как задать размер картинок одним параметром? Например, задать размер по наибольшей стороне. Дело в том, что у меня картинки в новостях где 500x350, а где 350x500 и если задавать два размера, то "вертикальные" картинки отображаются прекрасно, а из "горизонтальных" вырезается середина и масштабируется в вертикальную картинку.

ПафНутиЙ
Админ

ПафНутиЙ - 12 ноября 2011 08:55 -

На данный момент никак.

Каков вопрос - таков и ответ. Просто помните об этом.

psics
Юзер

psics - 17 сентября 2012 15:48 -

При использовании данного метода не отображается название новости, лишь выводятся картинки - как устранить?

psics
Юзер

psics - 17 сентября 2012 16:24 -

все справился сам - чуть поразбирался с пхп))) вспомнил былое

rahman
Юзер

rahman - 28 февраля 2013 14:25 -

если картинка через дополнительное поле выводится как быть?

Sersho
Юзер

Sersho - 13 октября 2016 17:17 -

Все сделал как написал ПафНутиЙ в ответе. Столкнулся с такой проблемой: теперь при переходи на полную новость, сайт выдает ошибку: "Not Supported File! Thumbnails can only be made from .jpg, gif and .png images!". Хотя в новостях картинки в формате .jpg или .png. Может кто сталкивался с проблемой? Или подскажите хотя бы куда копать?
Версия DLE 9.2

Sersho
Юзер

Sersho - 21 ноября 2016 16:29 -

Жаль что никто не помог, пришлось убить намного больше времени.

Проблема была в двух местах:
Во первых, регулярное выражения для моей базы данных не подходило, потому что в некоторых картинках указывался не относительный путь, а полный вместе с доменом http://site.ru/

Заменил эту строчку
preg_match("#<img.+?src=['\"](.+?)['\"]#is", $related['short_story'], $match);

На вот эту
preg_match("#<img.+?src=['\"](?:http:\/\/site.ru)?(.+?)['\"]#is", $row['short_story'], $match);



Во вторых, еще одна проблема с путями, на этот раз с локальными. Скрипту для создания миниатюры картинки отправлялся некорректный путь.

Исправил в этой строчке:
$thumb = new thumbnail( $match[1] );

Вот это:
$thumb = new thumbnail( ROOT_DIR . $match[1] );



Есть еще решение для вывода похожих новостей с помощью бесплатно модуля от Пафнутия Block.Pro.3 - http://bp3.pafnuty.name/

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх