Не нравятся результаты поиска? Попробуйте другой поиск!
dle-faq.ru FAQ (все вопросы) Хаки Вывод похожих новостей картинками

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


     11.08.2011    Хаки    11979

вопрос
Как вывести похожие новости картинками?
Я знаю что везде много хаков и модулей, но хотелось бы на вашем сайте ответ узнать, может вообще посоветуете не ставить? это очень удобный вывод, давно хочу так сделать. версия движка 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
43 | 39

rabidabi - 11 августа 2011 05:06 - Юзер

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

WEZANGO
5

57 | 57

WEZANGO - 11 августа 2011 06:56 - Юзер

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

ПафНутиЙ
1065

3396 | 2434

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

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

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

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

Windows
9 | 9

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

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

ПафНутиЙ
1065

3396 | 2434

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

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

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

Windows
9 | 9

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

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

Бахмут
5

76 | 31

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

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


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

Бахмут
5

76 | 31

Бахмут - 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
2

75 | 13

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

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

nowheremany
192

1659 | 1292

nowheremany - 5 октября 2011 08:18 - Эксперт

В шабе только

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

Бахмут
5

76 | 31

Бахмут - 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
31 | 31

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

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

Бахмут
5

76 | 31

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

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

efr07
11 | 7

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

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

ПафНутиЙ
1065

3396 | 2434

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

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

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

andreu
2 | 2

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

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

ПафНутиЙ
1065

3396 | 2434

ПафНутиЙ - 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
2 | 2

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

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

Ad-min
3 | 3

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

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

ПафНутиЙ
1065

3396 | 2434

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

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

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

alexcreew
41 | 12

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
41 | 12

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

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

Ad-min
3 | 3

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>

ПафНутиЙ
1065

3396 | 2434

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

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

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

Ad-min
3 | 3

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

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

ПафНутиЙ
1065

3396 | 2434

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

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

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

kol4erukij
4

7 | 5

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

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

ПафНутиЙ
1065

3396 | 2434

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

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

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

psics
3 | 3

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

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

psics
3 | 3

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

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

rahman
1 | 1

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

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

Sersho
3

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
3

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/

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

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