Вход • Регистрация

Вывод изображения в поиске

  • 19 января 2014 г.
  • Кто нибудь может поделиться решением, как вывести в поиске прикрепленное к элементам изображение. Ну само собой только первое из массива, все ненужны.
    • 22 января 2014 г.
    • Про какие элементы идет речь? Про товары? Тогда если использовать поиск по товарам, сделать шаблон и выводить там только поле название товара, то при поиске выпадает обычная плитка товаров, кторая редактируется в shop.list.block или как он там пишется
      • 22 января 2014 г.
      • Нет, не только товары. Любые статьи, новости, товары, все в общем
  • 11 мая 2018 г. , редакция: 11 мая 2018 г.
  • Подниму древнюю темку.

    Проблема в чем: сайт древней версии 5.3. Обновлять сейчас не вариант, потому что автоматом сделать не получится, а переносить вручную товары и запиленные изменения - адская работа.

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

    Код
    if (! empty($result["value"]))
    {
    echo '<div class="search_result">'.$this->diafan->_('Всего найдено').": <b>".$result["value"].": ".$result["count"]."</b>
    <br>".$this->diafan->_('Документы: <strong>%d—%d</strong> из %d найденных', true, $result["count_start"], $result["count_finish"], $result["count"])
    . '</div>';

    if (!empty($result["rows"]))
    {
    $i = $result["count_start"];
    foreach ($result["rows"] as $row)
    {
    echo '<div class="search_list">'.$i++.'. '
    .'<a href="'.BASE_PATH_HREF.$row["link"].'">'.$row["name"].'</a>'
    .'<br>'
    .$row["snippet"]
    .'<br>'
    .'<a href="'.BASE_PATH_HREF.$row["link"].'">http://'.BASE_URL.'/'.$row["link"].'</a>'
    .'</div>';
    }
    }

    echo (!empty($result["paginator"]) ? $result["paginator"] : '');
    }
    else
    {
    echo '<div class="search_result">'.$this->diafan->_('Извините, слово для поиска не задано.').'</div>';
    }


    В последних версиях (6.0 например) добавлено перед выводом такое:

    Код
    if (! empty($res["class"]))
    {
    echo $this->get($res["func"], $res["class"], $res);
    }


    Благодаря чему, если находятся товары, то они отображаются так, как в категории магазина.

    Собственно, это и нужно.

    Сообразить, куда этот код ведет и что вызывает, не получилось. Где-то что-то упускаю.
    Может быть специалисты смогут подсказать что-то по данному вопросу. Куда хоть копать? Или вообще возможно вызвать картинки вместе с названием найденного товара?

    Если получится вызвать картинки, то остальное уже дорисую. Больше ничего и не нужно.

    Заранее спасибо за подсказки.
    • 11 мая 2018 г.
    • На бум говорю, вообще проверять нужно, вот и проверите:)
      Тупо скопируйте с файла shop.view.rows.php вывод картинок и вставьте сюда.
      Наверняка в массиве result присутствуют картинки
      • 11 мая 2018 г.
      • Вы будете смеяться, но в этой версии такого файла вообще не существует

        $row["img"] пыталась всунуть, не тянет.
        • 11 мая 2018 г.
        • Напишите сл. код в этом файле
          Код

          echo '<pre>';
          print_r($result);
          echo '</pre>;


          И покажите мне что вывелось
          • 11 мая 2018 г.
          • Код
            [rows] => Array
            (
            [0] => Array
            (
            [name] => Жеребец фриз (производитель)
            [url] => shop/ekzoticheskie-porody/zherebets-friz-proizvoditelROUTE_END
            [snippet] => Жеребец фриз (производитель) Предлагается на продажу шикарный жеребец фризской упряжной...
            [link] => shop/ekzoticheskie-porody/zherebets-friz-proizvoditel/
            )
            [1] => Array
            (
            [name] => Андалузский жеребец
            [url] => shop/ekzoticheskie-porody/andaluzskiy-zherebetsROUTE_END
            [snippet] => Андалузский жеребец Предлагается на продажу красивый жеребец, тип Барокко, вывезеный...
            [link] => shop/ekzoticheskie-porody/andaluzskiy-zherebets/
            )

            [2] => Array
            (
            [name] => Жеребец пони-класс
            [url] => shop/poni/zherebets-poni-klassROUTE_END
            [snippet] => Жеребец пони-класс Предлагается на продажу изящный гнедой жеребец пони-класс (райд...
            [link] => shop/poni/zherebets-poni-klass/
            )

            [3] => Array
            (
            [name] => Вороной орловец
            [url] => shop/rysaki/voronoy-orlovets1032ROUTE_END
            [snippet] => Вороной орловец Предлагается на продажу орловский жеребец вороной, 2010 года рождения,...
            [link] => shop/rysaki/voronoy-orlovets1032/
            )

            )

            [count] => 152
            [count_start] => 1
            [count_finish] => 10
            [count_page] => 10
            [value] => жеребец
            [action] => /search/
            [button] => Найти
          • 11 мая 2018 г.
          • Т.е. я вижу вообще только 3 параметра: имя, ссылку и сниппет.
            • 11 мая 2018 г. , редакция: 11 мая 2018 г.
            • Тогда все посложнее, чем я предполагал, нужно в модельку лезть, найти функцию которая собирает этот массив и дополнить его фотографиями.

              Если найдете мне эту функцию и вставите сюда, напишу что нужно дополнить.

              файл shop.model.php, если в той версии конечно не так все сильно по другому)))))

              примерное название функции list_search()
              • 11 мая 2018 г.
              • Файл search.model.php, в шопе нормально, если делать поиск-фильтр по товарам.
          • 11 мая 2018 г.
          • Из модельки поиска

            Код
            SELECT r.name, r.url, r.snippet".

            Видимо, вот эти три параметра... наверно...
            • 11 мая 2018 г.
            • Скорей всего оно, скопируйте всю функцию.
            • 11 мая 2018 г.
            • Код
              /**
              * Search_model
              */
              class Search_model extends Model
              {
              /**
              * Генерирует список найденных страниц
              *
              * @return array
              */
              public function show_module()
              {
              $search = '';
              if (isset($_GET["searchword"]))
              {
              if (is_array($_GET["searchword"]))
              {
              $_GET["searchword"] = '';
              }
              $search = trim(htmlspecialchars(stripslashes($_GET["searchword"])));
              if(empty($_SESSION["search"]) || ! in_array($_GET["searchword"], $_SESSION["search"]))
              {
              $_SESSION["search"][] = $_GET["searchword"];
              if($count = $this->diafan->configmodules("count_history"))
              {
              DB::query("INSERT INTO {search_history} (created, name) VALUES (%d, '%h')", time(), $_GET["searchword"]);
              if(DB::query_result("SELECT COUNT(*) FROM {search_history}") > $count)
              {
              DB::query("DELETE FROM {search_history} ORDER BY created ASC LIMIT 1");
              }
              }
              }
              }
              $this->result = array();

              if (! empty($search))
              {
              Customization::inc('includes/searchwords.php');
              $searchwords = new Searchwords();
              $search_words = $searchwords->prepare($search);

              $keys = array();
              $result = DB::query("SELECT id, keyword FROM {search_keywords} WHERE keyword IN ('".implode("', '", $search_words)."')");
              while ($row = DB::fetch_array($result))
              {
              $keys[$row["keyword"]] = $row["id"];
              }
              DB::free_result($result);

              $temp_table = false;
              if($this->diafan->configmodules("search_all_word", "search"))
              {
              $order = '';
              // обязательны все слова
              $where = "";
              foreach($search_words as $k => $key)
              {
              $where .= " INNER JOIN {search_index} AS i".$k." ON r.id=i".$k.".result_id AND i".$k.".keyword_id=".$keys[$key];
              $order .= 'i'.$k.'.rating ASC, ';
              }
              $order .= "r.rating DESC";
              }
              else
              {
              // ищет хотя бы одно слово, сортировка по количеству найденных
              $where = "INNER JOIN {search_index} AS i ON r.id=i.result_id AND i.keyword_id IN ('".implode("', '", $keys)."')";
              if(count($search_words) > 1)
              {
              $temp_table = true;
              DB::query("CREATE TEMPORARY TABLE {search_temp} (
              keyword_id int(11) unsigned NOT NULL,
              rating tinyint(2) unsigned NOT NULL
              );");
              $where .= " INNER JOIN {search_temp} AS t ON t.keyword_id=i.keyword_id";
              $query = '';
              foreach($search_words as $i => $word)
              {
              $query .= ($query ? "," : '')." (".$keys[$word].", ".(count($search_words) - $i).")";
              }
              DB::query("INSERT INTO {search_temp} (keyword_id, rating) VALUES".$query);
              }
              $order = ($temp_table ? "tmp_rating" : "r.rating")." DESC";
              }

              $nen = DB::query_result("SELECT COUNT(DISTINCT r.id) FROM {search_results} AS r "
              .($this->diafan->_user->role_id ? " LEFT JOIN {access} AS a ON a.element_id=r.id AND a.module_name='search'" : "")
              .$where." WHERE r.lang_id=%d"
              ." AND (r.access='0'"
              .($this->diafan->_user->role_id ? " OR r.access='1' AND a.role_id=".$this->diafan->_user->role_id : '')
              .")", _LANG);

              ////navigation//
              if ($nastr = $this->diafan->configmodules("nastr", "search"))
              {
              $this->diafan->_paginator->nastr = $nastr;
              }
              $this->diafan->_paginator->page = $this->diafan->page;
              $this->diafan->_paginator->navlink = $this->diafan->_route->current_link("page");
              $this->diafan->_paginator->get_nav = '?searchword='.$search;
              $this->diafan->_paginator->nen = $nen;
              $links = $this->diafan->_paginator->get();
              ////navigation///

              $k = ! $this->diafan->page ? 1 : ($this->diafan->page - 1) * $this->diafan->_paginator->nastr + 1;

              $this->result["paginator"] = $this->diafan->_tpl->get('get', 'paginator', $links);

              $count = 0;
              $result = DB::query_range("
              SELECT r.name, r.url, r.snippet".($temp_table ? ", SUM(t.rating) AS tmp_rating" : "")." FROM {search_results} as r "
              .($this->diafan->_user->role_id ? " LEFT JOIN {access} AS a ON a.element_id=r.id AND a.module_name='search'" : "")
              .$where
              ." WHERE r.lang_id=%d"
              ." AND (r.access='0'"
              .($this->diafan->_user->role_id ? " OR r.access='1' AND a.role_id=".$this->diafan->_user->role_id : '')
              .")"
              ." GROUP BY r.id ORDER BY ".$order,
              _LANG, $this->diafan->_paginator->polog, $this->diafan->_paginator->nastr);
              while ($row = DB::fetch_array($result))
              {
              $row["link"] = str_replace('ROUTE_END', ROUTE_END, $row["url"]);
              $this->result["rows"][] = $row;
              $count++;
              }
              DB::free_result($result);

              $this->result["count"] = $this->diafan->_paginator->nen;
              $this->result["count_start"] = $this->result["count"] ? ($this->diafan->_paginator->page - 1) * $this->diafan->_paginator->nastr + 1 : 0;
              $this->result["count_finish"] = $this->result["count"] ? $this->result["count_start"] - 1 + $count : 0;
              $this->result["count_page"] =
              $this->diafan->_paginator->nen > $this->diafan->_paginator->nastr ?
              $this->diafan->_paginator->nastr : $this->diafan->_paginator->nen;
              }
              $this->result["value"] = $search;
              $this->result["action"] = BASE_PATH_HREF.$this->diafan->_route->link($this->diafan->cid);
              $this->result["button"] = 'Найти';

              return $this->result;
              }

              /**
              * Генерирует контент для шаблонной функции: форма поиска по сайту
              *
              * @return array
              */
              public function show_search($button)
              {
              $result["value"] = '';
              if (isset($_GET["searchword"]))
              {
              if (is_array($_GET["searchword"]))
              {
              $_GET["searchword"] = '';
              }
              $result["value"] = trim(htmlspecialchars(stripslashes($_GET["searchword"])));
              }
              $result["action"] = BASE_PATH_HREF.$this->diafan->_route->module('search', true);
              $result["button"] = $button;
              return $result;
              }
              }
            • 11 мая 2018 г.
            • Упс, погорячилась. Всю модель пихнула
              • 11 мая 2018 г.
              • вот как мы сделаем, будет проще, в модельке сейчас только id товара вытащим, а то даже его нет.
                Код

                $result = DB::query_range("
                SELECT r.id, r.name, r.url, r.snippet"


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

                Вначале цикла форыча

                Код
                foreach ($result["rows"] as $row)
                {


                Вставьте этот код

                Код

                $images = $this->diafan->_images->get("medium", $row["id"], "shop", "element", 0, $row["name"], false, 2, "large")

                foreach($images as $img){
                echo '<img src="'.$img["src"].'" alt="'.$img["alt"].'" title="'.$img["title"].'">';
                }



                если ничего не напутал, и я не знаю, сработает ли этот код в вашей версии, попробуйте.
              • 11 мая 2018 г.
              • Цитата
                в модельке сейчас только id товара вытащим

                Это получилось.

                Цитата
                Вставьте этот код

                В общем, не цепляет.

                print_r($result);
                видит
                Код
                [rows] => Array
                (
                [0] => Array
                (
                [id] => 7279
                [name] => Андалузский жеребец
                [url] => shop/ekzoticheskie-porody/andaluzskiy-zherebetsROUTE_END
                [snippet] => Андалузский жеребец Предлагается на продажу красивый жеребец, тип Барокко, вывезеный...
                [link] => shop/ekzoticheskie-porody/andaluzskiy-zherebets/
                )


                Но общее направление поняла. Спасибо. Еще покопаюсь...
                В новых версиях выводится же как-то эта картинка. Значит модельки еще сравнить попробовать можно.
              • 11 мая 2018 г. , редакция: 11 мая 2018 г.
              • Резалт правильный выводит, мы туда только айди добавили, Вы код добавили с картинками?
                Ошибка выводиться какая нибудь?

                Добавьте сл.код если нет ошибки.

                Код
                echo '<pre>';
                print_r($images);
                echo '</pre>';


                P.S. Я посмотрел документацию по диафану 5.3. там есть поддержка того что я написал.

                P.P.S. Проверил еще раз))))

                Нужно заменить чутка
                Код
                $images = $this->diafan->_images->get("medium", $row["id"], "shop", 0, $row["name"], false, 2, "large")
  • 11 мая 2018 г.
  • Цитата
    Вы код добавили с картинками?

    Да и заменила сейчас новым.

    Цитата
    Ошибка выводиться какая нибудь?

    Ошибок не вижу.

    Цитата
    echo '<pre>';
    print_r($images);
    echo '</pre>';

    Вообще ничего не вывело, кроме самого поиска.

    Цитата
    Я посмотрел документацию по диафану 5.3.

    Подскажите ссылку, пожалуйста, я почему-то совсем не вижу такой документации. Да и дистрибутива оригинального нет.
    • 11 мая 2018 г.
    • Цитата
      Подскажите ссылку, пожалуйста, я почему-то совсем не вижу такой документации. Да и дистрибутива оригинального нет.

      https://www.diafan.ru/docs/manual_diafan.CMS_5.3.pdf

      Цитата
      Вообще ничего не вывело, кроме самого поиска.

      Скопируйте всю вьюху.
      Он не может ничего не вывести. Включен режим разработчика?
      • 11 мая 2018 г.
      • За ссыль спасибо.

        Цитата
        Включен режим разработчика?

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

        В любом случае спасибо за помощь, поддержку и подпинывания в нужном направлении.
        Позднее отпишусь, а пока почитаю матчасть.
  • 11 мая 2018 г.
  • Истину глаголите, Степан. Нарисовались ошибки в режиме разработчика. Действительно отключили ночью его.
    Код

    Undefined variable: images
    #1 include(/home/g/goldgadgru/traversale/public_html/modules/search/views/search.view.show.php) called at [/home/g/goldgadgru/traversale/public_html/includes/template.php:92]
    #2 Template->get(show, search, Array(...)) called at [/home/g/goldgadgru/traversale/public_html/modules/search/search.php:40]
    #3 Search->show_module() called at [/home/g/goldgadgru/traversale/public_html/includes/function.php:118]
    #4 Theme_functions->show_module() called at [/home/g/goldgadgru/traversale/public_html/includes/function.php:57]
    #5 Theme_functions->show_body(Array(...)) called at [(null):0]
    #6 call_user_func_array(Array(...), Array(...)) called at [/home/g/goldgadgru/traversale/public_html/includes/parser_theme.php:216]
    #7 Parser_theme->start_element(Array(...)) called at [/home/g/goldgadgru/traversale/public_html/includes/parser_theme.php:106]
    #8 Parser_theme->get_function_in_theme(<?php if(!defined("DIAFAN")){include("../includes/404.php");exit();}?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www...) called at [/home/g/goldgadgru/traversale/public_html/includes/parser_theme.php:68]
    #9 Parser_theme->show_theme(Search) called at [/home/g/goldgadgru/traversale/public_html/includes/init.php:395]
    #10 Init->start() called at [/home/g/goldgadgru/traversale/public_html/index.php:62]


    Говорит, что неопределенная переменная.
    • 12 мая 2018 г.
    • Нужно еще вчера была скопировать мне всю вашу вьюху.

      Цитата
      Скопируйте всю вьюху.
      • 12 мая 2018 г.
      • Код
        <?php
        /**
        * Шаблон результатов поиска по сайту
        *
        * @package Diafan.CMS
        * @author diafan.ru
        * @version 5.3
        * @license http://cms.diafan.ru/license.html
        * @copyright Copyright (c) 2003-2013 OOO «Диафан» (http://diafan.ru)
        */
        if (!defined('DIAFAN'))
        {
        include dirname(dirname(dirname(__FILE__))).'/includes/404.php';
        }

        if (! empty($result["value"]))
        {
        echo '<div class="search_result">'.$this->diafan->_('Всего найдено').": <b>".$result["value"].": ".$result["count"]."</b>
        <br>".$this->diafan->_('Документы: <strong>%d—%d</strong> из %d найденных', true, $result["count_start"], $result["count_finish"], $result["count"])
        . '</div>';

        if (!empty($result["rows"]))
        {
        $i = $result["count_start"];
        foreach ($result["rows"] as $row)
        {

        $images = $this->diafan->_images->get("medium", $row["id"], "shop", 0, $row["name"], false, 2, "large");
        foreach ($images as $img) {
        echo '<img src="'.$img["src"].'" alt="'.$img["alt"].'" title="'.$img["title"].'">';
        }


        echo '<div class="search_list">'.$i++.'. '
        .'<a href="'.BASE_PATH_HREF.$row["link"].'">'.$row["name"].'</a>'
        .'<br>'
        .$row["snippet"]
        .'<br>'
        .'<a href="'.BASE_PATH_HREF.$row["link"].'">http://'.BASE_URL.'/'.$row["link"].'</a>'
        .'</div>';
        }
        }

        echo (!empty($result["paginator"]) ? $result["paginator"] : '');
        }
        else
        {
        echo '<div class="search_result">'.$this->diafan->_('Извините, слово для поиска не задано.').'</div>';
        }
        • 12 мая 2018 г.
        • Я чутка отформатировал код и добавил условие, чтобы ошибку убрать, но саму проблему не решил, будь доступы конечно уже 10 раз сделал бы. Попробуйте поиграться с 4 параметром, который сейчас указан 0, в функции get(). Это айди сайта, к которому прикреплены изображения, в последней версии диафана там можно оставить 0 и все ок, а в этой возможно нужно написать номер страницы сайта, к которой прикреплен магазин.
          Код

          <?php if(!defined('DIAFAN')){include dirname(dirname(dirname(__FILE__))).'/includes/404.php';}

          if(!empty($result["value"])){
          echo '<div class="search_result">'.$this->diafan->_('Всего найдено').": <b>".$result["value"].": ".$result["count"]."</b>
          <br>".$this->diafan->_('Документы: <strong>%d—%d</strong> из %d найденных', true, $result["count_start"], $result["count_finish"], $result["count"])
          . '</div>';

          if(!empty($result["rows"])){
          $i = $result["count_start"];
          foreach ($result["rows"] as $row){

          $images = $this->diafan->_images->get("medium", $row["id"], "shop", 0, $row["name"], false, 1, "large");

          if(!empty($images)){
          foreach($images as $img){
          echo '<img src="'.$img["src"].'" alt="'.$img["alt"].'" title="'.$img["title"].'">';
          }
          }

          echo '<div class="search_list">'.$i++.'. '
          .'<a href="'.BASE_PATH_HREF.$row["link"].'">'.$row["name"].'</a>'
          .'<br>'
          .$row["snippet"]
          .'<br>'
          .'<a href="'.BASE_PATH_HREF.$row["link"].'">http://'.BASE_URL.'/'.$row["link"].'</a>'
          .'</div>';

          }
          }
          echo (!empty($result["paginator"]) ? $result["paginator"] : '');
          }else{
          echo '<div class="search_result">'.$this->diafan->_('Извините, слово для поиска не задано.').'</div>';
          }
        • 12 мая 2018 г.
        • В общем, не хочет совсем выводить.
          Ошибок в режиме разработчика не обнаружено.
          id магазина = 1. Поставила, тоже не хочет.
          Видимо, пилить нужно глубже.

          П.С. Отняла у вас кучу времени...
          • 12 мая 2018 г.
          • Короче, я не знаю какого эта функция ничего не возвращает, все должно работать, нужно вникать больше.
            По большому счету можем тупо сделать запрос в базу да и похер в данном случае.

            Код

            <?php if(!defined('DIAFAN')){include dirname(dirname(dirname(__FILE__))).'/includes/404.php';}

            if(!empty($result["value"])){
            echo '<div class="search_result">'.$this->diafan->_('Всего найдено').": <b>".$result["value"].": ".$result["count"]."</b>
            <br>".$this->diafan->_('Документы: <strong>%d—%d</strong> из %d найденных', true, $result["count_start"], $result["count_finish"], $result["count"])
            . '</div>';

            if(!empty($result["rows"])){
            $i = $result["count_start"];
            foreach($result["rows"] as $row){

            $img_product = DB::query_fetch_array('SELECT name, [alt], [title] FROM {images} WHERE module_name="shop" AND element_id="%d" AND trash="0"', $row['id']);

            if(!empty($img_product)){
            echo '<img src="'.BASE_PATH_HREF.'/userfiles/shop/medium/'.$img_product["name"].'" alt="'.$img_product["alt"].'" title="'.$img_product["title"].'">';
            }

            echo '<div class="search_list">'.$i++.'. '
            .'<a href="'.BASE_PATH_HREF.$row["link"].'">'.$row["name"].'</a>'
            .'<br>'
            .$row["snippet"]
            .'<br>'
            .'<a href="'.BASE_PATH_HREF.$row["link"].'">http://'.BASE_URL.'/'.$row["link"].'</a>'
            .'</div>';

            }
            }
            echo (!empty($result["paginator"]) ? $result["paginator"] : '');
            }else{
            echo '<div class="search_result">'.$this->diafan->_('Извините, слово для поиска не задано.').'</div>';
            }



            Посмотрите только путь правильный ли я записал, я не знаю какой он в вашем случае. Это где выводим картинку в атрибуте "src"

Новости

  • Вчера, 09:05
  • В новой сборке совершили революцию в структурировании кастомизированной информации в шаблонах, добавили авторегистрацию пользователей, усовершенствовали защиту от спама, актуализировали накопительную скидку, а также улучшили производительность и стабильность работы системы.
  • 12 января
  • После выхода сборки 7.1 мы выпустили уже три патча, в каждом из которых улучшаем административную часть сайта. Сборка DIAFAN.CMS 7.1.3 уже доступна к установке. 
  • 15 декабря 2023 г.
  • Подводим итоги 2023 года. Выпустили новую сборку DIAFAN.CMS 7.1.1, вводим новые тарифы на аренду сайта и коммерческую поддержку и автообновления с января 2024 г., строим планы на будущий год.