Отображение повторяющихся значений параметров в выборе с Cakephp - PullRequest
2 голосов
/ 12 августа 2010

Используя помощник по формам в Cakephp 1.3, я пытаюсь отобразить список (раскрывающийся список), который содержит несколько дубликатов полей значений (в теге <option>, конечно), но торт, похоже, не хочет,и выводит только первое вхождение каждого значения.

Например, вот массив 'options' для $ form-> input:

array(
    0 => 'description 0',
    0 => 'description 1',
    0 => 'description 2',
    1 => 'description 3'
);

Который будет выводить что-то вроде:

<select>
    <option value="0">description 0</option>
    <option value="1">description 3</option>
</select>

И я ищу этот результат:

<select>
    <option value="0">description 0</option>
    <option value="0">description 1</option>
    <option value="0">description 2</option>
    <option value="1">description 3</option>
</select>

Ура,Николя.

Ответы [ 2 ]

1 голос
/ 25 января 2013

Конечно, вы не можете использовать один и тот же ключ дважды в массиве в PHP.

Но, как указано в этой статье торт знает, как сделать несколько ключей с одинаковым значением в 2.x:

$options = array(
    ...
    array('name' => 'United states', 'value' => 'USA'),
    array('name' => 'USA', 'value' => 'USA'),
 );

 $html = $this->Form->select('field', $options);

в результате

<option value="USA">United states</option>
<option value="USA">USA</option>

Как видите, теперь вы получили свою ценность здесь дважды (или, конечно, больше).

См. Документацию самого класса помощника по форме (cake2.x). Не уверен, что 1.3 уже поддерживает его.

Если вы обновитесь, вы сможете использовать всю новейшую магию торта.

0 голосов
/ 12 августа 2010

Так как опасался, что проблема была глубже, чем я думал, она была вызвана PHP, который (очевидно) не позволяет дублировать ключи.

Итак, вот мое решение (если кто-то заинтересован):

  1. Создание нового помощника , расширяющего FormHelper
  2. Скопируйте исходную функцию __selectOptions() из помощника формы в новый помощник
  3. Просто измените эту строку:foreach ($elements as $name => $title) { по: foreach ($elements as $title => $name) {
  4. Готово!

Это не лучшее решение, так как если вы хотите обновить свой cakephp до последней версии после этого, вы должныСкопируйте / вставьте функцию снова и сделайте тот же трюк.

Как его использовать:

  1. Объявите ваш массив options наоборот: array('description' => 'key);
  2. По вашему мнению, вместо того, чтобы делать $form->inputПросто сделайте $yourhelper->input

Николя.

...