gpt4 book ai didi

symfony1 - symfony 1.4 将图像显示为选择小部件中的选项

转载 作者:行者123 更新时间:2023-12-02 19:34:42 26 4
gpt4 key购买 nike

我有一个带有特定选择小部件(DoctrineChoice)的表单。这些选项引用服务器中的某些图像文件,我使用 Expander=true 选项(用于复选框/单选按钮)

有没有办法通过显示每个选项的图像来显示小部件?默认情况下,我只获取数据库中选项的 ID。

使用 firebug,我注意到生成的 HTML 有一个带有每个选择的 id 的标签,而且,我设法用某个图像更改了它,所以我猜我需要做的就是更改每个选择的标签文本。即使如此,小部件的“标签”选项只会更改整个选择的标签,因此这是行不通的...

谢谢!

最佳答案

好吧,经过大量研究,我已经找到了某种解决方案,但也许还有更正确的方法?

我没有使用 sfWidgetFormDoctrineChoice,而是使用了 sfWidgetFormSelectRadio(但 Checkbox 也可以这样做,但我不知道它是否可以与其他小部件一起使用,甚至也可以选择小部件:/只是因为我的业务规则需要它,在这种特殊情况下,SelectRadio 就足够了...)

小部件的选择选项填充了我用来填充之前的 DoctrineChoice 小部件的上一个查询的结果,之前进行了处理,因此每个记录的 Id 是每个选择的键和值:

$imgs = Doctrine_Core::getTable('ProjImages')->getImages();
$choices = array('' => '');
foreach ($imgs as $img):
$choices[$img->getId()] = $img->getId();
endforeach;

接下来,我还将“formatter”选项传递给小部件:

$this->widgetSchema['img'] = new sfWidgetFormSelectRadio(array(
'choices' => $choices,
'formatter' => array($this, 'showAsImages')
));
$this->validatorSchema['img'] = new sfValidatorChoice(array(
'choices' => $choices,
'required' => false
));

我在验证器中使用了“required”=>false 选项,因为我还需要在小部件中选择“无图像”的选项,该选项反射(reflect)在 $choices 数组中作为第一个 ('' => '' )选择。

最后,我编写了格式化程序回调:

public function showAsImages($widget, $inputs)
{
$rows = array();
foreach ($inputs as $input)
{
$domdoc = new DOMDocument();
$domdoc->loadHTML($input['label']);
$node = $domdoc->getElementsByTagName('label')->item(0);
if ($node->nodeValue != "")
{
$img = Doctrine_Core::getTable('ProjImages')->find(array($node->nodeValue));
$input['label'] = '<label '.$node->attributes->item(0)->name .
'="'.$node->attributes->item(0)->value.'">' .
'<img src="'.$img->getImg().'" alt="image" />' .
'</label>';
}
$rows[] = $widget->renderContentTag('li',
$input['input'].
$widget->getOption('label_separator').
$input['label']);
}
return $widget->renderContentTag('ul',
implode($widget->getOption('separator'), $rows),
array('class' => $widget->getOption('class')));
}

我使用了 sfWidgetFormSelectRadio 原始默认格式化程序的源代码,并基于它修改了每个输入元素的“标签”(所有其余代码与我使用的源代码完全相同)。

对于每个输入元素的标签,我使用 DOMDocument 对象来获取值(图像的 id),然后进行数据库查询来获取图像,然后用 < 重新组装“标签” img > tag...当然,如果我碰巧发现空选项,我会使用默认的“标签”...

就是这样...我认为格式化程序回调可以做更多的工作,因此欢迎任何建议,甚至更好的问题解决方案...如您所见,我依赖于“格式化程序”小部件的选项,据我所知,只有某些小部件接受此选项...

感谢您的阅读!

关于symfony1 - symfony 1.4 将图像显示为选择小部件中的选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5095915/

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