Бренд в превью товара

Правила раздела: faq.php?mode=okay
Модератор: Модераторы

korshunov
korshunov
Репутация: 146
Сообщения: 1854
Зарегистрирован: 03.12.2015
С нами: 8 лет 3 месяца
Skype

Сообщение #21 korshunov » 27.01.2018, 15:40

makki писал(а):Для справки: В клиентской части функция get_products задействована 8 раз. Из них, только 3 раза, полученная путем left join информация не задействована, если нам нужно вывести бренд во всех местах, где есть превью товара.

А что это значит - задействована СТОЛЬКО-ТО раз?
Как минимум два смысла можно вкладывать:
1. В коде вызов встречается СТОЛЬКО-ТО раз ИЛИ
2. При работе скриптов при формировании страницы такой-то вызов функции делается СТОЛЬКО-ТО раз.

Первый - чисто формальный, для оптимизации мало что значит. А вот второй - совсем другое дело...


А можете дать точный список мест с указанием, где информация задействована, где нет? Что-то мне кажется, маловато насчитано.
По моим сведениям, вызовы для клиентской части есть в 6 файлах view, 4 файлах api, в некоторых более одного раза.

zyxer M
zyxer M
Возраст: 32
Репутация: 77
Сообщения: 419
Зарегистрирован: 03.02.2016
С нами: 8 лет 1 месяц
Откуда: Днепр

Сообщение #22 zyxer » 27.01.2018, 18:55

А почему бы Вам а api/Products не раскомментить код

Код: Выделить всё

/*if (empty($this->all_brands)) {
    foreach ($this->brands->get_brands() as $b) {
        $this->all_brands[$b->id] = $b;
    }
}
if (!empty($this->all_brands)) {
    foreach ($products as $p) {
        if (isset($this->all_brands[$p->brand_id])) {
            $p->brand = $this->all_brands[$p->brand_id]->name;
            $p->brand_url = $this->all_brands[$p->brand_id]->url;
        }
    }
}*/


Он один раз вызовет get_brands() далее все вызовы get_products будут считывать бренды со свойства all_brands
А в дизайне уже проверять {if $product->brand}...{/if}
Но для бОльшей лаконичности, я бы обернул вышеуказанный код в if ($filter['extends_brand']){...} и уже в нужный вызов get_products передавал этот фильтр. Делать это для того, чтобы в админке get_brands() не вызывался.
Всё сказанное мной, является лично моим мнением, и не является официальной позицией OkayCMS

korshunov
korshunov
Репутация: 146
Сообщения: 1854
Зарегистрирован: 03.12.2015
С нами: 8 лет 3 месяца
Skype

Сообщение #23 korshunov » 28.01.2018, 06:42

zyxer писал(а):А почему бы Вам а api/Products не раскомментить код...

Все гениальное просто...

siteapp M
siteapp M
Возраст: 32
Репутация: 7
Сообщения: 118
Зарегистрирован: 12.01.2016
С нами: 8 лет 2 месяца

Сообщение #24 siteapp » 14.05.2018, 19:13

makki писал(а):
IvanovMARK писал(а):Будет развитие магазина? тогда и появятся вопросы.
Меня не надо убеждать, что важно, чтобы решение задач было насколько возможно оптимизировано и менее ресурсозатратно. Я с этим полностью согласен. Именно поэтому, я принял изначальное замечание korshunov и начал искать другие варианты. Также сам korshunov предложил свой вариант.
Безусловно, есть еще варианты решения и возможно они будут более оптимизированы. Но из всех предложенных вариантов, я считаю что 1-й вариан наиболее подходящий. Если нет, переубедите меня или предложите лучший вариант.
Для справки: В клиентской части функция get_products задействована 8 раз. Из них, только 3 раза, полученная путем left join информация не задействована, если нам нужно вывести бренд во всех местах, где есть превью товара.
а изображение тогда как бренда вывести?
:eh:

korshunov
korshunov
Репутация: 146
Сообщения: 1854
Зарегистрирован: 03.12.2015
С нами: 8 лет 3 месяца
Skype

Сообщение #25 korshunov » 15.05.2018, 05:52

Примерно так:
<img src="{$this->all_brands[$p->brand_id]->image|resize:200:200:false:$config->resized_brands_dir}" alt="{$this->all_brands[$p->brand_id]->name|escape}" />

siteapp M
siteapp M
Возраст: 32
Репутация: 7
Сообщения: 118
Зарегистрирован: 12.01.2016
С нами: 8 лет 2 месяца

Сообщение #26 siteapp » 18.05.2018, 15:07

korshunov писал(а):Примерно так:
<img src="{$this->all_brands[$p->brand_id]->image|resize:200:200:false:$config->resized_brands_dir}" alt="{$this->all_brands[$p->brand_id]->name|escape}" />
не хочет)
:eh:

korshunov
korshunov
Репутация: 146
Сообщения: 1854
Зарегистрирован: 03.12.2015
С нами: 8 лет 3 месяца
Skype

Сообщение #27 korshunov » 18.05.2018, 15:19

Может, кто-то что-то и не хочет. Но у меня этот код работает и выдает ожидаемый результат.

антошенька
антошенька
Репутация: 0
Сообщения: 1
Зарегистрирован: 27.09.2018
С нами: 5 лет 6 месяцев

Сообщение #28 антошенька » 27.09.2018, 19:32

Спасибо большое! Всё работает. Парни, извините за глупый вопрос, а свойство (характеристику) товара конкретное именно в превью его карточки можно так вывести? Вот так не получилось вообще - viewtopic.php?f=9&t=384, хочется именно значение (features_value) вывести в превью товара, одного можно по id или всех, что легче.

IvanIvanov
IvanIvanov
Репутация: 0
Сообщения: 9
Зарегистрирован: 12.09.2019
С нами: 4 года 6 месяцев

Сообщение #29 IvanIvanov » 03.10.2019, 17:51

А как вывести название бренда в корзине?

makki M
makki M
Репутация: 199
Сообщения: 697
Зарегистрирован: 12.08.2016
С нами: 7 лет 7 месяцев
Откуда: Киев
Сайт

Сообщение #30 makki » 07.10.2019, 17:25

IvanIvanov писал(а):А как вывести название бренда в корзине?
решение, предложенное выше zyxer, подойдет для вашей цели также
Cоздание и расширение функционала интернет-магазина на платформе OkayCMS 2 (с 3-й и 4-й версией не работаю)


Название раздела: Полезные решения для OkayCMS
Правила раздела: faq.php?mode=okay

Быстрый ответ


Введите код в точности так, как вы его видите. Регистр символов не имеет значения.
Код подтверждения

   

Вернуться в «Полезные решения для OkayCMS»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 8 гостей