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

Модератор
Re: Работа с дополнительными свойствами в HostCMS v. 6
brave,
импорт CSV такую ситуацию не поддерживает.
Re: Работа с дополнительными свойствами в HostCMS v. 6
Дополнительные свойства товара вывожу стандартным кодом:
<!-- Вывод строки со значением свойства -->
   <xsl:template match="property_value">
      <xsl:if test="value/node() and value != '' or file/node() and file != ''">
         <div class="shop_property">
            <xsl:variable name="property_id" select="property_id" />
            <xsl:variable name="property" select="/shop/shop_item_properties//property[@id=$property_id]" />

            <xsl:value-of disable-output-escaping="yes" select="$property/name"/><xsl:text>: </xsl:text>
            <span><xsl:choose>
               <xsl:when test="$property/type = 2">
                  <a href="{../dir}{file}" target="_blank"><xsl:value-of disable-output-escaping="yes" select="file_name"/></a>
               </xsl:when>
               <xsl:when test="$property/type = 7">
                  <input type="checkbox" disabled="disabled">
                     <xsl:if test="value = 1">
                        <xsl:attribute name="checked">checked</xsl:attribute>
                     </xsl:if>
                  </input>
               </xsl:when>
               <xsl:otherwise>
                  <xsl:value-of disable-output-escaping="yes" select="value"/>
               </xsl:otherwise>
            </xsl:choose></span>
         </div>
      </xsl:if>
   </xsl:template>

1. Если у товара есть группа дополнительных свойств типа checkbox, например "Цвет корпуса" со значениями "красный", "синий", "зелёный", то отметив первый раз значение "красный" мы его и увидим на странице товара. Через некоторое время необходимо отметить значение "синий", а соответственно значение "красный" снять - на странице товара будет выводиться не только активное значение "синий", но и неактивное "красный". Есть ли возможность выводить только активные значения?

2. Подскажите, как усовершенствовать вышеприведённый код, чтобы выводилось название группы свойств, а после него выводились только активные значения дополнительных свойств входящих в эту группу?

Спасибо!
yestravel
Модератор
Re: Работа с дополнительными свойствами в HostCMS v. 6
Попробуйте так:
<!-- Вывод строки со значением свойства -->
   <xsl:template match="property_value">
      <xsl:if test="value/node() and value != '' or file/node() and file != ''">
         <div class="shop_property">
            <xsl:variable name="property_id" select="property_id" />
            <xsl:variable name="property" select="/shop/shop_item_properties//property[@id=$property_id]" />

         <xsl:if test="$property/type != 7 or value != 0">
         
            <xsl:value-of disable-output-escaping="yes" select="$property/name"/><xsl:text>: </xsl:text>
            <span><xsl:choose>
               <xsl:when test="$property/type = 2">
                 <a href="{../dir}{file}" target="_blank"><xsl:value-of disable-output-escaping="yes" select="file_name"/></a>
               </xsl:when>
               <xsl:when test="$property/type = 7">
                 <input type="checkbox" disabled="disabled">
                   <xsl:if test="value = 1">
                     <xsl:attribute name="checked">checked</xsl:attribute>
                   </xsl:if>
                 </input>
               </xsl:when>
               <xsl:otherwise>
                 <xsl:value-of disable-output-escaping="yes" select="value"/>
               </xsl:otherwise>
            </xsl:choose></span>

         </xsl:if>

         </div>
      </xsl:if>
   </xsl:template>


2. Тогда нужно применять не сразу tempalte к property_value, а вначале вызывать template для разделов, внутри них уже выводить значения.
Re: Работа с дополнительными свойствами в HostCMS v. 6
Понятно, что вывести доп.свойство «dop» элемента ИС можно так:
<xsl:value-of select="property_value[tag_name='dop']/value"/>

А для группы?
А вот если доп.свойство у группы?
1. как его вывести в группе?
<xsl:value-of disable-output-escaping="yes" select=".//property_value[tag_name = 'dop']/value"/>
,
и
<xsl:value-of select=".//property_value[tag_name='dop']/value"/>

не выводят... как ещё попробовать?

2. как его вывести в элементе? Тоесть взять значение поля от родительской группы и вывести его в элементе?
Знания имеют свои пределы, и только глупость человеческая не знает границ...
Модератор
Re: Работа с дополнительными свойствами в HostCMS v. 6
ez-web писал(а):
А вот если доп.свойство у группы?

Находясь в template группы? Да точно также. Только проверьте, а есть ли значения св-в группы в XML, по умолчанию в контроллере они выключены.ez-web писал(а):
2. как его вывести в элементе? Тоесть взять значение поля от родительской группы и вывести его в элементе?

Получить нужную групп и от нее уже
property_value[tag_name='dop']/value
Re: Работа с дополнительными свойствами в HostCMS v. 6
HostCMS писал(а):
по умолчанию в контроллере они выключены

а как включить?
а то получается, что назначить можно, а вывести нельзя...
Знания имеют свои пределы, и только глупость человеческая не знает границ...
Модератор
Re: Работа с дополнительными свойствами в HostCMS v. 6
Контроллеру показа передать
->groupsProperties(TRUE)
http://www.hostcms.ru/api6/classes/Informationsystem_Controller_Show.html
Re: Работа с дополнительными свойствами в HostCMS v. 6
Типовые динамические страницы -> Информационные системы -> [код 1] Информационная система ->  редактировать -> Настройки страницы
поменял
$Informationsystem_Controller_Show
   ->limit(Core_Array::get(Core_Page::instance()->libParams, 'itemsOnPage'))
   ->parseUrl();

на
$Informationsystem_Controller_Show
   ->limit(Core_Array::get(Core_Page::instance()->libParams, 'itemsOnPage'))
   ->groupsProperties(TRUE)
   ->parseUrl();

Заработало!

Это в качестве инструкции где вносить правку, чтобы долго не искать
Знания имеют свои пределы, и только глупость человеческая не знает границ...
Re: Работа с дополнительными свойствами в HostCMS v. 6
1. Спасибо за помощь - неактивные свойства не выводятся.
2. HostCMS писал(а):
Тогда нужно применять не сразу tempalte к property_value, а вначале вызывать template для разделов, внутри них уже выводить значения.

Попробывал переделать уже существующее решение для 5-й версии через полуавтоматический сервис корректировки шаблонов - ничего не получилось...
<!-- Вывод раздела для свойств товара -->
<xsl:template match="properties_items_dir">
   
   <xsl:variable name="dir_id" select="@id"/>
   
   <xsl:if test="count(/shop/item/property[@dir_id = $dir_id and value != ''])">
      <ul>
         <li>
            <!-- Название группы свойств -->
            <b><xsl:value-of select="shop_properties_items_dir_name"/></b>
         </li>
      </ul>
      <xsl:apply-templates select="/shop/item/property[@dir_id = $dir_id]"/>
   </xsl:if>
   
   <xsl:if test="count(properties_items_dir) > 0">
      <xsl:apply-templates select="properties_items_dir"/>
   </xsl:if>
</xsl:template>

yestravel
Re: Работа с дополнительными свойствами в HostCMS v. 6
Товарищи разработчики, меня очень заинтересовал вопрос, по какой причине вы решили не реализовывать переменные GET для доп. свойств для пейджера страниц
P.S это те переменные, которые после применения фильтра в пейджер добавляют фильтрацию.
email project@bugoff.net skype bugoff.net сайт bugoff.net
Авторизация