Morozov&Pimnev blog

Полезные решения, шпаргалки и примеры по html, css, js, jQuery, MySQL, PHP, HostCMS, ssh.

Избавление от элементов фотографий в карте сайта на HostCMS v6

Бывает такое, что инофрмационная система на HostCMS служит для фотогалереи и все фотографии находятся по группам на одной странице, лежат все в корне с пагинацией и работаю только как увеличение по клику, но в HostCMS это отдельный информационный элемент со своей страницей для каждой фотографии, своим title, url. Порой такие страницы просто не нужны и создают "мусор" в карте сайта.

Как избавиться от этого?

Заходим в "Типовых динамических страниц" (далее ТДС) -> Карта сайта -> Редактирование "Карта сайта" -> Вкладка "Код страницы" и в самом начале, перед:

$Structure_Controller_Show = new Structure_Controller_Show ...
...

прописываем следующий хук

class Structure_Controller_Show_Observer
{
	static public function onBeforeFindInformationsystemItems($object, $args)
	{
		$args[0]->queryBuilder()->where('informationsystem_items.indexing', '=', 1);
	}
}

Core_Event::attach('Structure_Controller_Show.onBeforeFindInformationsystemItems', array('Structure_Controller_Show_Observer', 'onBeforeFindInformationsystemItems'));

в очень экзотических случаях, можно тоже самое сделать с товарами:

class Structure_Controller_Show_Observer
{
	static public function onBeforeFindShopItems($object, $args)
	{
		$args[0]->queryBuilder()->where('shop_items.indexing', '=', 1);
	}
}

Core_Event::attach('Structure_Controller_Show.onBeforeFindShopItems', array('Structure_Controller_Show_Observer', 'onBeforeFindShopItems'));

и все вместе - информационные элменты и товары и полностью код:

<?php
class Structure_Controller_Show_Observer
{
	static public function onBeforeFindShopItems($object, $args)
	{
		$args[0]->queryBuilder()->where('shop_items.indexing', '=', 1);
	}
	static public function onBeforeFindInformationsystemItems($object, $args)
	{
		$args[0]->queryBuilder()->where('informationsystem_items.indexing', '=', 1);
	}
}

Core_Event::attach('Structure_Controller_Show.onBeforeFindShopItems', array('Structure_Controller_Show_Observer', 'onBeforeFindShopItems'));
Core_Event::attach('Structure_Controller_Show.onBeforeFindInformationsystemItems', array('Structure_Controller_Show_Observer', 'onBeforeFindInformationsystemItems'));


$Structure_Controller_Show = new Structure_Controller_Show(
		Core_Entity::factory('Site', CURRENT_SITE)
	);
$Structure_Controller_Show
	->xsl(
		Core_Entity::factory('Xsl')->getByName(Core_Page::instance()->libParams['xsl'])
	)
	->parentId(intval(Core_Page::instance()->libParams['structureParentId']))
	// Показывать группы информационных систем в карте сайта
	->showInformationsystemGroups(Core_Page::instance()->libParams['showInformationsystemGroups'])
	// Показывать элементы информационных систем в карте сайта
	->showInformationsystemItems(Core_Page::instance()->libParams['showInformationsystemItems'])
	// Показывать группы магазина в карте сайта
	->showShopGroups(Core_Page::instance()->libParams['showShopGroups'])
	// Показывать товары магазина в карте сайта
	->showShopItems(Core_Page::instance()->libParams['showShopItems'])
	->show();

карта сайта, php, hostcms6, structure, shop, shop_items, informationsystem_items


Комментарии

А если у меня десяток ИС на сайте, в т.ч. несколько ФГ и только одну из ФГ не нужно выводить на Карту сайта. Как в этом случае использовать ваш хук?

Павел 19.05.2017 18:15:38 #