TYPO3:如何在自己的扩展中创建下拉菜单
TYPO3: How to create a Dropdown in own Extension
我正在我的扩展程序中创建一个过滤器,我需要从扩展程序中 table 的条目中选择一个下拉菜单(在我的示例中是颜色 table)。我试过这个:
<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>
这里的问题是条目将显示多个。例如:
- 红色
- 绿色
- 蓝色
- 红色
- 蓝色
- 蓝色
等等
但应该是:
- 红色
- 绿色
- 蓝色
有什么想法吗?
谢谢你的帮助!
为什么要手动创建 select 和所有选项? TYPO3 Fluid 有一个 select ViewHelper 可以呈现一个 select-field with all given options?
您应该将所有可用颜色传递给您的视图(例如 $this->view->assign('colors', $this->colorRepository->findAll());
。然后使用 select ViewHelper 中的颜色。
<f:form.select property="yourProperty" options="{colors}" prependOptionValue="*" prependOptionLabel="Alle Farben" />
你可以看到我和 derhansen
的小讨论,问题出在你的 collection。
如果您将传入 collection:红色、蓝色、蓝色、蓝色、黄色、黄色,那么您的循环将显示 collection 中的每个位置。 select viewhelper
也是一样
您应该创建一个单独的 collection 来对颜色进行分组,并且每种颜色只有一个实例。比你可以用你的循环或 viewhelper
例如,您可以使用简单的 GROUP BY
创建一个简单的数据库查询(如果您将此信息存储在数据库中)。其他解决方案是在控制器中迭代
$tmpCollection = array();
foreach($collection as $color) {
if(!in_array($color, $tmpCollection) {
$tmpCollection[] = $color;
}
}
您可以通过 $tmpCollection
进行查看,它只会包含一个颜色实例。当然,这只是伪代码,但您会感觉到解决方案:)
我正在我的扩展程序中创建一个过滤器,我需要从扩展程序中 table 的条目中选择一个下拉菜单(在我的示例中是颜色 table)。我试过这个:
<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>
这里的问题是条目将显示多个。例如:
- 红色
- 绿色
- 蓝色
- 红色
- 蓝色
- 蓝色 等等
但应该是:
- 红色
- 绿色
- 蓝色
有什么想法吗?
谢谢你的帮助!
为什么要手动创建 select 和所有选项? TYPO3 Fluid 有一个 select ViewHelper 可以呈现一个 select-field with all given options?
您应该将所有可用颜色传递给您的视图(例如 $this->view->assign('colors', $this->colorRepository->findAll());
。然后使用 select ViewHelper 中的颜色。
<f:form.select property="yourProperty" options="{colors}" prependOptionValue="*" prependOptionLabel="Alle Farben" />
你可以看到我和 derhansen
的小讨论,问题出在你的 collection。
如果您将传入 collection:红色、蓝色、蓝色、蓝色、黄色、黄色,那么您的循环将显示 collection 中的每个位置。 select viewhelper
也是一样您应该创建一个单独的 collection 来对颜色进行分组,并且每种颜色只有一个实例。比你可以用你的循环或 viewhelper
例如,您可以使用简单的 GROUP BY
创建一个简单的数据库查询(如果您将此信息存储在数据库中)。其他解决方案是在控制器中迭代
$tmpCollection = array();
foreach($collection as $color) {
if(!in_array($color, $tmpCollection) {
$tmpCollection[] = $color;
}
}
您可以通过 $tmpCollection
进行查看,它只会包含一个颜色实例。当然,这只是伪代码,但您会感觉到解决方案:)