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.