在Concrete5中动态填充下拉列表

时间:2019-02-19 18:18:50

标签: concrete5

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

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 ....);

2 个答案:

答案 0 :(得分:0)

我已经在Concrete5.org上回答了您,但也许您没有看到答案,所以去了:

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

我认为这是您最好的选择。您既可以使用该功能,也可以对结果进行过滤,以删除零使用的选项。或者,您也可以查看他们用于根据需要进行修改的SQL查询。

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

答案 1 :(得分:0)

谢谢你努尔

我做到了,而且很有效:

$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>");
}