СТРУКТУРА САЙТА / PHP КОДЫ вывода данных для Структуры

Заметка создана: 13 февраля 2034 г.
Код который пригодится при построении и выводе структуры сайта
->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]) &gt; 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)
);