Transcript Slajd 1

dr inż. Piotr Czapiewski
Moduły, komponenty, pluginy

Szablony
 Forma prezentacji (układ strony, style, kolorystyka)

Moduły i komponenty
 Dodatkowa funkcjonalność (zaawansowane menu, sondy, fora,
galerie, itp.)
 Moduł – wyświetlanie
 Komponent – zarządzanie zawartością

Pluginy
 Najbardziej zaawansowana forma rozszerzenia Joomla!
 Najniższa warstwa systemu, kontrola podstawowych funkcji

Joomla! Extensions Directory
 http://extensions.joomla.org
 24 kategorie rozszerzeń
+ podkategorie
 Najpopularniejsze
rozszerzenia
 Najlepiej oceniane

Kopie zapasowe i migracja

 JoomlaPack


 JCE, XHTMLSuite in2it,
CrossContent, JoomlaFCK Editor
Zarządzanie użytkownikami
 Community Builder

E-commerce

Galerie zdjęć i filmów
 Expose Flash Gallery
Wspomaganie zarządzania
treścią
 SectionEx
 VirtueMart – ogólny sklep
internetowy
 Rozwiązania dla konkretnych
produktów, np. samochody,
nieruchomości
 Obsługa płatności, subskrypcji,
obsługa koszyka, aukcje…
Edytory
 Mapy stron

Zarządzanie plikami
 joomlaXplorer
 Remository

Zarządzanie projektami, praca
grupowa, kalendarze…
Kopie zapasowe oraz migracja witryny

Narzędzie do tworzenia kopii zapasowych witryn oraz ich
odtwarzania
 http://www.joomlapack.net
 Automatyczny backup w postaci pojedynczego archiwum ZIP
▪ Zawartość bazy danych
▪ Struktura plików
 Technologia AJAX
▪ Zmniejszenie liczby błędów związanych z opóźnieniem w komunikacji
 Możliwość stworzenia instalatora
▪ Instalacja na serwerze, gdzie nie ma jeszcze Joomla!
▪ Kopiowanie na serwer tylko archiwum ZIP i pojedynczego pliku PHP
 Podział zadania na mniejsze etapy ułatwia backup dużych witryn

Zastosowania

Etapy działania
 Kopie zapasowe
 Inicjalizacja
 Klonowanie witryn
 Zrzut bazy danych
 Migracja witryny
 Pakowanie plików
 Stworzenie witryny
wzorcowej
 Lokalne testowanie
nowych wersji
 Lokalne debugowanie
 Finalizacja

Instalacja
 Standardowo: Rozszerzenia->Instalator
 Po zainstalowaniu pojawia się nowe menu:
Komponenty->JoomlaPack

Podstawowe
 Katalogi: wyjściowy i tymczasowy
 Nazwa pliku wyjściowego
 Poziom logowania

Zaawansowane
 Kompatybilność ze starszą wersją MySQL, algorytmy kompresji, itp.
 Zmieniać tylko wówczas, gdy przy parametrach domyślnych backup
się nie powiedzie

Frontend
 Możliwość wywołania backupu automatycznie (np. z użyciem cron, wget)

Numeryczne Parametry Magiczne
 Nazwa mówi wszystko… Ruszać tylko w razie absolutnej konieczności…

Podstawowe
 Katalogi: wyjściowy i tymczasowy
 Nazwa pliku wyjściowego
 Poziom logowania

Zaawansowane
 Kompatybilność ze starszą wersją MySQL, algorytmy kompresji, itp.
 Zmieniać tylko wówczas, gdy przy parametrach domyślnych backup
się nie powiedzie

Frontend
 Możliwość wywołania backupu automatycznie (np. z użyciem cron, wget)

Numeryczne Parametry Magiczne
 Nazwa mówi wszystko… Ruszać tylko w razie absolutnej konieczności…

Podstawowe
 Katalogi: wyjściowy i tymczasowy
 Nazwa pliku wyjściowego
 Poziom logowania

Zaawansowane
 Kompatybilność ze starszą wersją MySQL, algorytmy kompresji, itp.
 Zmieniać tylko wówczas, gdy przy parametrach domyślnych backup
się nie powiedzie

Frontend
 Możliwość wywołania backupu automatycznie (np. z użyciem cron, wget)

Numeryczne Parametry Magiczne
 Nazwa mówi wszystko… Ruszać tylko w razie absolutnej konieczności…

Podstawowe
 Katalogi: wyjściowy i tymczasowy
 Nazwa pliku wyjściowego
 Poziom logowania

Zaawansowane
 Kompatybilność ze starszą wersją MySQL, algorytmy kompresji, itp.
 Zmieniać tylko wówczas, gdy przy parametrach domyślnych backup
się nie powiedzie

Frontend
 Możliwość wywołania backupu automatycznie (np. z użyciem cron, wget)

Numeryczne Parametry Magiczne
 Nazwa mówi wszystko… Ruszać tylko w razie absolutnej konieczności…

Podstawowe
 Katalogi: wyjściowy i tymczasowy
 Nazwa pliku wyjściowego
 Poziom logowania

Zaawansowane
 Kompatybilność ze starszą wersją MySQL, algorytmy kompresji, itp.
 Zmieniać tylko wówczas, gdy przy parametrach domyślnych backup
się nie powiedzie

Frontend
 Możliwość wywołania backupu automatycznie (np. z użyciem cron, wget)

Numeryczne Parametry Magiczne
 Nazwa mówi wszystko… Ruszać tylko w razie absolutnej konieczności…

Wykonanie kopii
 Backup Now / Twórz kopię zapasową

Wykonanie kopii
 Backup Now / Twórz kopię zapasową
 Kopiuj swoją stronę internetową
▪ Pełna kopia witryny, baza danych + pliki
 Kopiuj swoją bazę danych
▪ Kopia samej bazy danych, do zaimportowania np. przez
phpMyAdmin

Postęp procesu…

…gotowe.

Zarządzanie plikami kopii
 Manage Backup Files
 Pobieranie lub usuwanie archiwum z kopią

Zawartość archiwum
 Instalator zbliżony do
instalatora Joomla

Przywracanie kopii zapasowej
 Metoda 1
▪ Rozpakowanie archiwum z kopią
▪ Wgranie na serwer
▪ Uruchomienie instalatora
 Metoda 2
▪ Wgranie na serwer archiwum ZIP oraz pliku kickstart.php
▪ kickstart.php znajduje się w archiwum kickstart_1.2.2.zip,
pobranym wraz z pakietem instalacyjnym JoomlaPack
▪ Uruchomienie pliku kikstart.php
▪ Skrypt rozpakuje archiwum i uruchomi instalator

Przykład
 Zapisano archiwum z kopią witryny:
site-localhost-20081205-154756.zip
 Katalog , w którym ma się znaleźć kopia witryny:
c:\xampplite\htdocs\joomla5
 Do powyższego katalogu kopiujemy pliki:
▪ site-localhost-20081205-154756.zip
▪ kickstart.php
 Uruchamiamy skrypt kickstart.php wchodząc na adres:
▪ http://localhost/joomla5/kickstart.php

Uruchomienie kickstart.php
 Wybór archiwum do zainstalowania

Uruchomienie kickstart.php
 Postęp rozpakowywania

Uruchomienie kickstart.php
 Rozpakowywanie zakończone

Uruchomienie instalatora
 Nie zamykaj okna przeglądarki
 Kliknij na linku

Instalator kopii zapasowej
 Kroki takie same, jak przy instalacji Joomla!

Instalator kopii zapasowej
 Kluczowy moment: konfiguracja bazy danych

Instalator kopii zapasowej
 Ponowne ustawienie hasła administratora Joomla!

Instalator kopii zapasowej
 Porządki…
Moduł sklepu internetowego

Sklep internetowy
 http://virtuemart.net
 Plugin do Joomla!





realizujący pełną funkcjonalność
sklepu internetowego
Zarządzanie kontami użytkowników
(adresy dostawy, historia zakupów,
itd.)
Potwierdzanie zakupów przez e-mail
Bezpieczne połączenie przez SSL
Obsługa płatności i wysyłki
Rozszerzalny za pomocą pluginów

Katalog produktów
 Organizacja produktów w kategorie
 Możliwość użycia jako katalog, bez funkcjonalności sklepu
 Ocena produktów przez użytkowników

Joomla! z preinstalowanym i skonfigurowanym
sklepem VirtueMart
 http://virtuemart.net, Downloads,
VirtueMart eCommerce Bundle (w. Joomla! 1.5.8)

Polska wersja
 Polskie centrum VirtueMart
http://www.virtuemart.pl
 Spolszczenia samego VirtueMart
 Specjalna wersja eCommerce Bundle PL [Jarzębina]

Panel administracyjny polskiej wersji VirtueMart

Nazwa szablonu – bez spacji i znaków specjalnych

Katalogi szablonu
 [joomla]/templates/nazwa_szablonu/
 [joomla]/templates/nazwa_szablonu/CSS/
 [joomla]/templates/nazwa_szablonu/images/

Podstawowe pliki szablonu
 index.php – główny plik szablonu; układ i logika strony
 templateDetails.xml – plik z metadanymi
 template.css – główny arkusz CSS
 template_thumbnail.png – podgląd szablonu

Zawartość pliku templateDetails.xml
 Nazwa szablonu, opis, autor, wersja, data utworzenia
 Informacja dla instalatora – lista plików szablonu
<?xml version="1.0" encoding="windows-1250"?>
<?xml version="1.0" encoding="windows-1250"?>
<!DOCTYPE<!DOCTYPE
installinstall
PUBLIC
"-//Joomla!
1.5//DTD
template
1.0//EN"
PUBLIC
"-//Joomla! 1.5//DTD
template
1.0//EN"
<name>SzablonTestowy</name>
"http://dev.joomla.org/xml/1.5/template-install.dtd">
"http://dev.joomla.org/xml/1.5/template-install.dtd">
<install
version="1.5"
type="template">
<creationDate>04
June
2008</creationDate>
<install
version="1.5"
type="template">
<name>SzablonTestowy</name>
<author>Jan
Kowalski</author>
<creationDate>04
June 2008</creationDate>
<author>Jan
Kowalski</author>
<authorEmail>[email protected]</authorEmail>
<authorEmail>[email protected]</authorEmail>
<authorUrl>www.kowal.pl</authorUrl>
<authorUrl>www.kowal.pl</authorUrl>
<copyright></copyright>
<copyright></copyright>
<license>GNU/GPL</license>
<license>GNU/GPL</license>
<version>1.0.0</version>
<description>Przykładowy szablon</description>
<version>1.0.0</version>
<files>
<files>
<description>Przykładowy
szablon</description>
<filename>index.php</filename>
<filename>index.php</filename>
<filename>css/template.css</filename>
<filename>css/template.css</filename>
</files>
</files></install>

Główny (i jedyny wymagany) plik szablonu –
index.php
 Mieszanka HTML i PHP
 Określenie struktury strony, wyświetlanie modułów i
komponentów, układ strony
 Wywołanie funkcji Joomla Framework
 Logika strony, zachowanie, funkcje JavaScript

Typowy układ strony
nagłówek
szukaj
ścieżka nawigacji (breadcrumbs)
lewe menu
część główna
stopka
prawe menu

Najprostsza zawartość pliku index.php
<html>
<body>
<table width="800px">
<tr>
<td colspan="2" id="header">header</td>
<td rowspan="2" id="search">search</td>
</tr>
<tr>
<td colspan="2" id="breadcrumbs">breadcrumbs</td>
<tr>
<td id="left_menu">left_menu</td>
<td id="main">main</td>
<td id="right_menu">right_menu</td>
</tr>
<tr>
<td colspan="3" id="footer">footer</td>
</tr>
</table>
</body>
</html>

Wywołanie metod klasy JDocument
 Obiekt jdoc, wywołanie metody:
<jdoc:nazwa_metody parametry />

Dodawanie nagłówka
 <jdoc:include type="head" />

Dodawanie modułów
 <jdoc:include type="modules" name= "top" style= "xhtml" />

Dodawanie komponentu głównego
 <jdoc:include type="component" style="xhtml" />

Funkcja wyświetlająca moduł:
 <jdoc:include type="modules" name= "nazwa" style= "styl" />

Nazwa odpowiada pozycji modułu
 top, left, user1, user2, user3

Styl określa sposób opakowania kodu HTML modułu
 Nie determinuje dokładnego sposobu formatowania, dopiero CSS
wprowadza właściwe formatowanie
 Dostępne style:
▪
▪
▪
▪
▪
table – moduł wyświetlany w tabeli
horz – moduł wyświetlany horyzontalnie, w komórce otaczającej tabeli
xhtml – moduł wyświetlany wewnątrz elementu div
rounded – przystosowanie do wyświetlania zaokrąglonych narożników
none – brak dodatkowego formatowania modułu

none – brak dodatkowego formatowania modułu

table – moduł wyświetlany w tabeli

horz – moduł wyświetlany w zagnieżdżonej tabeli

xhtml – moduł wyświetlany wewnątrz elementu div

rounded – przystosowanie do wyświetlania zaokrąglonych
narożników

rounded – przystosowanie do wyświetlania zaokrąglonych
narożników


Oprócz dyrektywy jdoc:include w pliku index.php
można wykorzystywać dowolne funkcje PHP, w tym funkcje
udostępniane przez Joomla Framework
Przykłady:
 $this – bieżący obiekt, w przypadku szablonu – obiekt klasy
JDocumentHTML
▪ <?php echo $this->language; ?>
 Inne dostępne pola:
▪ template, title, description, link

Przydatne metody klasy JDocumentHTML:
 $this->countModules(‘user1’);
 $this->countModules(‘user1 + user2’);

Przykład:
 sprawdź, czy w górnej części strony znajdują się jakieś moduły
 jeśli tak – wyświetl moduły; jeśli nie – wyświetl obrazek
<?php if($this->countModules('top')) : ?>
<jdoc:include type="modules" name="top" />
<?php else : ?>
<img src='placeholder.gif'>
<?php endif; ?>

Definicja parametrów – plik templateDetails.xml
<params>
<param name="authorCopyright" type="radio" default="1"
label="Author Copyright"
description="Show/Hide copyright.">
<option value="0">hide</option>
<option value="1">show</option>
</param>
</params>


Wartości parametrów – plik params.ini
Dostęp do parametrów z poziomu kodu:
 $this->params->get('nazwaParametru')

Zabezpieczenie szablonu przed wywołaniem
z zewnątrz (nie za pośrednictwem Joomla!)
 defined(‘_JEXEC’) or die(‘No access available’);
 Powyższy kod należy umieszczać zawsze przed
kodem wykonywalnym, np. na początku pliku
index.php

Dodanie odwołania standardowego arkusza CSS
(zdefiniowanego przez Joomla!):
<link rel="stylesheet"
href="templates/system/css/general.css "
type="text/css" />

Dodanie odwołania do arkusza CSS szablonu:
<link href="templates/nazwa_szablonu/css/template.css "
rel="stylesheet" type="text/css" />
lub bardziej uniwersalnie:
<link rel="stylesheet" href="templates/
<?php echo $this->template ?>
/css/template.css" type="text/css" />

Do przygotowania arkusza CSS konieczna jest znajomość
nazw stylów/klas stosowanych przez główny komponent
oraz moduły Joomla

Przykładowe style:
 article_separator, author, componentheading, contentpane,
module, sectiontableentry, sectiontablefooter, title, …

Definiujemy tylko te style, które są nam potrzebne

Lista wszystkich stylów
 http://docs.joomla.org/CSS
 pliki przykładowych szablonów

Narzędzie pomocne w identyfikacji właściwych stylów
 CSSViewer 1.0.3 – wtyczka do przeglądarki Firefox
 https://addons.mozilla.org/pl/firefox/addon/2104


Przygotowanie szablonu do dystrybucji
Pakowanie
 Plik templateDetails.xml musi zawierać listę wszystkich
plików szablonu
<files>
<filename>index.php</filename>
<filename>css/template.css</filename>
<filename>images/logo.jpg</filename>
</files>
 Katalog szablonu pakujemy do pliku .zip

Instalacja
 Standardowo, z poziomu panelu administracyjnego Joomla:
Rozszerzenia  Instalator

Szablony dla wersji 1.0 i 1.5 nie są ze sobą
kompatybilne

Dwie możliwości:
 Użycie szablonu przez włączenie trybu legacy
 Konwersja szablonu do wersji 1.5

Zmiany konieczne w pliku index.php:
Joomla 1.0
_VALID_MOS
$mosConfig_absolute_path
$mosConfig_live_site
Stałe łańcuchy tekstowe
echo 'Hello'
Joomla 1.5
_JEXEC
$this->baseUrl
$mainframe->getCfg( 'live_site' )
Wywołania funkcji – wsparcie dla wielu
wersji językowych
echo JText::_( 'Hello' )
mosGetParam
JRequest::getVar
$id = mosGetParam( $_REQUEST, 'id', 0 ); $id = JRequest::getVar( 'id', 0 );
mosShowHead()
<jdoc:include type="head" />
mosMainBody()
<jdoc:include type="component" />
mosLoadModules($position_name,
<jdoc:include type="modules"
$style);
name=$position_name style=$style />

Odpowiedniki stylu wyświetlania modułu:
Joomla 1.0
-3
-2
-1
0

Zmiany w templateDetails.xml
 <mosinstall type="template"> 
<install version="1.5" type="template">
Joomla 1.5
rounded
xhtml
none
table

Materiały dotyczące budowy szablonów
 http://docs.joomla.org/Joomla!_1.5_Template_Tutorial
 http://docs.joomla.org/Template_reference_material
 D. Rahmel, Professional Joomla!, Wrox 2007
 T. B. Silver, Joomla! Template Design, Packt Publishing 2007
Programowanie modułów

Najprostszy moduł – Hello World
 Przygotuj katalog dla modułu:
mod_helloworld
 Stwórz główny plik modułu:
mod_helloworld.php
<?php
defined( '_JEXEC‘ ) or die( 'Dostep zabroniony!' );
echo JText::_( 'Hello World!‘ );
?>

Najprostszy moduł – Hello World
 Stwórz plik deskryptora modułu: mod_helloworld.xml
<?xml version="1.0" encoding="Windows-1250"?>
<install type="module" version="1.5.0">
<name>Hello World</name>
<author>Jan Kowalski</author>
<creationDate>Listopad 2008</creationDate>
<copyright>(C) 2008 Jan Kowalski</copyright>
<license>GNU/GPL</license>
<authorEmail>[email protected]</authorEmail>
<authorUrl>www.jasiokowalski.pl</authorUrl>
<version>1.0.0</version>
<description>Moduł Hello World</description>
<files>
<filename module="mod_helloworld">mod_helloworld.php</filename>
</files>
</install>

Instalacja modułu Hello World
 Moduł musi zostać zarejestrowany w Joomla!
 Konieczne jest spakowanie plików modułu do archiwum ZIP
i zainstalowanie przez panel administracyjny
 Spakuj katalog mod_helloworld do archiwum
mod_helloworld.zip
 Zainstaluj moduł przez panel administracyjny
(Rozszerzenia->Instalator)
 Umieść moduł na pozycji top
(Rozszerzenia->Moduły->Nowy->Hello World, Pozycja=top)

Moduł Hello World widoczny na stronie głównej witryny
<?xml version="1.0" encoding="Windows-1250"?>
<install type="module" version="1.5.0">
<name>Modul bash.org.pl</name>
<author>Jan Kowalski</author>
<creationDate>Listopad 2008</creationDate>
<copyright>(C) 2008 Jan Kowalski</copyright>
<license>GNU/GPL</license>
<authorEmail>[email protected]</authorEmail>
<authorUrl>www.jasiokowalski.pl</authorUrl>
<version>1.0.0</version>
<description>
Moduł wyświetlający najnowszy wpis
ze strony bash.org.pl
</description>
<files>
<filename module="mod_bash">mod_bash.php</filename>
</files>
</install>
<?php
defined('_JEXEC') or die( 'Dostep zabroniony!' );
$ch = curl_init('http://bash.org.pl/latest/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$page = curl_exec($ch);
curl_close($ch);
$pattern =
'#<div class="quote post-content post-body">(.*?)</div>.*#s';
preg_match($pattern, $page, $out);
$msg = trim($out[1]);
echo $msg;
?>
<?xml version="1.0" encoding="Windows-1250"?>
<install type="module" version="1.5.0">
<name>Modul Dilbert</name>
<author>Jan Kowalski</author>
<creationDate>Listopad 2008</creationDate>
<copyright>(C) 2008 Jan Kowalski</copyright>
<license>GNU/GPL</license>
<authorEmail>[email protected]</authorEmail>
<authorUrl>www.jasiokowalski.pl</authorUrl>
<version>1.0.0</version>
<description>
Moduł wyświetlający najnowszy komiks
ze strony dilbert.com
</description>
<files>
<filename module="mod_dilbert">mod_dilbert.php</filename>
</files>
</install>
<?php
defined('_JEXEC') or die( 'Dostep zabroniony!' );
$ch = curl_init('http://dilbert.com/strips/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$page = curl_exec($ch);
curl_close($ch);
$pattern = '#<div class="STR_Image">.*?<img src="(.*?)".*#s';
preg_match($pattern, $page, $out);
$img = '<img src="http://dilbert.com/' . $out[1] . '" />';
echo $img;
?>