Постер в быстром поиске через доп. поле и короткую новость

Maxim

Active member
Команда форума
Не в сети
1499632676_1473704748_2016-09-12_20-24-371.png
Наверное многие замечали на сайтах, что когда задаёшь поисковой запрос в строчке, то результат поиска будет содержать в себе не только название искомого, но и изображение, постер, к этой статье.
Предлагаю 2 варианта реализации сего хака: через дополнительное поле и из короткой новости.

Начнём с доп. поля.
Открываем файл engine/ajax/search.php

ищем
PHP:
$db->query("SELECT id, short_story, title, date,
далее добавляем
xfields,
у нас получается
PHP:
$db->query("SELECT id, short_story, title, date, xfields, alt_name, category
ищем
PHP:
$description = preg_replace( "'\[attachment=(.*?)\]'si", "", $description );
ниже ставим
PHP:
$xf = xfieldsdataload( $row['xfields'] );
ищем
PHP:
$buffer .= "<a href=\"" . $full_link . "\">
добавляем после
PHP:
<img src=\"".$xf['poster']."\" style=\"float:left; max-width:50px; margin-right:5px;\">
у нас получится
PHP:
$buffer .= "<a href=\"" . $full_link . "\"><img src=\"".$xf['poster']."\" style=\"float:left; max-width:50px; margin-right:5px;\">

$xf['poster'] - тут poster меняем на своё значение поля

для вывода из краткой новости
Открываем файл engine/ajax/search.php
ищем
PHP:
        $row['category'] = intval( $row['category'] );
ниже ставим
PHP:
        $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";

        }

$config['http_home_url'] . templates/" . $config['skin'] . "/dleimages/no_image.jpg
тут, либо ты кидаем в папку dleimages своего шаблона заглушку no_image.jpg, либо заменяем на свою
ищем
PHP:
$buffer .= "<a href=\"" . $full_link . "\">
меняем на
PHP:
$buffer .= "<a href=\"" . $full_link . "\"><img src=\"" . $image . "\" alt=\"" . stripslashes( $title ) . "\" title=\"" . stripslashes( $title ) . "\" style=\"float: left;width: 70px;height: auto;margin: 0px 3px 3px 0px;\">

Радуемся ))) Метод не новый, будет работать на версиях 9.х -11.х
 
АТ
Maxim

Maxim

Active member
Команда форума
Не в сети
[post=137]Вопрос: Как изменить внешний вид выпадающего списка?[/post]
Проделываем выше указанные инструкции до пункта с xf

далее, ищем и заменяем этот код:
PHP:
$buffer .= "<a href=\"" . $full_link . "\"><span class=\"searchheading\">" . stripslashes( $title ) . "</span>";

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

на
PHP:
        $buffer .= "<div class=\"search-quick-item\" id=\"{$row['id']}\">
    <a href=\"{$full_link}\">
        <span class=\"\">
            <img src=\"{$xf['poster']}\" class=\"poster\">
        </span>
        <div class=\"right\">
            <div class=\"title\">{$title}</div>";
        if (!empty($xf['original']) && isset($xf['original']))
            $buffer .= "<div class=\"original-title\">{$xf['original']}</div>";
        $buffer.= "<div>
                <span class=\"year\">{$xf['year']}</span>
                <span class=\"category\">{$cat_info[$row['category']]['name']}</span>
            </div>
        </div>
    </a>
</div>";

далее ищем и меняем
PHP:
$buffer .= '<span class="seperator"><a href="'.$config['http_home_url'].'?do=search&amp;mode=advanced&amp;subaction=search&amp;story='.$query.'">'.$lang['s_ffullstart'].'</a></span><br class="break" />';
на
PHP:
$buffer .= '<a href="'.$config['http_home_url'].'?do=search&amp;mode=advanced&amp;subaction=search&amp;story='.$query.'" class="showAllResults">'.$lang['s_ffullstart'].'</a>';

и наконец меняем
PHP:
echo $buffer;
на
PHP:
echo '<div class="searchResults">' . $buffer . '</div>';

Вот и стили
CSS:
.searchResults {
    top: 60px;
    left: 1px;
    width: 480px;
    height: auto;
    z-index: 500;
    font-size: 0;
    display: none;
    line-height: 0;
    position: absolute;
    box-shadow: 0 19px 29px rgba(0,0,0,0.2);
}

.searchResults.opened {
    display: block;
}

.searchResults .search-quick-item {
    height: auto;
    font-size: 0;
    cursor: default;
    background: white;
    position: relative;
    display: inline-block;
    padding: 20px 23px 17px 20px;
    box-shadow: inset 0 -1px 0 0 #efefef;
}

.searchResults .showAllResults {
    color: #f26739;
    height: 40px;
    display: block;
    padding: 0 20px;
    font-size: 14px;
    background: #fff;
    font-weight: 400;
    line-height: 40px;
}

.searchResults .search-quick-item a {
    display: inline-block;
}

.searchResults .search-quick-item .right {
    float: left;
    width: 377px;
    margin-left: 20px;
    line-height: 20px;
    vertical-align: top;
}

.searchResults .search-quick-item .poster {
    width: 40px;
    float: left;
    height: 60px;
}

.searchResults .search-quick-item .right .title {
    top: -3px;
    color: #292c33;
    font-size: 20px;
    font-weight: 700;
    line-height: 20px;
    position: relative;
}

.searchResults .search-quick-item .right .original-title {
    color: #8f95a3;
    font-size: 14px;
    font-weight: 500;
}

.searchResults .search-quick-item .right .year,
.searchResults .search-quick-item .right .category {
    margin-right: 5px;
}

значения меняем все под себя

не тестировалось, не гарантирую работоспособность. код брался с версии дле 13.2
 

redflamegroup

New member
Не в сети
А как вставить уменьшенную версию изображений для поле {$xf['poster']} а то он даёт вот такой результат /2017-11/88_nekojiru-so.jpg а для уменьшенной копии (thumb) нужно добавить в ссылку директорию /2019-10/thumb/58488_nekojiru-so.jpg


вот разница
/2017-11/88_nekojiru-so.jpg
/2017-11/thumb/88_nekojiru-so.jpg


как реализовать ?
 
АТ
Maxim

Maxim

Active member
Команда форума
Не в сети
@redflamegroup, гляну, что можно будет сделать, но не до 11. Ноября. Мне нужно сдать документацию к проекту для допуска к экзамену
 
АТ
Maxim

Maxim

Active member
Команда форума
Не в сети
@redflamegroup, привет, пока никак. думал освобожусь, но нет. в январе заканчиваю учёбу. пока готовлюсь к защите проекта
 

Enrico

New member
Не в сети
А из доп.поля галерея можно взять одну из нескольких ссылку прямую на картинку?
 
АТ
Maxim

Maxim

Active member
Команда форума
Не в сети
блин, руки ещё до сюда не дошли 😅

на выходных выложу в виде плагина
 
АТ
Maxim

Maxim

Active member
Команда форума
Не в сети
Можно ли выводить картинки, которые в доп. поле в таком формате /uploads/posts/2021-01/16100-libereya.jpg ?

Если да, то что нужно изменить?
просто обернуть изображение в тег img
img:
<img src=\"{$xf['image']}\">
вместо image своё поле. эту строчку можно вогнать в переменную buffer. В первом посту я привёл пример с постером
 

thinder

New member
Не в сети
просто обернуть изображение в тег img
img:
<img src=\"{$xf['image']}\">
вместо image своё поле. эту строчку можно вогнать в переменную buffer. В первом посту я привёл пример с постером

Вопрос был о картинке в доп поле вид:
PHP:
[img]/uploads/posts/2021-01/1610523280-rodkom.jpg[/img]
 
АТ
Maxim

Maxim

Active member
Команда форума
Не в сети
@thinder, изображение одно в поле или несколько?
 
АТ
Maxim

Maxim

Active member
Команда форума
Не в сети
@thinder, Если одно, то можно использовать такой код
Одно изображение:
preg_match('\[img\]([^\[\]\'"]+)\[\/img\]/', $xf['image'], $images);
И чтобы получить из этого кода ссылку на изображение - нужно указать
Одно изображение:
$images[1];

Если же несколько изображений, то нужен такой код
Несколько изображений:
preg_match_all('\[img\]([^\[\]\'"]+)\[\/img\]/', $xf['image'], $images);
Вывод нужного изображения происходит через следующую переменную:
Несколько изображений:
$images[1][n];
Вместо n нужно указать какое по очерёдности изображение, 0 - 1ое изображение, 1 - 2ое изображение, 2 - 3ье изображение и т.д.

вместо $xf['image'] указываем своё поле.
вместо $images можно использовать свою переменную.
 
Сверху