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

Вывод постера в результатах быстрого поиска


     25.05.2013    Общие вопросы по PHP    2759

вопрос
Прошу прощения если нашли ошибки в тексте - быстро писал.

Привет, у меня вот недавно появилась идея, вот ее суть.

Мне хотелось вывести постер новости в результатах быстрого поиска я делал так:

в engine/ajax/search.php


$img = $db->super_query( "SELECT images, news_id FROM " . PREFIX . "_posters where news_id = '{$row['id']}'" );


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


$buffer .= "<span><img src=\"/uploads/posts/posters/"[b].$img['images'].[/b]"\" style=\"width: 30px;height: 40px;\">".$description."</span></a>";


При вводе ключевого слово в поиске то он выводит уже найденную новость и с постером но только выводит по 1 новости.

P.S у меня есть так скажем модуль для загрузки картинок на сервер и вывожу картинки в новость тегом {poster}

Если кому еще пригодиться то вот пример как вывести дополнительные поля и имя категории чей принадлежит найденый ресурс в поиске.


Заменяем $buffer .= "<a href=\"" . $full_link . "\"><span class=\"searchheading\">" . stripslashes( $title ) ."</span>

На $buffer .= "<a href=\"" . $full_link . "\"><span class=\"searchheading\">" . stripslashes( $title ) ." <span class=\"cat\">".$cat_info[$row['category']]['name']." </span></span>";


и в ряду с названием появиться категория новости

Чтобы вывести дополнительные поля делаем так


После $description = preg_replace( "'\[attachment=(.*?)\]'si", "", $description );

Вставляем $xfieldsdata = xfieldsdataload( $row['xfields'] );
и уже в нужном месте ".$xfieldsdata['image']."


['image'] - image название дополнительного поля.

Ответил: dj-avtosh


Я бы реализовал так

Нашел бы


$db->query("SELECT id, short_story, title, date, alt_name, category, flag FROM " . PREFIX . "_post WHERE " . PREFIX . "_post.approve=1".$this_date." AND (short_story LIKE '%{$query}%' OR full_story LIKE '%{$query}%' OR xfields LIKE '%{$query}%' OR title LIKE '%{$query}%') ORDER by date DESC LIMIT 5");


заменил бы на



$db->query("SELECT p.id, p.short_story, p.title, p.date, p.alt_name, p.category, p.flag, pr.images as images

FROM " . PREFIX . "_post p

LEFT JOIN " . PREFIX . "_posters pr

ON ( p.id = pr.news_id )

WHERE

p.approve=1

".$this_date."

AND

( p.short_story LIKE '%{$query}%' OR p.full_story LIKE '%{$query}%' OR p.xfields LIKE '%{$query}%' OR p.title LIKE '%{$query}%')

ORDER by p.date DESC LIMIT 5");





И ваша дальнейшая конструкция должна заработать

вместо $img - $row


$buffer .= "<span><img src=\"/uploads/posts/posters/"[b].$row['images'].[/b]"\" style=\"width: 30px;height: 40px;\">".$description."</span></a>";

Комментарии пользователей (21)

FastFud
50

1599 | 588

FastFud - 25 мая 2013 16:44 - Юзер

Пишет что база данных ex bs.posters не существует, бред.

dj-avtosh
39

1479 | 390

dj-avtosh - 25 мая 2013 16:47 - шашлычник

LEFT JOIN ".PREFIX."posters pr


попробуйте

skype: elhan.isaev

FastFud
50

1599 | 588

FastFud - 25 мая 2013 19:38 - Юзер

тоже так

FastFud
50

1599 | 588

FastFud - 25 мая 2013 19:47 - Юзер

Да, и еще чтобы заработали дополнительные поля в результатах поиска надо прописать в


$db->query("SELECT id, short_story, title, date, alt_name, category, flag FROM " . PREFIX . "_post WHERE " . PREFIX . "_post.approve=1".$this_date." AND (short_story LIKE '%{$query}%' OR full_story LIKE '%{$query}%' OR xfields LIKE '%{$query}%' OR title LIKE '%{$query}%') ORDER by date DESC LIMIT 5");


xfields можно после category,

FastFud
50

1599 | 588

FastFud - 25 мая 2013 20:13 - Юзер

***Комментарий удален***

dj-avtosh
39

1479 | 390

dj-avtosh - 25 мая 2013 20:13 - шашлычник

ему нужны были не доп поля, а posters с таблицы

skype: elhan.isaev

dj-avtosh
39

1479 | 390

dj-avtosh - 25 мая 2013 20:17 - шашлычник

Я скинул запросы, в чем ошибки??

skype: elhan.isaev

dj-avtosh
39

1479 | 390

dj-avtosh - 25 мая 2013 20:18 - шашлычник

" . PREFIX . "_posters


вот так

skype: elhan.isaev

FastFud
50

1599 | 588

FastFud - 25 мая 2013 20:36 - Юзер

Теперь пишет так: Unknown column 'pr.images' in "field list'

dj-avtosh
39

1479 | 390

dj-avtosh - 25 мая 2013 20:48 - шашлычник

$db->query("SELECT p.id, p.short_story, p.title, p.date, p.alt_name, p.category, p.flag, pr.images as images

FROM " . PREFIX . "_post p

LEFT JOIN " . PREFIX . "_posters pr

ON ( p.id = pr.news_id )

WHERE

p.approve=1

".$this_date."

AND

( p.short_story LIKE '%{$query}%' OR p.full_story LIKE '%{$query}%' OR p.xfields LIKE '%{$query}%' OR p.title LIKE '%{$query}%')

ORDER by p.date DESC LIMIT 5");



Должно быть в точности как тут

skype: elhan.isaev

FastFud
50

1599 | 588

FastFud - 25 мая 2013 20:52 - Юзер

Unknown column 'dle_post.date' in 'where clause'

dj-avtosh
39

1479 | 390

dj-avtosh - 25 мая 2013 20:55 - шашлычник

if( intval( $config['no_date'] ) ) $this_date = " AND " . PREFIX . "_post.date < '" . $this_date . "'"; else $this_date = "";


на

if( intval( $config['no_date'] ) ) $this_date = " AND p.date < '" . $this_date . "'"; else $this_date = "";

skype: elhan.isaev

FastFud
50

1599 | 588

FastFud - 25 мая 2013 20:59 - Юзер

.dj-avtosh,


if( intval( $config['no_date'] ) ) $this_date = " AND " . PREFIX . "_post.date < '" . $this_date . "'"; else $this_date = "";


нету такого

dj-avtosh
39

1479 | 390

dj-avtosh - 25 мая 2013 21:01 - шашлычник

прямо над запросом

skype: elhan.isaev

FastFud
50

1599 | 588

FastFud - 25 мая 2013 21:05 - Юзер

Тоже по 1 новости показывает.

dj-avtosh
39

1479 | 390

dj-avtosh - 25 мая 2013 21:06 - шашлычник

сказки, быть такого не может

skype: elhan.isaev

FastFud
50

1599 | 588

FastFud - 25 мая 2013 21:07 - Юзер

Чистая правда так и выводит.

FastFud
50

1599 | 588

FastFud - 25 мая 2013 21:36 - Юзер

Огромное спасибо.

Вот как надо сделать правельно :

if( intval( $config['no_date'] ) ) $this_date = " AND " . PREFIX . "_post.date < '" . $this_date . "'"; else $this_date = "";


на

if( intval( $config['no_date'] ) ) $this_date = " AND p.date < '" . $this_date . "'"; else $this_date = "";


потом удалить нахр...


$row = $db->super_query( "SELECT images, news_id FROM " . PREFIX . "_posters where news_id = '{$row['id']}'" );


и чтобы вывести ниже в


$buffer .= "<span>".$description."</span></a>";

вставить уже <img src=\"/uploads/posts/posters/".$row['images']."\" style=\"width: 30px;height: 40px;\">


и заработает как миленький и вуаля у вас будет офигенный поиск.

FastFud
50

1599 | 588

FastFud - 25 мая 2013 21:38 - Юзер

Не забудьте заменить


$db->query("SELECT id, short_story, title, date, alt_name, category, flag FROM " . PREFIX . "_post WHERE " . PREFIX . "_post.approve=1".$this_date." AND (short_story LIKE '%{$query}%' OR full_story LIKE '%{$query}%' OR xfields LIKE '%{$query}%' OR title LIKE '%{$query}%') ORDER by date DESC LIMIT 5");


на


$db->query("SELECT p.id, p.short_story, p.title, p.date, p.alt_name, p.category, p.flag, pr.images as images

FROM " . PREFIX . "_post p

LEFT JOIN " . PREFIX . "_posters pr

ON ( p.id = pr.news_id )

WHERE

p.approve=1

".$this_date."

AND

( p.short_story LIKE '%{$query}%' OR p.full_story LIKE '%{$query}%' OR p.xfields LIKE '%{$query}%' OR p.title LIKE '%{$query}%')

ORDER by p.date DESC LIMIT 5");

DarAmal
8

DarAmal - 9 декабря 2013 22:26 - Юзер

а как реализовать на DLE 9.8 ? помогите пожалуйста!
у меня к примеру нет таких кодов, как:
$row = $db->super_query( "SELECT images, news_id FROM " . PREFIX . "_posters where news_id = '{$row['id']}'" );

и
if( intval( $config['no_date'] ) ) $this_date = " AND " . PREFIX . "_post.date < '" . $this_date . "'"; else $this_date = "";


Подскажите , пожалуйста!
Заранее благодарю!!

vitnet
218

2174 | 930

vitnet - 9 декабря 2013 22:49 - Эксперт

найти
while($row = $db->get_row()) {

    $row['date'] = strtotime( $row['date'] );
    $row['category'] = intval( $row['category'] );

заменить на
while($row = $db->get_row()) {

    $row['date'] = strtotime( $row['date'] );
    $row['category'] = intval( $row['category'] );

    $short_story = stripslashes($row['short_story']);
    $images = array();
    preg_match_all('/(img|src)=("|\')[^"\'>]+/i', $short_story, $media);
    $data = preg_replace('/(img|src)("|\'|="|=\')(.*)/i', "$3", $media[0]);
    
    foreach($data as $url) {
        $info = pathinfo($url);
        if (isset($info['extension'])) {
            $info['extension'] = strtolower($info['extension']);
            if (($info['extension'] == 'jpg') || ($info['extension'] == 'jpeg') || ($info['extension'] == 'gif') || ($info['extension'] == 'png')) array_push($images, $url);
        }
    }
    
    if ( count($images) ) {
        $image = $url;
    } else {
        $image = $config['http_home_url'] . "templates/" . $config['skin'] . "/dleimages/no_image.jpg";
    }

найти
$buffer .= "<a href=\"" . $full_link . "\"><span class=\"searchheading\">" . stripslashes( $title ) . "</span>";

в нем использовать
<img src=\"" . $image . "\" width=\"20\" height=\"20\" alt=\"\" style=\"float: left; margin-top: 3px; padding: 2px;\" title=\"" . stripslashes( $related['title'] ) . "\">

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

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