【发布时间】:2017-11-23 17:15:31
【问题描述】:
我有以下代码来获取我的所有过滤器元素,并使用标题 (getName) 及其内部元素 (getHtml) 来回显每个过滤器元素。我想要的是检查标题并合并相同的标题以显示所有内部元素而不重复相同的标题。
例如,如果我有一个名为 FILTER-AB 且包含元素 1 和 2 的过滤器,以及另一个名为 FILTER-AB 且包含元素 3 和 4 的过滤器,我只想回显一个标题为 FILTER-AB 和内部的表元素 1、2、3 和 4。参见下面更简单的示例
EDIT 例如,HTML 元素是一个元素列表,这些元素在这里并不重要。过滤器名称由第三行的“getName”方法获取(然后写为 dt 类),元素由第 7 行的“getHtml”方法获取(然后写为内部 Html 元素 dd 类)
我想不出任何方法可以做到这一点,请提供任何帮助或指导!
<?php foreach ($_filters as $_filter): ?>
<?php if($_filter->getItemsCount()): ?>
<dt><?php echo $this->__($_filter->getName()) ?></dt>
(Not important line) <?php if($_searchFilter !== false): ?>
(Not important line) <dt class="attribute_value_search_box<?php if($_searchFilter !== true): ?> enabled<?php endif; ?>"><input type="text" placeholder="<?php echo $this->__('Search for option'); ?>" /></dt>
(Not important line) <?php endif;?>
<dd><?php echo $_filter->getHtml() ?></dd>
<?php endif; ?>
<?php endforeach; ?>
示例(我现在拥有的)
<dt class="even">Brand</dt>
<dd class="even">
<li>
Element 1
</li>
</dd>
<dt class="odd">Brand</dt>
<dd class="odd">
<li>
Element 2
</li>
</dd>
<dt class="even">Type</dt>
<dd class="even">
<li>
Element 3
</li>
</dd>
预期结果
<dt class="even">Brand</dt>
<dd class="even">
<li>
Element 1
</li>
<li>
Element 2
</li>
</dd>
<dt class="odd">Type</dt>
<dd class="odd">
<li>
Element 3
</li>
</dd>
【问题讨论】:
-
我建议你先修复你的数据来做这个服务器端。如果你在 JS 中做客户端,你很可能会在 JS 执行之前得到一个 FOUC,这对你的用户来说真的很刺耳
-
我认为我不能那样做,因为我的过滤器列表取决于用户正在查看的页面上显示的产品集合。
标签: javascript php jquery html magento