TYPO3:如何在自己的扩展中创建下拉列表

时间:2015-03-13 06:28:52

标签: typo3 typoscript

我在我的扩展程序中创建了一个过滤器,我需要从扩展中的表条目下拉(在我的示例中为colors表)。我试过这个:

<select class="option-set clearfix form-control" data-filter-group="farben">
        <option value="*" data-filter-value="" class="selected">Alle Farben</option>
        <f:for each="{steines}" as="steine">
            <option value="#filter-farben-{steine.farbe.name}" data-filter-value=".{steine.farbe.name}">{steine.farbe.name}</option>
        </f:for>
    </select>

问题在于,条目将显示多个。例如:

  • 红色
  • 绿色
  • 红色
  • 蓝 等

但它应该是:

  • 红色
  • 绿色

有什么想法吗?

谢谢你的帮助!

2 个答案:

答案 0 :(得分:1)

为什么要手动创建选择和所有选项? TYPO3 Fluid有一个select ViewHelper,它会使用所有给定选项呈现一个选择字段吗?

您应该将所有可用的颜色传递给您的视图(例如$this->view->assign('colors', $this->colorRepository->findAll());。然后使用选择ViewHelper中的颜色。

<f:form.select property="yourProperty" options="{colors}" prependOptionValue="*" prependOptionLabel="Alle Farben" />

答案 1 :(得分:0)

就像你可以看到我和derhansen小讨论一样,问题出在你的收藏中。

如果您将传递集合:红色,蓝色,蓝色,蓝色,黄色,黄色,那么您的循环将显示集合中的每个位置。选择viewhelper

也是如此

你应该创建一个单独的颜色分开的集合,并且每个颜色只有一个实例。你可以使用循环或使用viewhelper

例如,您可以使用简单的GROUP BY创建对数据库的简单查询(如果您将此信息存储在db中)。其他解决方案是在控制器中进行迭代

$tmpCollection = array();
foreach($collection as $color) {
    if(!in_array($color, $tmpCollection) {
        $tmpCollection[] = $color;
    }
}

可以将$tmpCollection传递给查看,它只包含一个颜色实例。当然这只是伪代码,但你会感觉到解决方案:)