gpt4 book ai didi

zend-framework - Zend_Form_Element_MultiCheckbox : How to display a long list of checkboxes as columns?

转载 作者:行者123 更新时间:2023-12-04 08:27:42 25 4
gpt4 key购买 nike

所以我使用 Zend_Form_Element_MultiCheckbox显示一长串复选框。如果我只是 echo元素,我得到很多由 <br /> 分隔的复选框标签。我想找到一种方法来利用 Zend_Form_Element_MultiCheckbox 的简单性但也显示为多列(即 <div style="float:left"> 中的 10 个复选框)。如果我有一组单个复选框元素,我可以手动完成,但这不是最干净的解决方案:

<?php
if (count($checkboxes) > 5) {
$columns = array_chunk($checkboxes, count($checkboxes) / 2); //two columns
} else {
$columns = array($checkboxes);
}
?>

<div id="checkboxes">
<?php foreach ($columns as $columnOfCheckboxes): ?>

<div style="float:left;">

<?php foreach($columnOfCheckboxes as $checkbox): ?>
<?php echo $checkbox ?> <?php echo $checkbox->getLabel() ?><br />
<?php endforeach; ?>

</div>

<?php endforeach; ?>
</div>

我怎样才能做同样的事情并且仍然使用 Zend_Form_Element_MultiCheckbox ?

最佳答案

最好的方法是使用 View 助手。这是我很快想到的你可以做的事情。您可以在您的 View 脚本中使用它,将它附加到 Zend_Form_Element。

我将假设您知道如何使用自定义 View 助手以及如何将它们添加到表单元素中。

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;
}
}

如果您需要进一步的解释,请告诉我。我很快就做到了。

编辑

我将它命名为相同并放置在不同目录中的原因只是为了覆盖 Zend 的 View 助手。通过将其命名为相同并添加我的辅助路径:
$view->addHelperPath('My/View/Helper',  'My_View_Helper');

我的自定义 View 助手优先于 Zend 的助手。这样做允许我在不更改任何使用 Zend 助手的表单、元素或 View 的情况下进行测试。基本上,这就是您将 Zend 的 View 助手之一替换为您自己的 View 助手的方法。

我提到添加自定义 View 助手和添加到表单元素的注释的唯一原因是因为我认为您可能会重命名助手以更好地满足您的需求。

关于zend-framework - Zend_Form_Element_MultiCheckbox : How to display a long list of checkboxes as columns?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6944753/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com