Код который пригодится при построении и выводе структуры сайта
->showInformationsystemGroups(TRUE)
->showInformationsystemItems(TRUE)
->showShopGroups(TRUE)
->showShopItems(TRUE)
$Structure_Controller_Show->showProperties(TRUE);
Вывод шаблона страницы
<?php
Core_Page::instance()->execute();
?>
Вывод статичного документа на страницу
<?php
Core_Entity::factory('Document', 22)->Document_Versions->getCurrent()->execute();
?>
Вывод текста из статичного документа
<?php
echo Core_Entity::factory('Document', 13)->Document_Versions->getCurrent()->loadFile();
?>
Вывод Меню
<?php
// Меню
$Structure_Controller_Show = new Structure_Controller_Show(
Core_Entity::factory('Site', CURRENT_SITE));
$Structure_Controller_Show
->xsl(Core_Entity::factory('Xsl')
->getByName('ВерхнееМенюСайт2'))
->forbiddenTags(array(
'priority',
'changefreq',
'seo_keywords',
'seo_description',
'seo_title',
'parent_id',
'lib_id',
'document_id',
'data_template_id'
))
->menu(3)
->level(0) // Только родительские узлы, закомментировать, если нужны вложенные узлы
->show();
?>
Вывод Меню - выводим разделы инфосистем и магазина, ограничиваем вложенность уровней (3)
<?php
// ГлавноеМеню
$Structure_Controller_Show = new Structure_Controller_Show(
Core_Entity::factory('Site', CURRENT_SITE));
$Structure_Controller_Show->xsl(Core_Entity::factory('Xsl')
->getByName('ВерхнееМеню'))
->showInformationsystemGroups(TRUE)
->showInformationsystemItems(TRUE)
->showShopGroups(TRUE)
->addEntity(Core::factory('Core_Xml_Entity')
->name('max_level')
->value(3)
)
->menu(3)
->show();
?>
Показ в меню групп и элементов инфосистемы
<?php
// Верхнее меню
$Structure_Controller_Show = new Structure_Controller_Show(
Core_Entity::factory('Site', CURRENT_SITE));
$Structure_Controller_Show->xsl(
Core_Entity::factory('Xsl')->getByName('ВерхнееМеню')
)
->menu(1)
// Показывать группы информационных систем в
->showInformationsystemGroups(TRUE)
// Показывать элементы информационных систем
->showInformationsystemItems(TRUE)
->show();
?>
При выводе в структуре Инфоэлементов, не выводим Элементы определенной Инфосистемы
<?php
// Левое меню
$Structure_Controller_Show = new Structure_Controller_Show(
Core_Entity::factory('Site', CURRENT_SITE));
$Structure_Controller_Show->showProperties(TRUE);
$Structure_Controller_Show->xsl(
Core_Entity::factory('Xsl')->getByName('ЛевоеМенюСайт2')
)
->menu(4)
->showInformationsystemGroups(TRUE)
->showInformationsystemItems(TRUE)
->showShopGroups(TRUE);
class Structure_Controller_Show_Observer
{
static public function onBeforeFindInformationsystemItems($object, $args)
{
if ($args[2]->id == 18 || $args[2]->id == 17) // проверяем id группы у инфоэлементов, которые не будем выводить
{
$args[0]
->queryBuilder()
->limit(0);
}
}
}
Core_Event::attach('Structure_Controller_Show.onBeforeFindInformationsystemItems', array('Structure_Controller_Show_Observer',
'onBeforeFindInformationsystemItems'));
$Structure_Controller_Show->show();
?>
Передача контроллеру структуры идентификатора текущего инфоэлемента и группы
<?php
$Structure_Controller_Show = new Structure_Controller_Show(
Core_Entity::factory('Site', CURRENT_SITE));
$Structure_Controller_Show->xsl(Core_Entity::factory('Xsl')
->getByName('ЛевоеМеню')
)
->menu(3)
// Показывать группы информационных систем в меню*-***
->showInformationsystemGroups(TRUE)
// Показывать элементы информационных систем в меню
->showInformationsystemItems(FALSE);
if (is_object(Core_Page::instance()->object)
&& get_class(Core_Page::instance()->object) == 'Informationsystem_Controller_Show')
{
$Structure_Controller_Show->addEntity(
Core::factory('Core_Xml_Entity')
->name('informationsystem_group_id')
->value(intval(Core_Page::instance()->object->group))
)->addEntity(
Core::factory('Core_Xml_Entity')
->name('informationsystem_item_id')
->value(intval(Core_Page::instance()->object->item))
);
}
$Structure_Controller_Show->show();
?>
Вывод меню на основе вложенных узлов структуры (подходит для многоязычных версий)
<?php
// Меню
$Structure_Controller_Show = new Structure_Controller_Show(
Core_Entity::factory('Site', CURRENT_SITE));
$Structure_Controller_Show
->xsl(Core_Entity::factory('Xsl')
->getByName('ВерхнееМеню'))
->parentId(90)
->show();
?>
Вывод меню на основе вложенных узлов структуры с передачей ID пользователя сайта
Показ подузлов родительского узла лежащего в корне
<?php
// Верхнее меню
$Structure_Controller_Show = new Structure_Controller_Show(
Core_Entity::factory('Site', CURRENT_SITE));
$oStructure = Core_Page::instance()->structure;
while ($oStructure->parent_id != 0)
{
$oStructure = $oStructure->getParent();
}
$Structure_Controller_Show->xsl(Core_Entity::factory('Xsl')
->getByName('ПравоеМеню'))
->menu('3')
->parentId($oStructure->id)
->show();
?>
Хлебные крошки
<?php
// Вывод строки навигации
$Structure_Controller_Breadcrumbs = new Structure_Controller_Breadcrumbs(
Core_Entity::factory('Site', CURRENT_SITE)
);
$Structure_Controller_Breadcrumbs
->xsl(
Core_Entity::factory('Xsl')->getByName('ХлебныеКрошки')
)
->show();
?>
Вывод дополнительного свойства структуры
<?php
$oProperty = Core_Entity::factory('Property', 220); // ID св-ва
$aPropertyValues = $oProperty->getValues(CURRENT_STRUCTURE_ID);
if (isset($aPropertyValues[0]))
{
echo $aPropertyValues[0]->value;
}
?>
Выводим в МЕНЮ дополнительное свойство структуры
<?php
// ГлавноеМеню
$Structure_Controller_Show = new Structure_Controller_Show(
Core_Entity::factory('Site', CURRENT_SITE));
$Structure_Controller_Show->showProperties(TRUE);
$Structure_Controller_Show->xsl(Core_Entity::factory('Xsl')
->getByName('ГлавноеМеню'))
->menu(3)
->showInformationsystemGroups(TRUE)
->showInformationsystemItems(TRUE)
->show();
?>
Регистрация. Вход в кабинет пользователя
<?php
// Если модуль пользователей сайта доступен
if (Core::moduleIsActive('siteuser'))
{?><div id="authorization"><?php
if (is_null(Core_Entity::factory('Siteuser')->getCurrent()))
{
?>
<form method="post" action="/users/">
<div><input type="text" name="login" value="Логин" /></div>
<div><input type="password" name="password" value="Пароль" /></div>
<div><input type="submit" name="apply" value="Войти" /></div>
</form>
<a href="/users/registration/" title="Зарегистрироваться">Зарегистрироваться</a>
<?php
}
/*else
{?>
<a href="/users/" title="Кабинет пользователя">Кабинет пользователя</a>
<?php
}*/
?></div><?php
}
?>
Вывод контента в зависимости от текущей страницы
<?php
// Не главная страница
$sStructurePath = Core_Entity::factory('Structure', CURRENT_STRUCTURE_ID)->path;
if ($sStructurePath !== '/')
{
if (Core::moduleIsActive('informationsystem'))
{
$Informationsystem_Controller_Show = new Informationsystem_Controller_Show(
Core_Entity::factory('Informationsystem', '16')
);
$Informationsystem_Controller_Show
->informationsystemItems()
->queryBuilder()
->clearOrderBy()
->orderBy('RAND()');
$Informationsystem_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('ОписаниеУслугиВверхуСайт16')
)
//->groupsMode('none')
//->itemsForbiddenTags(array('text'))
->group(FALSE)
->limit(1)
->show();
}
}
else
{
Core_Entity::factory('Document', '9')->Document_Versions->getCurrent()->execute();
}
?>
Вывод хлебных крошек на всех страницах, кроме главной
<?php
$sStructurePath = Core_Entity::factory('Structure', CURRENT_STRUCTURE_ID)->path;
// Показываем "хлебные крошки" на всех страницах, кроме главной
if ($sStructurePath != '/')
{
// Вывод строки навигации
$Structure_Controller_Breadcrumbs = new Structure_Controller_Breadcrumbs(
Core_Entity::factory('Site', CURRENT_SITE)
);
$Structure_Controller_Breadcrumbs
->xsl(
Core_Entity::factory('Xsl')->getByName('ХлебныеКрошки')
)
->show();
// /Хлебные крошки
}
?>
Выводим меню на всех страницах, кроме главной
<?php
$sStructurePath = Core_Entity::factory('Structure', CURRENT_STRUCTURE_ID)->path;
// Показываем "меню" на всех страницах, кроме главной
if ($sStructurePath = '/') {
echo '';
} else {
// Верхнее меню
$Structure_Controller_Show = new Structure_Controller_Show(
Core_Entity::factory('Site', CURRENT_SITE));
$Structure_Controller_Show->xsl(
Core_Entity::factory('Xsl')->getByName('ВерхнееМенюСделатьКлючи')
)
->menu('17')
->show();
}
?>
Получаем адрес Структуры и выводим нужный код <?php
$oStructure = Core_Entity::factory('Structure', CURRENT_STRUCTURE_ID);
if ($oStructure->path == '/') {
?>
... какой-то код
}
?>
ВЫВОДИМ ЗАГОЛОВОК СТАТИЧНОГО ДОКУМЕНТА
Лучший вариант
<?php Core_Page::instance()->showTitle()?>
Вариант 1 (для конкретного документа)
$oDocument = Core_Entity::factory('Document', 123);
echo '<h1>' . htmlspecialchars($oDocument->name) . '</h1>';
$oDocument->Document_Versions->getCurrent()->execute();
Вариант 2
<?php
// ID текущего узла струкутры
$structure_id = CURRENT_STRUCTURE_ID;
// Объект узла
$oStructure = Core_Entity::factory('Structure', $structure_id);
if ($oStructure->document_id)
{
$oDocument = $oStructure->Document;
echo '<div class="page-title category-title"><h1>' . htmlspecialchars($oDocument->name) . '</h1></div>';
}
// Вывод версии документа
Core_Page::instance()->execute();
?>
Вариант 3
<?php
class Document_Version_Observer
{
static public function onBeforeExecute($object, $args)
{
?><h1><?php echo htmlspecialchars($object->Document->name)?></h1><?php
}
}
// Add document_version observer
Core_Event::attach('document_version.onBeforeExecute', array('Document_Version_Observer', 'onBeforeExecute'));
// Вывод версии документа
Core_Page::instance()->execute();
?>
Вариант 4
<h1>
<?php
// Заголовок документа
$Structure_Controller_Breadcrumbs = new Structure_Controller_Breadcrumbs(
Core_Entity::factory('Site', CURRENT_SITE)
);
$Structure_Controller_Breadcrumbs
->xsl(
Core_Entity::factory('Xsl')->getByName('ЗаголовокДокумента')
)
->show();
?>
</h1>
XSL шаблон (на основе шаблона "Хлебные крошки")
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:hostcms="http://www.hostcms.ru/"
exclude-result-prefixes="hostcms">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="utf-8" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
<!-- Хлебные крошки -->
<xsl:template match="/site">
<xsl:if test="count(*[@id]) > 0">
<xsl:apply-templates select="*[@id]" />
</xsl:if>
</xsl:template>
<xsl:template match="*">
<!-- Определяем адрес ссылки -->
<xsl:variable name="link">
<xsl:choose>
<!-- Если внутренняя ссылка -->
<xsl:when test="link != ''">
<xsl:value-of disable-output-escaping="yes" select="link"/>
</xsl:when>
<!-- Если внешняя ссылка -->
<xsl:otherwise>
<xsl:value-of disable-output-escaping="yes" select="url"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:value-of disable-output-escaping="yes" select="name"/>
<xsl:apply-templates select="*[@id][link/node() or url/node()]" />
</xsl:template>
</xsl:stylesheet>
Получение элемента структуры верхнего(корневого) уровня
Если на сайте горизонтальное меню отдельно от бокового или любого другого подменю, которое содержит дочерние элементы горизонтального, возникает проблема с подсветкой активного пункта горизонтального меню. Так как вложенных элементов просто не передается в xml. Ниже приведен код для получения родительского элемента структуры самого верхнего уровня.
<?php
$oStructure = Core_Entity::factory('structure', CURRENT_STRUCTURE_ID);
while ($oStructure->parent_id != 0 && $oStructure = $oStructure->getParent());
// Выводим id структуры верхнего уровня
echo $oStructure->id;
Далее остается передать значение в контроллер показа <?php
$Structure_Controller_Show->addEntity(
Core::factory('Core_Xml_Entity')
->name('parent_current_structure_id')
->value($oStructure->id)
);