Перейти к содержанию
Официальный форум поддержки Simpla

Картинка для категории из товара внутри этой категории


Рекомендуемые сообщения

Выкладываю решение, может кому полезно будет.

Суть решения:

Если категории не задано изображение в админке, то изображение берется из товара внутри этой категории. Если у первого товара нет картинки, то проверка второго и так далее до первого товара с картинкой. Если у всех товаров внутри категории нет картинки, то выводится просто картинка paceholder.jpg (заглушка)

Редактируем файл ProductsView.php (вставляем кусок кода в любое место)

$query = "SELECT  
                    p.id,
                    i.filename,
                    c.category_id
                FROM __products p
                LEFT JOIN __images i ON p.id = i.product_id
                LEFT JOIN __products_categories c ON p.id = c.product_id ";
            $query = $this->db->placehold($query);
            $this->db->query($query);
            $cats_image = $this->db->results();
        $this->design->assign('cats_image', $cats_image);

Далее в шаблоне вывода товаров (у меня там над товарами выводятся подкатегории) прогоняем полученный массив объектов и выводим нужные картинки для подкатегорий, у меня это отдельный файл шаблона, но по умолчанию это было бы в файле шаблона products.tpl

   {function name=categories_tree_2 level=0}
        <ul class="ul_podkat">
            {foreach $categories as $c}
                 {if $level!=0 && $c->parent_id == $category->id}
                      {if $c->image}
                       <li>
                           <a href="catalog/{$c->url}">
                               <img src="/files/categories/{$c->image}">
                               <span>{$c->name}</span>
                            </a>
                        </li>
                    {else}
                       <li>
                           <a href="catalog/{$c->url}">
                                {foreach $cats_image as $c_image}
                                   {if $c->id != $c_image->category_id}
                                    {else}
                                        {if $c_image->filename!=""}
                                           <img src="{$c_image->filename|resize:128:128}">
                                           {break}
                                        {else}
                                            <img src="/design/{$settings->theme|escape}/images/placeholder.png">
                                        {/if}
                                        {break}
                                   {/if}
                                {/foreach}
                               <span>{$c->name}</span>
                            </a>
                        </li>
                    {/if}
                 {/if}
                 {if $c->subcategories}
                      {categories_tree_2 categories=$c->subcategories level=$level+1}
                 {/if}
            {/foreach}
       </ul>
   {/function}

Вот как-то так получилось :)

Изменено пользователем verdano
Ссылка на сообщение
Поделиться на другие сайты

Как упражнение для начинающего осваивать Simpla это годится. 

Но как разработка для внедрения, это ниже всякой критики.

1. Сам запрос получает данные по ВСЕМ товарам, категориям, фото. 
2. Если, к примеру, на сайте 20 категорий, 50 товаров в категории, 4 фото у товара, то запрос будет извлекать 4000 записей, их которых реально нужны только 20.
3. Для сайтов с большим числом товаров возникает риск больших тормозов вплоть до полного зависания.
4. И сама логика не без недостатков. Например, если непосредственно в категории товаров нет, но они есть в подкатегориях, то предлагаемый способ не сформирует картинку для категории. 
5. В шаблоне для каждой категории работает цикл {foreach $cats_image as $c_image} ... {/foreach}, что опять таки крайне нерационально, и может добавить тормоза к описанным ранее. А с учетом п.4 с большой вероятностью в цикле будут встречаться категории, для которых цикл безрезультатно проработает до конца.
6. И вывод в шаблоне неверный - для каждой категории выводится, вообще говоря, несколько картинок /images/placeholder.png.

Что делать?

7. Простое применение GROUP BY в запросе могло бы улучшить ситуацию.
8. Также в запросе полезно было бы использовать INNER JOIN вместо LEFT JOIN.
9. Результаты запроса надо бы обработать в PHP и в шаблон передавать только небольшой объем действительно нужных данных.

А лучше всего было бы

10. Вместо предложенного написать обработку, которая проверяет картинки категорий и добавляет в категорию, если надо, картинку из товара. Обработку достаточно запустить один раз (или изредка время от времени), а дальше все работало бы штатно без выкрутасов. 

 

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...