Записи с меткой "Сортировка товаров"
Сортировка товаров и товары со скидкой
1. Дорабатываем Сортировку товаров на сайте на HostCMS
2. Отбираем в базе данных все товары со скидкой
1. Сортировка товаров

Блок кода ТДС "Интернет-магазин" дорабатываем, чтобы добавить сортировки и выводить товары со скидками. Здесь же в коде кусок кода, который будет нам отбирать товары со скидкой
if (Core_Array::getGet('filter') || Core_Array::getGet('sorting'))
{
$Shop_Controller_Show->addEntity(
Core::factory('Core_Xml_Entity')
->name('filter')->value(1)
);
// отбираем товары со скидкой
if(intval(Core_Array::getGet('filter')) && intval(Core_Array::getGet('is_sale'))) {
$current_date = date('Y-m-d H:i:s');
$Shop_Controller_Show->shopItems()
->queryBuilder()
->join('shop_item_discounts', 'shop_items.id', '=', 'shop_item_discounts.shop_item_id')
->join('shop_discounts', 'shop_item_discounts.shop_discount_id', '=', 'shop_discounts.id', array(
array('AND (' => array('shop_discounts.end_datetime', '>=', $current_date)),
array('OR' => array('shop_discounts.end_datetime', '=', '0000-00-00 00:00:00')),
array('AND' => array('shop_discounts.start_datetime', '<=', $current_date)),
array(')' => NULL)
));
}
// Sorting
$sorting = intval(Core_Array::getGet('sorting'));
($sorting == 1 || $sorting == 2)
&& $Shop_Controller_Show->orderBy('absolute_price', $sorting == 1 ? 'ASC' : 'DESC');
$sorting == 3 && $Shop_Controller_Show->orderBy('shop_items.name', 'ASC');
$sorting == 4 && $Shop_Controller_Show->orderBy('shop_items.name', 'DESC');
$sorting == 5 && $Shop_Controller_Show
->shopItems()
->queryBuilder()
->clearOrderBy()
->orderBy('shop_items.datetime', 'DESC');
$sorting == 6 && $Shop_Controller_Show
->shopItems()
->queryBuilder()
->clearOrderBy()
->orderBy('shop_items.datetime', 'ASC');
$Shop_Controller_Show->addEntity(
Core::factory('Core_Xml_Entity')
->name('sorting')->value($sorting)
);
// Prices
$Shop_Controller_Show->setFilterPricesConditions($_GET);
// Additional properties
$Shop_Controller_Show->setFilterPropertiesConditions($_GET);
}
В XSL-шаблоне фильтра менем select на этот
<select class="form-select" name="sorting" onchange="$(this).parents('form:first').submit()" placeholder="Сортировать">
<option value="0" selected="selected">Порядок: по умолчанию</option>
<option value="1">
<xsl:if test="sorting = 1"><xsl:attribute name="selected">selected</xsl:attribute></xsl:if>
По возрастанию цены
</option>
<option value="2">
<xsl:if test="sorting = 2"><xsl:attribute name="selected">selected</xsl:attribute></xsl:if>
По убыванию цены
</option>
<option value="3">
<xsl:if test="sorting = 3"><xsl:attribute name="selected">selected</xsl:attribute></xsl:if>
Название: А-Я
</option>
<option value="4">
<xsl:if test="sorting = 4"><xsl:attribute name="selected">selected</xsl:attribute></xsl:if>
Название: Я-А
</option>
<option value="5">
<xsl:if test="sorting = 5"><xsl:attribute name="selected">selected</xsl:attribute></xsl:if>
Сперва новые
</option>
<option value="6">
<xsl:if test="sorting = 6"><xsl:attribute name="selected">selected</xsl:attribute></xsl:if>
Сперва старые
</option>
</select>
2. Товары со скидкой
В меню сайта или в любое другое место макета добавляем кнопку, например "РАСПРОДАЖА", с такой ссылкой
<a href="/shop/?filter=1&is_sale=1"> Распродажа </a>
В код ТДС Интернет-магазина добавляем строки (куда добавить показано выше)
// отбираем товары со скидкой
if(intval(Core_Array::getGet('filter')) && intval(Core_Array::getGet('is_sale'))) {
$current_date = date('Y-m-d H:i:s');
$Shop_Controller_Show->shopItems()
->queryBuilder()
->join('shop_item_discounts', 'shop_items.id', '=', 'shop_item_discounts.shop_item_id')
->join('shop_discounts', 'shop_item_discounts.shop_discount_id', '=', 'shop_discounts.id', array(
array('AND (' => array('shop_discounts.end_datetime', '>=', $current_date)),
array('OR' => array('shop_discounts.end_datetime', '=', '0000-00-00 00:00:00')),
array('AND' => array('shop_discounts.start_datetime', '<=', $current_date)),
array(')' => NULL)
));
}
В итоге, при клике на кнопку РАСПРОДАЖА, будут отобраны в базе и показаны на странице каталога все товары, к которым применены скидки