使用数字字段控制选择选项-Silverstripe

使用数字字段控制选择选项-Silverstripe,silverstripe,Silverstripe,“数量”是后端中的一个简单数字字段 在前端网站上的一个表单中,我显示了一个下拉菜单“Quantity”,其中最多显示10项(如果没有提供数量,则默认为10项) 因此,例如,如果输入5,则选择菜单应仅显示选项1-5 这是可行的,但写这篇文章的更好方法是什么: <% if Quantity %> <% if Quantity == 1 %> <option value="1">1</option> <% end_if %>

“数量”是后端中的一个简单数字字段

在前端网站上的一个表单中,我显示了一个下拉菜单“Quantity”,其中最多显示10项(如果没有提供数量,则默认为10项)

因此,例如,如果输入5,则选择菜单应仅显示选项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.
1.
2.
1.
2.
3.
1.
2.
3.
4.
1.
2.
3.
4.
5.
1.
2.
3.
4.
5.
6.
1.
2.
3.
4.
5.
6.
7.
1.
2.
3.
4.
5.
6.
7.
8.
1.
2.
3.
4.
5.
6.
7.
8.
9
9 %>
1.
2.
3.
4.
5.
6.
7.
8.
9
10
1.
2.
3.
4.
5.
6.
7.
8.
9
10
方法1(最佳)

假设您已经为此创建了一个表单对象。您可以在表单对象中创建一个方法来填充dropdownfield

MyForm.php

public function setQuantity($quantity)
{
    $range = ArrayLib::valuekey(range(1, $quantity));

    $this->Fields()->dataFieldByName('QuantityDropdownField') // your dropdownfield
        ->setSource($range);

    return $this;
}
public function getQuantityArrayList()
{
    $array = [];

    for ($i = 1; $i <= $this->Quantity; $i++) {
        $array[] = ArrayData::create([
            'Value' => $i
        ]);
    }

    return ArrayList::create($array);
}
方法2(好)

如果您不想为此创建Silverstripe表单。你可以这样做

Page.php

public function setQuantity($quantity)
{
    $range = ArrayLib::valuekey(range(1, $quantity));

    $this->Fields()->dataFieldByName('QuantityDropdownField') // your dropdownfield
        ->setSource($range);

    return $this;
}
public function getQuantityArrayList()
{
    $array = [];

    for ($i = 1; $i <= $this->Quantity; $i++) {
        $array[] = ArrayData::create([
            'Value' => $i
        ]);
    }

    return ArrayList::create($array);
}
公共函数getQuantityArrayList()
{
$array=[];
对于($i=1;$i数量;$i++){
$array[]=ArrayData::create([
“值”=>$i
]);
}
返回ArrayList::create($array);
}
Page.ss

<% loop $QuantityArrayList %>
    <option value="$Value">$Value</option>
<% end_loop %>
<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 %>

美元价值
方法3(坏)

不管出于什么原因,如果你不喜欢,你也可以这样做

Page.ss

<% loop $QuantityArrayList %>
    <option value="$Value">$Value</option>
<% end_loop %>
<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 %>
1
2.
3.
4.
5.
6.
7.
8.
9
9 %>
10
所有这些都比您现在拥有的要好。
我没有测试过这些,但你可能已经知道了