Первые шаги после инсталляции
Благодаря вот замечательной теме удалось сдвинуться с «мертвой точки», т.е. увидеть на главной странице хоть какой-то свой текст. Однако дальше этого дело не пошло, поскольку я не понял, как обеспечить ссылки в меню.
Правильно ли я понимаю, что для того, чтобы получился нужный шаблон, необходимо предварительно все ссылки меню предусмотреть в HTML коде заготовки главной страницы?
Предположим, что в меню на главной странице должны выводиться данные и еще требуется иметь такие ссылки на разделы:
- Общий раздел
- Частный раздел
- Новости
- Литература
Что нужно изменить вот в этом коде для обеспечения ссылок на эти разделы?
Правильно ли я понимаю, что для того, чтобы получился нужный шаблон, необходимо предварительно все ссылки меню предусмотреть в HTML коде заготовки главной страницы?
Предположим, что в меню на главной странице должны выводиться данные и еще требуется иметь такие ссылки на разделы:
- Общий раздел
- Частный раздел
- Новости
- Литература
Что нужно изменить вот в этом коде для обеспечения ссылок на эти разделы?
<html>
<head>
<meta content="text/html; charset=<?=SITE_CODING?>" http-equiv=Content-Type>
<meta name="description" content="<?$kernel->show_description()?>" />
<meta name="keywords" content="<?$kernel->show_keywords()?>" />
<title><?$kernel->show_title()?></title>
</head>
<body>
<p align="center">Главная страница</p>
<p align="center">Ниже этой строки должны выводится данные</p>
<?php $kernel->show_current_template()?>
<p align="left">Меню:</p>
<p align="left">Общий раздел</p>
<p align="left">Частный раздел</p>
<p align="left">Новости</p>
<p align="left">Литература</p>
<p align="left" style="margin-top: 0; margin-bottom: 0"> </p>
<p style="margin-top: 0; margin-bottom: 0" align="center">
<a href="http://www.hostcms.ru" target="_blank">Система управления сайтом Host CMS</a></p>
<p align="left" style="margin-top: 0; margin-bottom: 0"> </p>
</body>
</html>
<head>
<meta content="text/html; charset=<?=SITE_CODING?>" http-equiv=Content-Type>
<meta name="description" content="<?$kernel->show_description()?>" />
<meta name="keywords" content="<?$kernel->show_keywords()?>" />
<title><?$kernel->show_title()?></title>
</head>
<body>
<p align="center">Главная страница</p>
<p align="center">Ниже этой строки должны выводится данные</p>
<?php $kernel->show_current_template()?>
<p align="left">Меню:</p>
<p align="left">Общий раздел</p>
<p align="left">Частный раздел</p>
<p align="left">Новости</p>
<p align="left">Литература</p>
<p align="left" style="margin-top: 0; margin-bottom: 0"> </p>
<p style="margin-top: 0; margin-bottom: 0" align="center">
<a href="http://www.hostcms.ru" target="_blank">Система управления сайтом Host CMS</a></p>
<p align="left" style="margin-top: 0; margin-bottom: 0"> </p>
</body>
</html>
Vladd писал(а):
Для начала, нужно почитать страницы 24-27 . Это придаст вашим мыслям некоторую сумбурность
Теперь о создании меню.
Во1х, нужно создать само меню как таковое. В разделе ЦА "Структура сайта", в выпадающем меню "Меню сайта" выбираете единственный существующий там пункт. Переходите в раздел ЦА "Меню сайта", в меню "Меню" (простите за тавтологию) выбираете "Добавить". Вписываете любое название на любом языке (нигде на сайте это название отображаться не будет), и жмем на Применить. Смотрим, какой идентификатор у нашего меню, и запоминаем его.
Во2х. Снова выбираем в правом меню ЦА раздел "Структура сайта".
Создаем разделы "Общий раздел", "Частный раздел", "Новости", "Литература"... Пока для этих разделов можно указывать тот же самый временный тестовый документ, что и для главной. Нам сейчас важно чтобы эти разделы просто были. При создании разделов структуры, обращаем внимание на то, чтобы в списке "Меню" было название нашего меню, а галочка "Отображать в меню сайта" была включена.
(Можно сначала создавать не все разделы, никогда не поздно добавить.)
В3х, подготовим вывод меню в макете. Переходим в редактор макетов, и вместо html-кода
вставляем то, что прочитали в самом начале на странице 24 "Руководства по интеграции...":
В4х. Теперь займемся xsl-шаблоном. Для простоты дела, предлагаю скопировать какой-то существующий xsl-шаблон оторажения меню, и внести в него измнения. Переходим в раздел ЦА "XSL-шаблоны", там идем в папку "Меню", и нажимаем кнопку "Копировать" возле шаблона "ЛевоеМеню". Получаем еще один шаблон, с названием типа "ЛевоеМеню [Копия от 23.01.2011 13:10:05]". Открываем его для редактирования.
Меняем его название на "МоеМеню".
В код вносим некоторые изменения, для того чтобы результат выполнения шаблона соответствовал тому что у вас в макете:
1. Удаляем теги UL
2. Меняем теги LI на P (не забываем заменять закрывающий тег!)
3. У открывающего тега P вписываем
4. Удаляем фрагмент про вывод подменю
Получится что-то такое:
Жмем на "Применить".
Ну и вот теперь открываем наш сайт в браузере, и при некоторой доле везения и должной прямоте рук мы увидим на сайте наше меню!
Что нужно изменить вот в этом коде для обеспечения ссылок на эти разделы?
Для начала, нужно почитать страницы 24-27 . Это придаст вашим мыслям некоторую сумбурность

Теперь о создании меню.
Во1х, нужно создать само меню как таковое. В разделе ЦА "Структура сайта", в выпадающем меню "Меню сайта" выбираете единственный существующий там пункт. Переходите в раздел ЦА "Меню сайта", в меню "Меню" (простите за тавтологию) выбираете "Добавить". Вписываете любое название на любом языке (нигде на сайте это название отображаться не будет), и жмем на Применить. Смотрим, какой идентификатор у нашего меню, и запоминаем его.
Во2х. Снова выбираем в правом меню ЦА раздел "Структура сайта".
Создаем разделы "Общий раздел", "Частный раздел", "Новости", "Литература"... Пока для этих разделов можно указывать тот же самый временный тестовый документ, что и для главной. Нам сейчас важно чтобы эти разделы просто были. При создании разделов структуры, обращаем внимание на то, чтобы в списке "Меню" было название нашего меню, а галочка "Отображать в меню сайта" была включена.
(Можно сначала создавать не все разделы, никогда не поздно добавить.)
В3х, подготовим вывод меню в макете. Переходим в редактор макетов, и вместо html-кода
<p align="left">Общий раздел</p>
<p align="left">Частный раздел</p>
<p align="left">Новости</p>
<p align="left">Литература</p>
<p align="left">Частный раздел</p>
<p align="left">Новости</p>
<p align="left">Литература</p>
вставляем то, что прочитали в самом начале на странице 24 "Руководства по интеграции...":
<?php
$Structure = & singleton('Structure');
$Structure->ShowStructure(1, 'ВерхнееМеню');
?>
Вместо цифры 1 вписываем идентификатор нашего меню, который мы запомнили в шаге 1. Вместо "ВерхнееМеню" пишем "МоеМеню". Жмем "Применить".$Structure = & singleton('Structure');
$Structure->ShowStructure(1, 'ВерхнееМеню');
?>
В4х. Теперь займемся xsl-шаблоном. Для простоты дела, предлагаю скопировать какой-то существующий xsl-шаблон оторажения меню, и внести в него измнения. Переходим в раздел ЦА "XSL-шаблоны", там идем в папку "Меню", и нажимаем кнопку "Копировать" возле шаблона "ЛевоеМеню". Получаем еще один шаблон, с названием типа "ЛевоеМеню [Копия от 23.01.2011 13:10:05]". Открываем его для редактирования.
Меняем его название на "МоеМеню".
В код вносим некоторые изменения, для того чтобы результат выполнения шаблона соответствовал тому что у вас в макете:
1. Удаляем теги UL
2. Меняем теги LI на P (не забываем заменять закрывающий тег!)
3. У открывающего тега P вписываем
style="text-align:left"
луч ненависти тем кто пользуется параметром align 
4. Удаляем фрагмент про вывод подменю
<!-- Если вывод подменю -->
<xsl:if test="submenu/node() and count(structure[show=1]) > 0">
<hr />
</xsl:if>
<xsl:if test="submenu/node() and count(structure[show=1]) > 0">
<hr />
</xsl:if>
Получится что-то такое:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<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="/document">
<!-- Выбираем узлы структуры первого уровня -->
<xsl:apply-templates select="structure[show=1]"/>
</xsl:template>
<xsl:template match="structure">
<!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
<xsl:variable name="current_structure_id" select="/document/structure/current_structure_id"/>
<p style="text-align:left">
<!-- Показывать ссылку, или нет -->
<xsl:choose>
<xsl:when test="show_link = 1">
<!-- Определяем адрес ссылки -->
<xsl:variable name="link">
<xsl:choose>
<!-- Если внешняя ссылка -->
<xsl:when test="is_external_link = 1">
<xsl:value-of disable-output-escaping="yes" select="external_link"/>
</xsl:when>
<!-- Иначе если внутренняя ссылка -->
<xsl:otherwise>
<xsl:value-of disable-output-escaping="yes" select="link"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!-- Ссылка на пункт меню -->
<a href="{$link}" title="{name}">
<!--
Выделяем текущую страницу добавлением к <a> стиля font-weight: bold,
если это текущая страница, либо у нее есть ребенок с атрибутом id, равным текущей uheggt.
-->
<xsl:if test="current_structure_id = @id or count(.//structure[@id=$current_structure_id]) = 1">
<xsl:attribute name="style">font-weight: bold</xsl:attribute>
</xsl:if>
<xsl:value-of disable-output-escaping="yes" select="name"/>
</a>
</xsl:when>
<!-- Если не показывать ссылку - выводим просто имя ссылки -->
<xsl:otherwise>
<xsl:value-of disable-output-escaping="yes" select="name"/>
</xsl:otherwise>
</xsl:choose>
</p>
</xsl:template>
</xsl:stylesheet>
(Я, правда, рекомендую вам, все-таки самостоятельно внести правки, а не копировать мой шаблон - пользы будет больше.)<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<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="/document">
<!-- Выбираем узлы структуры первого уровня -->
<xsl:apply-templates select="structure[show=1]"/>
</xsl:template>
<xsl:template match="structure">
<!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
<xsl:variable name="current_structure_id" select="/document/structure/current_structure_id"/>
<p style="text-align:left">
<!-- Показывать ссылку, или нет -->
<xsl:choose>
<xsl:when test="show_link = 1">
<!-- Определяем адрес ссылки -->
<xsl:variable name="link">
<xsl:choose>
<!-- Если внешняя ссылка -->
<xsl:when test="is_external_link = 1">
<xsl:value-of disable-output-escaping="yes" select="external_link"/>
</xsl:when>
<!-- Иначе если внутренняя ссылка -->
<xsl:otherwise>
<xsl:value-of disable-output-escaping="yes" select="link"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!-- Ссылка на пункт меню -->
<a href="{$link}" title="{name}">
<!--
Выделяем текущую страницу добавлением к <a> стиля font-weight: bold,
если это текущая страница, либо у нее есть ребенок с атрибутом id, равным текущей uheggt.
-->
<xsl:if test="current_structure_id = @id or count(.//structure[@id=$current_structure_id]) = 1">
<xsl:attribute name="style">font-weight: bold</xsl:attribute>
</xsl:if>
<xsl:value-of disable-output-escaping="yes" select="name"/>
</a>
</xsl:when>
<!-- Если не показывать ссылку - выводим просто имя ссылки -->
<xsl:otherwise>
<xsl:value-of disable-output-escaping="yes" select="name"/>
</xsl:otherwise>
</xsl:choose>
</p>
</xsl:template>
</xsl:stylesheet>
Жмем на "Применить".
Ну и вот теперь открываем наш сайт в браузере, и при некоторой доле везения и должной прямоте рук мы увидим на сайте наше меню!

Заказов не беру. Консультирую редко.
P.S.:
Vladd писал(а):
Совершенно верно. Единственно верный и удобный стиль работы с макетами и шаблонами в HostCMS (да и вообще в любой системе) - сначала сверстать статичный макет в HTML, предусмотрев в нем все что нужно, а потом на основании этого статичного макета делать шаблоны. Это проще и понятнее, чем изобретать их на ходу.
Vladd писал(а):
Правильно ли я понимаю, что для того, чтобы получился нужный шаблон, необходимо предварительно все ссылки меню предусмотреть в HTML коде заготовки главной страницы?
Совершенно верно. Единственно верный и удобный стиль работы с макетами и шаблонами в HostCMS (да и вообще в любой системе) - сначала сверстать статичный макет в HTML, предусмотрев в нем все что нужно, а потом на основании этого статичного макета делать шаблоны. Это проще и понятнее, чем изобретать их на ходу.
Заказов не беру. Консультирую редко.
Авторизация