->itemsProperties(TRUE)
->groupsProperties(TRUE)
- addAllowedTags('/node/path', array('description')) массив тегов для элементов, указанных в первом аргументе, разрешенных к передаче в генерируемый XML
- addForbiddenTags('/node/path', array('description')) массив тегов для элементов, указанных в первом аргументе, запрещенных к передаче в генерируемый XML
Для уменьшения нагрузки на сервер, убираем передачу в XML некоторых данных
->groupsMode('none')
->group(FALSE)
->itemsForbiddenTags(
array(
'description',
'text',
'vendorcode',
'guid',
'ip',
'seo_description',
'seo_keywords',
'seo_title',
'comment',
'image_large_width',
'image_large_height',
'image_large',
'datetime',
'start_datetime',
'end_datetime',
'store',
'adult',
'delivery',
'pickup',
'cpa',
'modification_id',
'showed',
'length',
'width',
'height',
'min_quantity',
'max_quantity',
'quantity_step',
'shortcut_id',
'ip'
))
->groupsForbiddenTags(
array(
'description',
'text',
'seo_title',
'seo_item_description_template',
'seo_item_keywords_template',
'seo_item_title_template',
'seo_group_description_template',
'seo_group_keywords_template',
'seo_group_title_template',
'seo_description',
'seo_keywords',
'siteuser_group_id',
'user_id',
'guid',
'shop_id',
'siteuser_id',
'items_count',
'items_total_count',
'image_large',
'image_large_width',
'image_large_height',
'image_small_width',
'image_small_height',
'path',
'siteuser_group_id',
'indexing',
'subgroups_count',
'subgroups_total_count'
))
->associatedItems(FALSE)
->specialprices(TRUE)
->bonuses(FALSE)
->cart(FALSE)
->comparing(FALSE)
->favorite(FALSE)
->filterShortcuts(FALSE)
->groupsProperties(FALSE)
->groupsPropertiesList(FALSE)
->itemsProperties(array(445))
->itemsPropertiesList(FALSE)
->modifications(FALSE)
->modificationsList(FALSE)
->siteuser(FALSE)
->siteuserProperties(FALSE)
->tags(FALSE)
->taxes(FALSE)
->viewed(FALSE)
->votes(FALSE)
->warehousesItems(FALSE)
->cache(FALSE)
->comments(FALSE)
->commentsPropertiesList(FALSE)
->commentsRating(TRUE)
->addMinMaxPrice()
->nestedGroupsToXml(FALSE)
->limit(4)
->show();
if ($Shop_Controller_Show->item) {
// XML-сущность, к которй будут добавляться похожие приложения
$oSimilarXmlEntity = Core::factory('Core_Xml_Entity')->name('similar');
// Добавляем XML-сущность контроллеру показа
$Shop_Controller_Show->addEntity($oSimilarXmlEntity);
$oShop_Items = $oShop->Shop_Items;
$oShop_Items
->queryBuilder()
->select('shop_items.*')
->where('shop_items.active', '=', 1)
->where('shop_items.shop_group_id', '=', $Shop_Controller_Show->group)
->where('shop_items.id', '!=', $Shop_Controller_Show->item)
->limit(5)
->clearOrderBy()
->orderBy('RAND()');
$aShop_Items = $oShop_Items->findAll(FALSE);
foreach ($aShop_Items as $oShop_Item)
{
$oSimilarXmlEntity->addEntity(
$oShop_Item->clearEntities()
->addForbiddenTag('text')
->showXmlProperties(TRUE) // Добавляем дополнительные свойства в похожие товары
);
}
$Shop_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName($xslName)
)
->groupsMode('none')
->itemsForbiddenTags(
array(
'vendorcode',
'guid',
'ip',
'seo_description',
'seo_keywords',
'seo_title',
))
->groupsForbiddenTags(
array(
'seo_title',
'seo_item_description_template',
'seo_item_keywords_template',
'seo_item_title_template',
'seo_group_description_template',
'seo_group_keywords_template',
'seo_group_title_template',
'seo_description',
'seo_keywords',
'siteuser_group_id',
'user_id',
'guid',
'shop_id',
'siteuser_id',
'path',
'siteuser_group_id',
'indexing',
))
->associatedItems(TRUE)
->bonuses(FALSE)
// ->comments(TRUE)
->comparing(FALSE)
->favorite(TRUE)
->filterShortcuts(FALSE)
->groupsProperties(FALSE)
->groupsPropertiesList(FALSE)
->itemsProperties(TRUE)
->itemsPropertiesList(TRUE)
->modifications(FALSE)
->modificationsList(FALSE)
->siteuser(TRUE)
->siteuserProperties(TRUE)
->specialprices(FALSE)
// ->tags(FALSE)
->taxes(FALSE)
->viewed(TRUE)
//->votes(FALSE)
->warehousesItems(FALSE)
->cache(FALSE)
->producer(FALSE)
->cart(TRUE)
->show();
}else{
$Shop_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName($xslName)
)
->groupsMode('all')
//->group(FALSE)
->itemsForbiddenTags(
array(
'vendorcode',
'guid',
'text',
'ip',
'seo_description',
'shop_producer',
'shop_seller',
'seo_keywords',
'seo_title',
'comment'
))
->groupsForbiddenTags(
array(
'seo_title',
'seo_item_description_template',
'seo_item_keywords_template',
'seo_item_title_template',
'seo_group_description_template',
'seo_group_keywords_template',
'seo_group_title_template',
'seo_description',
'seo_keywords',
'siteuser_group_id',
'user_id',
'guid',
'shop_id',
'siteuser_id',
'path',
'siteuser_group_id',
'indexing',
))
->tags(FALSE)
->cart(FALSE)
->comparing(FALSE)
->favorite(TRUE)
->comments(FALSE)
->associatedItems(FALSE)
->itemsProperties(array(62,63,64,65,68))
->itemsPropertiesList(FALSE)
->modifications(FALSE)
->modificationsList(FALSE)
->groupsProperties(FALSE)
->siteuser(FALSE)
->siteuserProperties(FALSE)
->specialprices(FALSE)
->taxes(FALSE)
->viewed(FALSE)
->votes(FALSE)
->warehousesItems(FALSE)
->cache(FALSE)
->addMinMaxPrice()
->show();
}
Для контроллеров
$oShop_Item
->addForbiddenTag('text')
->addForbiddenTag('description')
->addForbiddenTag('shop_producer')
->showXmlComments(FALSE)
->showXmlAssociatedItems(FALSE)
->showXmlModifications(FALSE)
->showXmlSpecialprices(FALSE)
->showXmlTags(FALSE)
->showXmlWarehousesItems(FALSE)
->showXmlSiteuser(FALSE)
->showXmlProperties(FALSE)
);
Краткая корзина
<?php
// Краткая корзина
$Shop_Cart_Controller_Show = new Shop_Cart_Controller_Show(
Core_Entity::factory('Shop', 1)
);
$Shop_Cart_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('МагазинКорзинаКраткая')
)
->couponText(isset($_SESSION) ? Core_Array::get($_SESSION, 'coupon_text') : '')
->show();
?>
Как показывать краткую корзину только в разделе /shop/ и, если в корзине есть товары, то показывать везде!
<?php
$oShop = Core_Entity::factory('Shop', 4);
$Shop_Cart_Controller = Shop_Cart_Controller::instance();
$aShop_Cart = $Shop_Cart_Controller->getAll($oShop);
if ($aShop_Cart) {
$Shop_Cart_Controller_Show = new Shop_Cart_Controller_Show(
Core_Entity::factory('Shop', 4)
);
$Shop_Cart_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('МагазинКорзинаКраткаяСайт3')
)
->couponText(isset($_SESSION) ? Core_Array::get($_SESSION, 'coupon_text') : '')
->show();
}
elseif (is_object(Core_Page::instance()->object) && get_class(Core_Page::instance()->object) == 'Shop_Controller_Show') {
$Shop_Cart_Controller_Show = new Shop_Cart_Controller_Show(
Core_Entity::factory('Shop', 4)
);
$Shop_Cart_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('МагазинКорзинаКраткаяСайт3')
)
->couponText(isset($_SESSION) ? Core_Array::get($_SESSION, 'coupon_text') : '')
->show();
}
?>
Выводить товары из подгрупп
if ($Shop_Controller_Show->group !== 0){
// Выводить товары из подгрупп
$Shop_Controller_Show->subgroups(TRUE);
}
Вывод Групп и Подгрупп товаров
<?php
// Разделы магазина
if (Core::moduleIsActive('shop'))
{
$Shop_Controller_Show = new Shop_Controller_Show(
Core_Entity::factory('Shop', 1)
);
$Shop_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('МагазинГруппыТоваровНаГлавной')
)
->groupsMode('all')
->itemsForbiddenTags(array('text'))
->limit(0)
->show();
}
?>
Вывод групп интернет-магазина в макет сайта по дополнительному свойству, тип "галочка"
<?php
if (Core::moduleIsActive('shop'))
{
$Shop_Controller_Show = new Shop_Controller_Show(
Core_Entity::factory('Shop', 1)
);
$Shop_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('МагазинГруппыТоваровНаГлавной')
)
->groupsMode('all');
// Объединение с нужной таблицей свойств
$Shop_Controller_Show
->shopGroups()
->queryBuilder()
->leftJoin('shop_group_properties', 'shop_group_properties.shop_id', '=', 'shop_group_properties.shop_id')
->leftJoin('property_value_ints', 'shop_groups.id', '=', 'property_value_ints.entity_id',
array(
array('AND' => array('shop_group_properties.property_id', '=', Core_QueryBuilder::expression('`property_value_ints`.`property_id`')))
)
)
// Идентификатор дополнительного свойства
->where('shop_group_properties.property_id', '=', 61)
// Значение дополнительного свойства
->where('property_value_ints.value', '=', '1')
->groupBy('shop_groups.id')
// Количество свойств
->having(Core_Querybuilder::expression('COUNT(DISTINCT `shop_group_properties`.`property_id`)'), '=', 1);
$Shop_Controller_Show->show();
}
?>
//Заменяем ID доп. свойства «63» на свой, так же «1» ID магазина, так же XSL шаблон на свой «МагазинГруппыТоваровНаГлавной».
//property_value_datetimes для даты и даты-времени
//property_value_files для файлов
//property_value_ints для целых чисел
//property_value_strings для строк
//property_value_texts для текстов
Разделы магазина на Главной
<?php
// Разделы магазина
if (Core::moduleIsActive('shop'))
{
$Shop_Controller_Show = new Shop_Controller_Show(
Core_Entity::factory('Shop', 1)
);
$Shop_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('МагазинГруппыТоваровНаГлавной')
)
->groupsMode('tree')
//->itemsForbiddenTags(array('text'))
->group(0)
->limit(0)
->show();
}
?>
Вывод товаров на Главной со скидкой и избранных товаров
<?php
if (Core::moduleIsActive('shop'))
{
$Shop_Controller_Show = new Shop_Controller_Show(
Core_Entity::factory('Shop', 1)
);
$Shop_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('МагазинКаталогТоваровНаГлавнойСпецПред')
)
->groupsMode('none')
//->itemsForbiddenTags(array('text'))
->cache(FALSE)
->limit(4);
$Shop_Controller_Show
->shopItems()
->queryBuilder()
->join('shop_item_discounts', 'shop_item_discounts.shop_item_id', '=', 'shop_items.id')
->join('shop_discounts', 'shop_discounts.id', '=', 'shop_item_discounts.shop_discount_id')
->where('shop_discounts.active', '=', 1)
->where('shop_discounts.start_datetime', '<', Core_Date::timestamp2sql(time()))
->where('shop_discounts.end_datetime', '>', Core_Date::timestamp2sql(time()))
->where('shop_discounts.deleted', '=', 0)
->where('shop_items.modification_id', '=', 0)
->clearOrderBy()
->orderBy('RAND()');
$Shop_Controller_Show->show();
}
//Избранные товары
if (Core::moduleIsActive('shop'))
{
$Shop_Controller_Show = new Shop_Controller_Show(
Core_Entity::factory('Shop', 1)
);
$Shop_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('ИзбранноеНаГлавной')
)
->groupsMode('none')
->group(FALSE)
->limit(0)
->cache(FALSE)
->show();
}
?>
Вывод товаров по значению дополнительного свойства
<?php
if (Core::moduleIsActive('shop'))
{
$Shop_Controller_Show = new Shop_Controller_Show(
Core_Entity::factory('Shop', 1)
);
$Shop_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('КаталогНаГлавнойСпецПред')
)
->groupsMode('none')
//->itemsForbiddenTags(array('text'))
->group(FALSE)
->itemsProperties(TRUE)
->limit(2);
// Объединение с нужной таблицей свойств
$Shop_Controller_Show
->ShopItems()
->queryBuilder()
->leftJoin('shop_item_properties', 'shop_items.shop_id', '=', 'shop_item_properties.shop_id')
->leftJoin('property_value_ints', 'shop_items.id', '=', 'property_value_ints.entity_id',
array(
array('AND' => array('shop_item_properties.property_id', '=', Core_QueryBuilder::expression('`property_value_ints`.`property_id`')))
)
)
// Идентификатор дополнительного свойства
->where('shop_item_properties.property_id', '=', 78)
// Значение дополнительного свойства
->where('property_value_ints.value', '=', '1')
->groupBy('shop_items.id')
// Количество свойств
->having('COUNT(shop_item_properties.shop_id)', '=', 1);
$Shop_Controller_Show->show();
}
?>
Вывод товаров по значению дополнительного свойства типа радиокнопка (в случайном порядке)
<?php
// НОВИНКИ
if (Core::moduleIsActive('shop'))
{
$Shop_Controller_Show = new Shop_Controller_Show(
Core_Entity::factory('Shop', 3)
);
$Shop_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('МагазинКаталогТоваровНаГлавной')
)
->groupsMode('none')
//->itemsForbiddenTags(array('text'))
->group(FALSE)
->itemsProperties(TRUE)
->limit(3);
// Объединение с нужной таблицей свойств
$Shop_Controller_Show
->ShopItems()
->queryBuilder()
->where('shop_items.active', '=', 1)
->clearOrderBy()
->orderBy('RAND()')
->leftJoin('shop_item_properties', 'shop_items.shop_id', '=', 'shop_item_properties.shop_id')
->leftJoin('property_value_ints', 'shop_items.id', '=', 'property_value_ints.entity_id',
array(
array('AND' => array('shop_item_properties.property_id', '=', Core_QueryBuilder::expression('`property_value_ints`.`property_id`')))
)
)
// Идентификатор дополнительного свойства
->where('shop_item_properties.property_id', '=', 62)
// Значание дополнительного свойства
->where('property_value_ints.value', '=', '1')
->groupBy('shop_items.id')
// Количество свойств
->having('COUNT(shop_item_properties.shop_id)', '=', 1);
$Shop_Controller_Show->show();
}
?>
Вывод товаров по значению дополнительного свойства типа строка (в случайном порядке)
<?php
// СПЕЦИАЛЬНАЯ ЦЕНА
if (Core::moduleIsActive('shop'))
{
$Shop _Controller_Show = new Shop_Controller_Show(
Core_Entity::factory('Shop', 3)
);
$Shop_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('МагазинКаталогТоваровНаГлавнойСпецПред')
)
->groupsMode('none')
//->itemsForbiddenTags(array('text'))
->group(FALSE)
->itemsProperties(TRUE)
->limit(3);
// Объединение с нужной таблицей свойств
$Shop_Controller_Show
->ShopItems()
->queryBuilder()
->where('shop_items.active', '=', 1)
->clearOrderBy()
->orderBy('RAND()')
->leftJoin('shop_item_properties', 'shop_items.shop_id', '=', 'shop_item_properties.shop_id')
->leftJoin('property_value_strings', 'shop_items.id', '=', 'property_value_strings.entity_id',
array(
array('AND' => array('shop_item_properties.property_id', '=', Core_QueryBuilder::expression('`property_value_strings`.`property_id`')))
)
)
// Идентификатор дополнительного свойства
->where('shop_item_properties.property_id', '=', 64)
// Значание дополнительного свойства
->where('property_value_strings.value', '>', '0')
->groupBy('shop_items.id')
// Количество свойств
->having('COUNT(shop_item_properties.shop_id)', '=', 1);
$Shop_Controller_Show->show();
}
?>
Вывод товаров по значению Дополнительного свойства и с проверкой на наличие изображения
<?php
if (Core::moduleIsActive('shop'))
{
$Shop_Controller_Show = new Shop_Controller_Show(
Core_Entity::factory('Shop', 1)
);
ro
$Shop_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('МагазинКаталогТоваровНаГлавнойСпецПред')
)
->groupsMode('none')
->itemsForbiddenTags(array('text'))
->group(FALSE)
->itemsProperties(TRUE)
->limit(5);
// Объединение с нужной таблицей свойств
$Shop_Controller_Show
->ShopItems()
->queryBuilder()
->where('shop_items.active', '=', 1)
->clearOrderBy()
->orderBy('RAND()')
->leftJoin('shop_item_properties', 'shop_items.shop_id', '=', 'shop_item_properties.shop_id')
->leftJoin('property_value_ints', 'shop_items.id', '=', 'property_value_ints.entity_id',
array(
array('AND' => array('shop_item_properties.property_id', '=', Core_QueryBuilder::expression('`property_value_ints`.`property_id`')))
)
)
// Идентификатор дополнительного свойства
->where('shop_item_properties.property_id', '=', 65)
// Значение дополнительного свойства
->where('property_value_ints.value', '=', '1')
->groupBy('shop_items.id')
// Количество свойств
->having('COUNT(shop_item_properties.shop_id)', '=', 1);
$Shop_Controller_Show->show();
}
?>
Вывод товаров в зависимости от текущей страницы/ раздела
<?php
$Shop_Controller_Show = new Shop_Controller_Show(
Core_Entity::factory('Shop', 1)
);
$Shop_Controller_Show->xsl(Core_Entity::factory('Xsl')->getByName('Слайды'))
->groupsMode('tree')
//->group(FALSE)
->limit(999);
// Если находимся на динамической странице и объект контроллера Shop_Controller_Show
if (is_object(Core_Page::instance()->object)
&& get_class(Core_Page::instance()->object) == 'Shop_Controller_Show'
&& Core_Page::instance()->object->group)
{
$Shop_Controller_Show->group(
Core_Page::instance()->object->group
);
}
$Shop_Controller_Show
->shopItems()
->queryBuilder()
//->select('shop_items.*')
->where('shop_items.active', '=', 1)
->clearOrderBy()
->orderBy('RAND()');
$Shop_Controller_Show->show();
?>
Показ товаров, у которых есть модификации со скидкой
<?php
//Показ товаров, у которых есть модификации со скидкой
$shop_id = 3;
$Shop_Controller_Show = new Shop_Controller_Show(
Core_Entity::factory('Shop', $shop_id)
);
$Shop_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('МагазинКаталогТоваровНаГлавнойСпецПред')
)
->groupsMode('none')
->group(FALSE)
->limit(3);
$Shop_Controller_Show
->shopItems()
->queryBuilder()
->where('shop_items.id', '=', Core_QueryBuilder::select('shop_items.modification_id')
->from('shop_items')
->where('shop_items.modification_id', '!=', 0)
->where('shop_items.shop_id', '=', $shop_id)
->join('shop_item_discounts', 'shop_item_discounts.shop_item_id', '=', 'shop_items.id')
->join('shop_discounts', 'shop_discounts.id', '=', 'shop_item_discounts.shop_discount_id')
->where('shop_discounts.active', '=', 1)
->where('shop_discounts.start_datetime', '<', Core_Date::timestamp2sql(time()))
->where('shop_discounts.end_datetime', '>', Core_Date::timestamp2sql(time()))
->where('shop_discounts.deleted', '=', 0)
->limit(3)
)
->clearOrderBy()
->orderBy('RAND()');
$Shop_Controller_Show->show();
?>
Вывод товаров в случайном порядке
<?php
if (Core::moduleIsActive('shop'))
{
$Shop_Controller_Show = new Shop_Controller_Show(
Core_Entity::factory('Shop', 1)
);
$Shop_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('МагазинКаталогТоваровНаГлавнойСпецПред')
)
->groupsMode('none')
//->itemsForbiddenTags(array('text'))
->group(FALSE)
->limit(6);
$Shop_Controller_Show
->shopItems()
->queryBuilder()
->clearOrderBy()
->orderBy('RAND()');
$Shop_Controller_Show->show();
}
?>
Вывод новинок
<?php
// Новинки
if (Core::moduleIsActive('shop'))
{
$Shop_Controller_Show = new Shop_Controller_Show(
Core_Entity::factory('Shop', 1)
);
$Shop_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('МагазинКаталогТоваровНаГлавнойСпецПред')
)
->groupsMode('none')
//->itemsForbiddenTags(array('text'))
->group(FALSE)
->limit(6);
$Shop_Controller_Show
->shopItems()
->queryBuilder()
->clearOrderBy()
->orderBy('shop_items.datetime', 'DESC');
$Shop_Controller_Show->show();
}
?>
Выводим только новинки товаров у которых есть изображение
<?php
if (Core::moduleIsActive('shop'))
{
$Shop_Controller_Show = new Shop_Controller_Show(
Core_Entity::factory('Shop', 1)
);
$Shop_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('МагазинКаталогТоваровНаГлавнойНовинки')
)
->groupsMode('none')
->itemsForbiddenTags(array('text'))
->group(FALSE)
->itemsProperties(TRUE)
->limit(20);
$Shop_Controller_Show
->shopItems()
->queryBuilder()
->where('shop_items.image_small', '=', '') // проверяем наличие картинки
->clearOrderBy()
->orderBy('shop_items.datetime', 'DESC');
$Shop_Controller_Show->show();
}
?>
Выводим новинки без показа модификаций
<?php
if (Core::moduleIsActive('shop'))
{
$Shop_Controller_Show = new Shop_Controller_Show(
Core_Entity::factory('Shop', 1)
);
$Shop_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('МагазинКаталогТоваровНовинки')
)
->groupsMode('none')
//->itemsForbiddenTags(array('text'))
->group(FALSE)
->forbidSelectModifications()
->modifications(FALSE)
->limit(30);
$Shop_Controller_Show
->shopItems()
->queryBuilder()
->clearOrderBy()
->orderBy('shop_items.datetime', 'DESC');
$Shop_Controller_Show->show();
}
?>
Показ просмотренных товаров
<?php
if (Core::moduleIsActive('shop'))
{
$Shop_Controller_Show = new Shop_Controller_Show(
Core_Entity::factory('Shop', 3)
);
$Shop_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('МагазинТоварыНаГлавнойНовинкиСайт2')
)
->groupsMode('none')
->group(FALSE)
->viewed(TRUE)property
->limit(0)
->show();
}
?>
Показ товаров со скидкой
<?php
// СКИДКИ
if (Core::moduleIsActive('shop'))
{
$Shop_Controller_Show = new Shop_Controller_Show(
Core_Entity::factory('Shop', 3)
);
$Shop_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('МагазинКаталогТоваровНаГлавнойСпецПредСайт2')
)
->groupsMode('none')
->group(FALSE)
->cache(FALSE)
->limit(3);
$Shop_Controller_Show
->shopItems()
->queryBuilder()
->join('shop_item_discounts', 'shop_item_discounts.shop_item_id', '=', 'shop_items.id')
->join('shop_discounts', 'shop_discounts.id', '=', 'shop_item_discounts.shop_discount_id')
->where('shop_discounts.active', '=', 1)
->where('shop_discounts.start_datetime', '<', Core_Date::timestamp2sql(time()))
->where('shop_discounts.end_datetime', '>', Core_Date::timestamp2sql(time()))
->where('shop_discounts.deleted', '=', 0)
->where('shop_items.modification_id', '=', 0)
->clearOrderBy()
->orderBy('RAND()');
$Shop_Controller_Show->show();
}
?>
Избранные товары
<?php
//Избранные товары
if (Core::moduleIsActive('shop'))
{
$Shop_Controller_Show = new Shop_Controller_Show(
Core_Entity::factory('Shop', 1)
);
$Shop_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('ИзбранноеНаГлавной')
)
->groupsMode('none')
->group(FALSE)
->limit(0)
->cache(FALSE)
->show();
}
?>
Показ производителей
<?php
// Список производителей
$oShop_Producer_Controller_Show = new Shop_Producer_Controller_Show(
Core_Entity::factory('Shop', 1)
);
$oShop_Producer_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('МагазинСписокПроизводителей')
)
->limit(100)
->show();
?>
<?php
// Разделы магазина
if (Core::moduleIsActive('shop'))
{
$Shop_Controller_Show = new Shop_Controller_Show(
Core_Entity::factory('Shop', 1)
);
$oShop = $Shop_Controller_Show->getEntity();
// XML-сущность, к которй будут добавляться производители
$oProducersXmlEntity = Core::factory('Core_Xml_Entity')->name('producers');
// Добавляем XML-сущность контроллеру показа
$Shop_Controller_Show->addEntity($oProducersXmlEntity);
// Список производителей
$aShop_Producers = $oShop->Shop_Producers->findAll();
foreach ($aShop_Producers as $oShop_Producer)
{
// Добавляем производителя потомком XML-сущности
$oProducersXmlEntity->addEntity(
$oShop_Producer->clearEntities()
);
}
$Shop_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('МагазинСписокПроизводителей')
)
->groupsMode('all')
//->itemsForbiddenTags(array('text'))
->itemsProperties(TRUE)
->group(0)
->limit(0)
->show();
}
?>
Список производителей для текущей группы
<?php
// Список производителей для текущей группы
if (Core::moduleIsActive('shop'))
{
$Shop_Controller_Show = new Shop_Controller_Show(
Core_Entity::factory('Shop', 1)
);
$oShop_Producers = $oShop->Shop_Producers;
$oShop_Producers->queryBuilder()
->select('shop_producers.*')
->distinct()
->join('shop_items', 'shop_items.shop_producer_id', '=', 'shop_producers.id')
->where('shop_items.shop_group_id', '=', $Shop_Controller_Show->group)
->where('shop_items.deleted', '=', 0);
$aShop_Producers = $oShop_Producers->findAll();
?>
ДЛЯ ТДС Интернет-магазин
Показ производителей текущей группы
/* Производители */
$oShop = $Shop_Controller_Show->getEntity();
// XML-сущность, к которй будут добавляться производители
$oProducersXmlEntity = Core::factory('Core_Xml_Entity')->name('producers');
// Добавляем XML-сущность контроллеру показа
$Shop_Controller_Show->addEntity($oProducersXmlEntity);
// Список производителей
$oShop_Producers = $oShop->Shop_Producers;
$oShop_Producers->queryBuilder()
->select('shop_producers.*')
->distinct()
->join('shop_items', 'shop_items.shop_producer_id', '=', 'shop_producers.id')
->where('shop_items.shop_group_id', '=', $Shop_Controller_Show->group)
->where('shop_items.deleted', '=', 0);
$aShop_Producers = $oShop_Producers->findAll();
foreach ($aShop_Producers as $oShop_Producer)
{
// Добавляем производителя потомком XML-сущности
$oProducersXmlEntity->addEntity(
$oShop_Producer->clearEntities()
);
}
Показ всех производителей интернет-магазина
/* Производители */
$oShop = $Shop_Controller_Show->getEntity();
// XML-сущность, к которй будут добавляться производители
$oProducersXmlEntity = Core::factory('Core_Xml_Entity')->name('producers');
// Добавляем XML-сущность контроллеру показа
$Shop_Controller_Show->addEntity($oProducersXmlEntity);
// Список производителей
$oShop_Producers = $oShop->Shop_Producers;
$aShop_Producers = $oShop_Producers->findAll();
foreach ($aShop_Producers as $oShop_Producer)
{
// Добавляем производителя потомком XML-сущности
$oProducersXmlEntity->addEntity(
$oShop_Producer->clearEntities()
);
}
КОММЕНТАРИИ МАГАЗИНА
Вариант 1
<?php
// Вывод комментариев на Главной
$oComments = Core_Entity::factory('Comment');
$oComments
->queryBuilder()
->join('comment_shop_items', 'comments.id', '=', 'comment_shop_items.comment_id')
->join('shop_items', 'shop_items.id', '=', 'comment_shop_items.shop_item_id')
->where('shop_id', '=', 1)
->where('comments.active', '=', 1)
->orderBy('comments.datetime', 'DESC')
->limit(5);
$aComments = $oComments->findAll();
foreach($aComments as $oComment)
{
$sStructurePath = $oComment->Shop_Item->Shop->Structure->getPath();
?><p><a href="<?php echo $sStructurePath . $oComment->Shop_Item->getPath()?>"><b><?php echo htmlspecialchars($oComment->subject)?></b></a>
<br />Текст: <?php echo $oComment->text?>
<br />Автор: <?php echo htmlspecialchars($oComment->author)?>
<br />Дата: <?php echo Core_Date::sql2date($oComment->datetime)?>
</p>
<?php
}
?>
Вариант 2
<?php
// Комментарии
$oComments = Core_Entity::factory('Comment');
$oComments
->queryBuilder()
->join('comment_shop_items', 'comments.id', '=', 'comment_shop_items.comment_id')
->join('shop_items', 'shop_items.id', '=', 'comment_shop_items.shop_item_id')
->where('shop_id', '=', 3)
->where('comments.active', '=', 1)
->orderBy('comments.datetime', 'DESC')
->limit(3);
$aComments = $oComments->findAll();
foreach($aComments as $oComment)
{
$sStructurePath = $oComment->Shop_Item->Shop->Structure->getPath();
?>
<div class="comment_users">
<a href="<?php echo $sStructurePath . $oComment->Shop_Item->getPath()?>"><span class="icon-bubble" ></span> <?php echo htmlspecialchars($oComment->subject)?></a>
<p><?php echo $oComment->text?></p>
<span class="icon-user" style="padding-right:6px;"></span><?php echo htmlspecialchars($oComment->author)?><br/>
<span class="icon-calendar" style="padding-right:6px;"></span><?php echo Core_Date::sql2date($oComment->datetime)?><hr/>
</div>
<?php
}
?>
МЕТКИ МАГАЗИНА
<?php
// Метки
if (Core::moduleIsActive('shop')){
$Shop_Controller_Tag_Show = new Shop_Controller_Tag_Show(
Core_Entity::factory('Shop', 1)
);
$Shop_Controller_Tag_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('ОблакоТэговМагазин')
)
->show();
} ?>
Метки магазина из текущего раздела и из определенных групп Меток
<?php
// Метки
$Shop_Controller_Tag_Show = new Shop_Controller_Tag_Show(
Core_Entity::factory('Shop', 16)
);
// Показывать метки только для товаров текущей группы
if (is_object(Core_Page::instance()->object)
&& get_class(Core_Page::instance()->object) == 'Shop_Controller_Show'
&& Core_Page::instance()->object->group)
{
$Shop_Controller_Tag_Show->group(Core_Page::instance()->object->group);
}
$Shop_Controller_Tag_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('ОблакоТэговМагазинPNEVMOTEX')
)
->tag_dir(array(12,13,14,15,16,17))
->show();
$Shop_Controller_Show->addEntity(
Core::factory('Core_Xml_Entity')
->name('tags_list')->value(ob_get_clean())
);
?>
Добавляется в XSL шаблон "МагазинКаталогТоваров" - проверить работу!
<div class="TagsCloud">
<xsl:for-each select=".//shop_item[tag !='']">
<xsl:variable name="name" select="tag/name"/>
<xsl:if test ="not(preceding::tag[name = $name])">
<a href="/shop/tag/{tag/path}"><xsl:value-of select="tag/name"/></a>
</xsl:if>
</xsl:for-each>
</div>
Метки с разбивкой по разделам
<?php
$oCore_QueryBuilder_Select = Core_QueryBuilder::select()
->from('tag_dirs')
->where('deleted', '=', 0);
$aRows = $oCore_QueryBuilder_Select->execute()->asAssoc()->result();
foreach ($aRows as $pr) {
$oCore_QueryBuilder_Select = Core_QueryBuilder::select()
->from('tags')
->where('tag_dir_id', '=', $pr["id"]);
$aRows_tag = $oCore_QueryBuilder_Select->execute()->asAssoc()->result();
if (count($aRows_tag)!=0) {
echo '<p class="h1">'.$pr["name"].'</p>';
echo '<div class="TagsCloud">';
foreach ($aRows_tag as $tag) {
echo '<a href="/shop/tag/'.$tag["name"].'/" style="font-size: 9pt">'.$tag["name"].'</a>';
echo '</div><br/>';
?>
Вывод товаров со специальной ценой
<?php
// Вывод товаров со специальной ценой
if (Core::moduleIsActive('shop'))
$Shop_Controller_Show = new Shop_Controller_Show(
Core_Entity::factory('Shop', 3)
);
$Shop_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('МагазинКаталогТоваровНаГлавной')
->groupsMode('none')
->itemsForbiddenTags(array('text'))
->group(FALSE)
->modifications(false)
->forbidSelectModifications()
->specialprices(TRUE)
->limit(3);
$Shop_Controller_Show
->shopItems()
->queryBuilder()
->clearOrderBy()
->orderBy('RAND()');
$Shop_Controller_Show->show();
?>
Самые популярные товары
<?php
/** Показ популярных товаров - начало **/
if (Core::moduleIsActive('shop'))
{
$shop_specials_xsl_name = 'МагазинСамыеПопулярныеТовары';
$items_to_show = 6;
$shop_id = 3;
$oShop = Core_Entity::factory('Shop', $shop_id);
$oShop_Controller_Show_Popular_Items = Shop_Controller_Show_Popular_Items::instance($oShop);
$oShop_Controller_Show_Popular_Items
->limit($items_to_show) // макс. количество выводимых товаров
->selection_method('shows') // на основании данных о заказах
->only_paid_orders(TRUE) // при отборе учитывать только оплаченные заказы
->count_method('orders_and_count') // метод подсчета популярности товара в заказах - с учетом кол-ва в каждом заказе
->show_parent_items_instead_modifications(TRUE) // TRUE - показывать родительские товары вместо модификаций
->exclude_out_of_rest_items(TRUE) // TRUE - запрещает показывать товары, которых нет в наличии
->is_random(TRUE) // сортировка: FALSE - по уменьшению популярности
->cache(TRUE) // TRUE - разрешает использовать кеширование;
->xsl(Core_Entity::factory('Xsl')->getByName($shop_specials_xsl_name)) // назначаем xsl-шаблон
->Shop_Controller_Show() // полчаем экземпляр котроллера показа магазина, для дополнительной настройки
->addEntity(Core::factory('Core_Xml_Entity')->name('block_title')->value('Самые популярные товары')) // передаем пользовательские данные в XML
->comments(TRUE); // включаем передачу комментариев к товарам в XML
$oShop_Controller_Show_Popular_Items
->show(); // отображаем список
}
?>
Получение верхней корневой группы магазина независимо от уровня вложенности.
Идентификатор текущей группы содержится в $iCurrentGroupID.
// Текущая группа магазина
$oShop_Group = Core_Entity::factory('Shop_Group', $iCurrentGroupID);
while ($oShop_Group->parent_id){
$oShop_Group = $oShop_Group->getParent();}
Полный код. Вставляется в конец кода ТДС Интернет-магазина
if ($Shop_Controller_Show->group)
{
// Текущая группа магазина
$iCurrentGroupID =0;
$oShop_Group = Core_Entity::factory('Shop_Group', $iCurrentGroupID);
while ($oShop_Group->parent_id)
{
$oShop_Group = $oShop_Group->getParent();
}
}
Показ нескольких товаров из той же категории, что и текущий товар. Добавляется в ТДС магазина перед блоком с ->show()
if ($Shop_Controller_Show->item) {
// для загрузки статичного документа
$Shop_Controller_Show->addEntity(
Core::factory('Core_Xml_Entity')
->name('my_document')->value(
Core_Entity::factory('Document', 22)->text
)
);
// XML-сущность, к которй будут добавляться похожие приложения
$oSimilarXmlEntity = Core::factory('Core_Xml_Entity')->name('similar');
// Добавляем XML-сущность контроллеру показа
$Shop_Controller_Show->addEntity($oSimilarXmlEntity);
$oShop_Items = $oShop->Shop_Items;
$oShop_Items
->queryBuilder()
->select('shop_items.*')
->where('shop_items.active', '=', 1)
->where('shop_items.shop_group_id', '=', $Shop_Controller_Show->group)
->where('shop_items.id', '!=', $Shop_Controller_Show->item)
->limit(4)
->clearOrderBy()
->orderBy('RAND()');
$aShop_Items = $oShop_Items->findAll(FALSE);
foreach ($aShop_Items as $oShop_Item)
{
$oSimilarXmlEntity->addEntity(
$oShop_Item->clearEntities()
->addForbiddenTag('text')
->showXmlProperties(TRUE) // Добавляем дополнительные свойства в похожие товары
);
}
}
В XML пойдет тег similar, в нем будут товары текущей группы, кроме просматриваемого товара. Ну а далее просто выводите их в XSL-шаблоне товара.
Вызов:
<div class="col-xs-12">
<h2>Похожие товары</h2>
<div class="row products-grid">
<xsl:apply-templates select="/shop/similar/shop_item" mode="similar"/>
</div>
</div>
и сам темплейт:
<!-- Шаблон для схожих товаров-->
<xsl:template match="shop_item" mode="similar">
....
</xsl:template>
Не показывать товары, которых нет в наличииОграничения на вывод товаров задаются через метод shopItems() контроллера Shop_Controller_Show, метод возвращает объект Shop_Item_Model с настроенными ограничениями. Дополним их через queryBuilder()
Добавить в ТДС
$Shop_Controller_Show
->shopItems()
->queryBuilder()
->leftJoin('shop_warehouse_items', 'shop_warehouse_items.shop_item_id', '=', 'shop_items.id')
->having('SUM(shop_warehouse_items.count)', '>', 0)
->groupBy('shop_items.id');
$Shop_Controller_Show->show();
Ограничение с учетом остатков на складе модификаций
Вывод товаров, имеющих остатки на складах, либо товаров, имеющих модификации с остатками на складе.
$Shop_Controller_Show
->shopItems()
->queryBuilder()
// Модификации и остатки на складах модификаций
->leftJoin(array('shop_items', 'modifications'), 'modifications.modification_id', '=', 'shop_items.id')
->leftJoin(array('shop_warehouse_items', 'modifications_shop_warehouse_items'), 'modifications_shop_warehouse_items.shop_item_id', '=', 'modifications.id')
// Остатки на складах основного отвара
->leftJoin('shop_warehouse_items', 'shop_warehouse_items.shop_item_id', '=', 'shop_items.id')
// Есть остатки на основном складе
->having('SUM(shop_warehouse_items.count)', '>', 0)
// Или
->setOr()
// Есть остатки на складах у модификаций
->having('SUM(modifications_shop_warehouse_items.count)', '>', 0)
->groupBy('shop_items.id');
$Shop_Controller_Show->show();
Мета-теги магазина как в HostCMS v.5
if ($Shop_Controller_Show->group)
{
$oShop_Group = Core_Entity::factory('Shop_Group', $Shop_Controller_Show->group);
Core_Page::instance()->title($oShop_Group->seo_title != ''
? $oShop_Group->seo_title
: $oShop_Group->name);
Core_Page::instance()->description($oShop_Group->seo_description != ''
? $oShop_Group->seo_description
: $oShop_Group->name);
Core_Page::instance()->keywords($oShop_Group->seo_keywords != ''
? $oShop_Group->seo_keywords
: $oShop_Group->name);
}
if ($Shop_Controller_Show->item)
{
$oShop_Item = Core_Entity::factory('Shop_Item', $Shop_Controller_Show->item);
Core_Page::instance()->title($oShop_Item->seo_title != ''
? $oShop_Item->seo_title
: $oShop_Item->name);
Core_Page::instance()->description($oShop_Item->seo_description != ''
? $oShop_Item->seo_description
: $oShop_Item->name);
Core_Page::instance()->keywords($oShop_Item->seo_keywords != ''
? $oShop_Item->seo_keywords
: $oShop_Item->name);
}
Core_Page::instance()->object = $Shop_Controller_Show;
Добавление новых узлов в XML
if (is_object(Core_Page::instance()->object) && get_class(Core_Page::instance()->object) == 'Shop_Controller_Show')
{
$Shop_Controller_Show->addEntity(
Core::factory('Core_Xml_Entity')
->name('current_group_id')
->value(intval(Core_Page::instance()->object->group))
);
}
$Shop_Controller_Show->addEntity(
Core::factory('Core_Xml_Entity')
->name('ТекущаяГруппа')
->value($Shop_Controller_Show->group)
);
Добавляем Статичный Документ в XML
Код добавляем в ТДС Интернет-магазина
вариант 1
Создаем в параметрах ТДС переменную document_id со следующими данными
Название параметра - Документ для гарантии
Название переменной - document_id
Тип - SQL запрос
SQL-запрос
SELECT * FROM documents WHERE site_id = {SITE_ID}
Поле заголовка - name
Поле значания - id
Далее в код ТДС вставляем следующий код
// для загрузки документа гарантии
$iDocumentID = intval(Core_Array::get(Core_Page::instance()->libParams, 'document_id'));
$oDocument = Core_Entity::factory('Document')->find($iDocumentID);
if ($Shop_Controller_Show->item)
{
if (!is_null($oDocument) && $oDocument->id){
ob_start();
$oDocument->Document_Versions->getCurrent()->execute();
$Shop_Controller_Show->addEntity(Core::factory('Core_Xml_Entity')->name('page_content')->value(ob_get_clean()));
}
}
вариант 2
// для ajax загрузки статичного документа
$document = Core_Entity::factory('Document', 19)->Document_Versions->getCurrent()->loadFile(); // 19 Заменить на ID Документа
if ($Shop_Controller_Show->item)
{
$Shop_Controller_Show
// добавляем собственный тег для вывода документа
->addEntity(Core::factory('Core_Xml_Entity')
->name('document')
->value($document));
}
вариант 3
$Shop_Controller_Show->addEntity(
Core::factory('Core_Xml_Entity')
->name('my_document')->value(
Core_Entity::factory('Document', 123)->text
)
);
ДЛЯ ЯРЛЫКА ДОБАВЛЯЕМ В XML ID РОДИТЕЛЬСКОЙ ГРУППЫ
*Добавляем в самом начале кода настроек ТДС показа интернет-магазина
Core_Event::attach('shop_item.onBeforeGetXml', array('Shop_Item_Observer', 'onBeforeGetXml'));
class Shop_Item_Observer
{
static public function onBeforeGetXml($object, $args)
{
$object->addXmlTag('parent_group_id', $object->shop_group_id);
}
}
Добавить название группы товара в Корзину
в ТДС. Перед:
$Shop_Cart_Controller_Show
->couponText(
Core_Str::stripTags(Core_Array::get(Core_Array::get($_SESSION, 'hostcmsOrder', array()), 'coupon_text'))
)
->xsl(
Core_Entity::factory('Xsl')->getByName($xslName)
)
->show();
добавить:
class Shop_Item_Cart_Observer
{
static public function onBeforeGetXml($object, $args)
{
if (is_object(Core_Page::instance()->object)
&& get_class(Core_Page::instance()->object) == 'Shop_Cart_Controller_Show')
{
$oShop_Group = Core_Entity::factory('Shop_Group', intval($object->shop_group_id));
if (!is_null($oShop_Group))
{
// Добавить новый тег, содержащий имя группы товара
$object->addXmlTag('shop_group_name', $oShop_Group->name);
}
}
}
}
// Add shop_item observer
Core_Event::attach('shop_item.onBeforeGetXml', array('Shop_Item_Cart_Observer', 'onBeforeGetXml'));
Этот хук добавит в каждый shop_item в корзине новый тег shop_group_name. В котором будет название группы товара. После такой вывод:
<xsl:value-of disable-output-escaping="yes" select="shop_item/shop_group_name"/>
Добавить название группы в карточке товара
В ТДС добавляем
$oShop_Group = Core_Entity::factory('Shop_Group', intval($Shop_Controller_Show->group));
$Shop_Controller_Show->addEntity(
Core::factory('Core_Xml_Entity')
->name('shop_group_name')
->value($oShop_Group->name)
);
Показ товаров только с ценой (больше 0)
// Показываем только с положительной ценой
$Shop_Controller_Show
->shopItems()
->queryBuilder()
->where('shop_items.price', '>', 0);
Не выводим товары, которых нет в наличии (0 на всех складах)
$Shop_Controller_Show
->shopItems()
->queryBuilder()
->leftJoin('shop_warehouse_items', 'shop_warehouse_items.shop_item_id', '=', 'shop_items.id')
->having('SUM(shop_warehouse_items.count)', '>', 0)
->groupBy('shop_items.id');
Выводить товары с сортировкой по цене и показом в конце списка товаров, которых нет в наличии на складе.
$Shop_Controller_Show
->shopItems()
->queryBuilder()
->leftJoin('shop_warehouse_items', 'shop_warehouse_items.shop_item_id', '=', 'shop_items.id')
->clearOrderBy()
->orderBy('SIGN(shop_warehouse_items.count)', 'DESC')
->orderBy('shop_items.price','ASC');
Меняем ID макета для товара
if (isset($Shop_Controller_Show->item) && $Shop_Controller_Show->item)
{
Core_Page::instance()->template(
Core_Entity::factory('Template', 12)
);
}
Core_Page::instance()->template(Core_Entity::factory('Template', 54)); // указываем id макета для Товара или Инфоэлемента