Работа с дополнительными свойствами в HostCMS v. 6

Re: Работа с дополнительными свойствами в HostCMS v. 6
Добрый день. Помогите пожалуйста!

Потребовалось изменить поля ввода в XSL [МагазинАдресДоставки] в определённом порядке, при этом участвуют дополнительные свойства заказа. В демонстрационном магазине как и в документации, представлен код вида:

<xsl:if test="count(shop_order_properties//property[display != 0 and (type != 2 )])">
               <xsl:apply-templates select="shop_order_properties//property[display != 0 and (type != 2 )]" mode="propertyList"/>
            </xsl:if>


Данный код создаёт поля ввода для всех имеющихся дополнительных свойств заказа! Но мне нужно выводить их по одному в той последовательности в которой нужно мне, плюс на некоторых полях ввода я хочу поставить класс class="required" для того что-бы данное поле было обязательным для заполнения.

Например если посмотреть на поле ввода для "стандартного" параметра заказа "Описание заказа" оно выглядит так:
<div class="row">
               <div class="caption">Комментарий:</div>
               <div class="field">
                  <textarea rows="3" name="description" class="width2"></textarea>
               </div>
            </div>

Как будет выглядеть код для вывода поля ввода только одного дополнительного свойства заказа?
Модератор
Re: Работа с дополнительными свойствами в HostCMS v. 6
aksenov,
ознакомьтесь, пожалуйста, принцип тот же самый: http://www.hostcms.ru/documentation/modules/properties/xsl/
Re: Работа с дополнительными свойствами в HostCMS v. 6
Спасибо за направление, эмпирически додумал:

<xsl:apply-templates select="shop_order_properties//property[tag_name='my_property']" mode="propertyList"/>


где "my_property" - XML-тег дополнительного свойства заказа
Re: Работа с дополнительными свойствами в HostCMS v. 6
Цитата:
вся информация в документации: http://www.hostcms.ru/documentation/modules/properties/xsl/

Как я не додумался сразу
Re: Работа с дополнительными свойствами в HostCMS v. 6
Добрый день!

Нужно добавить дополнительное свойство в разделах модуля "Структура сайта". В Инструкции оно уже есть, но у меня не отображается вкладка. Все что нашел на форуме - чтобы отображалась вкладка - добавьте свойство. А вот где и как это сделать не нашел.

Если не сложно - подскажите.
Модератор
Re: Работа с дополнительными свойствами в HostCMS v. 6
darkcookie,
В структуре сайта первый пункт "Раздел" второй подпункт "Свойства".
Re: Работа с дополнительными свойствами в HostCMS v. 6
Здравствуйте!

Каким образом можно вывести дополнительные свойства на всех страницах?

То есть например у нас имеется группа «события» в информационной системе и созданный к нему узел «события». К страницам группы  «события» я добавил дополнительное поле «meeting» и стал выводить его в xsl файле.


<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   
   <xsl:output method="xml" encoding="utf-8" indent="yes" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" />
   
   <xsl:template match="/events">
      <!-- Выбираем узлы structure -->
      <xsl:apply-templates select="informationsystem_item" />
   </xsl:template>
   
   <xsl:template match="informationsystem_item">
      <xsl:element name="div">
         <xsl:attribute name="class">el</xsl:attribute>
         <xsl:element name="div">
            <xsl:attribute name="class">block_icon</xsl:attribute>
         </xsl:element>
         <xsl:element name="div">
            <xsl:attribute name="class">block_content</xsl:attribute>
            <xsl:element name="div">
               <xsl:attribute name="class">date</xsl:attribute>
               <xsl:value-of disable-output-escaping="yes" select="date"/>
            </xsl:element>
            <xsl:element name="div">
               <xsl:attribute name="class">name</xsl:attribute>
               №<xsl:value-of select="property_value[tag_name='meeting']/value"/>
            </xsl:element>
         </xsl:element>
      </xsl:element>
   </xsl:template>
   
</xsl:stylesheet>


Вывод в блок:

<?php

                  if (Core::moduleIsActive('informationsystem'))
                  {
                     // События
                     $Informationsystem_Controller_Show = new Informationsystem_Controller_Show(
                        Core_Entity::factory('Informationsystem', 20),
                        Core_Entity::factory('Informationsystem_Item_Property_List', 20)
                     );
                     $Informationsystem_Controller_Show
                        ->xsl(
                           Core_Entity::factory('Xsl')->getByName('Вывод событий в правом контейнере')
                        )
                        ->groupsMode('none')
                        ->itemsForbiddenTags(array('text'))
                        ->group(FALSE)
                        ->limit(2)
                        ->show();
                  }

               ?>


Данный блок выводится на всех страницах в правом контейнере. Мне нужно получить все элементы событий и их дополнительные поля (свойства).

Получается так, что дополнительные свойства выводятся только если узел равен «/events» (<xsl:template match="/events">. Как сделать, чтобы свойства выводились и во всех остальных узлах?
Модератор
Re: Работа с дополнительными свойствами в HostCMS v. 6
ruplexus писал(а):
То есть например у нас имеется группа «события» в информационной системе и созданный к нему узел «события».

Зачем Вы к группе ИС создаете отдельный узел структуры?

ruplexus писал(а):
   <xsl:template match="/events">
      <!-- Выбираем узлы structure -->
      <xsl:apply-templates select="informationsystem_item" />
   </xsl:template>

что за events и как они попали в XML?

ruplexus писал(а):
                     // События
                     $Informationsystem_Controller_Show = new Informationsystem_Controller_Show(
                        Core_Entity::factory('Informationsystem', 20),
                        Core_Entity::factory('Informationsystem_Item_Property_List', 20)
                     );

что за второй аргумент Core_Entity::factory('Informationsystem_Item_Property_List', 20) ?

ruplexus писал(а):
Получается так, что дополнительные свойства выводятся только если узел равен «/events» (<xsl:template match="/events">. Как сделать, чтобы свойства выводились и во всех остальных узлах?

http://www.hostcms.ru/api6/classes/Informationsystem_Controller_Show.html
Цитата:
* itemsProperties(TRUE|FALSE|array()) выводить значения дополнительных свойств информационных элементов, по умолчанию FALSE. Может принимать массив с идентификаторами дополнительных свойств, значения которых необходимо вывести.
* itemsPropertiesList(TRUE|FALSE) выводить список дополнительных свойств информационных элементов, по умолчанию TRUE
Re: Re: Работа с дополнительными свойствами в HostCMS v. 6
HostCMS,
Цитата:
Ваша ошибка в том, что выбирая данные из нескольких таблиц, все они попадают в одну модель, в данном случае в модель структуры, при этом модель структуры не имеет таких атрибутов, как property_id, отсюда Вы и получаете ошибку.
Добавьте ограничение на выборку только из одной таблицы

А как это работает в случае  с фильтрацией информационных элементов - http://www.hostcms.ru/forums/2/7122/, если там нет дополнительного ограничения на выборку из одной таблицы?

версия системы 6.1.0
upd. это дополнительное условие есть внутри контроллера показа информационной системы, но его нет в контроллере показа узлов структуры почему-то
HostDev.pw - модули для HostCMS, Telegram: @hostdev
Re: Работа с дополнительными свойствами в HostCMS v. 6
Сделал для единицы продукции доп. св-во "Флажок" с отображением в фильтре, НО (!) при фильтрации по данному свойству ни один товар не выводится (XSL-шаблон оставлен без изменений из дистрибутива).....
Авторизация