HOSTCMS v.6. Полезные php коды

HOSTCMS v.6. Полезные php коды
HOSTCMS v.6. Полезные php коды

Некоторые php коды для вывода данных на странице сайта, которые помогут при вёрстrе сайта на движке HostCMS.

Содержание:

  1. Для структуры сайта
  2. Для интернет-магазина
  3. Для информационных систем
  4. Для Меток
  5. Для комментариев (отзывов)

Чтобы в XML передавались Дополнительные свойства элемента или группы

  ->itemsProperties(TRUE)
  ->groupsProperties(TRUE)

Для структуры сайта

— Вывод меню на основе вложенных узлов структуры

Подходит для многоязычных версий. Выводим подменю структуры с конкретным id.

<?php
// Верхнее меню
$Structure_Controller_Show = new Structure_Controller_Show (
Core_Entity::factory ('Site', CURRENT_SITE));
$Structure_Controller_Show->xsl (Core_Entity::factory ('Xsl')
->getByName ('ВерхнееМеню')) ->parentId(248)//заменить на свой ID ->menu(1)
->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 ('МагазинГруппыТоваровНаГлавной1')
)
->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 ('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', 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 ('МагазинСписокПроизводителей1'))
->groupsMode ('all')
//->itemsForbiddenTags(array ('text'))
->itemsProperties(TRUE)
->group(0)
->limit(0)
->show();
}
? > 
Показ нескольких товаров из той же категории, что и текущий товар
Добавляем в ТДС магазина перед блоком с ->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>
Самые популярные товары
Добавляем в макет страницы Популярные товары
<?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(); // отображаем список
}
?>
Вывод товаров со специальной ценой 
<?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();
          ?>
— Меняем ID макета для товара
Данный код добавляем в конце кода настроек ТДС интернет-магазина
if (isset($Shop_Controller_Show->item) && $Shop_Controller_Show->item)
{
Core_Page::instance()->template(
Core_Entity::factory('Template', 12)
);
}
— Не выводим товары, которых нет в наличии (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');
Добавить название группы в карточке товара
В ТДС интернет-магазина добавляем
$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)
  );
Добавить название группы товара в Корзину
в ТДС перед:
$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'));
ДЛЯ ЯРЛЫКА ТОВАРА ДОБАВЛЯЕМ В 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);
  }
}
Добавляем Статичный Документ в XML
Код добавляем в ТДС Интернет-магазина
$document = Core_Entity::factory('Document', 19)->Document_Versions->getCurrent()->loadFile(); // создаём переменную, где 19 - ID Документа (пропишите id нужного документа)

if ($Shop_Controller_Show->item)
{
        $Shop_Controller_Show
        // добавляем собственный тег для вывода документа
          ->addEntity(Core::factory('Core_Xml_Entity')
          ->name('document')
          ->value($document));
}

// Либо более короткий вариант

$Shop_Controller_Show->addEntity(
  Core::factory('Core_Xml_Entity')
      ->name('my_document')->value(
        Core_Entity::factory('Document', 123)->text
      )
);
 Добавление новых узлов в XML
// добавляем ID текущей группы
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 некоторых данных
->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();
В hostCMS 7 версии появились новые методы
  • addAllowedTags('/node/path', array('description')) массив тегов для элементов, указанных в первом аргументе, разрешенных к передаче в генерируемый XML
  • addForbiddenTags('/node/path', array('description')) массив тегов для элементов, указанных в первом аргументе, запрещенных к передаче в генерируемый XML

Для информационных систем

— Ограничение по Дополнительному свойству в Инфосистеме

 <?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'))
->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
// Метки
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('ОблакоТэговМагазин')
                    )
                ->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())
	);
?>

Для комментариев/Отзывов

Вывод комментариев на странице
<?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
}
?>
Комментарии интернет-магазина
<?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
        }
      ?>

Понравилась статья?
Будем признательны, если поделитесь в соцсетях или мессенджерах, а также присоединитесь к нашей группе Вконтакте. Будет интересно!

Вас может заинтересовать:

9 шагов для создания веб-сайта на HostCMS
9 шагов для создания веб-сайта на HostCMS

Вы можете создать веб-сайт менее чем за 1 час. Вам также не нужно быть техническим мастером.

Неважно, для бизнеса это или для удовольствия. Вам не нужен модный дизайнер или дорогой разработчик. Просто следуйте простым нашим шагам, и вы будете онлайн в кратчайшие сроки.


Как создать сайт?
Как создать сайт?
Многие начинающие пользователи интернета задают себе данную фразу. Но не у всех выходит добиться желаемого... Всё связано с различными стереотипами, например, о том, что для создания сайта или личной странички в интернете требуются навыки и знание программирования... Прочитайте статью и создайте свой сайт.

Как начать продавать онлайн из дома и зарабатывать деньги
Как начать продавать онлайн из дома и зарабатывать деньги
Развитие электронной коммерции произвело революцию в том, как компании, ИП и самозанятые продают свои товары и услуги. У вас есть неограниченный потенциал продавать онлайн  что угодно и кому угодно из любой точки России. Это дает вам доступ к миллионам пользователей Интернета по всей нашей необъятной стране для увеличения продаж и развития вашего бизнеса.

Анти-спам или как на странице сайта скрыть код формы от ботов?
Анти-спам или как на странице сайта скрыть код формы от ботов?
Не ошибусь, если скажу, что практически все владельцы сайтов сталкиваются с такой проблемой, как СПАМ. Это просто кошмар, когда ваш почтовый ящик ежедневно наполняется сотнями, а то и тысячами СПАМ-писем.

Как открыть интернет-магазин за 6 простых шагов
Как открыть интернет-магазин за 6 простых шагов

Создание интернет-магазина - это не только блестящая идея, вам также нужно правильно ее реализовать, чтобы увеличить охват. Сделаете это правильно, и вы увидите, как продажи начнут расти. Сделаете это неправильно, и у вас просто будет очень трудоемкое хобби.


HOSTCMS v.6. Вывод комментариев к товарам магазина
HOSTCMS v.6. Вывод комментариев к товарам магазина
Выводим на Главной или отдельной странице сайта комментарии к товарам, оставляемые посетителями или покупателями...

QRcode

2010-2024 © Веб студия iNikSite.ru (г. Подольск). Все права сохранены.

Цены на сайте носят ознакомительный характер и не являются публичной офертой! Просим уточнять цены при отправке заявки в нашу компанию. У нас действуют специальные предложения и скидки на различные варианты исполнения заказа и 100% предоплату!

Мы используем файлы cookie. Они помогают улучшить ваше взаимодействие с сайтом.