在Concrete5中动态填充下拉列表

问题描述 投票:0回答:2

我有一个属性为“region”的页面列表,如:

Page1 region = Montreal
Page2 region = Montreal
Page3 region = Quebec
Page4 region = Quebec
Page5 region = Charlevoix

我想动态填充下拉列表,只有我有一个页面的区域:

<select>
<option value="1">Montreal</option>
<option value="2">Quebec</option>
<option value="3">Charlevoix</option>
</select>

我这样做,但我在构建查询时遇到问题:

$db = Loader::db();
$ak_locations = CollectionAttributeKey::getByHandle('region');
$r = $db->Execute("SELECT DISTINCT ....);
concrete5
2个回答
0
投票

我已经在concrete5.org上回答了你,但也许你没有看到答案所以这里是:

如果你在第541行附近查看select属性的控制器(concrete / attributes / select / controller.php),你会看到一个函数getOptionUsageArray()

我认为这是你最好的选择。您可以使用该功能并过滤结果以删除零使用的选项。或者,您可以查看他们正在使用的SQL查询,以使其适应您的需要。

您可以修改它的一种方法是确保它不会返回任何零使用结果,因此您不必在之后对其进行过滤。


0
投票

谢谢Nour,

我做了这个,它的工作:

$reg = CollectionAttributeKey::getByHandle('Region');
$options = $reg->getController()->getOptionUsageArray();
if (!empty($options)) {
    print("<Select>");
    foreach($options as $option) {
         printf("<option value=\"%s\">%s</option>", $option->getSelectAttributeOptionDisplayValue(), $option->getSelectAttributeOptionDisplayValue());
    }
    print("</Select>");
}
© www.soinside.com 2019 - 2024. All rights reserved.