question Опубликовано 27 февраля, 2019 Жалоба Поделиться Опубликовано 27 февраля, 2019 Кто сталкивался, как делали?Есть необходимость вывода, например, телефонов в таком видеТелефоныSamsung1,2,3,4,5Apple1,2,3,4Huawei1,2,3,4 Сделать вложенный цикл... но как быть, если, например, на сайте присутствует бренд Zelmer без телефонов? Вообще не понимаю, с какой стороны к этой задаче подойти. Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 27 февраля, 2019 Жалоба Поделиться Опубликовано 27 февраля, 2019 Сделать то можно, но вы подумали об оптимизации? Что если в каждом из брендов будет по 100-1000 товаров? Выбираете бренды, потом формируете массив ID-шек брендов, далее выбираете товары по этим ID ($filter['brand_id'] = $ids) брендов, после формируете новый массив где связка будет ID бренда с brand_id поля в товаре. Цитата Ссылка на сообщение Поделиться на другие сайты
question Опубликовано 27 февраля, 2019 Автор Жалоба Поделиться Опубликовано 27 февраля, 2019 Мне бы для начала решение без оптимизации, чисто на уровне шаблона. что-то типа {foreach $products as $product} {foreach $brands as $brand} {if... {/foreach}{/foreach} посмотрю, как быстро этот код выполняется и сколько ресурсов ест... Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 27 февраля, 2019 Жалоба Поделиться Опубликовано 27 февраля, 2019 Такое делать на уровне шаблона всё-равно что танк одному толкать... Цитата Ссылка на сообщение Поделиться на другие сайты
question Опубликовано 27 февраля, 2019 Автор Жалоба Поделиться Опубликовано 27 февраля, 2019 Это понятно. Весь вопрос - как танк одному толкать? Цитата Ссылка на сообщение Поделиться на другие сайты
Kami Опубликовано 27 февраля, 2019 Жалоба Поделиться Опубликовано 27 февраля, 2019 Это понятно. Весь вопрос - как танк одному толкать? ну если хотите танк толкать , то вот вам универсальный виджет сделали. https://simplashop.com/article/universalnyj-vidzhet-get_products В принципе решение может натолкнуть вас на мысль. Цитата Ссылка на сообщение Поделиться на другие сайты
question Опубликовано 27 февраля, 2019 Автор Жалоба Поделиться Опубликовано 27 февраля, 2019 По-моему, это то, что нужно.А список брендов категории так выводится? {foreach $category->brands as $brand} {$brand->name} {$foreach} Написал ради того, чтобы не забыть завтра проверить. Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 27 февраля, 2019 Жалоба Поделиться Опубликовано 27 февраля, 2019 ну если хотите танк толкать , то вот вам универсальный виджет сделали. https://simplashop.com/article/universalnyj-vidzhet-get_products В принципе решение может натолкнуть вас на мысль.Это не то что нужно, не решит задачи. Мало того в симпле есть универсальный плагин для доступа к API. Цитата Ссылка на сообщение Поделиться на другие сайты
Kami Опубликовано 27 февраля, 2019 Жалоба Поделиться Опубликовано 27 февраля, 2019 Это не то что нужно, не решит задачи. Мало того в симпле есть универсальный плагин для доступа к API. из коробки? что за универсальный плагин? Ну почему не решит, как костыльный метод сойдет) ТС же просил танк толкать. Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 27 февраля, 2019 Жалоба Поделиться Опубликовано 27 февраля, 2019 из коробки? что за универсальный плагин? Ну почему не решит, как костыльный метод сойдет) ТС же просил танк толкать.Не решит абсолютно ничего.По поводу плагина API https://simpla-addons.org/blog/news/obnovlenie-simpla-237-ot-21-aprelya-2015 Цитата Ссылка на сообщение Поделиться на другие сайты
ST_RU Опубликовано 28 февраля, 2019 Жалоба Поделиться Опубликовано 28 февраля, 2019 На уровне шаблона толкаем танк. Пример без изысков и проверок в коде. просто вывод.получится примерно так. или так . Вставлять в products.tplТовары в прокрутки можно сделать, чтобы всегда было в 1 линию {$brands_max = 3} {* Максимум брендов в этом списке *} {$brands_count = 0} {* счетчик старт *} <div style="margin: 0 0 10vw;"> {foreach $category->brands as $b} <h3>{$category->name} {$b->name}</h3> {get_new_products var=new_products limit=10 brand_id=$b->id category_id=$category->id} {if $new_products} {foreach $new_products as $product} <h5><a data-product="{$product->id}" href="products/{$product->url}">{$product->name|escape}</a></h5> {/foreach} <a style="display: block; margin: 7px 0; color: red" href='catalog/{$category->url}/{$b->url}'><b>показать все {$category->name} {$b->name}</b></a> {/if} <hr> {* Если счётчик достиг $brands_max , обрываем *} {$brands_count = $brands_count + 1} {if $brands_count == $brands_max}{break}{/if} {/foreach} </div> Цитата Ссылка на сообщение Поделиться на другие сайты
question Опубликовано 28 февраля, 2019 Автор Жалоба Поделиться Опубликовано 28 февраля, 2019 Ребята, я и не просил готовое решение. Просто чтобы направили в нужное русло.Сейчас буду проверять свою и вашу версию, посмотрю, сильно ли вырастет нагрузка. А вообще у меня такое пофигистическое отношение к задаче потому что на сайте реализовано кеширование и даже если время генерации страницы составит немыслимых 1 секунду, то второй и последующие разы эта страница будет выводиться из кеша, понадобится около 5-7 мсек на ssd-хостинге.Спасибо. Цитата Ссылка на сообщение Поделиться на другие сайты
question Опубликовано 28 февраля, 2019 Автор Жалоба Поделиться Опубликовано 28 февраля, 2019 Я уже поднимал тему о кешировании. Сделать его очень просто, в моём случае на диске сохраняется вывод всех товаров со всеми сортировками и прочими параметрами, которые когда-либо запрашивал пользователь, в итоге нагрузка на БД равна 0.1% от лимита самого дешёвого хостинга при запросе 1000 страниц в сутки. Корзина, комментарии и прочие динамические страницы - отдельный разговор. И да, кеш живёт до изменения цен или описания (удаляю руками). Цитата Ссылка на сообщение Поделиться на другие сайты
question Опубликовано 28 февраля, 2019 Автор Жалоба Поделиться Опубликовано 28 февраля, 2019 Попробовал свой вариант {foreach $category->brands as $b} <h2>{$b->name}</h2> {foreach $products as $p} {if $p->brand == $b} {$p->name}<br/> {/if} {/foreach} {/foreach} Не работает. Думаю, причина в том, что у товара нет свойства "бренд" (нет в селекте соответствующего запроса). Цитата Ссылка на сообщение Поделиться на другие сайты
question Опубликовано 28 февраля, 2019 Автор Жалоба Поделиться Опубликовано 28 февраля, 2019 Странно, но вариант ST_RU (упростил до такого) {foreach $category->brands as $b} <h2>{$b->name}</h2> {get_new_products var=new_products brand_id=$b->id} {if $new_products} {foreach $new_products as $p} {$p->name}<br/> {/foreach} {/if} {/foreach} Выводит товары нужных брендов, но абсолютно всех категорий. Подскажите, как в get_new_products добавить id категории. Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 28 февраля, 2019 Жалоба Поделиться Опубликовано 28 февраля, 2019 Попробовал свой вариант {foreach $category->brands as $b} <h2>{$b->name}</h2> {foreach $products as $p} {if $p->brand == $b} {$p->name}<br/> {/if} {/foreach} {/foreach} Не работает. Думаю, причина в том, что у товара нет свойства "бренд" (нет в селекте соответствующего запроса). {if $p->brand == $b->name} {$p->name}<br/> {/if} Цитата Ссылка на сообщение Поделиться на другие сайты
ST_RU Опубликовано 28 февраля, 2019 Жалоба Поделиться Опубликовано 28 февраля, 2019 Странно, но вариант ST_RU (упростил до такого) {foreach $category->brands as $b} <h2>{$b->name}</h2> {get_new_products var=new_products brand_id=$b->id} {if $new_products} {foreach $new_products as $p} {$p->name}<br/> {/foreach} {/if} {/foreach} Выводит товары нужных брендов, но абсолютно всех категорий. Подскажите, как в get_new_products добавить id категории. {get_new_products var=new_products limit=10 brand_id=$b->id category_id=$category->id} но все равно. такой вывод через шаблон не идеальный.это просто пример, который можно использовать. вместо готового get_new_products - другое . Цитата Ссылка на сообщение Поделиться на другие сайты
question Опубликовано 28 февраля, 2019 Автор Жалоба Поделиться Опубликовано 28 февраля, 2019 {get_new_products var=new_products limit=10 brand_id=$b->id category_id=$category->id} но все равно. такой вывод через шаблон не идеальный.это просто пример, который можно использовать. вместо готового get_new_products - другое .Попробовал, работает на ура. {foreach $category->brands as $b} <h2>{$b->name}</h2> {get_new_products var=new_products category_id=$category->id brand_id=$b->id} {if $new_products} {foreach $new_products as $p} {$p->name}<br/> {/foreach} {/if} {/foreach} Генерация страницы занимает от 60 до 90 мсек. Это не похоже на толкание танка. Одна проблема: бренды расположены по алфавиту, а не по их id. Понимаю, что в sql запросе стоит order by b.name , который нужно исправить на order by b.id , но в каком файле искать этот запрос? Цитата Ссылка на сообщение Поделиться на другие сайты
Решение Noxter Опубликовано 28 февраля, 2019 Решение Жалоба Поделиться Опубликовано 28 февраля, 2019 api/Brands.php Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.