Вывод только комментариев ИС в шаблоне

#
Вывод только комментариев ИС в шаблоне
Доброго дня.

Необходимо сделать вывод в шаблон страницы комментариев определённой ИС.

Допустим, у нас есть структура:

Главный раздел ИС
— Группа1
   — подгруппа1
       — Информационный илемент
            - комментарий
       — Информационный илемент
       — Информационный илемент
   — подгруппа2
   — подгруппа3
— Группа2
— Группа3

Необходимо в шаблон страницы выводить последние комментарии каждого подраздела.

Т.е с иерархией.

Например:
в "Главном разделе" — выводяться 5 последних добавленных комментариев ИЭ из всех груп и подгруп.

В "Группе1" — Комментарии всех ИЭ из подгруп (1,2,3 - как на примере).

Надеюсь понятно объяснил
Держи крепко, отпускай легко :P
Модератор
#
Re: Вывод только комментариев ИС в шаблоне
http://www.hostcms.ru/api/HostCMS_5/InformationSystem.html#methodGetXmlForInformatioItemComments
+ на PHP логика по выборке нужных элементов.
Далее полученный XML обрамляете заголовком и корневым тегом, после чего применяете XSL-шаблон.
#
Re: Вывод только комментариев ИС в шаблоне
Приветствую HostCMS.
Решил делать линейно, без логики. Просто последние комментарии, на всех страницах одинаково.

Вывод делаю так:
<?php
$InformationSystem = new InformationSystem();
    
$param['information_items_id'] = false;
$param['begin'] = 1;
$param['count'] = 1;
    
$newxml = $InformationSystem->GetXmlForInformatioItemComments($param, 'НазваниеШаблона');
    
// Распечатаем результат
echo nl2br(htmlspecialchars($newxml));
?>

Т.е выводим один комментарий, из всех груп, начиная с первого.

Получаю XML:
<item_comments>
<comment comment_parent_id="0" information_item_id="96">
<comment_id>26</comment_id>
<comment_fio>Денис</comment_fio>
<comment_email>Whiskas@mail.ru</comment_email>
<comment_text>Постоянно покупаю лекарства в&amp;nbsp;этой аптеке. Очень доволен. Цены приемлимые.</comment_text>
<comment_status>1</comment_status>
<comment_subject>Отзыв</comment_subject>
<comment_date>26.12.2008</comment_date>
<comment_datetime>26.12.2008 20:34:03</comment_datetime>
<comment_grade>0</comment_grade>
</comment>
<count_comments>3</count_comments>
<grade_sum>0</grade_sum>
<grade_count>0</grade_count>
<average_grade>0</average_grade>
</item_comments>


HostCMS писал(а):
обрамляете заголовком и корневым тегом, после чего применяете XSL-шаблон.

Про вот этот вопрос, можно поподробнее. Немогу создать простейший шаблон для комментариев.
Держи крепко, отпускай легко :P
Модератор
#
Re: Вывод только комментариев ИС в шаблоне
Для обрамления полученного XML-кода можно, например, использовать следующее:

<?php
$InformationSystem = new InformationSystem();
    
$param['information_items_id'] = false;
$param['begin'] = 1;
$param['count'] = 1;


// Обрамляем заголовком
$newxml = '<?xml version="1.0" encoding="windows-1251"?>' . "\n";

// Обрамляем корневым тегом, например <document>, хотя можете назвать иначе
$newxml .= '<document>' . "\n";

$newxml .= $InformationSystem->GetXmlForInformatioItemComments($param, 'НазваниеШаблона');

$newxml .= '</document>' . "\n";

    
// Распечатаем результат
echo nl2br(htmlspecialchars($newxml));
?>
Модератор
#
Re: Вывод только комментариев ИС в шаблоне
Примерный код XSL-шаблона для отображения комментариев, информация о которых содержится в генерируемом выше XML коде:

<?xml version="1.0" encoding="windows-1251"?>
<!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="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
   
   <xsl:template match="/">
      <xsl:apply-templates select="/document"/>
   </xsl:template>
   
   <xsl:template match="/document">               
      <!-- Отображаем комментарии -->         
      <xsl:apply-templates select="item_comments/comment"/>      
   </xsl:template>
   
   <!-- Вывод строки со значением свойства -->
   <xsl:template match="">
      <p>
      <!-- Дата/время добавления комментария -->
      <xsl:value-of select="comment_datetime"/>
      <!-- Ссылка на e-mail автора комментария -->
      <a href="mailto:{comment_email}"><xsl:value-of select="comment_fio"/></a>
      <br />
      <!-- Текст комментария -->   
      <xsl:value-of select="comment_text"/>
      </p>          
   </xsl:template>   
</xsl:stylesheet>
#
Re: Вывод только комментариев ИС в шаблоне
Ivanov, спасибо за помощь. Не получается вывести. выводит XML на страницу.

<?xml version="1.0" encoding="windows-1251"?>
<document>
<item_comments>
<comment comment_parent_id="0" information_item_id="96">
<comment_id>26</comment_id>
<comment_fio>Денис</comment_fio>
<comment_email>Whiskas@mail.ru</comment_email>
<comment_text>Постоянно покупаю лекарства в&amp;nbsp;этой аптеке. Очень доволен. Цены приемлимые.</comment_text>
<comment_status>1</comment_status>
<comment_subject>Отзыв</comment_subject>
<comment_date>26.12.2008</comment_date>
<comment_datetime>26.12.2008 20:34:03</comment_datetime>
<comment_grade>0</comment_grade>
</comment>
<count_comments>3</count_comments>
<grade_sum>0</grade_sum>
<grade_count>0</grade_count>
<average_grade>0</average_grade>
</item_comments>
</document>


Обойдусь без комментариев, раз не получается Всем спасибо.
Держи крепко, отпускай легко :P
Модератор
#
Re: Вывод только комментариев ИС в шаблоне
Richie,
Ну так создайте XSL шаблон и передайте его!

<?php
$InformationSystem = new InformationSystem();
    
$param['information_items_id'] = false;
$param['begin'] = 1;
$param['count'] = 1;


// Обрамляем заголовком
$newxml = '<?xml version="1.0" encoding="windows-1251"?>' . "\n";

// Обрамляем корневым тегом, например <document>, хотя можете назвать иначе
$newxml .= '<document>' . "\n";

$newxml .= $InformationSystem->GetXmlForInformatioItemComments($param, 'НазваниеШаблона');

$newxml .= '</document>' . "\n";

$xsl = new xsl();

$xsl_name = 'ИмяXSLШаблона';
$result = $xsl->build($newxml, $xsl_name);

// Распечатаем результат
echo $result;

?>

Только создайте XSL шаблон, выше пример его приведен.
#
Re: Вывод только комментариев ИС в шаблоне
HostCMS,
спасибо. Вывод дополнил, xsl шаблон сделал. Выводит пустое место.

Т.е раньше или был «голый» XML, или ошибки. Сейчас — пустое место. Ни ошибок, ни кода.
Держи крепко, отпускай легко :P
Модератор
#
Re: Вывод только комментариев ИС в шаблоне
Немного поправил XSL. Основываясь на этом XSL можете сделать нужный.
Код:
<?php
$InformationSystem = new InformationSystem();
    
$param['information_items_id'] = false;
$param['begin'] = 1;
$param['count'] = 1;


// Обрамляем заголовком
$newxml = '<?xml version="1.0" encoding="windows-1251"?>' . "\n";

// Обрамляем корневым тегом, например <document>, хотя можете назвать иначе
$newxml .= '<document>' . "\n";

$newxml .= $InformationSystem->GetXmlForInformatioItemComments($param, 'НазваниеШаблона');

$newxml .= '</document>' . "\n";

$xsl = new xsl();

$xsl_name = 'ВыводКомментриев';
$result = $xsl->build($newxml, $xsl_name);

// Распечатаем результат
echo $result;
?>


XSL:
<?xml version="1.0" encoding="windows-1251"?>
<!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="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
   
   <xsl:template match="/">
      <xsl:apply-templates select="/document"/>
   </xsl:template>
   
   <xsl:template match="/document">
      <!-- Отображаем комментарии -->
      <xsl:apply-templates select="item_comments/comment"/>
   </xsl:template>
   
   <!-- Вывод строки со значением свойства -->
   <xsl:template match="item_comments/comment">
      <p>
         <!-- Дата/время добавления комментария -->
         <xsl:value-of select="comment_datetime"/>
         <!-- Ссылка на e-mail автора комментария -->
         <a href="mailto:{comment_email}"><xsl:value-of select="comment_fio"/></a>
         <br />
         <!-- Текст комментария -->
         <xsl:value-of select="comment_text" disable-output-escaping="yes"/>
      </p>
   </xsl:template>
</xsl:stylesheet>


Если нужна информация об информационном элементе, то можно сделать код несколько иначе.
#
Re: Вывод только комментариев ИС в шаблоне
HostCMS, код заработал, спасибо огромное.

HostCMS писал(а):
Если нужна информация об информационном элементе, то можно сделать код несколько иначе.

Нужна ссылка на Инф. элемент (Заголовок-ссылка).
Держи крепко, отпускай легко :P
Авторизация