Записи с меткой "PHP для HostCMS"
PHP КОДЫ вывода данных
->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 макета для Товара или ИнфоэлементаPHP КОДЫ вывода данных для ИНФОСИСТЕМ
->groupsMode('none')
->itemsForbiddenTags(
array(
'description',
'text',
'guid',
'ip',
'seo_description',
'seo_keywords',
'seo_title',
'comment',
'image_large_width',
'image_large_height',
'image_large',
'datetime',
'start_datetime',
'end_datetime',
'adult',
'cpa',
'showed',
'indexing',
'comments_count',
'comments_grade_sum',
'comments_grade_count',
'comments_average_grade',
))
->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',
'siteuser_id',
'items_count',
'items_total_count',
'image_large',
'image_large_width',
'image_large_height',
'image_small_width',
'image_small_height',
'siteuser_group_id',
'indexing',
'subgroups_count',
'subgroups_total_count'
))
->groupsProperties(FALSE)
->groupsPropertiesList(FALSE)
->itemsProperties(FALSE)
->itemsPropertiesList(FALSE)
->siteuser(FALSE)
->siteuserProperties(FALSE)
->tags(FALSE)
->votes(FALSE)
//->cache(FALSE)
->comments(FALSE)
->commentsRating(TRUE)
if (isset($Informationsystem_Controller_Show->item) && $Informationsystem_Controller_Show->item)
{
Core_Page::instance()->template(
Core_Entity::factory('Template', 35)
);
}
<?php
// Меню из инфосистемы
$Informationsystem_Controller_Show = new Informationsystem_Controller_Show(
Core_Entity::factory('Informationsystem', 15)
);
$Informationsystem_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('МенюИнфосистемы')
)
->group(FALSE)
->limit(15)
->show();
?>
<?php
// МЕНЮ ИНФОСИСТЕМЫ
if (Core::moduleIsActive('informationsystem'))
{
$Informationsystem_Controller_Show = new Informationsystem_Controller_Show(
Core_Entity::factory('Informationsystem', 1)
);
$Informationsystem_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('ДеревоНовостей')
)
->groupsMode('all')
->itemsForbiddenTags(array('text', 'description'))
->group(FALSE)
->limit(0)
->show();
}
?>
<?php
// Новости
if (Core::moduleIsActive('informationsystem'))
{
$Informationsystem_Controller_Show = new Informationsystem_Controller_Show(
Core_Entity::factory('Informationsystem', 27)
);
$Informationsystem_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('СписокНовостейНаГлавной')
)
->groupsMode('none')
->itemsForbiddenTags(array('text'))
->group(FALSE)
->limit(2)
->show();
}
?>
<?php
// Новости
if (Core::moduleIsActive('informationsystem'))
{
$Informationsystem_Controller_Show = new Informationsystem_Controller_Show(
Core_Entity::factory('Informationsystem', 1)
);
$Informationsystem_Controller_Show
->informationsystemItems()
->queryBuilder()
->clearOrderBy()
->orderBy('RAND()');
$Informationsystem_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('СписокУслугНаГлавной')
)
->groupsMode('none')
->itemsForbiddenTags(array('text'))
->group(14)
->limit(2)
->show();
}
?>
<?php
// НОВОСТИ
if (Core::moduleIsActive('informationsystem'))
{
$Informationsystem_Controller_Show = new Informationsystem_Controller_Show(
Core_Entity::factory('Informationsystem', '15')
);
$Informationsystem_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('НовостиНаГлавной')
)
->groupsMode('none')
->itemsForbiddenTags(array('text'))
->group(FALSE)
->limit(2)
->addEntity(Core::factory('Core_Xml_Entity')
->name('НовостиНаГлавной')
->value(1))
->addEntity(Core::factory('Core_Xml_Entity')
->name('ОтображатьСсылкуНаАрхив')
->value(1))
->show();
}
?>
<?php
$Informationsystem_Controller_Show = new Informationsystem_Controller_Show(
Core_Entity::factory('Informationsystem', 1)
);
$Informationsystem_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('Новость')
)
->item(123)
->show();
?>
<?php
// Новости
$Informationsystem_Controller_Show = new Informationsystem_Controller_Show(
Core_Entity::factory('Informationsystem', 1)
);
$Informationsystem_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('СписокНовостейНаГлавной')
)
->groupsMode('none')
->itemsForbiddenTags(array('text'))
->itemsProperties(TRUE)
->group(FALSE)
->limit(3);
// Объединение с нужной таблицей свойств
$Informationsystem_Controller_Show
->informationsystemItems()
->queryBuilder()
->leftJoin('informationsystem_item_properties', 'informationsystem_items.informationsystem_id', '=', 'informationsystem_item_properties.informationsystem_id')
->leftJoin('property_value_ints', 'informationsystem_items.id', '=', 'property_value_ints.entity_id',
array(
array('AND' => array('informationsystem_item_properties.property_id', '=', Core_QueryBuilder::expression('`property_value_ints`.`property_id`')))
)
)
// Идентификатор дополнительного свойства
->where('informationsystem_item_properties.property_id', '=', 19)
// Значание дополнительного свойства
->where('property_value_ints.value', '=', '123')
->groupBy('informationsystem_items.id')
// Количество свойств
->having('COUNT(informationsystem_item_properties.informationsystem_id)', '=', 1);
$Informationsystem_Controller_Show->show();
?>
<?php
// ГРУППЫ
$Informationsystem_Controller_Show = new Informationsystem_Controller_Show(
Core_Entity::factory('Informationsystem', 16)
);
$Informationsystem_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('СписокСтатейСайт4')
)
->groupsMode('none')
->itemsForbiddenTags(array('text'))
->group(TRUE)
->groupsProperties(TRUE)
->limit(3)
//->show()
;
// Объединение с нужной таблицей свойств
$Informationsystem_Controller_Show
->informationsystemGroups()
->queryBuilder()
->leftJoin('informationsystem_group_properties', 'informationsystem_groups.informationsystem_id', '=', 'informationsystem_group_properties.informationsystem_id')
->leftJoin('property_value_ints', 'informationsystem_groups.id', '=', 'property_value_ints.entity_id',
array(
array('AND' => array('informationsystem_group_properties.property_id', '=', Core_QueryBuilder::expression('`property_value_ints`.`property_id`')))
)
)
// Идентификатор дополнительного свойства
->where('informationsystem_group_properties.property_id', '=', 19)
// Значание дополнительного свойства
->where('property_value_ints.value', '=', '123')
->groupBy('informationsystem_groups.id')
// Количество свойств
->having('COUNT(informationsystem_group_properties.informationsystem_id)', '=', 1);
$Informationsystem_Controller_Show->show();
?>
<?php
$Informationsystem_Controller_Show = new Informationsystem_Controller_Show(
Core_Entity::factory('Informationsystem', 20)
);
$Informationsystem_Controller_Show
->xsl(Core_Entity::factory('Xsl')->getByName('СписокХитовНаГлавной'))
->groupsMode('none')
->itemsForbiddenTags(array('text'))
->group(FALSE)
->limit(3)
->itemsProperties(TRUE);
$Informationsystem_Controller_Show
->informationsystemItems()
->queryBuilder()
->clearOrderBy()
->orderBy('RAND()');
$Informationsystem_Controller_Show->show();
?>
<?php
// Метки
if (Core::moduleIsActive('informationsystem'))
{
$Informationsystem_Controller_Tag_Show = new Informationsystem_Controller_Tag_Show(
Core_Entity::factory('Informationsystem', 1)
);
$Informationsystem_Controller_Tag_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('ОблакоТэговИнформационнойСистемы')
)
->show();
}
?>
<?php
$Informationsystem_Controller_Show = new Informationsystem_Controller_Show(
Core_Entity::factory('Informationsystem', 8)
);
$Informationsystem_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('СписокЭлементовИнфосистемы')
)
->limit(50)
->group(34)
->show();
?>
<h3>Популярные</h3>
<?php
$Informationsystem_Controller_Show = new Informationsystem_Controller_Show(
Core_Entity::factory('Informationsystem', 1)
);
$Informationsystem_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('ВыводПопулярныхФотоНаГлавной')
)
->groupsMode('none')
simi
->itemsForbiddenTags(array('text'))
->group(FALSE)
->limit(10);
$Informationsystem_Controller_Show
->informationsystemItems()
->queryBuilder()
->where('informationsystem_items.active', '=', 1)
->where('informationsystem_items.datetime', '>', Core_Date::timestamp2sql(strtotime("-30 day")))
->clearOrderBy()
->orderBy('informationsystem_items.showed', 'DESC');
$Informationsystem_Controller_Show->show();
?>
$oInformationsystem_Item = Core_Entity::factory('Informationsystem_Item', $Informationsystem_Controller_Show->item);
$oTag_Informationsystem_Items = $oInformationsystem_Item->Tag_Informationsystem_Items->findAll();
// Минимальное количество тегов для совпадения.
$iSameTags = 1;
$aTagIds = array();
foreach($oTag_Informationsystem_Items as $oTag_Informationsystem_Item)
{
$aTagIds[] = $oTag_Informationsystem_Item->tag_id;
}
if (count($aTagIds))
{
$oSameTag_Informationsystem_Items = Core_Entity::factory('Tag_Informationsystem_Item');
$oSameTag_Informationsystem_Items->queryBuilder()
->select('tag_informationsystem_items.*')
->where('tag_id', 'IN', $aTagIds)
->where('tag_informationsystem_items.informationsystem_item_id', '!=', $oInformationsystem_Item->id)
->join('informationsystem_items', 'tag_informationsystem_items.informationsystem_item_id', '=', 'informationsystem_items.id')
->join('informationsystems', 'informationsystem_items.informationsystem_id', '=', 'informationsystems.id')
->where('informationsystems.site_id', '=', CURRENT_SITE)
->groupBy('informationsystem_items.id')
->having('COUNT(tag_id)', '>=', $iSameTags)
->clearOrderBy()
->orderBy('RAND()')
->limit(4);
$aSameTag_Informationsystem_Items = $oSameTag_Informationsystem_Items->findAll();
$oXmlSamenews = Core::factory('Core_Xml_Entity')->name('samenews');
$Informationsystem_Controller_Show->addEntity($oXmlSamenews);
foreach($aSameTag_Informationsystem_Items as $oSameTag_Informationsystem_Item)
{
$oXmlSamenews->addEntity(
$oSameTag_Informationsystem_Item->Informationsystem_Item->clearEntities()
->showXmlProperties(TRUE) // Добавляем дополнительные свойства в похожие товары
);
}
}
<!--==Этот код добавляем в XSL-шаблон вывода единицы Инфосистемы==-->
<xsl:if test="count(samenews) >0">
<div class="samenews"><p class="h4">Статьи по теме</p>
<div class="row"><xsl:apply-templates select="//samenews/informationsystem_item[@id]" mode="samenews"
/></div>
</div>
</xsl:if>
<!--=== Шаблон для схожих статей ===-->
<xsl:template match="//samenews/informationsystem_item" mode="samenews"
>
<xsl:if test="@id !=''">
<div class="col-12"><a href="{url}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
<xsl:value-of disable-output-escaping="yes" select="description"/>
</div>
</xsl:if>
</xsl:template>
<?php
if (Core::moduleIsActive('informationsystem')) {
$Informationsystem_Controller_Show = new Informationsystem_Controller_Show(Core_Entity::factory('Informationsystem', 17)); // Идентификатор информационной системы
$Informationsystem_Controller_Show->xsl(Core_Entity::factory('Xsl')->getByName('ЭлементыНаГлавной'))->groupsMode('none')->itemsForbiddenTags(array( // Название XSL шаблона
'text'
))->group(FALSE)->limit(18); // Ограничение на кол-во элементов
$Informationsystem_Controller_Show->informationsystemItems()->queryBuilder()->leftJoin('informationsystem_item_properties', 'informationsystem_items.informationsystem_id', '=', 'informationsystem_item_properties.informationsystem_id')->leftJoin('property_value_ints', 'informationsystem_items.id', '=', 'property_value_ints.entity_id', array(
array(
'AND' => array(
'informationsystem_item_properties.property_id',
'=',
Core_QueryBuilder::expression('`property_value_ints`.`property_id`')
)
)
))
->where('informationsystem_item_properties.property_id', '=', 77) // Идентификатор дополнительного свойства
->where('property_value_ints.value', '=', '1'); // Значание дополнительного свойства
$Informationsystem_Controller_Show->show();
}
?>
class My_Informationsystem_Controller_Show extends Informationsystem_Controller_Show
{
protected function _groupCondition()
{
$oInformationsystem = $this->getEntity();
if ($this->group)
{
// если ID группы не 0, т.е. не корневая группа
// получаем подгруппы
$aSubGroupsID = $this->fillInformationsystemGroup($oInformationsystem->id, $this->group); // добавляем текущую группу в массив
$aSubGroupsID[] = $this->group;
$this->informationsystemItems()
->queryBuilder()
->where('informationsystem_items.informationsystem_group_id', 'IN', $aSubGroupsID); // получаем все товары из подгрупп
}
else
{
$this->informationsystemItems()
->queryBuilder()
->where('informationsystem_items.informationsystem_group_id', 'NOT IN', Core_QueryBuilder::select('id')->from('informationsystem_groups')->where('informationsystem_id', '=', $oInformationsystem->id)->where('active', '=', 0));
}
return $this;
}
protected $_aGroupTree = array();
public function fillInformationsystemGroup($iInformationsystemId, $iInformationsystemGroupParentId = 0, $iLevel = 0)
{
$iInformationsystemId = intval($iInformationsystemId);
$iInformationsystemGroupParentId = intval($iInformationsystemGroupParentId);
$iLevel = intval($iLevel);
if ($iLevel == 0)
{
$aTmp = Core_QueryBuilder::select('id', 'parent_id')
->from('informationsystem_groups')
->where('informationsystem_id', '=', $iInformationsystemId)
->where('deleted', '=', 0)
->execute()->asAssoc()->result();
foreach ($aTmp as $aGroup)
{
$this->_aGroupTree[$aGroup['parent_id']][] = $aGroup;
}
}
$aReturn = array();
if (isset($this->_aGroupTree[$iInformationsystemGroupParentId]))
{
foreach ($this->_aGroupTree[$iInformationsystemGroupParentId] as $childrenGroup)
{
$aReturn[] = $childrenGroup['id'];
$aReturn = array_merge($aReturn, $this->fillInformationsystemGroup($iInformationsystemId, $childrenGroup['id'], $iLevel + 1));
}
}
$iLevel == 0 && $this->_aGroupTree = array();
return $aReturn;
}
}
$Informationsystem_Controller_Show = new My_Informationsystem_Controller_Show($oInformationsystem);
Core_Page::instance()->template(Core_Entity::factory('Template', 54)); // указываем id макета для Инфоэлемента
if (isset($Informationsystem_Controller_Show ->item) && $Informationsystem_Controller_Show ->item)
{
Core_Page::instance()->template(
Core_Entity::factory('Template', 8)
);
}
PHP КОДЫ вывода данных для Структуры
->showInformationsystemGroups(TRUE)
->showInformationsystemItems(TRUE)
->showShopGroups(TRUE)
->showShopItems(TRUE)
$Structure_Controller_Show->showProperties(TRUE);
Вывод шаблона страницы
<?php
Core_Page::instance()->execute();
?>
Вывод статичного документа на страницу
<?php
Core_Entity::factory('Document', 22)->Document_Versions->getCurrent()->execute();
?>
Вывод текста из статичного документа
<?php
echo Core_Entity::factory('Document', 13)->Document_Versions->getCurrent()->loadFile();
?>
Вывод Меню
<?php
// Меню
$Structure_Controller_Show = new Structure_Controller_Show(
Core_Entity::factory('Site', CURRENT_SITE));
$Structure_Controller_Show
->xsl(Core_Entity::factory('Xsl')
->getByName('ВерхнееМенюСайт2'))
->forbiddenTags(array(
'priority',
'changefreq',
'seo_keywords',
'seo_description',
'seo_title',
'parent_id',
'lib_id',
'document_id',
'data_template_id'
))
->menu(3)
->level(0) // Только родительские узлы, закомментировать, если нужны вложенные узлы
->show();
?>
Вывод Меню - выводим разделы инфосистем и магазина, ограничиваем вложенность уровней (3)
<?php
// ГлавноеМеню
$Structure_Controller_Show = new Structure_Controller_Show(
Core_Entity::factory('Site', CURRENT_SITE));
$Structure_Controller_Show->xsl(Core_Entity::factory('Xsl')
->getByName('ВерхнееМеню'))
->showInformationsystemGroups(TRUE)
->showInformationsystemItems(TRUE)
->showShopGroups(TRUE)
->addEntity(Core::factory('Core_Xml_Entity')
->name('max_level')
->value(3)
)
->menu(3)
->show();
?>
Показ в меню групп и элементов инфосистемы
<?php
// Верхнее меню
$Structure_Controller_Show = new Structure_Controller_Show(
Core_Entity::factory('Site', CURRENT_SITE));
$Structure_Controller_Show->xsl(
Core_Entity::factory('Xsl')->getByName('ВерхнееМеню')
)
->menu(1)
// Показывать группы информационных систем в
->showInformationsystemGroups(TRUE)
// Показывать элементы информационных систем
->showInformationsystemItems(TRUE)
->show();
?>
При выводе в структуре Инфоэлементов, не выводим Элементы определенной Инфосистемы
<?php
// Левое меню
$Structure_Controller_Show = new Structure_Controller_Show(
Core_Entity::factory('Site', CURRENT_SITE));
$Structure_Controller_Show->showProperties(TRUE);
$Structure_Controller_Show->xsl(
Core_Entity::factory('Xsl')->getByName('ЛевоеМенюСайт2')
)
->menu(4)
->showInformationsystemGroups(TRUE)
->showInformationsystemItems(TRUE)
->showShopGroups(TRUE);
class Structure_Controller_Show_Observer
{
static public function onBeforeFindInformationsystemItems($object, $args)
{
if ($args[2]->id == 18 || $args[2]->id == 17) // проверяем id группы у инфоэлементов, которые не будем выводить
{
$args[0]
->queryBuilder()
->limit(0);
}
}
}
Core_Event::attach('Structure_Controller_Show.onBeforeFindInformationsystemItems', array('Structure_Controller_Show_Observer',
'onBeforeFindInformationsystemItems'));
$Structure_Controller_Show->show();
?>
Передача контроллеру структуры идентификатора текущего инфоэлемента и группы
<?php
$Structure_Controller_Show = new Structure_Controller_Show(
Core_Entity::factory('Site', CURRENT_SITE));
$Structure_Controller_Show->xsl(Core_Entity::factory('Xsl')
->getByName('ЛевоеМеню')
)
->menu(3)
// Показывать группы информационных систем в меню*-***
->showInformationsystemGroups(TRUE)
// Показывать элементы информационных систем в меню
->showInformationsystemItems(FALSE);
if (is_object(Core_Page::instance()->object)
&& get_class(Core_Page::instance()->object) == 'Informationsystem_Controller_Show')
{
$Structure_Controller_Show->addEntity(
Core::factory('Core_Xml_Entity')
->name('informationsystem_group_id')
->value(intval(Core_Page::instance()->object->group))
)->addEntity(
Core::factory('Core_Xml_Entity')
->name('informationsystem_item_id')
->value(intval(Core_Page::instance()->object->item))
);
}
$Structure_Controller_Show->show();
?>
Вывод меню на основе вложенных узлов структуры (подходит для многоязычных версий)
<?php
// Меню
$Structure_Controller_Show = new Structure_Controller_Show(
Core_Entity::factory('Site', CURRENT_SITE));
$Structure_Controller_Show
->xsl(Core_Entity::factory('Xsl')
->getByName('ВерхнееМеню'))
->parentId(90)
->show();
?>
Вывод меню на основе вложенных узлов структуры с передачей ID пользователя сайта
Показ подузлов родительского узла лежащего в корне
<?php
// Верхнее меню
$Structure_Controller_Show = new Structure_Controller_Show(
Core_Entity::factory('Site', CURRENT_SITE));
$oStructure = Core_Page::instance()->structure;
while ($oStructure->parent_id != 0)
{
$oStructure = $oStructure->getParent();
}
$Structure_Controller_Show->xsl(Core_Entity::factory('Xsl')
->getByName('ПравоеМеню'))
->menu('3')
->parentId($oStructure->id)
->show();
?>
Хлебные крошки
<?php
// Вывод строки навигации
$Structure_Controller_Breadcrumbs = new Structure_Controller_Breadcrumbs(
Core_Entity::factory('Site', CURRENT_SITE)
);
$Structure_Controller_Breadcrumbs
->xsl(
Core_Entity::factory('Xsl')->getByName('ХлебныеКрошки')
)
->show();
?>
Вывод дополнительного свойства структуры
<?php
$oProperty = Core_Entity::factory('Property', 220); // ID св-ва
$aPropertyValues = $oProperty->getValues(CURRENT_STRUCTURE_ID);
if (isset($aPropertyValues[0]))
{
echo $aPropertyValues[0]->value;
}
?>
Выводим в МЕНЮ дополнительное свойство структуры
<?php
// ГлавноеМеню
$Structure_Controller_Show = new Structure_Controller_Show(
Core_Entity::factory('Site', CURRENT_SITE));
$Structure_Controller_Show->showProperties(TRUE);
$Structure_Controller_Show->xsl(Core_Entity::factory('Xsl')
->getByName('ГлавноеМеню'))
->menu(3)
->showInformationsystemGroups(TRUE)
->showInformationsystemItems(TRUE)
->show();
?>
Регистрация. Вход в кабинет пользователя
<?php
// Если модуль пользователей сайта доступен
if (Core::moduleIsActive('siteuser'))
{?><div id="authorization"><?php
if (is_null(Core_Entity::factory('Siteuser')->getCurrent()))
{
?>
<form method="post" action="/users/">
<div><input type="text" name="login" value="Логин" /></div>
<div><input type="password" name="password" value="Пароль" /></div>
<div><input type="submit" name="apply" value="Войти" /></div>
</form>
<a href="/users/registration/" title="Зарегистрироваться">Зарегистрироваться</a>
<?php
}
/*else
{?>
<a href="/users/" title="Кабинет пользователя">Кабинет пользователя</a>
<?php
}*/
?></div><?php
}
?>
Вывод контента в зависимости от текущей страницы
<?php
// Не главная страница
$sStructurePath = Core_Entity::factory('Structure', CURRENT_STRUCTURE_ID)->path;
if ($sStructurePath !== '/')
{
if (Core::moduleIsActive('informationsystem'))
{
$Informationsystem_Controller_Show = new Informationsystem_Controller_Show(
Core_Entity::factory('Informationsystem', '16')
);
$Informationsystem_Controller_Show
->informationsystemItems()
->queryBuilder()
->clearOrderBy()
->orderBy('RAND()');
$Informationsystem_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('ОписаниеУслугиВверхуСайт16')
)
//->groupsMode('none')
//->itemsForbiddenTags(array('text'))
->group(FALSE)
->limit(1)
->show();
}
}
else
{
Core_Entity::factory('Document', '9')->Document_Versions->getCurrent()->execute();
}
?>
Вывод хлебных крошек на всех страницах, кроме главной
<?php
$sStructurePath = Core_Entity::factory('Structure', CURRENT_STRUCTURE_ID)->path;
// Показываем "хлебные крошки" на всех страницах, кроме главной
if ($sStructurePath != '/')
{
// Вывод строки навигации
$Structure_Controller_Breadcrumbs = new Structure_Controller_Breadcrumbs(
Core_Entity::factory('Site', CURRENT_SITE)
);
$Structure_Controller_Breadcrumbs
->xsl(
Core_Entity::factory('Xsl')->getByName('ХлебныеКрошки')
)
->show();
// /Хлебные крошки
}
?>
Выводим меню на всех страницах, кроме главной
<?php
$sStructurePath = Core_Entity::factory('Structure', CURRENT_STRUCTURE_ID)->path;
// Показываем "меню" на всех страницах, кроме главной
if ($sStructurePath = '/') {
echo '';
} else {
// Верхнее меню
$Structure_Controller_Show = new Structure_Controller_Show(
Core_Entity::factory('Site', CURRENT_SITE));
$Structure_Controller_Show->xsl(
Core_Entity::factory('Xsl')->getByName('ВерхнееМенюСделатьКлючи')
)
->menu('17')
->show();
}
?>
Получаем адрес Структуры и выводим нужный код <?php
$oStructure = Core_Entity::factory('Structure', CURRENT_STRUCTURE_ID);
if ($oStructure->path == '/') {
?>
... какой-то код
}
?>
ВЫВОДИМ ЗАГОЛОВОК СТАТИЧНОГО ДОКУМЕНТА
<?php Core_Page::instance()->showTitle()?>
$oDocument = Core_Entity::factory('Document', 123);
echo '<h1>' . htmlspecialchars($oDocument->name) . '</h1>';
$oDocument->Document_Versions->getCurrent()->execute();
<?php
// ID текущего узла струкутры
$structure_id = CURRENT_STRUCTURE_ID;
// Объект узла
$oStructure = Core_Entity::factory('Structure', $structure_id);
if ($oStructure->document_id)
{
$oDocument = $oStructure->Document;
echo '<div class="page-title category-title"><h1>' . htmlspecialchars($oDocument->name) . '</h1></div>';
}
// Вывод версии документа
Core_Page::instance()->execute();
?>
<?php
class Document_Version_Observer
{
static public function onBeforeExecute($object, $args)
{
?><h1><?php echo htmlspecialchars($object->Document->name)?></h1><?php
}
}
// Add document_version observer
Core_Event::attach('document_version.onBeforeExecute', array('Document_Version_Observer', 'onBeforeExecute'));
// Вывод версии документа
Core_Page::instance()->execute();
?>
<h1>
<?php
// Заголовок документа
$Structure_Controller_Breadcrumbs = new Structure_Controller_Breadcrumbs(
Core_Entity::factory('Site', CURRENT_SITE)
);
$Structure_Controller_Breadcrumbs
->xsl(
Core_Entity::factory('Xsl')->getByName('ЗаголовокДокумента')
)
->show();
?>
</h1>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:hostcms="http://www.hostcms.ru/"
exclude-result-prefixes="hostcms">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="utf-8" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
<!-- Хлебные крошки -->
<xsl:template match="/site">
<xsl:if test="count(*[@id]) > 0">
<xsl:apply-templates select="*[@id]" />
</xsl:if>
</xsl:template>
<xsl:template match="*">
<!-- Определяем адрес ссылки -->
<xsl:variable name="link">
<xsl:choose>
<!-- Если внутренняя ссылка -->
<xsl:when test="link != ''">
<xsl:value-of disable-output-escaping="yes" select="link"/>
</xsl:when>
<!-- Если внешняя ссылка -->
<xsl:otherwise>
<xsl:value-of disable-output-escaping="yes" select="url"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:value-of disable-output-escaping="yes" select="name"/>
<xsl:apply-templates select="*[@id][link/node() or url/node()]" />
</xsl:template>
</xsl:stylesheet>
Получение элемента структуры верхнего(корневого) уровня
<?php
$oStructure = Core_Entity::factory('structure', CURRENT_STRUCTURE_ID);
while ($oStructure->parent_id != 0 && $oStructure = $oStructure->getParent());
// Выводим id структуры верхнего уровня
echo $oStructure->id;
Далее остается передать значение в контроллер показа <?php
$Structure_Controller_Show->addEntity(
Core::factory('Core_Xml_Entity')
->name('parent_current_structure_id')
->value($oStructure->id)
);
Добавляем Инфосистему в код Интернет-магазина
PHP
ob_start();
if (Core::moduleIsActive('informationsystem')) {
$Informationsystem_Controller_Show = new Informationsystem_Controller_Show(
Core_Entity::factory('Informationsystem', 31) // Здесь указываем ID Инфосистемы
);
$Informationsystem_Controller_Show
->informationsystemItems()
->queryBuilder()
->clearOrderBy()
->orderBy('datetime', 'DESC');
->xsl(Core_Entity::factory('Xsl')->getByName('БаннерыВИнтернетМагазине')) // Здесь указываем Xsl шаблон для Инфосистемы
->groupsMode('none')
->itemsForbiddenTags([
'text',
'description',
'seo_description',
'seo_keywords',
'seo_title',
])
->group(false)
->itemsPropertiesList(false)
->itemsProperties(true)
->limit(1)
// ->votes(TRUE)
->cache(false)
->show();
}
$Shop_Controller_Show->addEntity(
Core::factory('Core_Xml_Entity')
->name('banners')
->value(ob_get_clean())
);
// END ADD
Добавляем меню структуры в ТДС Инфосистемы
В настройки кода ТДС Инфосистемы добавляем код, который в теге menu выведет XSL шаблон Меню структуры. В данном конкретном случае показываются Вложенные разделы с Раздел структуры с ID 421
if ($Informationsystem_Controller_Show->group==0 || $Informationsystem_Controller_Show->group) {
ob_start();
// МенюВИнфосистеме
$Structure_Controller_Show = new Structure_Controller_Show(
Core_Entity::factory('Site', CURRENT_SITE));
$oStructure = Core_Page::instance()->structure;
while ($oStructure->parent_id != 0)
{
$oStructure = $oStructure->getParent();
}
$Structure_Controller_Show->xsl(Core_Entity::factory('Xsl')
->getByName('МенюКомпанииВИнфосистемеPNEVMOTEX'))
->showProperties(TRUE)
->menu('43')
->parentId(421)
->show();
$Informationsystem_Controller_Show->addEntity(
Core::factory('Core_Xml_Entity')
->name('menu')
->value(ob_get_clean())
) ;
Запрос количества товаров только в наличии
PHP
$oQB = Core_QueryBuilder::select('shop_items.id')
->from('shop_items')
->join('shop_warehouse_items', 'shop_warehouse_items.shop_item_id', '=', 'shop_items.id')
->join('shop_warehouses', 'shop_warehouses.id', '=', 'shop_warehouse_items.shop_warehouse_id')
->where('shop_items.active', '=', 1)
->where('shop_items.deleted', '=', 0)
->where('shop_items.shop_id', '=', 3)
->where('shop_warehouses.active', '=', 1)
->where('shop_warehouses.deleted', '=', 0)
->groupBy('shop_items.id')
->having(Core_QueryBuilder::expression('SUM(shop_warehouse_items.count)'), '>', 0);
$oCore_QueryBuilder_Select = Core_QueryBuilder::select(array(Core_QueryBuilder::raw('COUNT(*)'), 'count'))
->from(array($oQB, 'x'));
$row = $oCore_QueryBuilder_Select->execute()->asObject()->current();
echo 'Сегодня в продаже ' . $row->count . ' ' . Core_Str::declensionNumber($row->count, 'товар', 'товара', 'товаров');
Информационный блок в карточке товара
Добавляем в карточку товара блок с призывом задать вопрос

1. В XSL шаблон вывода карточки товара в нужном месте размещаем данный код:
<div class="ask-question">
<div class="d-flex justify-content-center">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="40px" height="40px">
<path style="fill:#ccc" d="M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 7.1 5.8 12 12 12 2.4 0 4.9-.7 7.1-2.4L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64zm32 352c0 17.6-14.4 32-32 32H293.3l-8.5 6.4L192 460v-76H64c-17.6 0-32-14.4-32-32V64c0-17.6 14.4-32 32-32h384c17.6 0 32 14.4 32 32v288zm-224-88c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm-8.5-24h17c4.2 0 7.7-3.3 8-7.5l7-112c.3-4.6-3.4-8.5-8-8.5h-31c-4.6 0-8.3 3.9-8 8.5l7 112c.3 4.2 3.8 7.5 8 7.5z"></path>
</svg>
<span class="ps-3 fs-4 fw-bold title">Есть вопросы?</span>
</div>
<div class="text">
Если у вас есть вопросы по товару, то задавайте их и мы вам с радостью ответим.
</div>
<div class="last">
<button type="button" id="questionModalOpen" data-bs-toggle="modal" data-bs-target="#questionModal" class="btn btn-transparent">Задать вопрос о товаре</button>
</div>
</div>
2. В макет добавляем код загрузки формы (в примере код формы с отправкой уведомления Пользователю). Форма будет в модальном окне. Нажатие на кнопку "Задать вопрос" вызовет открытие формы.
<?php
// ФОРМА ЗАЯВКИ
$oForm = Core_Entity::factory('Form', 1);
$Form_Controller_Show = new Form_Controller_Show($oForm);
if (!is_null(Core_Array::getPost($oForm->button_name)))
{
$Form_Controller_Show
->values($_POST + $_FILES)
// 0 - html, 1- plain text
->mailType(0)
->mailXsl(
Core_Entity::factory('Xsl')->getByName('ПисьмоКураторуФормыВФорматеHTML')
)
->mailFromFieldName('euronasos19@gmail.com')
->process();
// Отправляем письмо-подтверждение пользователю
$Form_Controller_Show1 = clone $Form_Controller_Show;
$sEmail = Core_Array::get($Form_Controller_Show1->values, 'email'); // здесь указать название поля input для email в форме
if (Core_Valid::email($sEmail)){
ob_start();
$Form_Controller_Show1
->xsl(
Core_Entity::factory('Xsl')->getByName('ПисьмоПодтверждениеПользователюФормыВФорматеHTML')
)
->show();
$sMailText = ob_get_clean();
if (mb_strpos($sMailText, 'ERROR TRUE') === FALSE){
$subject = 'На сайте site.ru Вами была заполнена форма Заявки';// Тему письма отредактировать
$oCore_Mail = Core_Mail::instance()
->to($sEmail)
->from('info@site.ru')
->subject($subject)
->message(trim($sMailText))
->contentType('text/html')
->header('X-HostCMS-Reason', 'Form');
$oCore_Mail->send();
}
}
}
$Form_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('ОтобразитьФормуЗаявкиВМодальномОкне')
)
->show();
?>
XSL . ФормаЗаявкиВМодальномОкне
<!ENTITY labelModalTitle1 "Благодарим вас за заявку!">
<!ENTITY labelModalTitle2 "Заявка получена.">
<!ENTITY labelSuccessText "Мы свяжемся с вами в ближайшее время">
<!ENTITY labelSuccessText2 "Наш менеджер ответит на все ваши вопросы">
<!ENTITY labelERROR "ОШИБКА!">
<!ENTITY labelTextErrorId0 "Вы неправильно ввели код подтверждения отправки формы!">
<!ENTITY labelTextErrorId1 "Заполните все обязательные поля!">
<!ENTITY labelTextErrorId2 "С момента отправки последней формы прошло слишком мало времени!">
<!ENTITY labelTextError1 "Это поле пустое">
<!ENTITY labelTextError2 "E-mail должен иметь вид name@domain.com">
<!ENTITY labelText1 "Обязательное поле">
<!ENTITY labelCheckNumber1 "Проверочный код">
<!ENTITY labelCheckNumber2 "показать другой код">
Стили CSS
/******************************/
.ask-question {
padding:20px;
background-color: #f0f0f0;
max-width:450px;
text-align: center;
}
.ask-question > div:not(.last) {
margin-bottom:15px;
}
background:
border:
color: #212529;
/******************************/
Меняем title в макете страницы
<title><?php
if (is_object(Core_Page::instance()->object)) {
$bShop = Core_Page::instance()->object instanceof Shop_Controller_Show;
if ($bShop){
if (Core_Page::instance()->object->tag) {
Core_Page::instance()->showTitle();
echo ' купить в Москве | интернет-магазин Пневмотех';
}else{
Core_Page::instance()->showTitle();
}
}else{
Core_Page::instance()->showTitle();
}
}else{
Core_Page::instance()->showTitle();
}
?></title>Ограничиваем поиск только по каталогу товаров
Код Типовой динамической страницы "Поиск"
<?php
if (Core::moduleIsActive('search'))
{
$oSite = Core_Entity::factory('Site', CURRENT_SITE);
$Search_Controller_Show = new Search_Controller_Show($oSite);
$Search_Controller_Show
->limit(Core_Page::instance()->libParams['itemsOnPage'])
->parseUrl()
->len(Core_Page::instance()->libParams['maxlen'])
->query(Core_Array::getGet('text'))
->structure(Core_Page::instance()->structure);
//
// 'module_id' => 3 - здесь указываем id интернет-магазина
//
$Search_Controller_Show->modules(
array(
3 =>array(array('module_id' => 3, 'module_value_type' => 2))
)
);
$Search_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName(Core_Page::instance()->libParams['xsl'])
)
->show();
}
else
{
?>
<h1>Поиск</h1>
<p>Функционал недоступен, приобретите более старшую редакцию.</p>
<p>Модуль «<a href="http://www.hostcms.ru/hostcms/modules/search/">Поиск по сайту</a>» доступен в редакциях «<a href="http://www.hostcms.ru/hostcms/editions/corporation/">Корпорация</a>», «<a
href="http://www.hostcms.ru/hostcms/editions/business/">Бизнес</a>», «<a
href="http://www.hostcms.ru/hostcms/editions/small-business/">Малый бизнес</a>» и «<a
href="http://www.hostcms.ru/hostcms/editions/my-site/">Мой сайт</a>».</p>
<?php
}Доступные методы:
- query($query) поисковый запрос
- inner($inner) поиск по внутренним данным, например, Helpdesk. По умолчанию 0 - внешние данные, 1 - внутренние данные
- modules($modules) массив условий поиска по модулям
- itemsForbiddenTags(array('description')) массив тегов связанных элементов, запрещенных к передаче в генерируемый XML
- offset($offset) смещение, с которого выводить информационные элементы, по умолчанию 0
- limit($limit) количество выводимых элементов
$oSite = Core_Entity::factory('Site', CURRENT_SITE);
$Search_Controller_Show = new Search_Controller_Show($oSite);
$Search_Controller_Show
->limit(Core_Page::instance()->libParams['result_on_page'])
->parseUrl()
->len(Core_Page::instance()->libParams['maxlen'])
->query(Core_Array::getGet('text'));
$Search_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName(Core_Page::instance()->libParams['xsl'])
)
->show();0 – Структура сайта;
1 – Информационные системы;
2 – Форум;
3 – Интернет-магазин;
4 – HelpDesk.
Пример поиска по информационной системе с номером 5 и 7, а также по магазину с номером 17.
$Search_Controller_Show
->modules(
array(
1 => array (5, 7),
3 => array (17)
)
);Пример поиска по информационной системе с номером 5 и 7 (с дополнительным условием поиска только по информационным элементам), а также по магазину с номером 17.
$Search_Controller_Show
->modules(
array(
1 => array (5,
array('module_id' => 7, 'module_value_type' => 2)),
3 => array (17))
);module_id — целое число, ID сущности, например, магазин с кодом 7
module_value_type — целое число или массив, ID типа, например, 1 - группа, 2 - элемент (или товар)
module_value_id — целое число или массив, ID сущности указанного типа (например, ID товара или группы) при поиске только по ним.
РАЗНОЕ
<form action="/search/" method="GET" class="search">
<input type="text" name="text" class="inp1" value="Поиск по каталогу" onblur="if(this.value=='') this.value='Поиск по каталогу'" onFocus="if(this.value =='Поиск по каталогу' ) this.value=''" size="15" >
<input type="image" title="Поиск" src="/images/search.png" class="inp2" width="47" height="27" alt="Поиск по сайту" />
</form>
<?php
// Если модуль поиска доступен
if (Core::moduleIsActive('search'))
{
?>
<form id="search_mini_form" method="get" action="/search/">
<div class="form-search">
<input id="search" type="text" name="text" placeholder="Поиск">
<i class="fa fa-search" onclick="$(this).closest('form').submit();"></i>
</div>
</form>
<?php
}
?>
.inp1{font-size:.8em; vertical-align:middle; font-weight:400; color:#666; height:25px;width:180px; padding:0 5px; border: 1px solid #fbb91d; /*Firefox*/ -moz-border-radius: 6px 0 0 6px; /*Safari, Chrome*/ -webkit-border-radius: 6px 0 0 6px; /*Konqueror*/ -khtml-border-radius: 6px 0 0 6px; border-radius: 6px 0 0 6px; -moz-box-shadow: inset 0px 0px 8px #6d6b6b;/*FF 3.5+*/-webkit-box-shadow: inset 0px 0px 8px #6d6b6b;/*Saf3-4, Chrome, iOS 4.0.2-4.2, Android 2.3+*/ -khtml-box-shadow: inset 0px 0px 8px #6d6b6b;/*Konqueror*/box-shadow: inset 0px 0px 8px #6d6b6b; behavior: url(/js/PIE.htc);/*Apply PIE*/}
.inp2 {vertical-align:middle; position:relative; margin-left:-5px; margin-top:-1px;z-index:4; border:0!important; padding:0;}
<!-- Параметр action формы должен быть "./", если обработчик на этой же странице, либо "./form/", если обработчик на другой странице, например ./form/ -->
<form name="form{@id}" id="form{@id}" class="validate" action="./" method="post" enctype="multipart/form-data">
<!-- Параметр action формы должен быть "./", если обработчик на этой же странице, либо "./form/", если обработчик на другой странице, например ./form/ -->
<form name="form{@id}" id="form{@id}" class="validate" action="/feedback" method="post" enctype="multipart/form-data">
<?php
if (Core::moduleIsActive('form'))
{
$Form_Controller_Show = new Form_Controller_Show(Core_Entity::factory('Form', 1));
$Form_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('ОтобразитьФорму')
)
->show();
}
?>
<body <? if ($_SERVER['REQUEST_URI']=='/') echo 'class="index"' ?>>
<body <? if ($_SERVER['REQUEST_URI']=='/'){
echo 'class="index pageBody"';
}else{
echo 'class="pageBody"';
}
?>>
<?php
// Если модуль пользователей сайта доступен
if (Core::moduleIsActive('siteuser'))
{?><div id="authorization"><?php
if (is_null(Core_Entity::factory('Siteuser')->getCurrent()))
{
?>
<form method="post" action="/users/">
<div><input type="text" name="login" value="Логин" /></div>
<div><input type="password" name="password" value="Пароль" /></div>
<div style="padding-top:2px;"><input type="image" src="/images/95prozentov/user.png" name="apply" title="Авторизоваться" class="inp2" /></div>
</form>
<?php
}
else
{?>
<form method="get" action="/search/" class="search">
<div><input name="text" type="text" value="Поиск по каталогу" class="inp1" onblur="if(this.value=='') this.value='Поиск по каталогу'" onFocus="if(this.value =='Поиск по каталогу' ) this.value=''" /><input type="image" src="/images/95prozentov/search.png" name="apply" title="Искать" class="inp2" /></div>
</form>
<?php
}
?></div><?php
}
?>
<?php echo htmlspecialchars(Core_Entity::factory('Document', 16)->name); ?>
<?php echo date('Y') ?>
<div class="time">Время МСК: <span class="bold"><?php $datamos = gmdate('H:i', time() + 3*3600); echo $datamos ?></span></div>
Core_Page::instance()->template(Core_Entity::factory('Template', 54)); // указываем id макета для Товара или Инфоэлемента
if (isset($Shop_Controller_Show->item) && $Shop_Controller_Show->item)
{
Core_Page::instance()->template(
Core_Entity::factory('Template', 8)
);
}
<?php echo htmlspecialchars(Core_Entity::factory('Site', CURRENT_SITE)->name);?>
<?php
switch(Core_Page::instance()->template->id)
{
case '16':
case '17':
{
$body_id = 'page2';
break;
}
default:
{
$body_id = 'page1';
}
}
?>
<body id="<?php echo $body_id?>">
Вставляем код в ТДС (Интернет-магазин)
после строки
<?php
$Shop_Controller_Show = Core_Page::instance()->object;
-----------------------------------------------------------------------
// add 08.06.2015 - вывод всех групп пользователя
if (!is_null(Core_Entity::factory('Siteuser')->getCurrent())){
$aSiteuser_Groups = Core_Entity::factory('Siteuser')->getCurrent()->Siteuser_Groups->findAll();
foreach ($aSiteuser_Groups as $oSiteuser_Group)
{
$Shop_Controller_Show->addEntity(
Core::factory('Core_Xml_Entity')
->name('siteuser_groups')
->addEntity(
Core::factory('Core_Xml_Entity')->name('group')->value($oSiteuser_Group->name)
)
);
}
}
// end add 08.06.2015
<a href="/en/<?php
$oURL = $_SERVER['REQUEST_URI'];
$oURL = substr($oURL,4);
if ($oURL == '') echo '';
else echo $oURL;
?>">EN</a>
<a href="/ru/<?php
$oURL = $_SERVER['REQUEST_URI'];
$oURL = substr($oURL,4);
if ($oURL == '') echo '';
else echo $oURL;
?>">RU</a>
<?php
$images = array(
'изображение-1.bmp',
'изображение-2.png',
'изображение-3.gif',
'изображение-4.png',
'изображение-5.jpg',
);
$image = $images[array_rand($images)];
$output = "<img src=\"http://сайт.ru/папка, где хранятся изображения/" . $image . "\" alt=\"Перезагрузите браузер для нового случайного изображения\" />";
echo $output;
?>
Редактируем файл /modules/core/mail.php
Несколько адресов указываем в цикле:
$aEmails = array('1@1.ru', '2@2.ru');
foreach ($aEmails as $sEmail)
{
$oCore_Mail = Core_Mail::instance()
->to($sEmail)
->from('test@test.ru')
->subject('test')
->message('text')
->contentType('text/plain')
->header('X-HostCMS-Reason', 'Alert')
->send();
}
<xsl:for-each select="property_value[tag_name='img'][file !='']">
<xsl:sort select="@id" />
<div>
<a href="{../dir}{file}">
<img class="gallery-img" alt="{file_name}" src="{../dir}{file}"/>
</a>
</div>
</xsl:for-each>
Сессии
Доступ к данным сессии
$_SESSION.$value = $_SESSION['foo'];
$value = Core_Array::getSession('foo');
$value = Core_Array::getSession('foo', 'default');
Открытие и закрытие сессии
// Открыть сессиюCore_Session::start();
// Записать в сессию
$_SESSION['foo'] = 'bar';
// Закрыть сессиюCore_Session::close();
$bStarted = Core_Session::isStarted();
$bAcive = Core_Session::isAcive();
$session_name = Core_Session::getName();
if (Core_Session::hasSessionId()){
Core_Session::start();
print_r($_SESSION);}
Времени жизни сессии
Конфигурационный файл
-
driver — название драйвера;
-
class — имя класса драйвера (необязательный параметр).
'session' => array(
'driver' => 'database',
'class' => 'Core_Session_Database'
),
-
driver — название драйвера;
-
class — имя класса драйвера (необязательный параметр);
-
server — адрес сервера, по умолчанию 127.0.0.1;
-
port — порт, по умолчанию 6379;
-
auth —авторизационный пароль, если сервер не требует пароль, то не устанавливайте опцию или укажите NULL;
'session' => array(
'driver' => 'phpredis',
'class' => 'Core_Session_Phpredis',
'server' => '127.0.0.1',
'port' => 6379,
'auth' => 'авторизационный пароль'
),
Скрипт прописывает всем элементам списков Url, если изначально они не были заданы
Скрипт загружается в корень сайта.
Для запуска скрипта нужно быть авторизованным в админ панели.
Адрес скрипта будет таким: https://site.ru/make-urls.php.
В процессе работы страница обновится несколько раз, если элементов списков много (за один прогон — 1000 элементов списков).
В самом конце будет вывод, типа:
done. Processed: {кол-во обработанных элементов}
<?php
header("Content-type: text/html; charset=UTF-8");
// Подключаем основные классы
require_once ('bootstrap.php');
if (!Core_Auth::logged()) {
header('Location: /');
exit();
}
$iLimit = 1000;
$iStart = intval(Core_Array::getRequest('total', 0));
$oListItems = Core_Entity::factory('List_Item');
$oListItems->queryBuilder()
->limit($iLimit)
->offset($iStart)
;
$aListItems = $oListItems->findAll();
foreach ($aListItems as $oListItem) {
$oListItem->makePath();
$oListItem->save();
$iStart++;
}
>
if ($iStart - intval(Core_Array::getRequest('total', 0)) >= $iLimit) {
header('Refresh:1; url=/' . basename(__FILE__) . '?total=' . $iStart);
echo 'redirecting...';
}
else {
echo 'done. Processed: ' . $iStart;
}
exit();
ТДС Экспорт в Яндекс Маркет
<?php
$oShop = Core_Entity::factory('Shop', Core_Array::get(Core_Page::instance()->libParams, 'shopId'));
// $oCore_Out_File = new Core_Out_File();
// $oCore_Out_File->filePath(CMS_FOLDER . "yandexmarket.xml");
$Shop_Controller_YandexMarket = new Shop_Controller_YandexMarket($oShop);
// $Shop_Controller_YandexMarket->stdOut($oCore_Out_File);
/*
class Shop_Controller_YandexMarket_Observer2
{
static public function onBeforeSelectShopItems($object, $args)
{
$args[0]->queryBuilder()
->where('shop_items.shop_group_id', 'IN', array(711,714));
}
}
*/
Core_Event::attach('Shop_Controller_YandexMarket.onBeforeSelectShopItems', array('Shop_Controller_YandexMarket_Observer2', 'onBeforeSelectShopItems'));
$Shop_Controller_YandexMarket
->token(Core_Array::get(Core_Page::instance()->libParams, 'token', ''))
->checkRest(TRUE)
->outlets(array(5 => 111))
->model('DBS')
->parseUrl()
->modifications(TRUE)
->groupModifications(TRUE)
->type('vendor.model')
->additionalImages(array('images'))
->itemsProperties(array(618, 621, 630, 631))
->checkRest(TRUE)
->itemsForbiddenProperties(array(7431, 7493))
->show();
exit();
Все доступные методы:
- itemsProperties(TRUE|FALSE|array()) выводить значения дополнительных свойств товаров, по умолчанию TRUE.
- itemsForbiddenProperties(array()) исключать значения дополнительных свойств товаров, по умолчанию array().
- additionalImages(array()) массив tag_name дополнительных свойств для изображений.
- additionalTagNames(array()) имена тегов, включаемых в основной offer товара, с указанием соответствующих дополнительных свойств, например, array('expiry' => 117)
- addForbiddenTag('tag-name') добавить тег, запрещенный к передаче в генерируемый YML.
- addForbiddenTags(array('description', 'vendor')) массив тегов, запрещенных к передаче в генерируемый YML.
- cdata(array('description')) массив тегов, передаваемых с форматированием в виде блока символьных данных — CDATA, по умолчанию array(). Если длина кода превышает установленные лимиты, будет произведено удаление тегов и сокращение текста до установленных лимитов.
- removeForbiddenTag(name) удалить тег из списка запрещенных к передаче в генерируемый YML.
- modifications(TRUE|FALSE) экспортировать модификации, по умолчанию TRUE.
- media(TRUE|FALSE) выгружать изображения из библиотеки, по умолчанию FALSE.
- closed(TRUE|FALSE) выгружать закрытые товаров, по умолчанию FALSE.
- surcharge(200|'20%') дополнительная наценка на все товары, может быть указана в абсолютном значении, либо процентом, по умолчанию 0.
- rootItems(TRUE|FALSE) экспортировать корневые товары, по умолчанию FALSE.
- groupModifications(TRUE|FALSE) группировать модификации (атрибут group_id у offer, используется только в категориях Одежда, обувь и аксессуары, Мебель, Косметика, парфюмерия и уход, Детские товары, Аксессуары для портативной электроники), по умолчанию FALSE.
- recommended(TRUE|FALSE) экспортировать рекомендованные товары, по умолчанию FALSE.
- checkAvailable(TRUE|FALSE) проверять остаток на складе, по умолчанию TRUE. Если FALSE, то товар будет выгружаться доступным независимо от остатка на складе.
- checkRest(TRUE|FALSE) не экспортировать товары с нулевым остатком, по умолчанию FALSE. Если TRUE, то товар будет выгружаться только при наличии остатка на складе.
- deliveryOptions(TRUE|FALSE) условия доставки, по умолчанию TRUE. У самого магазина должно быть указано хотя бы одно условие доставки.
- model('ADV'|'DBS'|'FBY'|'FBY+'|'FBS') модель размещения на Маркете, влияет на выгружаемые теги, по умолчанию не задана.
- type('offer'|'vendor.model'|'book'|'audiobook'|'artist.title'|'tour'|'event-ticket') тип товара, по умолчанию 'offer'
- onStep(3000) количество товаров, выбираемых запросом за 1 шаг, по умолчанию 500
- stdOut() поток вывода, может использоваться для записи результата в файл. По умолчанию Core_Out_Std
- sno() система налогообложения (СНО) магазина. По умолчанию OSN — общая система налогообложения (ОСН).
- delay() временная задержка в микросекундах, используется на виртуальных хостингах с ограничением на ресурсы в единицу времени, по умолчанию 0. значение 10000 - 0,01 секунда.
- mode('between'|'offset') вариант перебора элементов, по умолчанию 'between'. Если у вас большая разница между идентификаторами товаров или групп, выберите 'offset'.
- priceMode('item'|'shop') режим формирования цен, по умолчанию 'item'. Если необходимо выгружать товары в валюте магазина, укажите 'shop'.
- outlets(array()) [Покупка на Яндекс.Маркете] массив соответствия ID склада в системе и ID точки продаж в Яндекс.Маркет.
- paymentMethod(array('YANDEX' => 17, 'APPLE_PAY' => 18, 'GOOGLE_PAY' => 19, 'CARD_ON_DELIVERY' => 2, 'CASH_ON_DELIVERY' => 1)) [Покупка на Яндекс.Маркете] массив соответствия способов оплаты ('YANDEX', 'APPLE_PAY', 'GOOGLE_PAY', 'CARD_ON_DELIVERY', 'CASH_ON_DELIVERY') и ID платежных систем в системе управления.
- token(string) [Покупка на Яндекс.Маркете] токен
- request(string) [Покупка на Яндекс.Маркете] данные запроса, если заданы, то используются вместо присланного запроса
- marketMode(NULL|'catalog'|'terms') Вы можете использовать общий файл для добавления товаров и для управления условиями размещения в магазинах. Но можно сделать отдельные файлы: в файле с добавлением передавать только общие параметры товаров ->marketMode('catalog'), а в файлах с условиями размещения ->marketMode('terms') — только параметры для размещения в магазинах.
- utm_source() определяет рекламодателя, например, market
- utm_medium() определяет рекламный или маркетинговый канал (цена за клик, баннер, рассылка по электронной почте).
- debug(TRUE|FALSE) фиксировать в логах поступаемые запросы, по умолчанию FALSE.
Убрать индексацию модификаций при выгрузке из 1С
Core_Event::attach('Shop_Item_Import_Cml_Controller.onAfterImportShopItem', array('HostCMS_Shop_Item_Modification', 'onAfterImportShopItem'));
static public function onAfterImportShopItem($oShop_Item_Import_Cml_Controller, $args)
{
list($oShopItem, $oXmlItem) = $args;
if ($oShopItem->modification_id)
{
if ($oShopItem->yandex_market /*|| $yandex_market*/)
{
$oShopItem->yandex_market = 0;
}
if ($oShopItem->indexing /*|| $indexing*/)
{
$oShopItem->indexing = 0;
}
$oShopItem->save();
}
}
Экспорт в YML файл определённых групп товаров
<?php
$oShop = Core_Entity::factory('Shop', Core_Array::get(Core_Page::instance()->libParams, 'shopId'));
// $oCore_Out_File = new Core_Out_File();
// $oCore_Out_File->filePath(CMS_FOLDER . "yandexmarket.xml");
$Shop_Controller_YandexMarket = new Shop_Controller_YandexMarket($oShop);
// $Shop_Controller_YandexMarket->stdOut($oCore_Out_File);
$Shop_Controller_YandexMarket
->token(Core_Array::get(Core_Page::instance()->libParams, 'token', ''))
->outlets(TRUE)
->parseUrl()
->model('DBS')
->priceMode('shop')
->additionalImages(array('photo'))
->groupModifications(FALSE)
->modifications(TRUE);
$Shop_Controller_YandexMarket
->shopItems()
->queryBuilder()
->where('shop_items.shop_group_id', 'IN', array(1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465));
$Shop_Controller_YandexMarket->show();
exit();
Если нужно несколько YML файлов по разным группам товаров, то создаём в параметрах ТДС новую переменную Idgroups. Назовём её "Массив групп каталога". Тогда ТДС будет иметь вид:
<?php
$oShop = Core_Entity::factory('Shop', Core_Array::get(Core_Page::instance()->libParams, 'shopId'));
$IDgroups = explode(',' , Core_Array::get(Core_Page::instance()->libParams, 'Idgroups'));
// $oCore_Out_File = new Core_Out_File();
// $oCore_Out_File->filePath(CMS_FOLDER . "yandexmarket.xml");
$Shop_Controller_YandexMarket = new Shop_Controller_YandexMarket($oShop);
// $Shop_Controller_YandexMarket->stdOut($oCore_Out_File);
$Shop_Controller_YandexMarket
->token(Core_Array::get(Core_Page::instance()->libParams, 'token', ''))
->outlets(TRUE)
->parseUrl()
->model('DBS')
->priceMode('shop')
->additionalImages(array('photo'))
->itemsProperties(array(150, 151, 79))
->groupModifications(FALSE)
->modifications(TRUE);
$Shop_Controller_YandexMarket
->shopItems()
->queryBuilder()
->where('shop_items.shop_group_id', 'IN', $IDgroups);
$Shop_Controller_YandexMarket->show();
exit();
При создании узла структуры для YML файла появится поле, в которое можно вписать группы каталога, для вывода их в экспортном файле.

Экспорт прайс-листа в Excel
Для автоматической генерации прайс-листа в формате Excel необходимо загрузить PHPExcel и распаковать его в корневую директорию.
Обновите код настроек ТДС "Прайс" на следующий:
<?php
$oShop = Core_Entity::factory('Shop', Core_Array::get(Core_Page::instance()->libParams, 'shopId'));
$Shop_Controller_Show = new Shop_Controller_Show($oShop);
$path = Core_Page::instance()->structure->getPath();
$Shop_Controller_Show
//->pattern(rawurldecode($path) . '({path})(page-{page}/)')
->pattern(rawurldecode($path) . '({path})({xls})(page-{page}/)')
->patternExpressions(array(
'xls' => 'xls\/'
))
->addEntity(
Core::factory('Core_Xml_Entity')
->name('path')
->value($path)
)
->limit(500)
->parseUrl();
// Генерация Excel прайса
class HostCMS_Excel extends Core_Servant_Properties
{
/**
* Allowed object properties
* @var array
*/
protected $_allowedProperties = array(
'title',
'filename',
);
/**
* excelObject
* @var object
*/
protected $_excelObject = NULL;
/**
* excelSheetObject
* @var object
*/
protected $_excelSheetObject = NULL;
/**
* excelWriterObject
* @var object
*/
protected $_excelWriterObject = NULL;
/**
* Shop_Model
* @var object
*/
protected $_shop = NULL;
protected $_cell = 2;
/**
* Constructor.
*/
public function __construct($objPHPExcel, Shop_Model $oShop)
{
parent::__construct();
$this->_excelObject = $objPHPExcel;
$this->_shop = $oShop;
$this->title = 'price';
$this->filename = 'file';
// set default font
$this->_excelObject->getDefaultStyle()->getFont()->setName('Calibri');
// set default font size
$this->_excelObject->getDefaultStyle()->getFont()->setSize(10);
// writer already created the first sheet for us, let's get it
$this->_excelSheetObject = $this->_excelObject->getActiveSheet();
// create the writer
$this->_excelWriterObject = PHPExcel_IOFactory::createWriter($this->_excelObject, "Excel5");
// autosize the columns
$this->_excelSheetObject->getColumnDimension('A')->setAutoSize(TRUE);
$this->_excelSheetObject->getColumnDimension('B')->setAutoSize(TRUE);
$this->_excelSheetObject->getColumnDimension('C')->setAutoSize(TRUE);
}
/**
* File output.
*/
public function output()
{
// rename the sheet
$this->_excelSheetObject->setTitle($this->title);
// write header
$this->header($this->_excelSheetObject);
$aShop_Groups = $this->fillShopGroup($this->_shop->id, 0);
foreach ($aShop_Groups as $iShopGroupId => $sShopGroupName)
{
$this->_excelSheetObject->getStyle('A' . $this->_cell)->getFont()->setBold(TRUE);
$this->_excelSheetObject->getCell('A' . $this->_cell)->setValue($sShopGroupName);
$this->_cell++;
$this->items(intval($iShopGroupId));
}
// Setting the header type
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="' . $this->filename . '.xls"');
header('Cache-Control: max-age=0');
$this->_excelWriterObject->save('php://output');
}
/**
* Create header row.
*/
public function header($oSheet)
{
// let's bold and size the header font and write the header
// as you can see, we can specify a range of cells, like here: cells from A1 to A4
$oSheet->getStyle('A1:C1')->getFont()->setBold(TRUE)->setSize(12);
$oSheet->getCell('A1')->setValue('Наименование');
$oSheet->getCell('B1')->setValue('Артикул');
$oSheet->getCell('C1')->setValue('Цена');
return $oSheet;
}
/**
* Create items row.
*/
public function items($iShopGroupId)
{
$offset = 0;
$limit = 100;
$sCurrency = $this->_shop->Shop_Currency->name;
$oShop_Group = $this->_shop->Shop_Groups->getById($iShopGroupId);
$Shop_Item_Controller = new Shop_Item_Controller();
if (Core::moduleIsActive('siteuser'))
{
$oSiteuser = Core_Entity::factory('Siteuser')->getCurrent();
if ($oSiteuser)
{
$Shop_Item_Controller->siteuser($oSiteuser);
}
}
if (!is_null($oShop_Group->id))
{
do {
$oShop_Items = $oShop_Group->Shop_Items;
$oShop_Items->queryBuilder()
->where('shop_items.active', '=', 1)
->offset($offset)
->limit($limit);
$aShop_Items = $oShop_Items->findAll(FALSE);
foreach ($aShop_Items as $oShop_Item)
{
// Shortcut
$iShortcut = $oShop_Item->shortcut_id;
if ($iShortcut)
{
$oShop_Item = $oShop_Item->Shop_Item;
}
$aPrice = $Shop_Item_Controller->getPrices($oShop_Item);
$price = Shop_Controller::instance()->getCurrencyCoefficientInShopCurrency(
$oShop_Item->Shop_Currency,
$oShop_Item->Shop->Shop_Currency) * $aPrice['price_discount'];
$sPrice = $price . ' ' . $sCurrency;
$this->_excelSheetObject->getCell('A' . $this->_cell)->setValue($oShop_Item->name);
$this->_excelSheetObject->getCell('B' . $this->_cell)->setValue($oShop_Item->marking);
$this->_excelSheetObject->getCell('C' . $this->_cell)->setValue($sPrice);
$this->_cell++;
}
$offset += $limit;
}
while (count($aShop_Items));
}
return $this;
}
/**
* Shop groups tree
* @var array
*/
protected $_aGroupTree = array();
/**
* Build visual representation of group tree
* @param int $iShopId shop ID
* @param int $iShopGroupParentId parent ID
* @param int $aExclude exclude group ID
* @param int $iLevel current nesting level
* @return array
*/
public function fillShopGroup($iShopId, $iShopGroupParentId = 0, $aExclude = array(), $iLevel = 0)
{
$iShopId = intval($iShopId);
$iShopGroupParentId = intval($iShopGroupParentId);
$iLevel = intval($iLevel);
if ($iLevel == 0)
{
$aTmp = Core_QueryBuilder::select('id', 'parent_id', 'name')
->from('shop_groups')
->where('shop_id', '=', $iShopId)
->where('deleted', '=', 0)
->where('active', '=', 1)
->orderBy('sorting')
->orderBy('name')
->execute()->asAssoc()->result();
foreach ($aTmp as $aGroup)
{
$this->_aGroupTree[$aGroup['parent_id']][] = $aGroup;
}
}
$aReturn = array();
if (isset($this->_aGroupTree[$iShopGroupParentId]))
{
$countExclude = count($aExclude);
foreach ($this->_aGroupTree[$iShopGroupParentId] as $childrenGroup)
{
if ($countExclude == 0 || !in_array($childrenGroup['id'], $aExclude))
{
$aReturn[$childrenGroup['id']] = $childrenGroup['name'];
$aReturn += $this->fillShopGroup($iShopId, $childrenGroup['id'], $aExclude, $iLevel + 1);
}
}
}
$iLevel == 0 && $this->_aGroupTree = array();
return $aReturn;
}
}
if (!empty($Shop_Controller_Show->patternParams['xls']))
{
require_once(CMS_FOLDER . 'PHPExcel/PHPExcel.php');
// create new PHPExcel object
$objPHPExcel = new PHPExcel();
$HostCMS_Excel = new HostCMS_Excel($objPHPExcel, $oShop);
$HostCMS_Excel
->title('Прайс ' . $oShop->name)
->filename('price')
->output();
exit();
}
// /Excel
Core_Page::instance()->object = $Shop_Controller_Show;
Обновите код ТДС "Прайс" на следующий:
<?php
$Shop_Controller_Show = Core_Page::instance()->object;
$Shop_Controller_Show
->shopItems()
->queryBuilder()
->clearOrderBy()
->leftJoin('shop_groups', 'shop_groups.id', '=', 'shop_items.shop_group_id')
->where('shop_items.active', '=', 1)
->open()
->where('shop_groups.active', '=', 1)
->setOr()
->where('shop_groups.active', 'IS', NULL)
->where('shop_items.modification_id', '=', 0)
->close()
->clearOrderBy()
->orderBy('shop_items.shop_group_id')
->orderBy('shop_items.name');
$Shop_Controller_Show
->shopGroups()
->queryBuilder()
->where('shop_groups.active', '=', 1)
->clearOrderBy()
->orderBy('shop_groups.id');
$xslName = Core_Array::get(Core_Page::instance()->libParams, 'xsl');
$Shop_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName($xslName)
)
->groupsMode('all')
->itemsProperties(TRUE)
->group(FALSE)
->show();
Прайс-лист будет доступен по адресу http://ваш_сайт/shop/price/xls/
