Shopware 5 - 遍历所有属性
Shopware 5 - Looping through all attributes
你好,我需要一些关于购物软件的帮助。
我的问题可能很基本,但我无法完成。我想打印出一篇文章的属性。在 shopware 文档中,他们称它们为 {$sArticle.attr1} 直到 {$sArticle.attr20} 但它们也可以有不同的名称,所以我不能直接引用名称,而是我只想打印几个属性。
到目前为止,我知道所有属性都存储在 s_articles_attributes 数据库 table 中,我只想在列名包含 ='artikelattribut_'[=12 时打印出这些列=]
代码将在 frontend/detail/tabs 的 table 中实现 --> description.tpl
实际 table 已经使用 $sArticle.sProperties 并且代码如下所示:
{if $sArticle.sProperties}
<div class="product--properties panel has--border">
<table class="product--properties-table">
{foreach $sArticle.sProperties as $sProperty}
<tr class="product--properties-row">
{* Property label *}
{block name='frontend_detail_description_properties_label'}
<td class="product--properties-label is--bold">{$sProperty.name|escape}:</td>
{/block}
{* Property content *}
{block name='frontend_detail_description_properties_content'}
<td class="product--properties-value">{$sProperty.value|escape}</td>
{/block}
</tr>
{/foreach}
</table>
</div>
{/if}
问题是 $sArticle.sProperties 和 {$sArticle.attr1} 到 {$sArticle.attr20} 是不同的。我想要的只是第二个 {foreach} 循环抛出所有文章属性也许这个想法变得清晰:
{foreach $sArticle.attr FROM s_articles_attributes WHERE name contains='artikelattribut_'}
我希望有人能理解我的问题。感谢您的任何建议。
谢谢
首先,请记住,“属性”和“属性”在 Shopware 中的含义与您可能从其他商店系统中了解到的有所不同。
“属性”用于产品的特性,例如产品的味道或颜色。
Shopware 中的“属性”与通常意义上的属性没有任何关系。您可以为几乎每个实体找到这些 *_attributes
表,它们更像是自定义字段或列,您可以将它们添加到实体以使用自定义数据扩展它们。
现在回到你的问题。试试这个:
{foreach $sArticle.attributes.core->toArray() as $attributeName => $attribute}
{$attributeName|var_dump}
{$attribute|var_dump}
{/foreach}
有两种方法可以访问产品的属性。
- 所有属性都直接分配给
$sArticle
变量,您可以使用它们,正如您在文中所述。
- 属性也存储在
$sArticle.attributes
中,您可以在其中找到不同类型的属性。默认情况下,详细信息页面上的产品为 core
和 marketing
。请注意,这些键的值是 Shopware\Bundle\StoreFrontBundle\Struct\Attribute
类型的对象。这就是为什么我们需要调用 toArray
方法来获取一个我们可以迭代的数组。
你好,我需要一些关于购物软件的帮助。 我的问题可能很基本,但我无法完成。我想打印出一篇文章的属性。在 shopware 文档中,他们称它们为 {$sArticle.attr1} 直到 {$sArticle.attr20} 但它们也可以有不同的名称,所以我不能直接引用名称,而是我只想打印几个属性。
到目前为止,我知道所有属性都存储在 s_articles_attributes 数据库 table 中,我只想在列名包含 ='artikelattribut_'[=12 时打印出这些列=]
代码将在 frontend/detail/tabs 的 table 中实现 --> description.tpl
实际 table 已经使用 $sArticle.sProperties 并且代码如下所示:
{if $sArticle.sProperties}
<div class="product--properties panel has--border">
<table class="product--properties-table">
{foreach $sArticle.sProperties as $sProperty}
<tr class="product--properties-row">
{* Property label *}
{block name='frontend_detail_description_properties_label'}
<td class="product--properties-label is--bold">{$sProperty.name|escape}:</td>
{/block}
{* Property content *}
{block name='frontend_detail_description_properties_content'}
<td class="product--properties-value">{$sProperty.value|escape}</td>
{/block}
</tr>
{/foreach}
</table>
</div>
{/if}
问题是 $sArticle.sProperties 和 {$sArticle.attr1} 到 {$sArticle.attr20} 是不同的。我想要的只是第二个 {foreach} 循环抛出所有文章属性也许这个想法变得清晰:
{foreach $sArticle.attr FROM s_articles_attributes WHERE name contains='artikelattribut_'}
我希望有人能理解我的问题。感谢您的任何建议。 谢谢
首先,请记住,“属性”和“属性”在 Shopware 中的含义与您可能从其他商店系统中了解到的有所不同。
“属性”用于产品的特性,例如产品的味道或颜色。
Shopware 中的“属性”与通常意义上的属性没有任何关系。您可以为几乎每个实体找到这些 *_attributes
表,它们更像是自定义字段或列,您可以将它们添加到实体以使用自定义数据扩展它们。
现在回到你的问题。试试这个:
{foreach $sArticle.attributes.core->toArray() as $attributeName => $attribute}
{$attributeName|var_dump}
{$attribute|var_dump}
{/foreach}
有两种方法可以访问产品的属性。
- 所有属性都直接分配给
$sArticle
变量,您可以使用它们,正如您在文中所述。 - 属性也存储在
$sArticle.attributes
中,您可以在其中找到不同类型的属性。默认情况下,详细信息页面上的产品为core
和marketing
。请注意,这些键的值是Shopware\Bundle\StoreFrontBundle\Struct\Attribute
类型的对象。这就是为什么我们需要调用toArray
方法来获取一个我们可以迭代的数组。