Контроллеры в клиентском разделе

#
Re: Re: Контроллеры в клиентском разделе
1) А подробнее можно, я пока не очень хорошо ориентируюсь во внутренностях системы.

2) Что если в XML выводить, как сейчас, всё, а потом  XSL разбивать на страницы? Это будет медленно?

3) Что если делать вывод прямо из базы на php?
#
Re: Контроллеры в клиентском разделе
Такая странность возникла: вывожу инфосистему на главной:

if (Core::moduleIsActive('informationsystem')) {
                $Informationsystem_Controller_Show = new Informationsystem_Controller_Show(
                    Core_Entity::factory('Informationsystem', '16')
                );
                $Informationsystem_Controller_Show
                        ->xsl(Core_Entity::factory('Xsl')->getByName('СписокСтатейНаГлавной'))
                        ->group(FALSE)
                        ->comments(TRUE)
                        ->tags(TRUE)
                        ->limit(1)
                        ->show();
            }


Ставлю там стандартную форму добавления коммента (за вычетом некоторых полей, без которых все ок сабмиттится). Точно такую же форму кидаю на страницу этой статьи (на главной выводится 1 новость из всех статей). При попытке добавить коммент на странице статьи - все ок. При попытке добавить коммент из-под главной (action у формы выводится системой как урл страницы статьи - все логично) происходит редирект на страницу статьи и написано, что #user_name#, ваш коммент добавлен. При этом прилетает письмо о добавлении коммента и в админке в инфосистемах количество комментов увеличивается. Только вот ни в админке, ни на странице статьи этого комментария нет. Т.е. при нескольких сабмитах из-под главной я могу увидеть, например, 5 коментов в инфосистеме и при попытке посмотреть на них - видим пустой лист
#
Re: Контроллеры в клиентском разделе
HostCMS писал(а):
Вывод товаров из текущей группы и подгрупп первого уровня текущей группы:
// Массив групп, из которых показывать товары
$aGroups = array($Shop_Controller_Show->group);

$oShop_Group_Main = Core_Entity::factory('Shop_Group', $Shop_Controller_Show->group);

// Массив подгрупп
$aShop_Groups = $oShop_Group_Main
   ->Shop_Groups
   ->findAll();

// У группы есть подгруппы
if (count($aShop_Groups))
{
   foreach ($aShop_Groups as $oShop_Group)
   {
      $aGroups[] = $oShop_Group->id;
   }

   $Shop_Controller_Show
      ->shopItems()
      ->queryBuilder()
      ->where('shop_group_id', 'IN', $aGroups);
}


Ох. При использовании этого кода не отображаются товары в категориях. Если перед
Цитата:
   $Shop_Controller_Show
      ->shopItems()
      ->queryBuilder()
      ->where('shop_group_id', 'IN', $aGroups);

Поставить Цитата:
$Shop_Controller_Show->group(FALSE);

товары отображаются, но, при этом, в xml висит список категорий из корня, соответственно, вывод списка подкатегорий в категории невозможен

Помогите, плз, и гуглила, и искала - не смогла найти решение
Модератор
#
Re: Контроллеры в клиентском разделе
Stepan0v,
нужно писать готовое решение, к сожалению сейчас нет возможности его подготовить.
mininzidane, в коде добавления распечатайте объект комментария в одном и во втором случае и найдите разницу, она определенно будет.
woas, неясно что значит не отображаются, если они идут в XML и без групп не отображаются, то причина в Вашем XSL-шаблоне. Непонятно, что именно Вы хотите добиться.
#
Re: Контроллеры в клиентском разделе
HostCMS, есть структура:

Категория 1
  Категория 1.1
  Категория 1.2
Категория 2
  Категория 2.1
  Категория 2.2

В каждой категории есть товары. Мне нужно, чтобы при заходе в Категорию 2 (к примеру), отображались товары из Категорий 2, 2.1 и 2.2 (т.е. всех подгрупп).

При выставлении в типовой динамической странице кода, который Вы предоставили, список подкатегорий корректно отображается, но не отображаются товары из категорий 2.1 и 2.2, только из основной категории 2, которая лежит в корне.

Если же выставить group(FALSE); то в XML закидываются категории из корня (Категория 1 и Категория 2), список подкатегорий составляется из категорий из корня, но, при этом, товары отображаются корректно (т.е. товары Категории 2 и всех подчиненных ей).

О_О
#
Re: Re: Контроллеры в клиентском разделе
woas, я не до конца понял, что вы хотите получить, но попробуйте заменить
<xsl:variable name="group" select="group"/>

на
<xsl:variable name="group" select="ТекущаяГруппа"/>


P.S. При этом оставить group(FALSE);
#
Re: Re: Контроллеры в клиентском разделе
HostCMS, т.е. можно надеяться, что когда-нибудь оно появится? Возможность и, следовательно, готовое решение.
Я на уровне внутренностей контроллера сам вряд ли осилю...

Ещё вопрос.
group(FALSE) выводит в XML все элементы. А можно ли как-то по простому вывести все дочерние элементы?
Т.е. если мы находимся в корне, то это будут все элементы, если зашли в группу, то элементы этой группы и всех её подгрупп любой вложенности.
#
Re: Контроллеры в клиентском разделе
Stepan0v писал(а):
woas, я не до конца понял, что вы хотите получить, но попробуйте заменить
<xsl:variable name="group" select="group"/>

на
<xsl:variable name="group" select="ТекущаяГруппа"/>


P.S. При этом оставить group(FALSE);
Нет, не сработало Вообще пропадает список категорий из xml

А хочу я сделать обычное отображение товаров и категорий в интернет-магазине, т.е. чтобы при заходе в какую-либо категорию, дергались товары изо всех подкатегорий активной категории, а не только из активной.
#
Re: Контроллеры в клиентском разделе
P.S. Через 5ю версию прекрасно разобралась и все заработало, но нужна 6я, хочу полностью на 6ку перейти
#
Re: Re: Контроллеры в клиентском разделе
woas,
Цитата:
Вообще пропадает список категорий из xml

подождите, я предлагал
<xsl:variable name=«group» select=«ТекущаяГруппа»/>
вставить в XSL, а он на XML не влияет.

Я подозреваю, что то, что вы говорите, можно вывести на уровне контроллеров. Но могу пояснить, как это сделать с помощью XSL.

Вам нужно вывести все группы и все элементы,
$Informationsystem_Controller_Show
   ->xsl(
      Core_Entity::factory('Xsl')->getByName($xslName)
   )
   ->group(FALSE)
   ->groupsMode('all');


а потом в XSL-шаблоне выводить только те, которые находятся ниже вашего текущего уровня.
Вот посмотрите список, покликайте http://lpex.ru/services/

Когда вы берете все группы, то group независимо от текущего положения будет = 0. Поэтому в стандартном XSL вам надо заменить переменную на <xsl:variable name="group" select="ТекущаяГруппа"/>

Потом вы обращаетесь к template
<xsl:apply-templates select="//informationsystem_group[parent_id=$group]" mode="groups"/>


Внутри <xsl:template match="informationsystem_group" mode="groups"> записываете id текущего уровня,
потом выводите всё что нужно на этом уровне и рекурсивно переходите на уровень ниже
<xsl:template match="informationsystem_group" mode="groups">
   <xsl:variable name="current_group_id" select="@id"/>

   <!-- Отображение названия подгруппы -->
   <!-- Отображение элементов подгруппы -->

   <xsl:apply-templates select="informationsystem_group[parent_id=$current_group_id]" mode="groups"/>

</xsl:template>

Т.е. внутри этого же template
Авторизация