Проблемы с передачей и выводом значений через external_propertys

#
Проблемы с передачей и выводом значений через external_propertys
На странице товара, у меня есть возможность приобрести сопутствующие товары, товары эти относятся к одежде и имеет дополнительное свойство размер. Это свойство содержит строку с размерами, перечисленными через запятую(XS,S,L). Мне нужно для каждого товара вывести селект с этими размерами. Т.к. внутри xsl-шаблона разбивать строку сложно, я формирую массив значений размеров для каждого сопутствующего товара в шаблоне и хочу передать его через $external_propertys, но выдаются ошибки.
массив $external_propertys выглядит так:
Array ( [size] => Array ( [605] => Array ( [0] => S [1] => M [2] => L ) [613] => Array ( [0] => S [1] => M [2] => L ) ) )
  
ошибки

Предупреждение: DOMDocument::loadXML() [domdocument.loadxml]: StartTag: invalid element name in Entity, line: 3 в файле /var/www/admin/data/www/radugastore.ru/modules/Xsl/Xsl.class.php (строка 272)
Предупреждение: DOMDocument::loadXML() [domdocument.loadxml]: StartTag: invalid element name in Entity, line: 3 в файле /var/www/admin/data/www/radugastore.ru/modules/Xsl/Xsl.class.php (строка 272)
Предупреждение: DOMDocument::loadXML() [domdocument.loadxml]: expected '>' in Entity, line: 3 в файле /var/www/admin/data/www/radugastore.ru/modules/Xsl/Xsl.class.php (строка 272)
Предупреждение: DOMDocument::loadXML() [domdocument.loadxml]: Opening and ending tag mismatch: size line 3 and unparseable in Entity, line: 3 в файле /var/www/admin/data/www/radugastore.ru/modules/Xsl/Xsl.class.php (строка 272)
Предупреждение: DOMDocument::loadXML() [domdocument.loadxml]: StartTag: invalid element name in Entity, line: 4 в файле /var/www/admin/data/www/radugastore.ru/modules/Xsl/Xsl.class.php (строка 272)
Предупреждение: DOMDocument::loadXML() [domdocument.loadxml]: expected '>' in Entity, line: 4 в файле /var/www/admin/data/www/radugastore.ru/modules/Xsl/Xsl.class.php (строка 272)
Предупреждение: DOMDocument::loadXML() [domdocument.loadxml]: Opening and ending tag mismatch: shop line 2 and unparseable in Entity, line: 4 в файле /var/www/admin/data/www/radugastore.ru/modules/Xsl/Xsl.class.php (строка 272)
Предупреждение: DOMDocument::loadXML() [domdocument.loadxml]: Extra content at the end of the document in Entity, line: 4 в файле /var/www/admin/data/www/radugastore.ru/modules/Xsl/Xsl.class.php (строка 272)


Вопрос в том, как передать приведенный выше массив и вывести на его основе селекты для каждого сопутствующего товара. Помогите пожалуйста
Модератор
#
Re: Проблемы с передачей и выводом значений через external_propertys
Причина в том, что Вы передаете массивы, а ожидается индекс => строка.
#
Re: Проблемы с передачей и выводом значений через external_propertys
прочитала в другой теме, что массив нужно формировать в таком виде

Array
(
    [0] => Array
        (
            [xml_name] => item605
            [value] => Array
                (
                    [0] => Array
                        (
                            [xml_name] => size0
                            [value] => S
                        )

                    [1] => Array
                        (
                            [xml_name] => size1
                            [value] => M
                        )
                    [2] => Array
                        (
                            [xml_name] => size2
                            [value] => L
                        )
                )
        )
    [1] => Array
        (
            [xml_name] => item613
            [value] => Array
                (
                    [0] => Array
                        (
                            [xml_name] => size0
                            [value] => S
                        )
                    [1] => Array
                        (
                            [xml_name] => size1
                            [value] => M
                        )
                    [2] => Array
                        (
                            [xml_name] => size2
                            [value] => L
                        )
                )
        )
)

вопрос как теперь в xsl-шаблоне обратиться и вывести эти значения?
#
Re: Проблемы с передачей и выводом значений через external_propertys
x-girl,
$xml='';
foreach($array as $val)
{
$xml.="<{$r['xml_name']}>";
foreach($r['value'] as $v)
$xml.="<{$v['xml_name']}>{$v['value']}</{$v['xml_name']}>";
$xml.="</{$r['xml_name']}>";
}
$external_propertys['razmer']=$xml;
Вот примерно так.
Делись своими знаниями. Это путь к бессмертию.
#
Re: Проблемы с передачей и выводом значений через external_propertys
R_www писал(а):
Вот примерно так.

Боюсь вы меня не поняли. Мне нужно внутри самого xsl-шаблона сформировать селект, обратившись к конкретному массиву. Смотрите шаблон

<xsl:template match="tying/item">
      
      <div id="citem">
         <!-- Изображение для товара, если есть -->
         <xsl:if test="small_image != ''">
            <div id="citem_image">
               <img src="{small_image}" style="width:60px; height:60px;" />
            </div>
         </xsl:if>
         
         <div id="citem_content">
            <div id="citem_name"><xsl:value-of disable-output-escaping="yes" select="name"/>:</div>
            <div id="citem_price">
               <span class="price">
                  <xsl:value-of select="format-number(price_discount, '### ##0', 'my')"/>&#xA0;<xsl:value-of select="currency" disable-output-escaping="yes"/>
               </span>
            </div>
         </div>
         
         <div id="citem_filter">
            <xsl:if test="property[@xml_name = 'size']/value != ''">
               <div id="citem_size">
                  <div id="citem_filter_descr">Размер</div>
                  <div>
                     <select name="size[{@id}]" class="ssize">
                        <option value="0">-</option>
                        <option value="{property[@xml_name = 'size']/value}">
                           <xsl:value-of select="property[@xml_name = 'size']/value"/>
                        </option>
                        <xsl:variable name="curr_id" select="@id"/>
                        <!-- вот здесь нужно получить значения размеров для item$curr_id-->
                        <xsl:variable name="item_id" select="concat('item',string($curr_id))"/>
                        <xsl:if test="$curr_id != ''">
                            <!-- это не работает -->
                           <xsl:for-each select="/shop/item{@id}/value">
                              <xsl:value-of disable-output-escaping="yes" select="value"/>
                           </xsl:for-each>
                        </xsl:if>
                     </select>
                  </div>
               </div>
            </xsl:if>
            <div id="citem_quantity">
               <div id="citem_filter_descr">Количество</div>
               <div>
                  <select name="quantity[{@id}]" class="squantity" id="count_{@id}">
                     <option value="0">-</option>
                     <option value="1">1</option>
                     <option value="2">2</option>
                     <option value="3">3</option>
                     <option value="4">4</option>
                     <option value="5">5</option>
                  </select>
               </div>
            </div>
         </div>
      </div>
   </xsl:template>
  
#
Re: Проблемы с передачей и выводом значений через external_propertys
x-girl,  чтобы в хслт обращаться к массиву, нужно массив представить в виде дерева тегов, я Вам как раз и показал как сформировать это дерево, поэтому   <xsl:for-each select="/shop/item{@id}/value"> данная конструкция и не работает, xslt  не находит данный узел.
Делись своими знаниями. Это путь к бессмертию.
#
Re: Проблемы с передачей и выводом значений через external_propertys
дописала в шаблон ваш код

$xml='';
         foreach($array as $r)
         {
      $xml.="<{$r['xml_name']}>";
      foreach($r['value'] as $v)
      $xml.="<{$v['xml_name']}>{$v['value']}</{$v['xml_name']}>";
      $xml.="</{$r['xml_name']}>";
         }
          $external_propertys['size'] = $xml;

в xsl такой код

<xsl:for-each select="/shop/size/item{@id}/value">
                              <xsl:value-of disable-output-escaping="yes" select="value"/>
                           </xsl:for-each>


ошибки те же самые

Предупреждение: XSLTProcessor::importStylesheet() [xsltprocessor.importstylesheet]: Invalid expression в файле /var/www/admin/data/www/radugastore.ru/modules/Xsl/Xsl.class.php (строка 285)
Предупреждение: XSLTProcessor::importStylesheet() [xsltprocessor.importstylesheet]: compilation error: file /var/www/admin/data/www/radugastore.ru/ line 561 element for-each в файле /var/www/admin/data/www/radugastore.ru/modules/Xsl/Xsl.class.php (строка 285)
Предупреждение: XSLTProcessor::importStylesheet() [xsltprocessor.importstylesheet]: xsl:for-each : could not compile select expression '/shop/size/item{@id}/value' в файле /var/www/admin/data/www/radugastore.ru/modules/Xsl/Xsl.class.php (строка 285)
Предупреждение: XSLTProcessor::transformToDoc() [xsltprocessor.transformtodoc]: No stylesheet associated to this object в файле /var/www/admin/data/www/radugastore.ru/modules/Xsl/Xsl.class.php (строка 289)
#
Re: Проблемы с передачей и выводом значений через external_propertys
x-girl, <xsl:for-each select="/shop/size/item{@id}/value"> проблема в item{@id}, формируйте тег например <item id="888">, тогда   - заранее занесите @id товара  в переменную и вызывайте <xsl:for-each select="/shop/size/item[@id=$id]/value">
Делись своими знаниями. Это путь к бессмертию.
#
Re: Проблемы с передачей и выводом значений через external_propertys
теперь ошибок нет, но ничего не выводит
xml например такой

<item id="605" >
   <size0>S</size0>
   <size1>M</size1>
   <size2>L</size2>
</item>
<item id="613" >
   <size0>S</size0>
   <size1>M</size1>
   <size2>L</size2>
</item>

вывод в шаблоне такой

<select name="size[{@id}]" class="ssize">
   <option value="0">-</option>
   <xsl:variable name="id" select="@id"/>
   <xsl:for-each select="/shop/size/item[@id=$id]/value">
      <option><xsl:value-of disable-output-escaping="yes" select="value"/></option>
   </xsl:for-each>
</select>

что я делаю нетак?
#
Re: Проблемы с передачей и выводом значений через external_propertys
x-girl, у вас ошибка в пути.
/shop/size/item[@id=$id]/value а у вас путь получается например - /shop/size/item[@id=$id]/size0. замените их   на value. Должно заработать, если вам нужно число от тега size, поставьте его так же в атрибут id value
Делись своими знаниями. Это путь к бессмертию.
Авторизация