Вывод всех элементов группы в каждом элементе этой группы

#
Вывод всех элементов группы в каждом элементе этой группы
Приветствую!

Прошу помощи в следующем вопросе: на странице Элемента Инфосистемы, вывести список всех элементов группы.
Подобный вопрос обсуждался для 5-ой версии http://www.hostcms.ru/forums/17/2648/.
Помогите решить в 6-ой версии (php динамической страницы и xsl шаблон).

Заранее благодарю!
Palmer
Модератор
#
Re: Вывод всех элементов группы в каждом элементе этой группы
в коде ТДС выбираете инф. элементы той же группы, исключая показанный элемент.
Добавляете их контроллеру в свой новый тег через ->addEntity()
#
Re: Вывод всех элементов группы в каждом элементе этой группы
Возник сегодня такой вопрос. Поподробнее можно? Очень нужно решить эту проблему.
Нужно вывести все элементы этой же группы в XSL-шаблоне показа подробной новости, т.е. под новостью подробно вывести остальные новости этой группы.
Сейчас в XML информационного элемента остальные элементы не выводятся.
www.dsaleks.ru - создание сайтов и интернет-магазинов
Модератор
#
Re: Вывод всех элементов группы в каждом элементе этой группы
DS Aleks,

if ($Informationsystem_Controller_Show->item)
{
   // XML-сущность, к которй будут добавляться похожие элементы
   $oSimilarXmlEntity = Core::factory('Core_Xml_Entity')->name('similar');

   // Добавляем XML-сущность контроллеру показа
   $Informationsystem_Controller_Show->addEntity($oSimilarXmlEntity);

   $oInformationsystem = $Informationsystem_Controller_Show->getEntity();

   $oInformationsystem_Items = $oInformationsystem->Informationsystem_Items;
   $oInformationsystem_Items
      ->queryBuilder()
      ->select('informationsystem_items.*')
      ->where('informationsystem_items.active', '=', 1)
      ->where('informationsystem_items.informationsystem_group_id', '=', $Informationsystem_Controller_Show->group)
      ->where('informationsystem_items.id', '!=', $Informationsystem_Controller_Show->item)
      ->limit(10)
      ->clearOrderBy()
      ->orderBy('RAND()');

   $aInformationsystem_Items = $oInformationsystem_Items->findAll(FALSE);
   foreach   ($aInformationsystem_Items as $oInformationsystem_Item)
   {
      $oSimilarXmlEntity->addEntity(
         $oInformationsystem_Item->clearEntities()
            ->addForbiddenTag('text')
      );
   }
}
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
#
Re: Вывод всех элементов группы в каждом элементе этой группы
Добавил этот код в ТДС, в Настройки типовой динамической страницы, в самом конце перед строкой Core_Page::instance()->object = $Informationsystem_Controller_Show;
Результат не изменился
www.dsaleks.ru - создание сайтов и интернет-магазинов
Модератор
#
Re: Вывод всех элементов группы в каждом элементе этой группы
DS Aleks,

А почему вы его в настройки добавляете? В код ТДС добавляйте, перед блоком с ->show()
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
#
Re: Вывод всех элементов группы в каждом элементе этой группы
Добавил перед блоком с ->show(), получил ошибку:
Замечание: Undefined variable: oInformationsystem в файле \www\hostcmsfiles\lib\lib_1\lib_1.php (строка 162)Замечание: Trying to get property of non-object в файле \www\hostcmsfiles\lib\lib_1\lib_1.php (строка 162)
Fatal error: Call to a member function queryBuilder() on a non-object in \www\hostcmsfiles\lib\lib_1\lib_1.php on line 164

Строка 162:
$oInformationsystem_Items = $oInformationsystem->Informationsystem_Items;
Строка 164:
->queryBuilder()
www.dsaleks.ru - создание сайтов и интернет-магазинов
Модератор
#
Re: Вывод всех элементов группы в каждом элементе этой группы
Перед:

$oInformationsystem_Items = $oInformationsystem->Informationsystem_Items;


добавьте:

$oInformationsystem = $Informationsystem_Controller_Show->getEntity();
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
#
Re: Вывод всех элементов группы в каждом элементе этой группы
Элементы появились. Все вывел как надо. Огромное спасибо Александру Егорову.
Кому нужно, вот 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="/">
      <xsl:apply-templates select="/informationsystem/informationsystem_item"/>
   </xsl:template>
   
   <xsl:template match="/informationsystem/informationsystem_item">

        <section>
            <div class="container">
                <div class="row">
                    <div class="col-sm-8 box">
                        <div class="content">
                            <!-- Получаем ID родительской группы и записываем в переменную $group -->
                            <xsl:variable name="group" select="informationsystem_group_id"/>

                            <h1 hostcms:id="{@id}" hostcms:field="name" hostcms:entity="informationsystem_item">
                                <xsl:value-of disable-output-escaping="yes" select="name"/>
                            </h1>

                            <!-- Путь к группе -->
                            <div class="breadcrumbs">
                                <a href="/">Главная</a>
                                /
                                <xsl:apply-templates select="//informationsystem_group[@id=$group]" mode="breadCrumbs"/>
                                /
                            </div>

                            <!-- Выводим сообщение -->
                            <xsl:if test="/informationsystem/message/node()">
                                <xsl:value-of disable-output-escaping="yes" select="/informationsystem/message"/>
                            </xsl:if>

                            <!-- Текст информационного элемента -->
                            <xsl:choose>
                                <xsl:when test="parts_count > 1">
                                    <xsl:value-of disable-output-escaping="yes" select="text"/>
                                </xsl:when>
                                <xsl:otherwise>
                                    <div hostcms:id="{@id}" hostcms:field="text" hostcms:entity="informationsystem_item" hostcms:type="wysiwyg">
                                        <xsl:value-of disable-output-escaping="yes" select="text"/>
                                    </div>
                                </xsl:otherwise>
                            </xsl:choose>
                        </div>
                    </div>

                    <div class="col-sm-4 box">
                        <div class="content">
                            <h3><xsl:value-of disable-output-escaping="yes" select="/informationsystem/informationsystem_group/name"/></h3>

                            <!-- Шаблон вывода информационного элемента -->
                            <xsl:for-each select="//informationsystem_item">
                                <div class="catalog-element">
                                    <!-- Изображение для информационного элемента (если есть) -->
                                    <xsl:if test="image_small!=''">
                                        <a href="{url}" class="news_title" title="{name}">
                                            <img src="{dir}{image_small}" class="news_img" alt="{name}" />
                                        </a>
                                    </xsl:if>
         
                                    <h4>
                                        <a href="{url}" hostcms:id="{@id}" hostcms:field="name" hostcms:entity="informationsystem_item">
                                            <xsl:value-of disable-output-escaping="yes" select="name"/>
                                        </a>
                                    </h4>
                                    <div class="clear"></div>
                                </div>
                            </xsl:for-each>
                        </div>
                    </div>
                </div>
            </div>
        </section>
   </xsl:template>
   
   <!-- Шаблон выводит рекурсивно ссылки на группы инф. элемента -->
   <xsl:template match="informationsystem_group" mode="breadCrumbs">
      <xsl:variable name="parent_id" select="parent_id"/>
      
      <!-- Выбираем рекурсивно вышестоящую группу -->
      <xsl:apply-templates select="//informationsystem_group[@id=$parent_id]" mode="breadCrumbs"/>
      
      <xsl:if test="parent_id=0">
         <a href="{/informationsystem/url}">
            <xsl:value-of disable-output-escaping="yes" select="/informationsystem/name"/>
         </a>
      </xsl:if>
        /
      <a href="{url}">
         <xsl:value-of select="name"/>
      </a>
   </xsl:template>
   
</xsl:stylesheet>

Если я что-то сделал неправильно, поправьте меня...
www.dsaleks.ru - создание сайтов и интернет-магазинов
#
Re: Вывод всех элементов группы в каждом элементе этой группы
Остался еще 1 вопрос: как выставить сортировку, указанную для информационной системы?
Пробовал так:
->clearOrderBy()
->orderBy('informationsystem_items.sorting'
не реагирует. И на обратную тоже не реагирует:
->orderBy('informationsystem_items.sorting','DESC'
Пробовал закомментировать эти строчки, тоже не сортируется.
www.dsaleks.ru - создание сайтов и интернет-магазинов
Авторизация