使用数字字段控制 select 选项 - Silverstripe
Controlling select options with a numeric field - Silverstripe
'Quantity' 是后端的一个简单数字字段。
在前端网站的表单中,我显示了一个下拉菜单 select 菜单 'Quantity',最多显示十个项目(如果未提供数量,则默认为 10 个项目)
因此,例如,如果输入 5,则 select 菜单应该只显示选项 1 - 5。
这行得通,但是更好的写法是什么:
<% if Quantity %>
<% if Quantity == 1 %>
<option value="1">1</option>
<% end_if %>
<% if Quantity == 2 %>
<option value="1">1</option>
<option value="2">2</option>
<% end_if %>
<% if Quantity == 3 %>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<% end_if %>
<% if Quantity == 4 %>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<% end_if %>
<% if Quantity == 5 %>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<% end_if %>
<% if Quantity == 6 %>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<% end_if %>
<% if Quantity == 7 %>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<% end_if %>
<% if Quantity == 8 %>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<% end_if %>
<% if Quantity == 9 %>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<% end_if %>
<% if Quantity > 9 %>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<% end_if %>
<% else %>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<% end_if %>
方法 1(最佳)
假设您为此创建了一个 Form 对象。您可以在表单对象中创建一个方法来填充下拉字段。
MyForm.php
public function setQuantity($quantity)
{
$range = ArrayLib::valuekey(range(1, $quantity));
$this->Fields()->dataFieldByName('QuantityDropdownField') // your dropdownfield
->setSource($range);
return $this;
}
方法二(好的)
如果您不想为此创建 Silverstripe 表单。你可以这样做。
Page.php
public function getQuantityArrayList()
{
$array = [];
for ($i = 1; $i <= $this->Quantity; $i++) {
$array[] = ArrayData::create([
'Value' => $i
]);
}
return ArrayList::create($array);
}
Page.ss
<% loop $QuantityArrayList %>
<option value="$Value">$Value</option>
<% end_loop %>
方法 3(不好)
如果出于某种原因您不喜欢它,您也可以这样做。
Page.ss
<option value="1">1</option>
<% if not $Quantity || $Quantity == 2 %>
<option value="2">2</option>
<% end_if %>
<% if not $Quantity || $Quantity == 3 %>
<option value="3">3</option>
<% end_if %>
<% if not $Quantity || $Quantity == 4 %>
<option value="4">4</option>
<% end_if %>
<% if not $Quantity || $Quantity == 5 %>
<option value="5">5</option>
<% end_if %>
<% if not $Quantity || $Quantity == 6 %>
<option value="6">6</option>
<% end_if %>
<% if not $Quantity || $Quantity == 7 %>
<option value="7">7</option>
<% end_if %>
<% if not $Quantity || $Quantity == 8 %>
<option value="8">8</option>
<% end_if %>
<% if not $Quantity || $Quantity == 9 %>
<option value="9">9</option>
<% end_if %>
<% if not $Quantity || $Quantity > 9 %>
<option value="10">10</option>
<% end_if %>
这些都比你现在得到的要好。
我还没有测试过这些,但你可能明白了。
'Quantity' 是后端的一个简单数字字段。
在前端网站的表单中,我显示了一个下拉菜单 select 菜单 'Quantity',最多显示十个项目(如果未提供数量,则默认为 10 个项目)
因此,例如,如果输入 5,则 select 菜单应该只显示选项 1 - 5。
这行得通,但是更好的写法是什么:
<% if Quantity %>
<% if Quantity == 1 %>
<option value="1">1</option>
<% end_if %>
<% if Quantity == 2 %>
<option value="1">1</option>
<option value="2">2</option>
<% end_if %>
<% if Quantity == 3 %>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<% end_if %>
<% if Quantity == 4 %>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<% end_if %>
<% if Quantity == 5 %>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<% end_if %>
<% if Quantity == 6 %>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<% end_if %>
<% if Quantity == 7 %>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<% end_if %>
<% if Quantity == 8 %>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<% end_if %>
<% if Quantity == 9 %>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<% end_if %>
<% if Quantity > 9 %>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<% end_if %>
<% else %>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<% end_if %>
方法 1(最佳)
假设您为此创建了一个 Form 对象。您可以在表单对象中创建一个方法来填充下拉字段。
MyForm.php
public function setQuantity($quantity)
{
$range = ArrayLib::valuekey(range(1, $quantity));
$this->Fields()->dataFieldByName('QuantityDropdownField') // your dropdownfield
->setSource($range);
return $this;
}
方法二(好的)
如果您不想为此创建 Silverstripe 表单。你可以这样做。
Page.php
public function getQuantityArrayList()
{
$array = [];
for ($i = 1; $i <= $this->Quantity; $i++) {
$array[] = ArrayData::create([
'Value' => $i
]);
}
return ArrayList::create($array);
}
Page.ss
<% loop $QuantityArrayList %>
<option value="$Value">$Value</option>
<% end_loop %>
方法 3(不好)
如果出于某种原因您不喜欢它,您也可以这样做。
Page.ss
<option value="1">1</option>
<% if not $Quantity || $Quantity == 2 %>
<option value="2">2</option>
<% end_if %>
<% if not $Quantity || $Quantity == 3 %>
<option value="3">3</option>
<% end_if %>
<% if not $Quantity || $Quantity == 4 %>
<option value="4">4</option>
<% end_if %>
<% if not $Quantity || $Quantity == 5 %>
<option value="5">5</option>
<% end_if %>
<% if not $Quantity || $Quantity == 6 %>
<option value="6">6</option>
<% end_if %>
<% if not $Quantity || $Quantity == 7 %>
<option value="7">7</option>
<% end_if %>
<% if not $Quantity || $Quantity == 8 %>
<option value="8">8</option>
<% end_if %>
<% if not $Quantity || $Quantity == 9 %>
<option value="9">9</option>
<% end_if %>
<% if not $Quantity || $Quantity > 9 %>
<option value="10">10</option>
<% end_if %>
这些都比你现在得到的要好。
我还没有测试过这些,但你可能明白了。