执行此操作的最佳位置是使用视图助手。这是我很快想到的你可以做的事情。您可以在视图脚本中使用它,将其附加到 Zend_Form_Element。
我假设您知道如何使用自定义视图助手以及如何将它们添加到表单元素中。
class My_View_Helper_FormMultiCheckbox extends Zend_View_Helper_FormMultiCheckbox
{
public function formMultiCheckbox($name, $value = null, $attribs = null,
$options = null, $listsep = "<br />\n")
{
// zend_form_element attrib has higher precedence
if (isset($attribs['listsep'])) {
$listsep = $attribs['listsep'];
}
// Store original separator for later if changed
$origSep = $listsep;
// Don't allow whitespace as a seperator
$listsep = trim($listsep);
// Force a separator if empty
if (empty($listsep)) {
$listsep = $attribs['listsep'] = "<br />\n";
}
$string = $this->formRadio($name, $value, $attribs, $options, $listsep);
$checkboxes = explode($listsep, $string);
$html = '';
// Your code
if (count($checkboxes) > 5) {
$columns = array_chunk($checkboxes, count($checkboxes) / 2); //two columns
} else {
$columns = array($checkboxes);
}
foreach ($columns as $columnOfCheckboxes) {
$html .= '<div style="float:left;">';
$html .= implode($origSep, $columnOfCheckboxes);
$html .= '</div>';
}
return $html;
}
}
如果您需要进一步的解释,请告诉我。我很快就做到了。
EDIT
我将其命名为相同并放置在不同的目录中的原因只是为了覆盖 Zend 的视图助手。通过将其命名为相同并添加我的辅助路径:
$view->addHelperPath('My/View/Helper', 'My_View_Helper');
我的自定义视图助手的优先级高于 Zend 的助手。这样做使我能够在不更改使用 Zend 助手的任何表单、元素或视图的情况下进行测试。基本上,这就是用您自己的视图助手替换 Zend 的视图助手之一的方法。
我提到有关添加自定义视图助手和添加到表单元素的注释的唯一原因是因为我假设您可能会重命名助手以更好地满足您的需求。