ИНТЕРНЕТ-МАГАЗИН / PHP КОДЫ вывода данных

Заметка создана: 13 марта 2034 г.
Добавляем в XML вывода данных интернет-магазина дополнительные свойства
->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):
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 макета для Товара или Инфоэлемента