HOSTCMS v.6. Полезные php коды
Некоторые php коды для вывода данных на странице сайта, которые помогут при вёрстrе сайта на движке HostCMS.
Содержание:
- Для структуры сайта
- Для интернет-магазина
- Для информационных систем
- Для Меток
- Для комментариев (отзывов)
Чтобы в 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();
}
? >
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) // Добавляем дополнительные свойства в похожие товары
);
}
}
Вызов:
<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)
);
}
Данный код добавляем в код ТДС интернет-магазина
$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'));
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);
}
}
$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
)
);
// добавляем 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)
);
->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
}
?>