我正在尝试将额外的HTML属性添加到Joomla 2.5的下拉列表中的某些选项中,并希望使用内置的HTML帮助程序,而不是自己编写HTML。目前的输出是:
<select>
<option value="Red">Red</option>
</select>
但我希望它像:
<select>
<option value="Red" data-img="red.jpg">Red</option>
</select>
这样当我选择的选项发生变化时,我可以使用Javascript访问data-img属性。
我正在创建像这样的选择选项:
$select = JHtml::_('select.option', "Red", "Red");
然后将它们传递给JHTML以创建通用列表HTML:
$html = JHTML::_('select.genericlist', ...);
我查看了文档并尝试将各种不同的参数传递给函数,但是就函数使用的所有选项(option.attr
,attr
等)而言,它非常混乱,并且谷歌也没有发现任何事情。
有谁能告诉我需要传递给函数的额外参数才能正确地将额外属性添加到<option>
元素中?
提前致谢!
答案 0 :(得分:4)
我今天在这个确切的场景中苦苦挣扎,需要使用select的选项添加一些额外的数据。在对joomla / libraries / joomla / html / html / select.php文件进行彻底分析之后,我成功地做了一些不好的事情......
首先,就我而言,用于select的数据来自数据库,需要为这种情况做一些准备:
$db =& JFactory::getDBO();
$sql = 'SELECT nom AS value , nom AS text, prix FROM #__reservation_nourritures order by `ordering` asc';
$db->setQuery($sql);
$nourritures = $db->loadObjectList();
foreach ($nourritures as $nourriture){
//the data to use MUST be in an array form for the extra html attributes...
$nourriture->data = array('data'=>$nourriture->prix);
}
数据准备好后,您可以将其传递给JHTML函数以构建select:
echo JHTML::_('select.genericlist',$nourriture,'myId',array('class'=>'nourritures','option.attr'=>'data'));
简而言之,必须使用'option.attr'将属性插入选项中。注意:select.genericlist函数必须只有3个参数可供使用。根据我对该函数的理解,如果将3个参数传递给函数,则属性只会合并到选项中,否则它只会忽略它。因此,如果您想要使用其他参数定义预选选项,那么您就不幸了。以下是函数中关于此的部分:
if (is_array($attribs) && func_num_args() == 3)
{
// Assume we have an options array
$options = array_merge($options, $attribs);
}
据我了解,这是一个错误和/或一个不好的行为。我有空的时候会在joomla跟踪器中填写一个bugg。
答案 1 :(得分:0)
您可以这样做
$option = JHtml::_('select.option', "Red", "Red", array('option.attr' => 'optionattr', 'attr' => array('data-img' => "red.jpg")));
或类似的
$option = JHtml::_('select.option', "Red", "Red");
$option->optionattr = array(
'data-img' => "red.jpg"
);