Можно расширить типы параметров, что Joomla может поддерживать за рамки стандартных типов, доступных в установки по умолчанию. Чтобы понять, как это сделать, сначала рассмотрим, как стандартные типы реализуются.
Расположение стандартный код типы параметров
Код для стандартных типов параметров можно найти в каталоге
[path-to-Joomla]/libraries/joomla/html/parameter/element/
Каждый параметр типа определен в отдельном файле, который должен иметь то же имя в качестве параметра типа. Например, категории типа кодируется в
[path-to-Joomla]/libraries/joomla/html/parameter/element/category.php
Этот файл содержит один класс, называемый JElementCategory которая простирается JElement. Именования файлов и классов, используемых здесь это не просто конвенции. Файл должен иметь то же имя, тип параметра и он должен содержать класс, называемый JElement [element-name] в противном случае Joomla Рамочной не будет в состоянии признать и поддержать параметр типа.
Начиная новый пользовательский тип параметра
Чтобы создать пользовательский тип параметра, который в первую очередь необходимо выбрать для него имя. Предположим, вы хотите назвать это newparm. Тогда вы будете создавать новый файл с именем newparm.php содержащий один класс, называемый JElementNewparm которая простирается JElement.
Код для нового параметра могут существовать практически в любом месте, но он всегда должен быть помещен в подкаталог по своей инициативе или с кодом для других пользовательских типов параметров.
Новый параметр типа, скорее всего, связано с определенным расширением, и в этом случае вам нужно будет расслоение код для параметра типа с кодом для расширения.
Где вы поместите этот файл несколько гибкая и зависит до некоторой степени от типа расширения, которое вы разрабатываете. Для шаблонов рекомендуется поместить его здесь
path-to-Joomla]/templates/[template-name]/elements/newparm.php
TChanges в файл XML для пользовательских типов параметров
Вам необходимо сделать два конкретных поправок в файл конфигурации XML. Во-первых, необходимо убедиться, что файл включен в список :
<files> ........ <filename>elements/index.html</filename> <filename>elements/newparm.php</filename> ........ </files>
Совет: Хорошей практикой является также включать пустой файл index.html в каталоге элементы, как дополнительные меры предосторожности, безопасности, чтобы предотвратить списки каталогов возвращаются на веб-сервере.
Кроме того, можно просто включить весь каталог элементов, используя элемента:
<files> ........ <folder>elements</folder> ........ </files>
Вторая поправка, что вам нужно сделать, чтобы файл конфигурации XML является пусть Joomla Рамочной знаю, что вы добавили новый параметр типа и где найти код для его поддержки. Для этого вам добавить addpath аргумент теги:
<params addpath=”[path]/elements”> ...... list of <param> elements ...... </params>
Обратите внимание, что вы добавляете путь к директории, содержащей код параметра типа, а не код самого файла. Отметим также, что у вас только один аргумент addpath так что если вы добавляете несколько типов параметров необходимо собрать их в тот же подкаталог, и что суб-каталог должен содержать только код параметра определения типа.
Например, это будет типичный элемент в templeDetails.xml файл:
<params addpath=”[path-Joomla]/templates/mytemplate/elements”> <param type=”newparm” name=”setting1” default=”12” /> <param type=”text” name=”setting2” value=”Some text” /> </params>
Кодирование пользовательский тип параметра
Самый простой способ, чтобы написать код для нового типа параметра взять код для существующего типа параметра, который похож на то, что вы хотите создать и адаптировать его в соответствии с вашими требованиями. Базовый класс JElement содержит почти все, что вам нужно, и для большинства типов параметров вам нужно будет только для переопределения fetchElement метод в класс расширений.
FetchElement метод возвращает код HTML, необходимые для визуализации поля, которые будут использоваться для ввода значения параметра. Он принимает четыре аргумента:
fetchElement( $name, $value, &$node, $control_name )
где:
$name уникальное имя параметра, от имени аргумента.
$value текущее значение параметра.
$node JSimpleXMLElement объект, представляющий элемента.
$control_name является параметром типа от типа аргумента ("категории" например, или "newparm)
Чтобы получить значение аргумента в элемент вы используете атрибут метод объекта JSimpleXMLElement прошло в $ node. Например, чтобы получить значение класса аргумент можно использовать такой код
$class = $node->attributes( 'class' );
Например, вот fetchElement метод простой вариант параметра типа текста (текущая версия является более сложным):
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; }
Обратите внимание, что поля параметра должны иметь атрибут со значением показано в этом примере, так что элемент
fetchTooltip( $label, $description, &$node, $control_name=,$name= )
где:
| $label | является строка, заданная на этикетке аргумент определение. Он должен быть пропущен через систему перевода языка перед использованием. |
| $description | это строка в описании аргумента определение. Он должен быть пропущен через систему перевода языка перед использованием. |
| $node | является объектом JSimpleXMLElement представляющих элемента. |
| $control_name | является параметром типа от типа аргумента ("категории" например, или "newparm '). |
| $name | это уникальное имя параметра, от названия аргумента. |
Чтобы передать строку с помощью системы перевода вам просто необходимо использовать JText статического класса, как это
$output = JText::_( 'string to be translated' );
