Chunk:Coding a custom parameter type
From Joomla! Documentation
The easiest way to write the code for a new parameter type is to take the code for an existing parameter type that is similar to what you want to create and adapt it to suit your requirements. The base JElement class contains most of what you need and for most parameter types you will only need to override the fetchElement method in your extension class.
The fetchElement method returns the HTML code required to render the field that will be used to enter a value for the parameter. It takes four arguments:
fetchElement( $name, $value, &$node, $control_name )
where:
| $name | is the unique name of the parameter, from the name argument. |
| $value | is the current value of the parameter. |
| $node | is a JSimpleXMLElement object representing the <param> element. |
| $control_name | is the parameter type from the type argument (eg. 'category' or 'newparm') |
To obtain the value of an argument in the <param> element you use the attribute method of the JSimpleXMLElement object passed in $node. For example, to obtain the value of the class argument you could use code like this
$class = $node->attributes( 'class' );
For example, here is the fetchElement method for a simple version of the text parameter type (the actual version is more sophisticated):
function fetchElement( $name, $value, &$node, $control_name )
{
$class = $node->attributes( 'class' ) ? $node->attributes( 'class' ) : "text_area";
$return = '<input type="text"' .
'name="' . $control_name . '[' . $name . ']"' .
'id="' . $control_name . '[' . $name . ']"' .
'value="' . $value . '"' .
'class="' . $class . '" />';
return $return;
}
Notice that the parameter field must have an id attribute, with the value shown in this example, so that the <label> HTML element produced by the default fetchTooltip method will match with it correctly.
The only other method from JElement that you might conceivably want to override is the fetchTooltip method. This method returns the HTML code required to render a tooltip for the field. In most cases the default code will be entirely suitable and you will not need to override this method. It takes five arguments:
fetchTooltip( $label, $description, &$node, $control_name=,$name= )
where:
| $label | is the string given in the label argument of the <param> definition. It should be passed through the language translation system before being used. |
| $description | is the string given in the description argument of the <param> definition. It should be passed through the language translation system before being used. |
| $node | is a JSimpleXMLElement object representing the <param> element. |
| $control_name | is the parameter type from the type argument (eg. 'category' or 'newparm'). |
| $name | is the unique name of the parameter, from the name argument. |
To pass a string through the language translation system you just need to use the JText static class like this
$output = JText::_( 'string to be translated' );