Zend Framework addMultiOption добавление пользовательских параметров, таких как "rel" для параметров

Я использую Zend, и у нас есть форма, которая соединена через ряд функций. Один, в частности, addMultiOption, который извлекается из БД (откуда я не знаю, потому что, если бы я мог изменить запрос, это было бы намного проще и лучше во всех отношениях. В любом случае, было сказано, что мне нужно добавить "rel"). Атрибут для каждой опции / опции, чтобы я мог предварительно выполнить задачу для опции через jquery, когда эта опция выбрана, не все опции, а некоторые, опции, которые не имеют дополнительной функциональности, будут иметь значение 0, где, как у тех, что с действиями будет иметь значение "один", это исходит от БД, поэтому я пытаюсь выяснить, как я могу добавить дополнительные атрибуты за пределами значения

Zend Framework поддерживает это, если нет, то как мне этого добиться? Я нашел то, что я думал, было хорошим сообщением здесь ранее об этом, но оказалось, что это просто не работает для меня

1 ответ

Используя addMultiOption($value,$label), я просто устанавливаю для параметра value что-то вроде:

$value = $id . '" ref="' . $ref;

и когда он рендерит, вы получите:

<option value="<idValue>" ref="<refValue"><labelValue></option>

Надеюсь это поможет....

Хорошо, значение экранируется, но optionClasses не так внутри цикла, который добавляет addMultiOptions(val,lable). Я делаю что-то вроде этого:

$optionClasses[<val>] = 'ref_' . <val> . '" ref="' . <ref>;

а затем после цикла просто сделайте setAttrib('optionClasses',$optionClasses)

И это на самом деле работает...

Итак, вот пример, где я определю массив, который может быть набором записей из запроса базы данных с тремя частями, которые мы собираемся использовать; идентификатор, код и смещение

$records = array( array('id' => 1, 'code' => 'Code 1', 'offset' => 4),
                  array('id' => 2, 'code' => 'Code 2', 'offset' => 5),
                  array('id' => 3, 'code' => 'Code 3', 'offset' => 6)
           );

и я буду использовать это в определении элемента формы (в классе, который расширяет Zend_Form) для выбора, где у параметров есть атрибут с именем 'offset', который будет иметь значение 'offset' из массива

$e = $this->createElement('select', 'code_id');
$e->setLabel('Event Type:')
    ->setAttrib('size', 1);
$optionClasses = array();
foreach ($records as $record) {
    $optionClass = 'xcode_' . $record['id'] . '" xoffset="' . $record['offset'];
    $optionClasses[$record['id']] = $optionClass;
    $e->addMultiOption($record['id'],$record['code']);
}
$e->setAttrib('optionClasses', $optionClasses);
$this->addElement($e);

и когда это визуализируется, он производит элемент выбора, как

<select name="code_id" id="code_id">
    <option value="1" class="xcode_1" xoffset="4" selected="selected">Code 1</option>
    <option value="2" class="xcode_2" xoffset="5">Code 2</option>
    <option value="3" class="xcode_3" xoffset="6">Code 3</option>
</select>

а затем вы можете добраться до смещения выбранной опции с помощью jQuery, используя

 var xoffset = $("#code_id").find("option:selected").attr("xoffset");

это работает, потому что результирующий атрибут класса optionClasses не экранируется методом рендеринга, как атрибут value.

Другие вопросы по тегам