--=REKLAMA=--

Plik templateDetails.xml/Tworzenie własnych typów parametrów XML

Z Joomla!WikiPL

Wersja Zwiastun (dyskusja | edycje) z dnia 15:44, 10 gru 2013

(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)

Tworzenie własnych typów parametrów XML dla Joomla! Joomla w wersji 1.5.x

Listę standardowych typów parametrów obsługiwanych przez Joomla! można poszerzać o własne typy. Aby zrozumieć, jak to zrobić, przyjrzyjmy się najpierw implementacji standardowych parametrów.

Lokalizacja kodu standardowych typów parametrów

Kod standardowych typów parametrów można znaleźć w katalogu [sciezka-do-Joomla]/libraries/joomla/html/parameter/element/

Każdy typ parametru definiowany jest w odrębnym pliku, ktory musi nosić taką samą nazwę, jak typ parametru. Na przykład kod typu category znajduje się w pliku

[sciezka-do-Joomla]/libraries/joomla/html/parameter/element/category.php

Plik ten zawiera pojedynczą klasę nazwaną JElementCategory, która jest rozszerzeniem klasy JElement. Nazwy plików i klas również muszą być zgodne z konwencją nazewniczą Joomla. Plik musi nazywać się tak samo, jak typ parametru, musi zawierać klasę nazwaną JElement[nazwa-elementu], bo w framework Joomla nie potrafi rozpoznać, przetworzyć i obsłużyć parametru.


Rozpoczynamy tworzenie własnego typu parametru

Aby stworzyć własny typ parametru, musimy najpierw wybrać jego nazwę. Przyjmijmy, że będzie się nazywać nowyparam. W ulubionym edytorze tworzymy nowy plik nazwany nowyparam.php, zawierający jedną klasę, nazwaną JElementNowyparm, która jest rozszerzeniem klasy JElement.

Kod nowego parametru można umieścić gdziekolwiek, ale zwyczajowo powinien być umieszczony w swoim własnym podkatalogu albo w tym samym, w którym umieszczono kod innych standardowych parametrów.

Nowy typ parametru będzie najprawdopodobniej związany z konkretnym rozszerzeniem, więc najpewniej właściwe będzie umieszczenie kodu parametru w pakiecie instalacyjnym tego rozszerzenia.

W lokacji pliku mamy dużą swobodę, zależy ona w pewnej mierze od projektowanego rozszerzenia. W przypadku szablonów zalecane jest umieszczenie ich w katalogu

sciezka-do-Joomla]/templates/[nazwa-szablonu]/elements/newparm.php


Zmiana w pliku XML związana z własnym typem parametru

W pliku konfiguracyjnym XML konieczne są dwie poprawki. Po pierwsze, upewnij się, że plik zawiera sekcję z listą plików - <files>:

<files>
    ........
    <filename>elements/index.html</filename>
    <filename>elements/newparm.php</filename>
    ........
</files>

Porada: To dobra praktyka, by w katalogach Joomla! umieszczać pusty plik index.html, który stanowi dodatkową ochronę przed podglądem zawartości katalogu w przypadku błędów serwera.

Alternatywnie, możesz po prostu włączyć cały katalog elements używając znacznika <folders>:

<files>
    ........
    <folder>elements</folder>
    ........
</files>

Drugą konieczną poprawką jest powiadomienie frameworka Joomla!, że został dodany nowy typ parametru oraz ścieżce do kodu tego parametru. Aby to uczynić, dodajemy argument addpath do znacznika <params>:

<params addpath=”[path]/elements”>
   ...... list of <param> elements ......
</params>

Zwróć uwagę, że dodajemy ścieżkę do katalogu zawierajacego kod parametru, a nie do pliku z kodem.

Zwróć również uwagę, że masz jeden argument addpath , tak więc, jeśli dodajesz wiele własnych parametrów, musisz umieścić je w jednym tym samym podkatalogu i ten subkatalog musi zawierać tylko kod definicji typu parametru.

Przykład zastosowania nowego elementu w znaczniku <params>, w pliku 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>

Kodowanie własnego typu parametru

Najprostszym sposobem napisania kodu nowego parametru jest skopiowanie kodu istniejącego podobnego typu parametru i dostosować go do własnych potrzeb. Podstawowa klasa JElement zawiera prawie wszystko, co potrzebne, więc w przypadku większości nowych własnych typów parametrów wystarczy zastosowanie metody fetchElement, by rozszerzyć klasę JElement.

Metoda fetchElement zwraca kod HTML wymagany, by przetworzyć pole, które zostanie zastosowane do ustawienia wartości parametru. Wymaga czterech argumentów:

fetchElement( $name, $value, &$node, $control_name )

gdzie:

$name jest unikalną nazwą parametru, z argumentu name.
$value jest bieżącą wartością parametru.
$node jest obiektem JSimpleXMLElement reprezentujacym element <param>.
$control_name jest typem parametru z argumentu type (np. 'category' albo 'nowyparm')

Aby otrzymać wartość argumentu w elemencie <param>, używamy metody attribute z obiektu JSimpleXMLElement passed in $node. Na przykład, aby otrzymać wartość argumentu class, możesz użyć kodu jak poniżej:

$class = $node->attributes( 'class' );

Przykładowo, poniżej zastosowano metodę fetchElement w prostej wersji parametru typu text (faktyczna wersja jest bardziej wyszukana - skomplikowana):

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;
}
Ikona informacja.png
 Informacja

 Zauważ, że pole parametru musi mieć cechę id, z wartością pokazaną w tym przykładzie, więc, że < etykieta > element HTML dał plony przez domyślną metodę fetchTooltip będą pasowali z tym poprawnie.


Jedyną inną metodą klasy JElement, którą można chcieć nadpisać, jest metoda fetchTooltip. Metoda ta zwraca kod HTML potrzebny, by dodać do pola dymek (poradę, objaśnienie). W większości przypadków odpowiedni będzie standardowy kod i nie będziesz potrzebował nadpisywać (zmieniać?, modyfikować) tej metody. Wymaga ona pięciu argumentów.

fetchTooltip( $label, $description, &$node, $control_name=,$name= )

gdzie:

$label jest napisem otrzymywanym z argumentu label w definicji <param>. Napis należy przed użyciem poddać tłumaczeniu
$description jest napisem otrzymywanym z argumentu description w definicji <param>. Napis należy przed użyciem poddać tłumaczeniu ( It should be passed through the language translation system before being used).
$node jest obiektem JSimpleXMLElement reprezentujacym element <param>.
$control_name jest typem parametru z argumentu type (np. 'category' albo 'nowyparm').
$name jest unikalną nazwą parametru, z argumentu name.

Aby przekazać napis do systemu tłumaczenia (Aby poddać napis systemowi tłumaczenia), musimy użyć statycznej klasy 'JText, jak poniżej:

$output = JText::_( 'ten napis będzie tłumaczony' );
© Tłumaczenie: zwiastun. Tłumaczenie wykonano na warunkach licencji JEDL.


Zobacz także

Lista wszystkich typów parametrów dla Joomla! 1.5

calendar  : category : editors  : filelist  : folderlist  : helpsites  : hidden  : imagelist  : languages  : list  : menu  : menuitem  : password  : radio  : section  : spacer  : sql  : text  : textarea  : timezones  : usergroup

Lista wszystkich typów pól formularzy dla Joomla! 1.7

accesslevel  : cachehandler  : calendar  : category  : checkbox  : checkboxes  : combo  : componentlayout  : contentlanguage  : editor  : editors  : file  : filelist  : folderlist  : groupedlist  : helpsite  : hidden  : imagelist  : integer  : language  : list  : media  : menu  : menuitem  : modulelayout  : password  : radio  : rules  : sessionhandler  : spacer  : sql  : templatestyle  : text  : textarea  : timezone  : user  : usergroup



Dziękujemy za wkład

» Stefan Wajda [zwiastun],