Вывод прайс-листа на главной странице
Здравствуйте.
На главной странице нужно вывести прайс в таком виде:
Категория 1
Проще всего использовать сниппет msProducts и для каждой категории товаров выводить результаты сниппетом msProducts, но когда категорий много, то использование множества выводов сниппета тормозят загрузку страницы.
На главной странице нужно вывести прайс в таком виде:
Категория 1
- Товар 1 — цена
- Товар 2 — цена
- Товар 3 — цена
- Товар 4 — цена
Проще всего использовать сниппет msProducts и для каждой категории товаров выводить результаты сниппетом msProducts, но когда категорий много, то использование множества выводов сниппета тормозят загрузку страницы.
{'!msProducts' | snippet : [
'parents' => 'id категории',
'tpl' => '@FILE chunks/tpl_price.tpl',
'limit' => 0
]}
Может кто делал подобное и подскажет как вывести прайс через placeholder ({'result' | placeholder}) с проверкой на ID категории, чтобы вывести название категории и ее товары? То есть сниппет msProducts вызвается один раз, а затем результаты выводятся placeholder. Комментарии: 17
Вот код сниппета, который выбирает нужные данные из БД и форматирует их в нужный вид
$tablePrefix = $modx->getOption('table_prefix');
$sql = "SELECT Product.pagetitle AS name, Data.price AS price, Parent.pagetitle AS parent FROM {$tablePrefix}site_content Product
LEFT JOIN {$tablePrefix}ms2_products Data ON Product.id = Data.id
LEFT JOIN {$tablePrefix}site_content Parent ON Product.parent = Parent.id
WHERE Product.class_key = 'msProduct'";
$statement = $modx->query($sql);
$products = $statement->fetchAll(PDO::FETCH_ASSOC);
$output = [];
foreach ($products as $product) {
$output[$product['parent']][] = $product;
}
return $output;
Спасибо за сниппет. Не могли бы вы пояснить как вывести то, что мне нужно? У меня не получается вывести.
{set $menu = 'mySnippet' | snippet}
{foreach $menu as $parent => $products}
<p>{$parent}</p>
<ul>
{foreach $products as $data}
<li>{$data.name} - {$data.price}</li>
{/foreach}
</ul>
{/foreach}
Спасибо. Но ничего не выводится, ошибок в логе нет.
Я создал сниппет «GetPrice»:
Я создал сниппет «GetPrice»:
<?php
$tablePrefix = $modx->getOption('table_prefix');
$sql = "SELECT Product.pagetitle AS name, Data.price AS price, Parent.pagetitle AS parent FROM {$tablePrefix}site_content Product
LEFT JOIN {$tablePrefix}ms2_products Data ON Product.id = Data.id
LEFT JOIN {$tablePrefix}site_content Parent ON Product.parent = Parent.id
WHERE Product.class_key = 'msProduct'";
$statement = $modx->query($sql);
$products = $statement->fetchAll(PDO::FETCH_ASSOC);
$output = [];
foreach ($products as $product) {
$output[$product['parent']][] = $product;
}
Затем вывожу в чанке:{set $menu = 'GetPrice' | snippet}
{foreach $menu as $parent => $products}
<p>{$parent}</p>
<ul>
{foreach $products as $data}
<li>{$data.name} - {$data.price}</li>
{/foreach}
</ul>
{/foreach}
И ничего. Помогите пожалуйста разобраться.
У меня работает.
Спасибо друг! Все работает, не заметил ошибку. Извини!
А как сделать чтобы название товара было ссылкой ведущей на товар и у цены убрать два ноля после точки (1500.00 р). Подскажи пожалуйста.
Добавь в сниппете в запрос получение uri, а в выводе оберни имя товара в тег ссылки с атрибутом href равным data.uri. А нули можно убрать модификатором replace.
Спасибо большое, добрый человек! Дай Бог тебе здоровья!
Добрый день. Если товар снять с публикации, он все равно выводиться в прайсе, чтобы не выводился нужно товар полностью удалять. Подскажите пожалуйста, как прописать условие в сниппете чтобы не выводил снятые с публикации товары.
Нужно присоединить таблицу site_content по id и в условиях выборки добавить ПсевдонимТаблицы.published = 1
Прошу прощения, для меня это «темный лес». Не могли бы вы написать код? Буду очень благодарен.
$tablePrefix = $modx->getOption('table_prefix');
$sql = "SELECT Product.pagetitle AS name, Data.price AS price, Parent.pagetitle AS parent FROM {$tablePrefix}site_content Product
LEFT JOIN {$tablePrefix}ms2_products Data ON Product.id = Data.id
LEFT JOIN {$tablePrefix}site_content Parent ON Product.parent = Parent.id
LEFT JOIN {$tablePrefix}site_content Resource ON Product.id= Resource.id
WHERE Product.class_key = 'msProduct' AND Resource.published = 1";
$statement = $modx->query($sql);
$products = $statement->fetchAll(PDO::FETCH_ASSOC);
$output = [];
foreach ($products as $product) {
$output[$product['parent']][] = $product;
}
return $output;
Спасибо огромное!
Добрый день.
Прошу прощения, а можно как то исключить из выборки некоторые категории товаров с их товарами из прайса?
Прошу прощения, а можно как то исключить из выборки некоторые категории товаров с их товарами из прайса?
Можно Product.parent NOT IN (1,2,3)
Спасибо, помогли!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.