Joomla中参数的配置有的是写在Xml当中:
如下:
--------------------------------------------------------------------------------------------------------------------------
<param name="showMerchantNew" type="list" default="5" label="showMerchantNew" description="showMerchantNewCountDes">
<option value="5">five</option>
<option value="10">ten</option>
</param>
--------------------------------------------------------------------------------------------------------------------------
这样的后果就是Joomla直接读取Xml中param参数, type类型是显示的方式!
Joomla自身带有较多的类型,如:list, radio,text,menu 等等
类型文件在libraries/joomla/html/parameter/element 下面
读取文件时根据xml文件中type类型来读取 类型文件!
如type = "list" 那么他读取的就是libraries/joomla/html/parameter/element/list.php 这个文件
因为我要扩展一个类型文件,做到配置参数按自己的数据来显示!
所以拷贝一个动态读取数据的类型文件,如menu.php
修改文件名如:test.php
文件名内的ClassName一样修改,默认是JElement开头(有地方匹配的) 所以ClassName为JElementTest
里面的fetchElement方法不改变,修改fetchElement方法的业务逻辑,调用自己需要的数据就OK了
-----------------------------------------------------------------------------------------------------------------------------------
function fetchElement($name, $value, &$node, $control_name)
{
require_once( JPATH_ADMINISTRATOR.DS.'components'.DS.'com_merchantonline'.DS.'helpers'.DS.'helper.php' );
$merchantCommendTypes = MerchantOnlineHelper::getMerchantCommendType();
foreach ($merchantCommendTypes as $merchantcommendtype) {
$options[] = JHTML::_('select.option
', $merchantcommendtype['i
d'], $merchantcommendtype['rec_name']);
}
//array_unshift($options, JHTML::_('select.option', '', '- '.JText::_('Select Menu').' -'));
return JHTML::_('select.genericlist', $options, ''.$control_name.'['.$name.']', 'class="inputbox"', 'value', 'text', $value, $control_name.$name);
}
-------------------------------------------------------------------------------------------------------------------------------------------
得到$merchantCommendTypes 变量之后将数据放入JHTML::_('select.option', $merchantcommendtype['id'], $merchantcommendtype['rec_name']);当中...
真正要修改的仅仅是获得数据的方式,照旧OK