Непонятно формирование Н1 в информационной системе

#
Непонятно формирование Н1 в информационной системе
ТДС из дистрибутива. Макет по минимуму

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><?php Core_Page::instance()->showTitle()?></title>
<meta name="description" content="<?php Core_Page::instance()->showDescription()?>"></meta>
<meta name="keywords" content="<?php Core_Page::instance()->showKeywords()?>"></meta>
<meta content="text/html; charset=<?php echo SITE_CODING?>" http-equiv="Content-Type"></meta>
<?php Core_Page::instance()->showCss()?>
</head>

<body>

<?php
Core_Page::instance()->execute();
?>
</body>
</html


Создана информационная система, имеющая одну группу новостей и четыре новости



При этом в её коде нет Н1:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Здесь расположены новости для тетирования</title>
<meta name="description" content="Идет тестирование системы"></meta>
<meta name="keywords" content="тестирование"></meta>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type"></meta>
<link rel="stylesheet" type="text/css" href="/templates/template194/style.css?1477063911" />
</head>

<body>
<div><span style="color: #ff00ff;">Это текст на первой странице инфосистемы.</span></div>
<div class="group_list">
  <ul>
    <li><a href="/novosti-test/pervaya-gruppa/">Первая группа</a> <span class="count">(0)</span></li>
  </ul>
</div>
<dl class="news_list full_list">
  <dt>21 октября 2016 г.</dt>
  <dd>
    <a href="/novosti-test/476/">Первая новость (тест)</a>
    <div>Описание первой новости</div>
  </dd>
  <hr />


Нет Н1 и на второй странице пагинации.

Но если зайти в группу, то там Н1 есть:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Ручное введение тайтлов -Новости (тест)</title>
<meta name="description" content="Первая группа -Новости (тест)"></meta>
<meta name="keywords" content="Первая группа -Новости (тест)"></meta>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type"></meta>
<link rel="stylesheet" type="text/css" href="/templates/template194/style.css?1477063911" />
</head>

<body>
<h1>Первая группа</h1>
<div>Здесь первая группа новостей</div>
<p>
  <a href="/novosti-test/">Новости (тест)</a>
  <span> → </span>
  <a href="/novosti-test/pervaya-gruppa/">Первая группа</a>
</p>
<dl class="news_list full_list"></dl>
<div></div>
<div style="clear: both"></div>
</body>
</html


Как добиться, чтобы Н1 было  на странице самой инфосистемы и на последующих её страницах пагинации?
#
Re: Непонятно формирование Н1 в информационной системе
Контроллер в ТДС формирует динамическую часть страницы с помощью xsl-шаблона - смотрите как в соответствующем шаблоне происходит формирование заголовка (H1) страницы контента
ARTatom
#
Re: Непонятно формирование Н1 в информационной системе
Фрагмент xsl-шаблона, касающегося Н1, имеет такой код:

Цитата:
<!-- Если в находимся корне - выводим название информационной системы -->
      <xsl:choose>
         <xsl:when test="$group = 0">
            <h1 hostcms:id="{@id}" hostcms:field="name" hostcms:entity="informationsystem">
               <xsl:value-of disable-output-escaping="yes" select="name"/>
            </h1>
            
            <!-- Описание выводится при отсутствии фильтрации по тэгам -->
            <xsl:if test="count(tag) = 0 and page = 0 and description != ''">
               <div hostcms:id="{@id}" hostcms:field="description" hostcms:entity="informationsystem" hostcms:type="wysiwyg"><xsl:value-of disable-output-escaping="yes" select="description"/></div>
            </xsl:if>
         </xsl:when>
         <xsl:otherwise>
            <h1 hostcms:id="{$group}" hostcms:field="name" hostcms:entity="informationsystem_group">
               <xsl:value-of disable-output-escaping="yes" select=".//informationsystem_group[@id=$group]/name"/>
            </h1>
            
            <!-- Описание выводим только на первой странице -->
            <xsl:if test="page = 0 and .//informationsystem_group[@id=$group]/description != ''">
               <div hostcms:id="{$group}" hostcms:field="description" hostcms:entity="informationsystem_group" hostcms:type="wysiwyg"><xsl:value-of disable-output-escaping="yes" select=".//informationsystem_group[@id=$group]/description"/></div>
            </xsl:if>
            
            <!-- Путь к группе -->
            <p>
               <xsl:apply-templates select=".//informationsystem_group[@id=$group]" mode="breadCrumbs"/>
            </p>
         </xsl:otherwise>
      </xsl:choose>

      
Здесь нужно что-то добавить?
#
Re: Непонятно формирование Н1 в информационной системе
Вам нужно изучить основы XSL - без этого вы сами понимать и переделывать вывод динамических данных не сможете

Теперь о сути
приведенный XSL выводит в h1 название ИС в корне:

  <xsl:when test="$group = 0">
    <h1 hostcms:id="{@id}" hostcms:field="name" hostcms:entity="informationsystem">
       <xsl:value-of disable-output-escaping="yes" select="name"/>
    </h1>
    ...

а если находимся в группе, то выводим ее название:

  <xsl:otherwise>
    <h1 hostcms:id="{$group}" hostcms:field="name" hostcms:entity="informationsystem_group">
      <xsl:value-of disable-output-escaping="yes" select=".//informationsystem_group[@id=$group]/name"/>
    </h1>
   ...
ARTatom
#
Re: Непонятно формирование Н1 в информационной системе
Цитата:
приведенный XSL выводит в h1 название ИС в корне: а если находимся в группе, то выводим ее название:



Как раз это мне понятно (и вполне очевидно).

Но почему в приведенном примере нет вывода Н1 и что конкретно сделать, чтобы этот тег появился?

(XSL из дистрибутива, ничего в нем не менялось).
#
Re: Непонятно формирование Н1 в информационной системе
Я обычно в таких случаях делаю следующие шаги:
1) проверяю формируемый XML - что он действительно содержит нужные мне тэги  на нужных уровнях
2) проверяю что используется именно "мой" xsl - добавляю <h1>Test</h1> в самый верхний <xsl:template> и смотрю вывод
3) вывожу содержимое элементов в виде xml:

<textarea>
  <xsl:for-each select="informationsystem_item">
    <xsl:copy-of select="."/>
    <xsl:text>===========</xsl:text>
</textarea>

По-идее, на каком-то из шагов вы обязательно получите "подсказку" что у вас идет не так.
То что у вас нет тэга <h1> означает только одно - XSL-парсер не доходит до секции <xsl:choose>... </xsl:choose>
ARTatom
#
Re: Непонятно формирование Н1 в информационной системе
Спасибо, artatom !

Я уж, было, решил избавиться от этой проблемы средствами процедурного РНР, что было бы проще всего, но предложенная Вами идея показалась очень интересной.

В принципе, проблема разрешилась, но очень хочется разобраться в Вашей методике диагностирования.

Вот Вы пишете:
artatom писал(а):
1) проверяю формируемый XML - что он действительно содержит нужные мне тэги  на нужных уровнях


Я взял нормально работающую страницу на тестовом сайте, поставляемом разработчиком, и посмотрел там XML. Тег Н1 там отсутствует, хотя на странице выводится.

Как это можно объяснить?
#
Re: Непонятно формирование Н1 в информационной системе
Я имел ввиду - тэги с данными.
Т.е. XML, формируемый моделью (для ИЭ это будет класс Informationsystem_Item_Model) методом getXml(), содержит тэги с данными из соответствующих столбцов соответствующей таблицы БД.
Например, модели Informationsystem_Item_Model соответствует таблица informationsystem_items.
Для каждой записи, отобранной SQL-запросом, формируется узел с именем Informationsystem_Item и аттрибутом id (первичный ключ этой записи в таблице). Дочерние узлы узла Informationsystem_Item содержат данные. Одна часть дочерних узлов (например, name, description, text и т.д.) содержат данные из столбцов таблицы informationsystem_items, другая часть (comments_count, dir, url, date) формируется динамически из других данных, третья часть дочерних узлов это связанные реляционными отношениями данные из других таблиц. Все это XML-дерево при генерации страницы попадает на вход XSL-парсера, который вторым параметром принимает XSL-шаблон. Вот в XSL-шаблоне и происходит вся "магия" - подстановка данных из XML и генерация "внутренней" части HTML-страницы ("внешняя" часть генерируется в макетах, ТДС и динамических страницах). Именно в XSL-шаблоне содержится часть верстки (тот же тэг <h1>, полученной от верстальщика.
Так что в генерируемом XML даже не пытайтесь искать тэги из верстки
Единственное, XML может содержать тэги если вы ввели часть верстки в wysiwyg поля тех же ИЭ
В общих словах как-то так.
ARTatom
#
Re: Непонятно формирование Н1 в информационной системе
artatom, спасибо!
Авторизация