26
marca
2010
Gdyby ktoś był zainteresowany składaniem szablonów dla Joomla! za naprawdę godziwe pieniądze to zapraszam do zapoznania się z tą ofertą
09
marca
2010
Dzisiaj szybkie skryptowe rozwiązanie dość często spotykanego problemu zmiany tła w zależności od podstrony, który powinien w jakimś stopniu zniknąć w Joomla! 1.6, gdzie będzie istniała możliwość zmiany ustawień szablonu dla konkretnych podstron (obecnie trzeba tworzyć kopie danego szablonu i przypisywać go do konkretnych podstron).
Do osiągnięcia pożądanych rezultatów musimy zrobić dwie rzeczy: stworzyć w katalogu images/ naszego szablonu katalog backgrounds/ wypełniony grafikami tła, których chcemy użyć oraz dodać poniższy skrypt w sekcji head naszego szablonu (najlepiej na samym jej końcu):
<?php
// tablica powiązań Itemid <-> grafika tła
$bg_images = array(
"53" => "1.jpg",
"54" => "2.jpg",
"default" => "3.jpg" // grafika domyślna
);
$itemID_value = JRequest::getCmd('Itemid');
$bg_image = (isset($bg_images[$itemID_value])) ? $bg_images[$itemID_value] : $bg_images["default"];
$url =& JURI::getInstance();
?>
<style type="text/css">
body{
background:#fff url('<?php echo $url->root(); ?>templates/<?php echo $this->template; ?>/images/backgrounds/<?php echo $bg_image; ?>') center 0!important;
}
</style>
Powyższy skrypt dysponuje tablicą powiązań $bg_images, która definiuje powiązania pomiędzy wartościami zmiennej Itemid z adresu i obrazkiem tła przypisanym do danej wartości Itemid. Skrypt wczytuje wartość Itemid z adresu i na tej podstawie określa czy do danej wartości został przypisany jakiś szczególny typ tła, w przeciwnym wypadku zostanie zastosowana grafika domyślna.
Za ustawienie tła odpowiada osadzony styl CSS, w którym można oczywiście pozmieniać parametry pozycjonowania tła, koloru tła i jego powielania ;)
Oczywiście nic nie stoi na przeszkodzie by określać także inne parametry tła w ten sposób, a nawet dodawać całe style CSS
04
marca
2010
Tworząc szablon dla Joomla! możemy zdefiniować nie tylko wygląd strony i jej podstron, ale także wygląd standardowych komunikatów o błędach czy informacji o pracach konserwacyjnych witryny. W razie potrzeby możemy też zdefiniować kilka własnych szablonów spełniających określone warunki - np. potrzebne do wymiany danych z użyciem AJAX-a. A wszystko to dzięki jednej zmiennej znajdującej się w adresie - tmpl.
Z reguły szablony posiadają w głównym katalogu jedynie plik index.php, czasem plik component.php - są one wykorzystywane do generowania treści strony w zależności od wartości zmiennej tmpl w adresie (domyślna jej wartość to index). W pliku component.php definiujemy wygląd strony zawierającej wyłącznie aktualny komponent. Jeżeli przyjrzymy się zawartości katalogu templates/system/ to zauważymy, że istnieją jeszcze dwa pliki tego typu: error.php oraz offline.php. Pierwszy z nich odpowiada za komunikaty o błędach wyświetlane np. w wypadku wpisania nieistniejącego adresu, a drugi odpowiada za wygląd strony informującej o pracach konserwacyjnych. Oba pliki także możemy nadpisać w katalogu głównym naszego szablonu i w ten sposób uzyskać stylowanie spójne z wyglądem naszego projektu.
Tak naprawdę największe możliwości daje nam możliwość stworzenia własnych szablonów tego typu. Jeżeli ktoś się zastanawiał jak zaimplementować skrypty korzystające z AJAX-a w Joomla! to odpowiedzią jest: odpowiedni komponent + odpowiedni szablon.
Komponent w tym wypadku wygeneruje nam odpowiednie dane (załóżmy, że będą one w formacie XML), a szablon wygeneruje nam zawartość komponentu bez całej zbędnej otoczki jaką stanowi w tym wypadku np. nagłówek dokumentu.
Wystarczy stworzyć w głównym katalogu naszego szablonu plik ajax.php o następującej zawartości:
<?php
$document =& JFactory::getDocument();
$document->setMimeEncoding('application/xml');
defined( '_JEXEC' ) or die( 'Restricted access' );
?>
<jdoc:include type="component" />
Pierwsze dwie linijki powodują zmianę wyjściowego typu MIME dokumentu (jeżeli chcemy otrzymywać dane w formacie JSON to wystarczy zmienić atrybut metody setMimeEncoding), kolejna linijka uniemożliwia zdalne wywoływanie naszego szablonu, a treść naszego szablonu stanowi zawartość komponentu zależna od parametrów zawartych w adresie strony.
Od teraz każde wywołanie strony gdzie w adresie znajdzie się zmienna tmpl o wartości ajax spowoduje wykorzystanie naszego nowego szablonu. Przykładowo adres:
index.php?option=com_ajax&tmpl=ajax
Spowoduje wygenerowanie danych udostępnianych na stronie komponentu com_ajax z użyciem szablonu ajax.php.
Usuwając zmienną tmpl z adresu wyświetlimy zawartość komponentu w tradycyjny sposób.
W ten sposób możemy łatwo tworzyć szablony odgórnie określające format wyjścia danych z komponentu. Można też teoretycznie korzystać ze zmiennej format w adresie, ale wymaga ona zdefiniowania w komponencie odpowiednich widoków odpowiadających danemu formatowi wyjścia, a dzięki prezentowanemu sposobowi robimy wszystko tylko raz zamiast robić to dla każdego komponentu oddzielnie.
Przy okazji warto też wspomnieć, że dla danego szablonu można dosyć w łatwy sposób zmieniać formaty wyjścia - np. w wypadku szablonu ajax.php pożądanymi formatami byłyby JSON i XML - nie ma sensu tworzyć dwóch oddzielnych szablonów - wystarczy zdefiniować dodatkową zmienną np. output i w zależności od jej wartości generować odpowiedni typ MIME dla dokumentu.
Na koniec przykładowy kod takiego szablonu z użyciem klasy JRequest:
<?php
$format = JRequest::getCmd('output') == 'json' ? 'application/json' : 'application/xml';
$document =& JFactory::getDocument();
$document->setMimeEncoding($format);
defined( '_JEXEC' ) or die( 'Restricted access' );
?>
<jdoc:include type="component" />
Oczywiście jak widać w ramach lenistwa - gdy podamy jakąkolwiek wartość zmiennej output (lub jej nie podamy) inną niż json wtedy otrzymamy dane w formacie XML.
Na koniec dodam jeszcze, że warto rozważyć stosowanie wspomnianych szablonów np. do tworzenia mobilnych wersji szablonów czy różnych odmian szablonu odgórnie pozbawionych pewnych pozycji modułów.