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

Как доработать быстрый поиск на сайте?


     14.06.2015    Общие вопросы, Общие вопросы по PHP    2790

вопрос
В файле engine/ajax/search.php эта строка выводит новости в быстром поиске.

$buffer .= "<a href=\"" . $full_link . "\"><span><img width=\"50px\" height=\"50px\" src=\"".$xfieldsdata['image']."\" style=\"float:left; margin:5px;\">".$description."</span><span class=\"searchheading\">" . stripslashes( $title ) . "</span></a>";


Нужно добавить к новостям теги и категорию новости (теги просто текстом). Что нужно добавить?

Ответа пока нет


14 комментариев

dominika
Юзер

dominika - 14 июня 2015 21:53 -

C категорией есть хак.
Добавить
$category = $cat_info[$row['category']]['name'];


и этим тегом выводить
{$category}


А вот как вывести тег новости, помогите кто знает.

FastFud
Юзер

FastFud - 15 июня 2015 02:23 -

Рекомендую вам модернизировать стандартный быстрый поиск DLE Так.
Далее, вам надо будет поменять запрос
$db->query( "SELECT * 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.*, t.* FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_tags t ON (t.news_id=p.id) WHERE p.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" );
Дальше, найти
 $tpl->set( '{full-link}', $full_link );
и после этой строки вставить
if( $config['allow_tags'] and $row['tags'] ) {
            
            $tpl->set( '[tags]', "" );
            $tpl->set( '[/tags]', "" );
            
            $tags = array ();
            
            $row['tags'] = explode( ",", $row['tags'] );
            
            foreach ( $row['tags'] as $value ) {
                
                $value = trim( $value );
                
                if( $config['allow_alt_url'] == "yes" ) $tags[] = "<a href=\"" . $config['http_home_url'] . $_GET['seocat'] . "/tags/" . urlencode( $value ) . "/\">" . $value . "</a>";
                else $tags[] = "<a href=\"$PHP_SELF?do=tags&amp;tag=" . urlencode( $value ) . "/\">" . $value . "</a>";
            
            }
            $tpl->set( '{tags}', implode( ", ", $tags ) );
        
        } else {
            
            $tpl->set_block( "'\\[tags\\](.*?)\\[/tags\\]'si", "" );
            $tpl->set( '{tags}', "" );
        
        }
Если не ошибся, то должно сработать.

dominika
Юзер

dominika - 15 июня 2015 19:03 -

Не пойму в чем дело, но id новости выводит не правильный.
В шаблоне вывожу этим тегом.
{full-link}

Название правильное, а id нет.
/2282-pins-and-needles.html

FastFud
Юзер

FastFud - 15 июня 2015 20:08 -

А так:
$db->query( "SELECT p.*, t.* FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_tags t ON (t.news_id=p.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" );

dominika
Юзер

dominika - 15 июня 2015 20:12 -

Так же.

FastFud
Юзер

FastFud - 15 июня 2015 20:14 -

Замените еще:
$this_date = ( $config['no_date'] AND !$config['news_future'] ) ? " AND " . PREFIX . "_post.date < '" . $this_date . "'" : "";
на
$this_date = ( $config['no_date'] AND !$config['news_future'] ) ? " AND p.date < '" . $this_date . "'" : "";

dominika
Юзер

dominika - 15 июня 2015 20:18 -

Нет

FastFud
Юзер

FastFud - 15 июня 2015 20:19 -

А со стандартным запросом правильно находит ?

dominika
Юзер

dominika - 15 июня 2015 20:19 -

Да правильно.

FastFud
Юзер

FastFud - 15 июня 2015 20:47 -

Я не понимаю почему в dle теги записываются и в dle_post и в отдельной таблицы(dle_tags). Оставьте стандартный запрос и остальные изменения:
if( $config['allow_tags'] and $row['tags'] ) {
            
            $tpl->set( '[tags]', "" );
            $tpl->set( '[/tags]', "" );
            
            $tags = array ();
            
            $row['tags'] = explode( ",", $row['tags'] );
            
            foreach ( $row['tags'] as $value ) {
                
                $value = trim( $value );
                
                if( $config['allow_alt_url'] == "yes" ) $tags[] = "<a href=\"" . $config['http_home_url'] . $_GET['seocat'] . "/tags/" . urlencode( $value ) . "/\">" . $value . "</a>";
                else $tags[] = "<a href=\"$PHP_SELF?do=tags&amp;tag=" . urlencode( $value ) . "/\">" . $value . "</a>";
            
            }
            $tpl->set( '{tags}', implode( ", ", $tags ) );
        
        } else {
            
            $tpl->set_block( "'\\[tags\\](.*?)\\[/tags\\]'si", "" );
            $tpl->set( '{tags}', "" );
        
        }

dominika
Юзер

dominika - 15 июня 2015 20:56 -

Если я оставлю стандартный запрос теги не выводятся
$db->query("SELECT id, short_story, title, date, xfields, alt_name, category 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");

FastFud
Юзер

FastFud - 15 июня 2015 20:58 -

$db->query( "SELECT * 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" );

dominika
Юзер

dominika - 15 июня 2015 21:10 -

Ну вот теперь нормально!
Ещё вопросик, если мне нужно теги вывести текстом а не ссылкой, я поменял это
                if( $config['allow_alt_url'] == "yes" ) $tags[] = "<a href=\"" . $config['http_home_url'] . $_GET['seocat'] . "/tags/" . urlencode( $value ) . "/\">" . $value . "</a>";
                else $tags[] = "<a href=\"$PHP_SELF?do=tags&amp;tag=" . urlencode( $value ) . "/\">" . $value . "</a>";

на это
                if( $config['allow_alt_url'] == "yes" ) $tags[] = "$value";
                else $tags[] = "$value";

Всё работает, но правильно это или нет?

FastFud
Юзер

FastFud - 15 июня 2015 21:22 -

Думаю что правильнее будет так:
if( $config['allow_tags'] and $row['tags'] ) {
    $tpl->set( '[tags]', "" );
    $tpl->set( '[/tags]', "" );
    $tpl->set( '{tags}', $row['tags'] );
} else {
    $tpl->set_block( "'\\[tags\\](.*?)\\[/tags\\]'si", "" );
    $tpl->set( '{tags}', "" );
}

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

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

наверх