P R O G R A M M E R T O P R O G R A M M E R ™ Joomla!Profesjonalne tworzenie stron WWW , Dan Rahmel j '=', wrox PROGRAMMER TO PRCX; Helion / http://he...
Chciałbym zadedykować tę książkę ludziom szlachetnie wpierającym projekt Sprawiają oni, że sieć Web jest lepszym miejscem dla nas wszystkich.
Joomla!.
Podziękowania Na długo przed tym, zanim napisałem pierwsze zdanie tej książki, zespół tworzący Joomla! poświęcił niezliczone godziny na stworzenie aplikacji używanej dziś na całym świecie. Nie trzeba dodawać, że książka ta nie powstałaby, gdyby nie jego niestrudzone wysiłki, dążenie do opracowania aplikacji na najwyższym światowym poziomie, jaką jest Joomla!. Podobnie jak większość ludzi regularnie używających Joomla!, nie jestem w stanie wyrazić wdzięczności zespołowi za jego wspaniałe dzieło. Chciałbym podziękować wszystkim ludziom z wydawnictwa Wrox — szczególnie biorąc pod uwagę ich cierpliwość, kiedy próbowaliśmy stworzyć tę książkę w oparciu o nieustannie zmieniany projekt. Kieruję podziękowania do Kita Kempera, który pomógł mi sprecyzować to, co wtedy było jeszcze niejasnym pomysłem na książkę. Kieruję je także do Jenny Watson, która musiała przebrnąć przez wiele poprawek powodujących opóźnienia. Jestem winien wdzięczność Chrisowi Davenportowi, redaktorowi technicznemu, którego wnikliwe sugestie i mądre zalecenia znacząco poprawiły jakość tej książki. Dziękuję Kevinowi Shaferowi za wytrwałość podczas najcięższych etapów oraz wykonanie fenomenalnej pracy przy składaniu książki w całość. Chciałbym także podziękowań Ami Frank Sullivan, Kirkowi Batemanowi i wszystkim z wydawnictwa Wiley, którzy niestrudzenie pracowali nad stworzeniem tej książki. Muszę także podziękować bliźniaczym gwiazdom mojego życia — mojej żonie Elizabeth i córce Aleksandrze — za nadawanie znaczenia mojemu życiu. Rzadko kiedy narzekając, Elizabeth podołała obciążeniom nocnej pracy, straconych weekendów, za co dziękuję Ci z głębi serca. Spotkanie Ciebie było najlepszą rzeczą w moim życiu. Chciałbym podziękować mojemu rodzeństwu (Davidowi i Darlene) oraz przyjaciołom (Joelowi Harrisowi, Juanowi Leonffu, Gregowi Mickey'emu, Johnowi Taylorowi, Edowi Gildredowi, Donowi Murphy'emu i Weldowi 0'Connorowi) za ich bezwarunkowe wsparcie. Jestem bardzo wdzięczny Sandrze Villagran za to, jak fantastycznie utrzymywała kurdupla szczęśliwym. Przede wszystkim chciałbym podziękować Tobie, Czytelniku. Poprzez zakup tej książki sprawiasz, że członkowie przemysłu wydawniczego mogą dobrze wykonywać swoją pracę. Mam nadzieję, że informacje w niej zawarte pomocą Ci zrealizować Twoje marzenia. Dzięki.
Spis treści O autorze
13
Wprowadzenie
15
Rozdział 1. Wprowadzenie do Joomla! Zapoznanie z Joomla! Wpływ elastyczności na popularność Joomla! Dla kogo jest ta książka Webmasterzy Projektanci stron WWW Deweloperzy stron WWW Joomla! w wersji 1.0 a użytkownicy Mambo Podsumowanie
Rozdział 2. Szczegóły instalacji i konfiguracji Cztery serwery systemu Joomla! Decyzje podczas instalacji Etapy instalacji Joomla! Konfiguracja Apache Web Server Konfiguracja PHP Konfiguracja MySQL Konfiguracja Joomla! Serwer testowy a serwer produkcyjny Ustawienia sen/vera testowego Ustawienia serwera produkcyjnego Podsumowanie
Rozdział 3. Tworzenie własnych szablonów Struktura szablonu Pliki i foldery Logika szablonu: plik index.php Prezentacja szablonu: plik CSS Metadane szablonu: plik templateDetails.xml Zmienne szablonu: plik parametrów
21
¡
22 23 24 24 25 27 28 29
31 31 32 37 40 47 52 58 62 63 64 65
67 67 68 69 73 78 79
6
Joomla!. Profesjonalne tworzenie stron WWW Grafika szablonu: folder images Miniatura szablonu Tworzenie trójkolumnowego układu Tworzenie struktury szablonu Tworzenie pliku index.php Tworzenie dystrybucyjnego pliku templateDetails.xml Zaawansowane techniki tworzenia szablonów Wykorzystanie grupy szablonów a C S S favicon.ico Modyfikacja wyglądu rozszerzeń Tworzenie układu strony dla telefonów komórkowych Adaptowanie szablonów Mambo lub Joomla! 1.0 Podsumowanie
79 80 81 82 83 94 96 96 97 98 99 101 102
Rozdział 4. Dodawanie i modyfikacja dostępnych rozszerzeń
103
Katalog rozszerzeń Funkcjonalność i obsługa strony Instalacja dodatkowego edytora WYSIWYG Dodawanie własnych stylów do TinyMCE Dodawanie obsługi plików i FTP Dodawanie mapy strony Community Builder Organizacje i e-commerce Menedżer subskrypcji Sklep internetowy MicroShop z płatnościami Paypal Menedżer projektów Project Fork Rozszerzenie kart pracy Dodawanie na stronie platformy aukcyjnej Zawartość strony Podcasting w Joomla! Galeria zdjęć na stronie Joomla! Komunikacja na stronie Dodawanie komentarzy do artykułów Księga gości Czat na stronie Joomla! Uruchamianie systemu wiki w Joomla! eWriting Implementacja ogłoszeń Dodawanie śledzenia wyników sportowych Dodawanie gier hazardowych Obsługa quizow Podsumowanie
Rozdział 5. Tworzenie prostych rozszerzeń: moduły Tworzenie modułu Hello World Tworzenie modułu Świąteczne Życzenia Tworzenie pliku deskryptora Tworzenie kodu modułu Tworzenie tabeli i zapisywanie przykładowych danych Konfiguracja modułu Tworzenie modułu Kontakt z Nami Podsumowanie
141 142 145 146 147 149 150 152 157
Spis treści Rozdział 6. Zaawansowane rozszerzenia: komponenty Przygotowanie środowiska programistycznego Stosowanie systemu kontroli wersji SVN Instalacja SVN Tworzenie repozytorium SVN Korzystanie z Eclipse Tworzenie komponentu Księgi Gości Ochrona przed spamem Część frontowa komponentu Część administracyjna komponentu Plik deskryptora Tworzenie archiwum Instalacja komponentu Korzystanie z phpDocumentor Instalacja Wstawianie sekcji DocBlock w kodzie źródłowym Podsumowanie
Rozdział 7. Joomla! i Aia* Struktura technologii Ajax Prosty komponent ajaksowy Tworzenie komponentu Tworzenie strony WWW Tworzenie komponentu Serwer-Żądanie Tworzenie komponentu Tworzenie modułu ajaksowego Wady technologii Ajax Niedostępność dla robotów internetowych Gromadzenie informacji Zagrożenia bezpieczeństwa Podsumowanie
Rozdział 8. Wzorce projektowe a Joomla! Wzorce projektowe Trzy główne kategorie wzorców Wzorce konstrukcyjne Wzorce strukturalne Wzorce czynnościowe Wzorce współbieżności Wzorce architekturalne Wzorzec Model-Widok-Kontroler Wykorzystanie wzorca MVC w tworzeniu komponentów Podsumowanie
Rozdział 9. Ingerencja w fundamenty Joomla!: wtyczki Przegląd wtyczek Joomla! Zdarzenia typu Content Zdarzenia typu Editor Zdarzenia typu System i Search Zdarzenia typu User
Joomla!. Profesjonalne tworzenie stron WWW Wtyczka Hello World! Tworzenie pliku deskryptora Tworzenie kodu wtyczki Wtyczka Automatyczne Skróty Kod deskryptora XML Kod wtyczki Budowa platformy Joomla! Struktura CMS Joomla! (JApplication) Ścieżki Joomla! Wskazówki przydatne podczas pracy z kodem Joomla! Wykorzystywanie funkcji przeszukiwania katalogów Badanie com_content SVN Joomla!: najnowsze osiągnięcia Podsumowanie
Rozdział 10. Budowanie społeczności w Joomla! Planowanie wirtualnej społeczności Trzy stadia wirtualnej społeczności Znaczenie stabilności i regularności Dlaczego warto stworzyć wirtualną społeczność Technologie wirtualnych społeczności Księga gości Czat Forum dyskusyjne Sondy Komentarze Sieci społecznościowe Kalendarz wydarzeń Systemy Wiki Uruchamianie wirtualnej społeczności Dobór moderatorów Prowadzenie społeczności Podsumowanie
Rozdział 11. Prowadzenie profesjonalnej strony Programowanie i testy Ustawienia diagnostyczne Interfejs wiersza poleceń PHP Zautomatyzowane testy Uruchamianie strony Przenoszenie strony na serwer produkcyjny Kopia zapasowa Joomla! Konfiguracja wirtualnych serwerów Apache Kontrola serwera Apache z wiersza poleceń Zarządzanie wieloma serwerami Testy obciążeniowe Równoważenie obciążenia Umiędzynaradawianie Automatyczne cenzurowanie treści Dostrajanie wydajności MySQL Ustawianie dysku przechowującego dane Wybór typu serwera
Spis treści Źródło problemów Optymalizacja indeksów Optymalizacja istniejącego systemu Administracja Uwierzytelnianie LDAP Obsługa Czyszczenie systemu Bezpośredni dostęp do MySQL Podsumowanie
Rozdział 12. Łączenie z zasobami zewnętrznymi Pobieranie zewnętrznych materiałów Kanały RSS Rozszerzenie Auto Articles 3000 Zarządzanie programami partnerskimi Program partnerski Google AdSense Program partnerski firmy Amazon Komunikacja biznesowa z zastosowaniem EDI Dokumenty EDI Standardy EDI Rozszerzenie Skylark Komunikacja z sieciami zewnętrznymi Komponent typu screen scraper Komponent Joomlamap Wyszukiwanie adresów z zastosowaniem XML Podsumowanie
Rozdział 13. Pozycjonowanie i marketing w wyszukiwarkach internetowych Ustawienia Joomla! Proste adresy Metadane Aktywacja modułu Breadcrumbs Mapa strony Ogólne techniki Główne wyszukiwarki Badanie słów kluczowych Tytuły stron Atrybut alt dla obrazów i innych multimediów PageRank Google System wymiany odnośników Ajax a SEO Google Analytics Czego nie należy robić Marketing w wyszukiwarkach internetowych (SEM) Komponowanie skutecznego tekstu reklamowego Pay per click i pay per view Google Adsense Podsumowanie
Rozdział 14. Bezpieczeństwo Joomla! Typy ataków Ataki na hasła SQL Injection
Joomla!. Profesjonalne tworzenie stron WWW Niestandardowe żądania — szczególnie przez Ajaksa Cross-Site Scripting (XSS) Skanowanie katalogów Atak Denial of Service (DoS) Podsłuchiwanie pakietów HTTP Bezpieczeństwo serwera WWW Zabezpieczanie serwera Apache Odmowa dostępu do plików z danym rozszerzeniem Bezpieczeństwo PHP PHP Safe Mode PHP doc_root PHP disable_functions PHP disable_classes PHP display_errors PHP expose_php Bezpieczeństwo MySQL Bezpieczeństwo Joomla! Usuwanie plików instalacyjnych Edytor HTML Joomla! Uruchamianie wewnątrz systemu Rozwijanie i testowanie Podsumowanie
Rozdział 15. Czego Joomla! nie potrafi Kontrola wersji dokumentów Import, konwersja i eksport plików Ograniczone funkcje zabezpieczeń i autoryzacji Równoważenie obciążania i replikacja danych Poziomy interfejsu użytkownika, obsługa skórek Standardowa funkcjonalność groupware Funkcjonalność portalu Podsumowanie
Rozdział 16. Rzut okiem na popularne strony oparte na Joomla! Strony akademickie Wydział Biologii Molekularnej Princeton The Shakespeare Birthplace Trust Journal of Intercultural and Interdisciplinary Archaeology Graphic User Interactive Learning and Development (GUILD) Ministerstwo Edukacji na Wyspach Dziewiczych Strony poświęcone zdrowiu i rodzinie SeniorNet KidsCHANNEL A Story for Bedtime Second Wives Club Better Health Here Profesjonalne strony Mistrzostwa Świata 2010 w Republice Południowej Afryki Best Association Resources and Tools Relacje podróżnicze Randalla Wooda Turbo Trade Sonetto John Avon Illustration
Spis treści Media (Aktualności, magazyny itp.) MainSPOT.NET Centrum Informacji ONZ dla Europy Zachodniej HCJB Global Asiaing.com The Chaser Creative Guy Publishing Strony hobbystyczne Success and Sport (S.A.S.) Safari Ventures Sky Systems KISSin' UK Calialive.com Strony poświęcone technologii Strona główna projektu Joomla! Open Workbench Joomlahut Projekt OScar Podsumowanie
Skorowidz
11 413 413 414 415 416 417
418 419 419 4 2 0
421 422 423 424 425 426 427 428 429 431
12
Joomla!. Profesjonalne tworzenie stron WWW
O autorze Dan Rahmel jest najszerzej znany z pracy z systemami bazodanowymi, PHP i Visual Basic. Posiada kilkunastoletnie doświadczenie w projektowaniu oraz implementowaniu systemów informatycznych i rozwiązań klient-serwer w oparciu o MySQL, Microsoft SQL Server, Microsoft Access i Visual FoxPro. Swoją karierę rozpoczął, pisząc między innymi dla DBMS, American Programmer i Internet Advisor. Jest autorem kilkunastu książek przetłumaczonych na wiele języków, takich jak chiński, japoński, hiszpański, francuski i portugalski. W roku 2006 wydawnictwo Focal Press przygotowało specjalną edycję Nuts and Bolts Filmmaking: Practical Techniques for the Guérilla Filmmaker1 (Focal Press, 2004), przeznaczoną na rynek indyjski.
1
Jedna z książek Dana Rahmela poświęconych tworzeniu niezależnych filmów — p r z y p . tłum.
14
Joomla!. Profesjonalne tworzenie stron WWW
Wprowadzenie Centrum strony internetowej stanowi potrzeba organizowania i prezentowania treści. Przez ostatnie 10 lat statyczne strony zdominowały internetowy krajobraz, a zarządzanie stroną było mozolnym, często frustrującym procesem. Webmasterzy musieli borykać się z tysiącami linii kodu HTML, umieszczonymi w ogromnej liczbie plików. Technologia dynamicznego tworzenia stron wymagała dużej liczby dodatkowego programowania i stwarzała wiele nieprzewidzianych zagrożeń bezpieczeństwa. Wydanie w 2005 roku systemu zarządzania treścią ( C M S — Content Management System) Joomla! rozpoczęło nową epokę niedrogiego tworzenia zaawansowanych stron internetowych. Zarządzanie treścią stało się możliwe bez konieczności programowania. Elastyczność systemu Joomla! pozwoliła tworzyć skomplikowane rozszerzenia, które dodatkowo wzbogacały CMS. Dziesiątki tysięcy programistów zainteresowało się Joomla!, a dostępność rozszerzeń osiągnęła masę krytyczną (przynajmniej 1700 według ostatnich wyliczeń), czyniąc Joomla! najważniejszym, niekomercyjnym systemem CMS na świecie. Joomla! stał się ważnym narzędziem dla webmasterów, służącym do tworzenia i obsługi stron bez wyczerpującego wysiłku. Możliwość szerokiego wykorzystania stworzyła wiele okazji dla profesjonalnych programistów Joomla!. Biorąc pod uwagę, że Joomla! został pobrany, licząc do połowy 2007 roku ponad 2,5 miliona razy, programiści mają dużą grupę potencjalnych klientów. Niezależnie od tego, czy tworzysz szablony XHTML, aby sprzedać je stronie subskrypcyjnej, czy świadczysz usługi jako ekspert Joomla! lub tworzysz rozszerzenia w ramach społeczności open source, znajdziesz swoje miejsce w świecie Joomla!. Biorąc pod uwagę różnorodność potrzeb zaawansowanych czytelników, napisałem tę książkę z zamiarem przekazania wiedzy na poziomie pełnoetatowego programisty lub członka ekipy programistycznej Joomla!. Starałem się dostarczyć przykładów dla dwóch głównych obszarów profesjonalnych zastosowań tego systemu: projektowania oraz tworzenia oprogramowania i zakładania stron. Projektowaniu i tworzeniu oprogramowania zostały poświęcone cztery rozdziały, w których opisano implementowanie własnych szablonów, tworzenie rozszerzeń wszystkich trzech typów (moduły, komponenty i wtyczki), wykorzystanie najnowszej technologii Ąjax w dodatkach do Joomla!, adaptację profesjonalnego środowiska programistycznego z systemem kontroli wersji, zastosowanie wzorców projektowych i wiele innych.
16
Joomla!. Profesjonalne tworzenie stron WWW Dokładne zapoznanie się ze strukturą platformy Joomla! pozwoli Ci dogłębnie zrozumieć działanie systemu, dzięki czemu podczas tworzenia dodatków dla Joomla! będziesz w stanie lepiej wykorzystać bogactwo możliwości. W rozdziałach poświęconych zakładaniu stron poznasz technologie leżące u podstaw Joomla! (PHP, Apache itd.). Odpowiednia konfiguracja tych technologii zapewni najwyższą wydajność systemu. Zarządzanie stroną, pozycjonowanie (SEO), komunikacja z treściami zewnętrznymi, ustawienia zabezpieczeń i uwierzytelniania LDAP (.Lightweight Directory Access Protoco!) — wszystkie te tematy zostały opisane w ramach tej książki. Mam nadzieję, że po zakończeniu lektury będziesz miał wiele pomysłów, jak zmienić i rozszerzyć Joomla!, aby zaspokoić potrzeby swoje (lub) swoich klientów. Spędziłem wiele godzin, analizując kod platformy Joomla!, co pozwoliło mi docenić ogrom genialnej pracy wykonanej przez ekipę Joomla!. Podejrzewam, że im więcej czasu spędzisz, pracując z Joomla!, tym chętniej będziesz podzielać mój zachwyt nad tym cudem open source.
Dla kogo jest ta książka Joomla!. Profesjonalne tworzenie stron WWW skierowana jest do projektantów i twórców stron WWW, hobbystów, małych i średnich firm, organizacji e-commerce i non profit. Szerokie zainteresowanie nabywaniem umiejętności pracy z Joomla! wykracza poza społeczność projektantów i twórców, ponieważ wiele firm — od pośredników nieruchomości, poprzez kluby fitness, aż po domy pogrzebowe — tworzy swoje strony w oparciu o Joomla!. Książka ta powinna zainteresować także bloggerów, twórców treści firmowej oraz wspomóc specjalistów. Również każda osoba dysponująca dostępem do serwera z obsługą PHP/MySQL będzie w stanie stworzyć stronę Joomla! wykorzystującą wszystkie funkcje przedstawione w tej książce. Aby efektywnie pracować z tą książką, powinieneś mieć przynajmniej podstawowe doświadczenie w instalowaniu systemu. Jeśli pracowałeś z poprzednimi wersjami Joomla!, nie będziesz miał problemu z żadną z przedstawionych technik i funkcji. Uaktualnienia Joomla! charakteryzuje zachowanie ciągłości — poza reorganizacją menu główne aspekty zarządzania systemem pozostają niezmienne. Programowanie Joomla! znacznie się zmieniło, dlatego zwróć szczególną uwagę na przykłady i wskazówki, które przedstawiają nowe sposoby programowania. Ze względu na dużą liczbę programowania w PHP oraz potencjał tej książki, z którego warto skorzystać, wymagane są podstawowe umiejętności w tym obszarze. Kompetencje w zakresie konfiguracji serwera WWW są zalecane, chociaż nie są niezbędne, jeśli samodzielnie nie zarządzasz serwerem. Starałem się napisać tę książkę tak, aby kolejne rozdziały opierać na informacjach zawartych w poprzednich rozdziałach. Chociaż można j ą czytać dowolnie, polecałbym przeczytanie przynajmniej sześciu pierwszych rozdziałów w kolejności. Dalej można swobodnie, bez ryzyka pogubienia się, przechodzić do rozdziałów o interesującej tematyce z pominięciem pozostałych.
Wprowadzenie
17
¡o zawiera ta książka Joomla! jest darniowym, dostępnym na wiele platform (Windows, Linux i MacOS) systemem CMS o otwartym kodzie źródłowym. Ta książka opisuje nową wersję Joomla! — 1.5, wraz ze wszystkimi funkcjami (nie tylko nowymi). W miarę możliwości zaznaczałem różnice między poprzednią wersją — 1.0.x, a n o w ą aby ułatwić użytkownikom przejście na nowy system. Narzędzia programistyczne niezbędne do skorzystania z tej książki i podanych przykładów są, podobnie jak Joomla!, darmowe i powszechnie dostępne (pomijając specyficzne przykłady z wykorzystaniem programów takich jak Adobe Dreamweaver i Microsoft Frontpage). Dołączono adresy stron internetowych wszystkich programów i rozszerzeń, które zostały wykorzystane w tej publikacji.
lak zbudowana jest ta książka Książkę napisano z myślą o użytkowniku średnio zaawansowanym, który chciałby pokonać określone etapy, aby zostać użytkownikiem zaawansowanym. Na początku opisany jest proces instalacji, konfiguracji, dalej jest rozszerzanie systemu Joomla! przez tworzenie własnych szablonów, modułów, komponentów i wtyczek. Następnie przedstawiono zaawansowane aspekty tworzenia stron, od budowania internetowych społeczności, przez komunikację z treściami zewnętrznymi, aż po pozycjonowanie. Książka ta zawiera następujące rozdziały: •
Rozdział 1. „Wprowadzenie do Joomla!" — opisano różne aspekty Joomla! dotyczące webmasterów, projektantów i twórców stron.
•
Rozdział 2. „Szczegóły instalacji i konfiguracji" — zawarto informacje na temat czterech serwerów systemu Joomla! (Joomla!, PHP, MySQL i Apache lub IIS), pokazano, jak zainstalować i skonfigurować każdy z nich, aby uzyskać najwyższą wydajność. Dodatkowo zaprezentowano szczegółowo różnice w konfiguracji środowiska testowego i produkcyjnego.
•
Rozdział 3. „Tworzenie własnych szablonów" — przedstawiono, jak od podstaw stworzyć własny szablon. Na przykładzie prymitywnego szablonu Hello World omówiono jego strukturę. Następnie szablon został rozwinięty do poziomu złożonego, trójkolumnowego układu z wykorzystaniem CSS. Na koniec opisano techniki zaawansowanego tworzenia szablonów, takie jak tworzenie grupy szablonów, generowanie ikony ulubionych i adaptacja na potrzeby telefonów komórkowych.
•
Rozdział 4. „Dodawanie i modyfikacja dostępnych rozszerzeń" — ten rozdział zawiera szczegółowy przegląd wielu dostępnych rozszerzeń, a także ich podstawową konfigurację i wykorzystanie. Przedstawiony został także katalog rozszerzeń Joomla! (JED). Przytoczono przykłady z różnych kategorii (funkcjonalność i obsługa strony, opcje dla organizacji i e-commerce, zawartość i interaktywność strony).
18
Joomla!. Profesjonalne tworzenie stron WWW •
Rozdział 5. „Tworzenie prostych rozszerzeń: moduły" — przedstawiono proces tworzenia modułu od samego początku, począwszy od programu Hello World, nakreślono strukturę i zastosowanie rozszerzeń typu moduł. Następnie opisano dwa projekty o postępującym stopniu złożoności, jednym z nich jest moduł Świąteczne życzenia, który wykorzystuje oddzielną tabelę do przechowywania własnych życzeń świątecznych. Drugim jest moduł Kontakt z nami, który demonstruje dostęp do tabeli systemu Joomla! z poziomu rozszerzenia.
•
Rozdział 6. „Zaawansowane rozszerzenia: komponenty" — tematem jest tworzenie komponentu księgi gości opartej na formularzu. Przedstawiono cały proces procesjonalnego pisania kodu, zaczynając od konfiguracji zintegrowanego środowiska programowania Eclipse, przez wykorzystanie systemu SVN do kontroli wersji, aż po zastosowanie phpDocumentator do automatycznego stworzenia dokumentacji projektu.
•
Rozdział 7. „Joomla! i Ajax" — zademonstrowano tworzenie dwóch komponentów, których można użyć do dynamicznego pobierania danych. Po nakreśleniu zasady działania technologii Ajax stworzony zostanie komponent Joomla-Ajax, który można wykorzystać na dowolnej stronie. Następnie przedstawiono tandem moduł i komponent jako przykład zastosowania tej technologii. Komponent odpowiedzialny jest za komunikację z systemem, a moduł odpowiada za interaktywny widok.
•
Rozdział 8. „Wzorce projektowe a Joomla!" — ten rozdział poświęcono wykorzystaniu modeli pojęciowych, znanych jako wzorce projektowe, do rozwiązywania częstych problemów programistycznych. Przedstawiono kilka z nich, a także wyszczególniono wykorzystanie w elementach platformy Joomla!. Następnie, krok po kroku, tworzony jest komponent w oparciu o wzorzec MVC, jako przykład wykorzystania wzorców projektowych w tworzeniu oprogramowania dla Joomla!.
•
Rozdział 9. „Ingerencja w fundamenty Joomla!: wtyczki" — zaprezentowano system wtyczek i wydarzeń dostępnych w Joomla!, które można łączyć z procedurami zawartymi we wtyczkach. Wtyczka Hello World! ilustruje podstawowe wykorzystanie zdarzenia — dołączanie powitania do artykułów. Następnie przedstawiono tworzenie wtyczki, która automatycznie tworzy skróty na podstawie wprowadzonego tekstu, a także dynamicznie rozwija skróty. Proces ten zostaje uruchomiony podczas wyświetlania artykułu na stronie, pozostawiając zawartość bazy danych nietkniętą. Na końcu opisano schemat platformy Joomla!.
•
Rozdział 10. „Tworzenie społeczności Joomla!" — skupiono się na procesie budowania i rozwijania wirtualnych społeczności. Począwszy od planowania i projektowania, przedstawiono metodę określania grupy docelowej, która będzie tworzyć wirtualną społeczność danej strony. Następnie wprowadzono różne rozszerzenia, które wzbogacają Joomla! o funkcje witryn społecznościowych. Dalej w rozdziale podsumowano najlepsze sposoby tworzenia społeczności i zarządzania nią.
•
Rozdział 11. „Zarządzanie profesjonalną stroną" — wyszczególniono środki, które trzeba podjąć, aby skutecznie stworzyć stronę. Oprócz procedur ustawiania środowiska mających pomóc w usuwaniu błędów, tworzenia zautomatyzowanych testów i przenoszenia strony z serwera testowego do serwera produkcyjnego można znaleźć tu także informacje o doskonaleniu ustawień MySQL i autoryzacji LDAP.
Wprowadzenie •
Rozdział 12. „Komunikacja z treściami zewnętrznymi" — prześledzono komunikację z zewnętrznymi stronami w celu wymiany informacji, zarządzanie programami partnerskimi, komunikację biznesową z wykorzystaniem elektronicznej wymiany danych (EDI) i inne rodzaje połączeń zewnętrznych. Pokazano, jak stworzyć własne rozszerzenie Joomla!, aby umożliwić połączenie z usługami zewnętrznymi, a także zademonstrowano komponent, który wykorzystuje technikę screen scraping, oraz dodatek, który łączy się z usługą Google Maps, i rozszerzenie, które wykorzystuje wyszukiwanie kodów ZIP na stronie USPS.com.
•
Rozdział 13. „Pozycjonowanie (SEO) i pozyskiwanie klientów za pośrednictwem wyszukiwarek (SEM)" — zawarto opis technik i procedur, które można wykorzystać do pozycjonowania strony, a także pozyskiwania klientów za pośrednictwem wyszukiwarek. Zaprezentowano konfigurację parametrów SEO dostępnych w Joomla! oraz podkreślono znaczenie pozostałych funkcji, takich jak metadane, breadcrumbs i mapy strony. Przedstawiono ogólne sposoby pozycjonowania strony wraz z wpływem, jaki wywiera stosowanie takich technologii jak Flash i JavaScript.
•
Rozdział 14 „Bezpieczeństwo Joomla!" — omówiono najważniejsze ustawienia, które zagwarantują wyższy poziom bezpieczeństwa strony Joomla!. Opisano także główne typy ataków (a także wskazówki, jak im zapobiegać), które mogą zostać wykorzystane przeciwko systemowi Joomla!. Dodatkowo znajdują się w nim informacje na temat zabezpieczania poszczególnych serwerów (Apache lub IIS, PHP, MySQL i Joomla!).
•
Rozdział 15. „Czego Joomla! nie potrafi" — oceniono niedostatki, jakie można dostrzec w porównaniu z profesjonalnymi systemami CMS. Wyszczególnione zostały ograniczone możliwości w zakresie kontroli wersji, konwersji plików, bezpieczeństwa, równoważenia obciążenia, replikacji, funkcjonalności zespołowej i obsługi portalu.
•
Rozdział 16. „Rzut okiem na popularne strony oparte na Joomla!" — przedstawiono wiele różnorodnych stron opartych na Joomla!. Do każdej opisanej strony dołączono podsumowanie zawierające szczegóły na jej temat (takie jak użyty szablon, domyślna rozdzielczość docelowa i inne), a także informacje o rozszerzeniach wykorzystywanych na stronie.
19
Czego będziesz potrzebować Pomijając system Joomla! (który można pobrać za darmo z intemetu), potrzebujesz dodatkowego oprogramowania, aby wykorzystać przykłady przedstawione w tej książce. Środowisko programistyczne Eclipsejest prawdopodobnie największą aplikacją opisaną w tej książce, którą można pobrać z internetu. Pakiet zajmuje 230 MB, dlatego wymagane jest szybkie połączenie z internetem, aby pobrać instalator. Pozostałe programy zajmują średnio od 10 do 20 MB. Książkę tę napisano z naciskiem na niezależność od wybranego systemu operacyjnego. Ponieważ większość komunikacji z systemem Joomla! przebiega za pośrednictwem interfejsu administratora będącego stroną WWW, przedstawione instrukcje znajdą zastosowanie
20
Joomla!. Profesjonalne tworzenie stron WWW niezależnie od wykorzystanej przeglądarki lub systemu operacyjnego. W sytuacji kiedy poszczególne opcje konfiguracyjne różniły się dla różnych systemów operacyjnych, przedstawione zostały instrukcje odnoszące się do Linuksa, MacOS-a i Windowsa.
Konwencie W książce wykorzystano kilka konwencji, aby pomóc Ci zrozumieć jak najwięcej z przedstawionego tekstu, a także pomóc w orientacji: Ramki, takie jak ta, zawierają ważne informacje bezpośrednio odnoszące się do otaczającego tekstu, które trzeba zapamiętać.
Wskazówki, podpowiedzi, sztuczki i inne informacje niebędące częścią tekstu zostały zapisane w ten sposób. Odnośnie do stylów wykorzystanych w tekście: •
Ważne nowe pojęcia pojawiają się jako wyróżnione przy pierwszym wykorzystaniu w tekście.
•
Skróty klawiszowe zapisywane s ą w następujący sposób: Ctrl+A.
•
Nazwy plików i katalogów oraz adresy internetowe są wyróżnione.
•
Kod pojawiający się wewnątrz tekstu jest oznaczony następująco: persi stence.properti es.
•
W przypadku podawania ścieżek dostępu jako separator poszczególnych nazw katalogów wykorzystywany jest lewy ukośnik (\), pomimo iż platformy uniksowe używają do tego celu prawego ukośnika (/).
•
Kod przedstawiony jest na dwa sposoby: Nowe i ważne fragmenty kodu przykładów wyróżniane są szarym tłem. Kod mniej znaczący w danym kontekście lub taki. który pojawił się już w książce, nie jest zaznaczony.
Kody źródłowe Podczas pracy z przykładami wykorzystanymi w tej książce możesz samodzielnie wpisać cały kod z klawiatury lub wykorzystać pliki przygotowane przez autora. Wszystkie kody źródłowe, które zostały użyte w tej książce, mogą zostać pobrane z ftp://ftp.helion.pl/przyklady/ jooptw.zip.
1 Wprowadzenie do Joomla! Jeśli czytasz tę książkę, to prawdopodobnie wiesz już, że Joomla! staje się jedną z najszerzej wykorzystywanych technologii sieci Web. System zarządzania treścią ( C M S — Content Management System) Joomla! dostarcza łatwego w użyciu, graficznego interfejsu użytkownika, który umożliwia tworzenie stron WWW i zarządzanie nimi. Początkujący użytkownik jest w stanie szybko opanować podstawy Joomla! i tworzyć piękne, profesjonalne strony, takie jak na rysunku 1.1, bez znajomości HTML-a. W tej książce założono, że znasz podstawy tworzenia stron w oparciu o Joomla! i chcesz rozwinąć swoje umiejętności, aby budować witryny światowej klasy — j a k tego dokonać, dowiesz się podczas lektury. lysunek 1.1. Domyślna nstalacja loomla! zawiera demonstrację zaawansowanego orojektu strony składającego się r pionowego venu, pola wyszukiwania, zaokrąglonych •ogów, sondy automatycznego jkładu
Ją, Joomla!
Yesterday ail servers in the U S went out on strike in a bid to get more RAM and better C P U s . A spokes person said tlial the need for better RAM w a s due to some fool increasing the front-side bus speed. In future, buses will be told to slow down in residential motherboards. News
About Jooml.il
The Community Szukaj...
Latest News Home Joomla: Overview Joomla! License More about Joomla' FAO The N e w s W e b Links N e w s Feeds
• • • • «
Popular • Joomla 1 Overview » Extensions » J o o m l a ! License Guidelines • w e l c o m e to Joomla! . What's N e w In 1.5-
Content Layouts The Joomla! Community Welcome to Joomla! Newsflash 4 Newsflash 5
Welcome to the Frontpage
Poils
W e l c o m e to Joomla!
J o o m l a : is u s e d fo Q
Community Sites
Joomla' is a f i e e open s o u r c e f r a m e w o r k and content publishing s y s t e m designed toi quickly creating highly interactive multi-language W e b sites, online communities, media portals, blogs and e C o m m e i c e applications. Powered by
J4 Joomla!
Joomla! provides an easy-to-use graphical user interface that simplifies the management and publishing of large volumes of content including HTML, documents, and nch media Joomla! is u s e d bv organisations of all sizes for Public Web sites.
Q
Public Brand Sites
Q
eCommerce
O
Blogs
O
Intranets
O
Photo and Media Sites
Metoda opanowania Joomla! będzie zależeć od Twoich potrzeb oraz roli, jaką grasz w procesie tworzenia i prowadzenia stron WWW. W tym rozdziale wyjaśniono, w jaki sposób różni użytkownicy Joomla! (webmasterzy, projektanci i deweloperzy stron W W W ) mogą wykorzystać tę książkę, aby zdobyć specyficzne umiejętności i poznać technologie, które opowiadają ich potrzebom i pragnieniom.
22
Joomla!. Profesjonalne tworzenie stron WWW We wszystkich przykładach zamieszczonych w tej książce staraliśmy się przedstawić informacje tak jasno i jednoznacznie, jak było to możliwe. Zdajemy sobie sprawę, że chcesz opanować Joomla!, ale niekoniecznie inne technologie (MySQL, CSS, PHP itd.), na których jest oparty. Wydawnictwo Helion ma w ofercie książki, dzięki którym poznasz pozostałe technologie. Celem tej jest pomoc w ukończeniu Twoich projektów opartych na Joomla!, które zamierzasz wprowadzić w życie. Właśnie dlatego staraliśmy się dokładnie opisać każdy krok — nawet jeśli nie jesteś mistrzem np. w tworzeniu kaskadowych arkuszy stylów (CSS), będziesz w stanie śledzić przykłady i osiągnąć swój cel.
Zapoznanie z Joomla! Joomla! jest jedną z kluczowych aplikacji, których wykorzystanie zainicjowało ponowne narodziny WWW w formie nazwanej Web 2.0. W przeciwieństwie do Web 1.0, gdzie większość stron internetowych była zarządzana ręcznie, a możliwości interakcji minimalne, sercem Web 2.0 jest automatyczna administracja, komunikacja na stronie i między witrynami, wirtualne społeczności, dynamiczna interakcja. Joomla! obejmuje wszystkie nowe osiągnięcia, a ponieważ jest CMS-em, stworzenie i zarządzanie zaawansowaną stroną osiągalne jest nawet dla małej grupy ludzi (być może nawet dla jednej osoby). Strona oparta na Joomla! może rywalizować z możliwościami i prezencją stron wartych miliony dolarów. Najlepsze z tego wszystkie jest jednak to, że Joomla! jest całkowicie, w 100 procentach darmowy. Joomla! wydano w 2005 roku. Od tego czasu zaobserwowano wykładniczy wzrost zarówno wśród liczby webmasterów, jak i twórców stron internetowych. Założono dosłownie dziesiątki tysięcy stron WWW na całym świecie. Aby sprostać temu rozrostowi, społeczność twórców powiększyła się — w czasie, kiedy pisałem tę książkę — do ponad 45 000 zarejestrowanych podmiotów. Setki deweloperów są aktywne każdego dnia na forach poświęconych Joomla!, dzielą się informacjami, wskazówkami i nowym kodem. Stale powstają nowe dodatki i szablony, które rozszerzają bogate możliwości zawarte w domyślnej instalacji Joomla!. Biorąc pod uwagę całą aktywność wokół tego systemu, ciężko nie ulec zachwytowi nad możliwościami płynącymi z wykorzystania go. Dzięki tej książce będziesz miał szansę dołączyć do rewolucji, prowadzony krok po kroku przez uruchamianie, tworzenie i projektowanie zaawansowanej strony Joomla!. Nauczysz się modyfikować i rozszerzać Joomla!. Dowiesz się, jak dostroić go, aby sprostać popularności, która zagroziłaby poprawnemu działaniu zwykłej strony. Twoja instalacja Joomla! obsłuży duże obciążenie bez wysiłku. Ta książka pomoże Ci, jeśli chcesz wykorzystać Joomla! do: •
Tworzenia komercyjnych dodatków, które oferują funkcje pożyteczne dla kogoś z 2,5-milionowej rzeszy użytkowników Joomla!.
•
Otwarcia sklepu internetowego, który posłuży nie tylko do sprzedawania towarów, ale także stworzenia internetowej społeczności, mającej sprawić, że powtórne zakupy staną się zasadą, a nie przypadkiem.
Rozdział 1. • Wprowadzenie do Joomla! •
Stworzenia szablonu lub otwarcia sklepu z szablonami w modelu subskrypcji, do którego mogą zapisać się użytkownicy, aby wykorzystać swój szablon do zmiany swoich stron w dzieła sztuki.
•
Publikacji opinii politycznych na blogu wraz z odwołaniem do dokumentacji dowolnego typu popierającej Twój punkt widzenia — dowiesz się jednocześnie, które tematy uważane są przez Twoich użytkowników za ważne.
•
Dołączenia do grona osób zarabiających na tworzeniu stron dla innych ludzi w oparciu o CMS. Informacje zawarte w tej książce dadzą Ci przewagę nad konkurencją.
•
Założenia prywatnej strony WWW z galerią zdjęć (Twoich dzieci, ze specjalnych okazji itd.) i forum, dzięki któremu Twoi krewni będą mogli kontaktować się z Tobą.
23
W tej książce zawarta jest wiedza potrzebna do podążania każdą z tych różnorodnych ścieżek, a także wieloma innymi. W nowym, ekscytującym świecie, gdzie wiele babć zna HTML, ograniczenia w opanowywaniu Joomla! stawiane są głównie przez Twoje własne ambicje. Dzięki Joomla! nawet mozolny proces tworzenia stron staje się jeśli nie przyjemny, to przynajmniej satysfakcjonujący. Kolejną zaletą Joomla! jest łatwość rozbudowywania CMS-a w podobny sposób, w jaki aplikacje typu CMS wprowadzają porządek w chaosie zarządzania stroną WWW.
Wpływ elastyczności na popularność Joomla! Zanim doszło do rozpowszechnienia aplikacji typu CMS, sieć uginała się pod ciężarem ogromnej ilości treści, którą trzeba było zarządzać. Tworzenie witryny w oparciu o pojedyncze strony było bardzo ograniczające i sprawiało, że zarządzanie stroną nawet średniej wielkości było niesamowicie kosztowne, jeśli chodzi o czas i zasoby. Strony dynamiczne, tworzone na zamówienie w oparciu o PHP lub Active Server Pages (ASP), były nie tylko drogie w implementacji, ale także stwarzały spory potencjał zagrożeń i błędów, przez co rozwiązania oparte na nich były niepewne. Systemy zarządzania treścią takie jak Joomla! znacząco obniżyły koszty zarządzania małymi i dużymi stronami WWW. Poprzez organizację wszystkich treści w bazie danych i daleko idące oddzielenie ich od warstwy prezentacji i kodu programu administracja z użyciem CMS-a jest elastyczniejsza niż w przypadku innych metod tworzenia stron internetowych. Twórcy Joomla! położyli szczególny nacisk na stworzenie technologii, która — zamiast być uniwersalną i spełniać wszystkie potrzeby — jest uniwersalną, dostosowywalną do własnych potrzeb. To wystarczająco złożony system, żeby można było go modyfikować, rozszerzać i dopasowywać, aby sprostać większości wymagań stawianych przed stroną WWW. Wraz z wydaniem wersji 1.5 Joomla! wysunął się na prowadzenie pośród dostępnych CMS. Zagmatwaną strukturę aplikacji znaną z poprzednich wersji zastąpiono nową platformą, dzięki której tworzenie dodatków — od szablonów, aż po wtyczki — stało się łatwe.
24
Joomla!. Profesjonalne tworzenie stron WWW
Mimo że Joomla! można wykorzystać prawie do każdego projektu strony WWW, nie znaczy to, że musi on być użyty w ten sposób. Jest takie stare powiedzenie, że jeśli jesteś młotkiem, to wszystko wygląda jak paznokieć. Istnieją zastosowania, dla których skorzystanie z Joomla! nie byłoby najlepszym wyborem. Z tego powodu książka zawiera rozdział 15. „Czego Joomla! nie potrafi". Ważne jest, żebyś był świadom ograniczeń każdego programu, zanim zaczniesz duży projekt. Wiele ograniczeń Joomla! (na przykład precyzyjne opcje zabezpieczeń) można pokonać przez połączenie własnego kodu i dostępnych rozszerzeń. Do Ciebie należy decyzja, czy pokonanie tych barier jest mądrym posunięciem lub czy nie lepszym pomysłem byłoby wybranie innej aplikacji, która zawiera już funkcje pasujące do wymagań Twojego projektu.
W wersji 1.5 wprowadzono dużo lepszy model oddzielania warstwy kodu od warstwy prezentacji. Nowa struktura ułatwia projektantom stron i grafikom tworzenie szablonów, ponieważ nie są już przesadnie obciążeni programowaniem. Deweloperzy z kolei mogą kształtować logikę systemu niezależnie od wielu aspektów warstwy prezentacji.
Dla kogo jest ta książka Jeśli miałeś już styczność z Joomla!, prawdopodobnie całkiem dobrze rozumiesz podstawy jego działania. Wiesz już, jak dodawać artykuły, zarejestrować użytkowników, dodać sekcje i kategorie, zainstalować nowy szablon lub rozszerzenie (wtyczkę, komponent lub moduł). Jest to jednak zaledwie wierzchołek góry lodowej, jeśli chodzi o potęgę Joomla!. Poszczególne obszary Twoich zainteresować będą różnić się w zależności od roli, jaką grasz w procesie tworzenia stron. Webmasterzy mogą skupić się na implementowaniu i instalowaniu strony opartej na Joomla! oraz administrowaniu nią. Projektanci stron WWW mogą kształtować projekty graficzne i warstwę prezencji, tworząc wizualnie olśniewający interfejs. Rola deweloperów wskazuje na poznanie elastyczności programowania rozszerzeń, co pozwala opanować do perfekcji sztukę ich tworzenia.
Webmasterzy Na webmasterach spoczywa prawdopodobnie największa odpowiedzialność w zakresie doskonalenia strony WWW opartej na Joomla!. Ostateczna odpowiedzialność za poprawne działanie strony spada właśnie na webmastera. Z tego powodu kluczowe jest zrozumienie technologii leżącej u jego podstaw. Niezależnie od tego, czy prowadzisz hobbystyczną stronę, czy jesteś administratorem zarządzającym wieloserwerową instalacją Joomla!, większość informacji zawartych w tej książce będzie dla Ciebie użyteczna. Joomla! jest złożonym systemem. Mimo iż instalacja systemu nie stanowi bariery nawet dla początkujących, to zaawansowane funkcje pozostają dla nich po prostu niedostępne. Będziesz mieć szansę zoptymalizowania instalacji Joomla!, aby osiągnąć maksymalną wydajność, ale także aby zabezpieczyć stronę przed hakerami.
Rozdział 1. • Wprowadzenie do Joomla!
25
Być może projektanci lub deweloperzy Joomla! pracują dla Ciebie, w takiej sytuacji książka ta dostarczy Ci doskonałych wskazówek, co można osiągnąć w ramach platformy. Jeśli grasz każdą z wymienionych ról, praktycznie wszystkie informacje będą dla Ciebie ważne. Z pewnościąjednak do Twoich zadań administracyjnych będzie należeć pośrednia lub bezpośrednia administracja stroną. Jeśli jesteś webmasterem i administratorem strony WWW, skorzystaj z narzędzi i technik opisanych w tej książce, które pozwolą Ci na: •
Zbudowanie wirtualnej społeczności z wykorzystaniem technologii Joomla!. Będziesz w stanie skorzystać z internetowego trendu utożsamianego przez takie witryny jak MySpace i YouTube.
•
Zarządzanie serwerem WWW, stroną Joomla! i bazą danych SQL, a także uczynienie z tej konstrukcji sprawnie działającej maszyny.
•
Stworzenie kopii zapasowej danych, plików strony i opcji konfiguracyjnych.
•
Skorzystanie z technik SEO, które poprawią pozycjonowanie Twojej strony i zoptymalizują Joomla! pod kątem robotów internetowych.
•
Dbanie o bezpieczeństwo strony dzięki poprawnym zabezpieczeniom i obronie przed atakami hakerów.
•
Poznanie technik wykorzystywanych przez profesjonalne witryny oparte na Joomla! do prowadzenia strony i utrzymywania jej popularności.
•
Dostrojenie systemu Joomla! w celu uzyskania maksymalnej wydajności. Omówione zostaną tematy od optymalnego planowania, po odpowiednie ustawienie poszczególnych serwerów.
•
Równoważenie i testowanie obciążenia strony Joomla!, zarządzanie wieloma stronami jednocześnie.
•
Określenie, czy Joomla! spełnia Twoje potrzeby lub czy powinieneś zainwestować w CMS wyższej klasy.
Wiele aspektów administracyjnych jest poruszanych w tej książce w ramach opisów danej technologii (np. autoryzacji LDAP). Upewnij się, że przynajmniej pobieżnie zapoznałeś się z materiałami, które nie są bezpośrednio związane z Twoimi zadaniami lub umiejętnościami.
'rojektanci stron WWW Rola projektantów jest bardziej specyficzna niż webmasterów. Często to webmaster nakreśla kierunek rozwoju i funkcjonalność strony. Projektant jest w takiej sytuacji wybrany przez osobę, firmę lub organizację, aby stworzyć wygląd strony — warstwę prezentacji, która spełnia określone potrzeby. W przypadku Joomla! projektanci dysponują świetną platformą do publikacji i zarabiania na swoich pracach — rynek szablonów Joomla!. Liczba dostawców komercyjnych szablonów jest ogromna, a sam obszar działalności zdaje się całkiem dochodowy.
26
Joomla!. Profesjonalne tworzenie stron WWW Większość komercyjnych stron z szablonami wykorzystuje model subskrypcji, w którym klienci płacą miesięczny lub roczny abonament, aby uzyskać nieograniczony dostęp do szablonów dostępnych na stronie. Taki model jest bardzo korzystny dla projektantów, ponieważ strona musi stale uaktualniać ofertę nowymi szablonami, aby utrzymać dotychczasowych klientów. W ten sposób regularną pracę znajduje wielu projektantów. Jeśli jesteś jednym z nich, znajdziesz w tej książce wiele użytecznych informacji, które pozwolą Ci być na bieżąco w Twojej profesji. Nowi projektanci zdobędą bogate informacje na temat planowania i konstrukcji szablonów. Ze względu na to, że skuteczny szablon to połączenie kodu PHP, grafiki i CSS, zaprojektowanie dobrego szablonu wymaga sporej ilości planowania i sprawnego kierowania. Czytając tę książkę, napotkasz opisy wszystkich etapów tego procesu. Nawet jeśli dotychczas nie programowałeś, wskazówki dołączone do tej książki pozwolą Ci skonstruować szablon w stylu pług and play1. Dopóki rozumiesz ogólną zasadę działania przedstawionego kodu, będziesz w stanie wkleić go w odpowiednie miejsce. Zaawansowani projektanci będą mieli okazję poprawienia swoich umiejętności dzięki radom opartym na doświadczeniu, a także dodatkowej funkcjonalności, takiej jak obsługa technologii Ajax na stronach Joomla!. Dalsze wskazówki w rozdziałach poświęconych technikom SEO i internacjonalizacji zmienią Cię w specjalistę w Twojej dziedzinie. Nabędziesz nowych umiejętności i pozyskasz informacje w zakresie projektowania stron. Są to:
1
•
Modyfikowanie kodu i arkuszy stylów istniejących szablonów.
•
Proces tworzenia nowego szablonu od podstaw, niezbędne minimum dla działającego szablonu, a także techniki stosowane w zaawansowanych szablonach do omijania ograniczeń.
•
Procedura autoryzacji nowych modułów, które mogą zostać użyte w dowolnym szablonie.
•
Wykorzystanie nowej technologii Ajax do komunikacji klient-serwer, aby wzbogacić stronę Joomla! o aktywny, nowoczesny interfejs.
•
Metody planowania, które zagwarantują obsługę treści w wielu językach i internacjonalizację.
•
Dopasowywanie dostępnych rozszerzeń (takich jak sondy, reklamy i galerie zdjęć) do ogólnego projektu strony w celu osiągnięcia jak najlepszego jej wyglądu.
•
Szczegóły dostosowywania CSS mające zapewnić stronie spójny wygląd.
•
Wskazówki na temat zgodności z Wytycznymi dotyczącymi Dostępności Treści Internetowych ( W C A G — Web Content Accessibility Guidelines), ułatwiające korzystanie ze strony ludziom niepełnosprawnym.
Z ang. podłącz i używaj — oznacza zdolność wstawienia nowego elementu w istniejący system bez koniecznej modyfikacji pozostałych elementów — p r z y p . tłum.
Rozdział 1. • Wprowadzenie do Joomla!
27
Projektanci stron WWW są zatrudniani zazwyczaj na wczesnym etapie tworzenia strony, a im więcej wiedzą o Joomla!, tym lepiej można w sumie wykorzystać bogactwo tej technologii. Szczególnie w dziedzinie tworzenia szablonów wykorzystanie możliwości drzemiących w Joomla! może doprowadzić do stworzenia strony, która nie tylko spełni potrzeby, ale także będzie łatwa w zarządzaniu i przyszłym uaktualnianiu. Projektanci są w stanie w największym stopniu wykorzystać rozszerzenia pisane w celu rozbudowy systemu.
eweloperzy stron WWW Ludzie zajmujący się programowaniem stron z pewnością docenią, że platforma Joomla! jest najelastyczniejsza, a także najprostsza pod względem rozwijania i pisania kodu ze wszystkich dostępnych CMS-ów. Od wprowadzenia wersji 1.5 cała struktura Joomla! została napisana od nowa po to, by stworzyć coś więcej niż tylko CMS. CMS Joomla! jest właściwie aplikacją opartą na szerszej platformie Joomla!. Oznacza to, że możesz, korzystając z tej platformy, zaprogramować projekt dowolnej wielkości — włączając w to stworzenie całkiem nowego CMS-a (jeśli byłyby powody). Nie musisz zaczynać od początku. Badanie i zmienianie istniejących rozszerzeń Joomla! (dodatków, komponentów i modułów) jest prawdopodobnie najlepszym sposobem wzbogacenia swoich umiejętności. Kiedy zrozumiesz, w jaki sposób rozszerzenia funkcjonują w systemie, świat Joomla! stanie przed Tobą otworem. Zagłębiając się w lekturę tej książki, dowiesz się, jak stworzyć bardziej zaawansowane rozszerzenia, a nawet jak napisać sprytną implementację ajaksowego interfejsu po stronie klienta. Dowiesz się także, w jaki sposób możesz skorzystać z wzorców projektowych Joomla!, aby udoskonalić własny kod. Po opanowaniu interfejsu rozszerzeń będziesz mógł przejść do modyfikacji samego systemu Joomla! albo dołączyć do grupy deweloperów. Dostępnych jest bardzo wiele sposobów współpracy z ponad 45 000 zarejestrowanych deweloperów Joomla!. Kiedy dotrzesz do ostatniej strony tej książki, znajdziesz się pod względem umiejętności w górnej części tej piramidy. Większy stopień wykorzystania Joomla! idzie w parze z bogatszymi perspektywami zatrudnienia, ponieważ internetowy rynek pełen jest ofert związanych z Joomla!. Niezaprzeczalnie jest to bodziec ekonomiczny wzmacniający chęć poprawy własnych umiejętności. Jeśli chodzi o domenę programowania stron WWW, Professional Joomla! nauczy Cię: •
Tworzyć własne dodatki w oparciu o przykłady, od najprostszej wtyczki Hello World!, aż do zaawansowanego tworzenia rozwiązań e-commerce.
•
Wykorzystywać profesjonalne techniki tworzenia kodu i wzorce projektowe w Twoich projektach Joomla!.
•
Używać skryptów i technologii Ajax do żywej komunikacji ze stroną klienta, bez potrzeby ponownego generowania strony.
•
Swobodnie posługiwać się kodem platformy Joomla!, aby umożliwić modyfikacje systemu.
•
Wykorzystywać i modyfikować dostępne rozszerzenia w celu dodania funkcjonalności, której brak w domyślnej instalacji Joomla!.
28
Joomla!. Profesjonalne tworzenie stron WWW •
Adaptować środowisko programistyczne PHP do potrzeb programowania Joomla! z wykorzystaniem możliwości tworzenia dokumentacji i poprawnego pisania kodu.
•
Implementować system kontroli z wykorzystaniem oprogramowania Subversion (SVN) w celu umożliwienia zespołowego tworzenia szablonu, dodatku, komponentu lub modułu dla Joomla!.
•
Zarządzać profesjonalnym wdrożeniem — od serwera testowego, aż do serwera produkcyjnego.
Deweloperzy stron WWW znajdą w Joomla! bogate źródło osobistej i zawodowej satysfakcji. Wielu z nich miało już kontakt z Joomla! i zainwestowało sporo wysiłku w opanowanie podstaw. Ta książka dostarczy Ci jasnych wskazówek dotyczących umiejętności, których potrzebujesz przy minimalnej ilości niejasności lub dodatkowej pracy.
Joomla! w wersji 1.0 a użytkownicy Mambo Czytelnicy, którzy wcześniej nie mieli styczności ze światem CMS, powinni wiedzieć, że projekt Joomla! został zapoczątkowany w 2005 roku, kiedy grupa deweloperów opuściła społeczność Mambo i zabrała ze sobą kod źródłowy będący u podstaw tego CMS-a. Różnica między pierwszym wydaniem Joomla! a Mambo w wersji 4.5.2.3 była minimalna. Nawet • rozszerzenia obu systemów były kompatybilne. Prawdziwa zmiana nadeszła wraz z Joomla! 1.5. Cała architektura została przebudowana w oparciu o nową, obiektową platformę PHP. Zmiany były na tyle znaczące, że żadne z rozszerzeń, a nawet żaden z szablonów przeznaczonych dla Joomla! nie mogły pracować w nowej wersji (pomijając tryb spuścizny). Unowocześniona architektura stworzyła możliwości doskonalenia i rozbudowy obecnych szablonów, wtyczek, komponentów lub modułów. Ta sytuacja jest w stanie przyprawić także o ból głowy, ponieważ rzeczy, które dotychczas działały bezbłędnie, nie zadziałają w nowym systemie. Jako webmaster, projektant lub twórca stron internetowych musisz rozumieć konsekwencje płynące ze stworzenia nowego programu na bazie systemu Mambo. Możesz być zmuszony do uruchomienia na serwerze Joomla! trybu spuścizny, aby sprostać wymaganiom swoich klientów, jeśli potrzebne elementy nie zostały jeszcze uaktualnione do pracy w nowym środowisku. Jeśli zdecydujesz się na ten krok, utracisz rozszerzoną funkcjonalność i zwiększoną wydajność, które oferuje nowy system (a straty są znaczące). Starałem się w miarę możliwości dołączyć wskazówki, które pozwolą Ci płynnie przejść ze starego systemu do nowego. Jedną z najwspanialszych rzeczy w środowisku open source jest fakt, że jest open source — masz dostęp do kodu źródłowego. Jeśli napotkasz komponent, którego potrzebujesz, ale jest on niekompatybilny z nowym systemem Joomla!, a dysponujesz wystarczającą motywacją i czasem, to nie wszystko stracone. Teoretycznie możesz zaadaptować taki komponent samodzielnie. W tej książce w odpowiednich rozdziałach dostarczam wskazówek i wytycznych, które pomogą użytkownikom przejść z Joomla! 1.0 lub Mambo do najnowszej wersji.
Rozdział 1. • Wprowadzenie do Joomla!
29
Uruchomienie strony o wysokim natężeniu ruchu w oparciu o poprzednie wersje Joomla! było problematyczne, ponieważ Joomla! miał tendencję do znacznego zwalniania przy dużym obciążeniu. W oryginalnej wersji aplikacja była przetwarzana jako jeden monolityczny blok kodu PHP przy każdym wywołaniu strony — niezależnie od tego, czy dana strona wymagała wszystkich funkcji, czy nie. W wersji 1.5 grupa deweloperów Joomla! zajęła się tym problemem i praktycznie go rozwiązała. Kod został poddany refaktoryzacji, dzięki czemu ładowany i uruchamiany jest tylko ten fragment i te moduły, które są niezbędne do wygenerowania żądanej strony. Nowa metoda spowodowała ogromny wzrost wydajność na dużych stronach.
Zsumowanie System Joomla! jest platformą, którą opanować mogą ludzie mający różne cele, np. webmasterzy, projektanci i deweloperzy stron WWW. Niezależnie od powodów, którymi kierujesz się, gdy chcesz skorzystać z Joomla!, w tym rozdziale mogłeś znaleźć informacje, które pomogą Ci: •
Zrozumieć system CMS, jakim jest Joomla!, a także informować innych o zaletach korzystania z niego. Świat Web 2.0 opiera się na automatycznym zarządzaniu treścią, dynamicznej interakcji i wirtualnych społecznościach. Joomla! jako CMS umożliwia skorzystanie z nowych technologii każdemu — od pojedynczych osób, aż po duże organizacje — po zaskakująco niskiej cenie, za darmo.
•
Poprawić swoje umiejętności webmasterskie w tworzeniu strony Joomla! i administrowaniu nią. Bez względu na to, czy jesteś samodzielnym webmasterem ! z hobbystycznym nastawieniem, czy osobą zarządzającą wieloserwerową instalacją Joomla!, dowiesz się z tej książki, jak budować internetową społeczność, zarządzać serwerem, zabezpieczyć treści i użytkowników oraz zoptymalizować stronę pod kątem pozycjonowania.
•
Udoskonalić wygląd i zachowanie strony Joomla!, jeśli jesteś jej projektantem. Nauczysz się nie tylko tworzyć i modyfikować szablony Joomla! (dla zabawy, w ramach kontraktu lub dla jednej z wielu komercyjnych stron z szablonami), ale także zrozumiesz, jak zapewnić zgodność swojej strony z wymaganiami internacjonalizacji i dostępności dla osób niepełnosprawnych.
•
Tworzyć dodatki, komponenty i moduły, jeśli jesteś deweloperem stron Joomla!. Poznasz strukturę platformy Joomla! w stopniu, który pozwoli Ci wprowadzać zmiany w samym systemie. Ponieważ prawie na każdy aspekt działania systemu wpływa kod w plikach CSS lub PHP, możliwe zmiany są prawie nieograniczone.
•
Uaktualnić kod źródłowy, szablony i inne technologie działające z wcześniejszymi wersjami Joomla! lub nowymi instalacjami Mambo.
W rozdziale 2. przedstawiono szczegóły instalacji i konfiguracji strony Joomla!. Uruchomienie podstawowej strony jest banalne, jednak dobranie ustawień, które zapewnią optymalną wydajność, jest jednocześnie sztuką i nauką. Dzięki dokładnemu zapoznaniu się z wyborem ustawień dla różnych serwerów możesz sprawić, że Twoja instalacja Joomla! będzie działać jak dobrze naoliwiona maszyna.
30
Joomla!. Profesjonalne tworzenie stron WWW
2 Szczegóły instalacji i konfiguracji Joomla! do poprawnego działania wymaga połączenia czterech technologii serwerowych. Jeśli Apache nie jest w stanie uruchomić PHP lub PHP nie może się połączyć z MySQL albo Joomla! nie może zapisywać danych w bazie MySQL, system zawiedzie. W tym rozdziale opisano konfigurację każdego elementu systemu, bez której nieumożliwe jest poprawne funkcjonowanie całości. Działanie każdego serwera kontrolowane jest listą dyrektyw i opcji konfiguracyjnych, a ich optymalny dobór zapewni właściwe funkcjonowanie systemu. W tym rozdziale opisano także różne techniki poprawy poszczególnych aspektów systemu, tak aby serwer sprawniej odpowiadał na żądania, dostarczając najlepszych wrażeń z użytkowania.
¡ztery serwery systemu Joomla! Konstelacja serwerów środowiska Joomla! (zobacz rysunek 2.1) to cztery dynamicznie współpracujące elementy: serwer WWW, silnik wykonywania skryptów PHP, serwer baz danych MySQL i serwer Joomla!. Termin serwer nie jest traktowany dosłownie, ponieważ ani PHP, ani Joomla! nie są uruchamiane jako niezależne serwery. Taka szersza definicja pozwoli Ci lepiej zrozumieć działanie i proces konfiguracji, ponieważ zarówno PHP, jak i Joomla! funkcjonują w roli serwera stron i wymagają oddzielnej konfiguracji. Podstawą systemu jest serwer WWW, któiy dostarcza funkcjonalności związanej z obsługą HTTP. Joomla! może działać poprawnie zarówno w oparciu o Apache Web Server, jak i Microsoft Internet Information Server (ISS). ISS w przeciwieństwie do Apache, który działa na dziesiątkach systemów operacyjnych (Windows, MacOS i wielu wariantach Uniksa), jest ograniczony wyłącznie do platformy Windows. Oprócz obsługi protokołu HTTP zadaniem serwera WWW jest także uruchamianie silnika PHP i serwera Joomla!. Wewnątrz systemu Joomla! silnik PHP uruchamia aplikację Joomla!, która korzysta z wtyczki do PHP, aby komunikować się z serwerem MySQL. W bazie danych MySQL zapisane są wszystkie dane Joomla!, tylko opcje konfiguracyjne zapisane są w pliku configuration.php.
32
Joomla!. Profesjonalne tworzenie stron WWW
Rysunek 2.1. Cztery serwery, z których składa się system Joomla!
Opcja 1
Opcja 2
Minimalne wymagania dla każdego z serwerów składających się na Joomla!: •
PHP w wersji co najmniej 4.3.x z aktywowanymi modułami MySQL, XML i Zlib;
•
MySQL w wersji co najmniej 3.23.x;
•
Apache w wersji co najmniej 1.13.19.
Twoje decyzje dotyczące instalacji i konfiguracji będą miały daleko idący wpływ na sukces Twojej strony opartej na Joomla!.
Decyzje podczas instalacji Prawdopodobnie masz już jakieś doświadczenia z instalacją Joomla!, mimo to poniżej opisano pokrótce procedurę instalacji, dzięki czemu możesz rozważyć inne opcje. W momencie planowania przyszłej konfiguracji musisz zdecydować się na instalację lokalną lub zdalną, wybrać platformę, na której zostanie uruchomiony Joomla!, określić metodę przeprowadzenia instalacji, a w końcu wybrać serwer WWW. Mimo iż większość z tych wyborów zależy od wymagań docelowego środowiska, a nie od osobistych preferencji, powinieneś poznać wady i zalety każdego rozwiązania, aby być świadomym jego ograniczeń. Zwróć uwagę na różnice pomiędzy poszczególnymi środowiskami, ponieważ często inną platformę wykorzystuje się na etapie testów, a inną na serwerze
Rozdział 2. • Szczegóły instalacji i konfiguracji
33
produkcyjnym. Częstym wyborem dla środowiska testowego jest Windows lub MacOS, podczas gdy ostatecznie strona działa pod kontrolą serwera WWW uruchomionego w Linuksie. Dzięki dostrzeżeniu różnic na wczesnym etapie prac łatwiej będzie Ci później przenieść wyniki do innego środowiska.
.okalnalub zdalna instalacja Pierwszą decyzją podczas instalacji jest określenie, czy Joomla! zostanie zainstalowany lokalnie, czy zdalnie. Być może masz konto u dostawcy usług internetowych, np. GoDaddy.com lub SiteGround.com, na którego serwerze możesz zainstalować stronę. W takim przypadku niezbędne oprogramowanie, włączając w to PHP i MySQL, jest już zainstalowane i gotowe do użycia. Aktywacja Joomla! sprowadza się wtedy do skopiowania plików instalacyjnych na serwer i przeprowadzenia instalacji. Jeśli masz zamiar zainstalować Joomla! lokalnie, masz dużo więcej pracy do wykonania. Instalacja lokalna ma kilka zalet: •
Dowolność konfiguracji — Możesz dopasować działanie każdego z serwów, aby najlepiej spełniał Twoje potrzeby. Dostawcy usług internetowych rzadko pozwalają na zmianę kluczowych opcji konfiguracyjnych, chcą uniknąć potencjalnego zagrożenia dla systemu i pozostałych użytkowników.
•
Dogłębna znajomość systemu — Zdecydowanie lepiej poznasz system, który skonfigurowałeś i którym samodzielnie zarządzasz. Możesz wykorzystać tę wiedzę, nie tylko aby uzyskać lepszą wydajność, ale także lepiej zrozumieć możliwości i ograniczenia systemu, które przekładają się na tworzenie modułów, komponentów i dodatków.
•
Potencjalna wydajność serwera — Uruchomienie własnego systemu pozwala przeznaczyć maksimum zasobów dla strony Joomla!. W przypadku zdalnej instalacji prawdopodobnie będziesz musiał dzielić się połączeniem z bazą danych i internetem ze sporą liczbą innych użytkowników. Może to doprowadzić do spowolnienia serwerów i pogorszenia wydajności w czasie szczytowego obciążenia.
•
Elastyczność tworzenia kopii zapasowych — W przypadku instalacji lokalnej możesz skorzystać z bogatych opcji tworzenia kopii zapasowych, od ich ręcznego kopiowania plików, aż po użycie dodatkowego dysku w macierzy RAID. Tworzenie kopii zapasowych zdalnej instalacji może być nużące i wymagać samodzielnego skopiowania plików (przez FTP) oraz bazy danych (przez jakiś interfejs administracyjny).
Poniżej przedstawiono kilka wad instalacji lokalnej: •
Więcej pracy — Jeśli zdecydujesz się na instalację lokalną, jesteś także odpowiedzialny za konfigurację serwera i zarządzanie nim. Taka konfiguracja wymaga skutecznego podziału zasobów maszyny między elementami systemu.
•
Możliwa wydajność systemu — Chociaż w większości przypadków wykorzystanie własnego, dedykowanego serwera zapewni Ci prawdopodobnie lepszą wydajność niż instalacja zdalna, nie jest to regułą. Dostawcy usług internetowych wkładają wiele wysiłku w zapewnienie optymalnej wydajności serwerów. Często wykorzystują także droższy sprzęt, który radzi sobie z większym obciążeniem.
34
Joomla!. Profesjonalne tworzenie stron WWW •
Zabezpieczenie przed usterkami — Większość dostawców stosuje przynajmniej jeden typ redundancji w systemie, aby zagwarantować nieprzerwane działanie stron klientów. Mogą to być zapasowe serwery DNS, automatyczne macierze RAID, architektura wielomaszynowa, zapasowe baterie i wiele innych technologii, które gwarantują poprawne działanie strony w przypadku uszkodzenia jednego z elementów. Zastosowanie takich zabezpieczeń w przypadku własnego, lokalnego serwera jest trudne i kosztowne.
Jeśli chciałbyś wykorzystać instalację lokalną, a nie masz wystarczająco szybkiego łącza, sprawdź ofertę kolokacji, jaką dysponuje Twój lokalny dostawca usług internetowych (ISP). Wielu dostawców ma bardzo korzystne oferty, które pozwolą Ci za odpowiednią opłatą umieścić u nich swój serwer i podłączyć go do internetu.
Wybór platformy: Windows, Linux lub MacOS Wybór platformy może być trudny, ponieważ w grę wchodzi zbyt wiele zmiennych, aby przedstawić ich kompletną listę. Główne z nich dotyczą komfortu obsługi danego systemu operacyjnego oraz kosztów licencji (Linux jest darmowy, natomiast Windows i MacOS wymagają opłat licencyjnych). Chociaż wybór platformy może wpłynąć na wydajność, nie powinien mieć znaczącego wpływu na proces instalacji Joomla!. Większość administracji przebiega za pośrednictwem interfejsu WWW, dlatego wybrana platforma nie wpływa na interakcje z systemem. Joomla! wykorzystuje technologie PHP i MySQL, które działają prawie identycznie na wszystkich platformach. Z tego powodu zarządzanie systemem będzie praktycznie niezależne od wybranej platformy.
Instalacja poszczególnych serwerów czy instalacja łączona Możesz zdecydować się na instalację poszczególnych serwerów lub wykorzystać łączony instalator, taki jak XAMPP. Opisując proces instalacji, administratorzy często korzystają z takich akronimów, jak WAMP, LAMP lub MAMP. Skróty te określają docelową platformę, sygnalizowaną przez pierwszą literę (W= Windows, L = Linux, M - MacOS), pozostałe litery reprezentują serwery, które zostaną zainstalowane (Apache, MySQL i PHP). Najpopularniejszy łączony instalator to XAMPP, w przypadku którego X oznacza zmienną, ponieważ dostępne są wersje dla trzech różnych systemów operacyjnych. Dwa PP w nazwie „XAMPP" odpowiadają oprogramowaniom PHP i Perl, zawartym w pakiecie. Chociaż Joomla! nie wykorzystuje Perlą, nie będzie miał on znaczącego wpływu na wydajność serwera. Instalator XAMPP przezwycięża jedną z największych bolączek oprogramowania open source: kompatybilność. Deweloperzy open source notorycznie upubliczniają oprogramowanie, które samodzielnie działa stabilnie, a problem pojawia się przy połączeniu z wcześniejszymi wersjami pozostałych programów (np. nowa wersja Apache nie zadziała ze stabilną wersją PHP). XAMPP zapobiega tym problemom dzięki dostarczeniu wersji w pełni ze sobą zgodnych. Oznacza to, że możesz pobrać z internetu jeden instalator, uruchomić go i uzyskać kompletny, działający system w bardzo krótkim czasie.
Rozdział 2. • Szczegóły instalacji i konfiguracji
35
Chociaż instalator XAMPP umożliwia łatwą i szybką instalację w środowisku testowym, ma kilka poważnych wad. Najważniejszą jest bezpieczeństwo. Domyślne instalacje serwerów zawartych w paczce XAMPP są podatne na ataki różnych typów. Ponadto instalowanych jest wiele niepotrzebnych aplikacji (takich jak Perl), rozszerzeń i modułów, które mogą spowolnić Twój system. Ilość miejsca zajmowana na dysku twardym może być nawet trzy razy większa niż w sytuacji, kiedy instalowałbyś każdy z serwerów oddzielnie. Jeśli jesteś początkującym użytkownikiem, instalator XAMPP jest fantastycznym narzędziem, które pozwoli Ci zacząć pracę w bardzo krótkim czasie. Jeżeli jesteś odrobinę bardziej zaawansowany, to pomijając pojedyncze problemy, które napotkasz, indywidualna instalacja może być dobrym wyborem. Pamiętaj o tym, że decyzja odnośnie do platformy wpływa także na sposób, w jaki będziesz przeprowadzać instalację. Przykładowo w MacOS jest już zainstalowany serwer Apache — trzeba go tylko aktywować. Podobnie w przypadku ISS, który jest prawdopodobnie zainstalowany na platformie Windows. W najgorszym wypadku domyślnie zainstalowany serwer może powodować konflikt z tym, który chcesz zainstalować. W innej sytuacji będzie tylko zbędnym oprogramowaniem.
Wybór serwera WWW: Apache czy Microsoft Internet Information Server (IIS) Jeśli uruchamiasz Joomla! na platformie Windows, musisz dokonać wyboru serwera WWW: Apache albo Microsoft Internet Information Server (IIS). Jest to trudne z kilku powodów. Główną przyczyną dla której warto wykorzystać Apache w systemie Windows, jest solidnie potwierdzona kompatybilność Joomla! i Apache. Jest jednak kilka elementów, z powodu których mógłbyś zdecydować się na IIS: •
Natywna obsługa SSL — Szyfrowanie SSL jest dostępne natywnie w IIS na platformie Windows. W czasie pisania tej książki użytkownik Apache byłby zmuszony do ręcznej kompilacji serwera w celu zyskania obsługi Secure Sockets Layer (SSL). Skompilowana wersja Apache dla Windowsa domyślnie nie zawiera tej opcji.
•
Dostrojona wydajność — Microsoft poświęcił dużo czasu i pieniędzy na zoptymalizowanie IIS pod kątem maksymalnej wydajności w Windowsie. Apache działa w tym środowisku dobrze, jednak optymalizowany jest głównie pod względem platformy linuksowej i innych wariantów Uniksa.
•
Zintegrowana ochrona katalogów — IIS został napisany z myślą o natywnej obsłudze bezpieczeństwa katalogów w Windowsie, działa nawet w połączeniu z technologią Active Directory. Wykorzystanie Apache wymaga częściowej integracji zasad zabezpieczeń z systemem Apache.
•
Wbudowany serwer FTP — Domyślna instalacja IIS zawiera serwer File Transfer Protocol (FTP), który może być użyteczny w zarządzaniu systemem Joomla!, a także może dołączać dodatkową funkcjonalność do wielu różnych rozszerzeń (np. opcja pobierania lub wysyłania w komponencie galerii zdjęć).
•
Większość komputerów ma już IIS zainstalowany — Na platformie Windows większość komponentów niezbędna do uruchomienia IIS jest już zintegrowana z systemem operacyjnym. Oznacza to, że narzut IIS jest bardzo mały, ponieważ liczba dodatkowych elementów, które zostaną zainstalowane w systemie, jest niewielka.
36
Joomla!. Profesjonalne tworzenie stron WWW Jeśli chcesz zainstalować Joomla! w systemie Windows, sprawdź najpierw, czy IIS działa poprawnie. Możesz to zrobić, otwierając Panel Sterowania/Dodaj lub usuń programy. Kliknij przycisk Dodaj/Usuń składniki systemu Windows, znajdź na liście pozycję Internetowe Usługi Informacyjne i upewnij się, czy jest zaznaczona. Jeśli nie, zaznacz j ą i przeprowadź instalację. Aby sprawdzić, czy IIS działa poprawnie, uruchom w przeglądarce poniższy adres, powinieneś zobaczyć domyślą stronę: http://local host
Zanim skorzystasz z Joomla!, musisz zainstalować PHP i MySQL, co doda usługę uruchamiania skryptów i baz danych. PHP możesz pobrać z poniższej strony: http://www.php.net
Instalacja PHP przebiega podobnie jak dla każdego innego programu. Na stronie Web Server Setup wybierz wersję IIS, jak pokazano na rysunku 2.2. Instalator automatycznie skonfiguruje IIS do współpracy z PHP. Rysunek 2.2. Wybierz wersję IIS, na której będzie działać PHP
Mimo iż po zakończeniu instalacji PHP nie zostaje wyświetlony komunikat o potrzebie ponownego uruchomienia komputera, należy to zrobić. Dzięki temu zmienna systemowa Path będzie wskazywać na nowy katalog PHP. Jeśli masz trudności z uruchomieniem PHP, sprawdź zawartość zmiennej Path, otwierając Panel Sterowania/System i klikając przycisk Zmienne środowiskowe w zakładce Zaawansowane. Zmień wartość zmiennej Path (zobacz rysunek 2.3), by wskazywała na katalog z zainstalowanym PHP. Najprawdopodobniej znajduje się on w głównym katalogu dysku (przykładowo c:\) lub w podkatalogu programów (np. c:\Program Files). Jeśli silnik PHP nadal nie działa poprawnie (zobacz następny podrozdział, aby dowiedzieć się, jak to sprawdzić), sprawdź, czy w folderze Windows znajduje się plik PHP.ini. Jeśli tak, upewnij się, że zawarte w nim wpisy wskazują na właściwy katalog. Spróbuj skopiować PHP.ini, jeśli go tam nie ma. Po każdej zmianie powinieneś zatrzymać serwer i uruchomić go ponownie, aby mieć pewność, że rozszerzenie PHP działa z nowymi ustawieniami.
Rozdział 2. • Szczegóły instalacji i konfiguracji Rysunek 2.3. Edytuj wartość zmiennej Path, aby upewnić się, że zawiera katalog PHP
Żrnlenrte
37
E l
środowiskowe
Zmienne użytkownika dla Mr, Heh Zmienna LANG PATH TEMP TMP
Wartość
Pl
C:\Documents and Settings\Mr. Heh\Us... C:\Documents and 5ettings\Mr. Heh\Us...
Edytuj Zmienne systemowe Zmienna NUMBER OS j f ^ PATHEXT ! PROCESSOR_A...
Windows_NT .COM; .EXE; .BAT; .CMD; ,VBS;. VBE;. J5;.... x86 Edytuj
| |
Anuluj
Etapy instalacji Joomla! Instalacja Joomla! jest względnie prosta dla doświadczonego użytkownika. W tym podrozdziale opisano pokrótce poszczególne etapy instalacji, co pozwoli Ci zapoznać się z procesem instalacji, jeśli nie miałeś dotychczas żadnych doświadczeń w tej dziedzinie. Rozpocznij instalację od pobrania aktualnej wersji Joomla! (z www.joomla.org) na dysk twardy. Rozpakuj archiwum (będzie to plik .zip lub .tar.gz albo ,tar.bz2), następnie umieść pliki Joomla! w katalogu serwera WWW. W przypadku instalacji zdalnej możesz wykorzystać program FTP, taki jak darmowa FileZilla, aby umieścić pliki w głównym katalogu serwera WWW. Zanim rozpoczniesz instalację na zdalnym serwerze, powinieneś sprawdzić, czy PHP działa poprawnie. Możesz łatwo to zrobić, tworząc plik w edytorze tekstu (takim jak Notatnik) o nazwie test.php w którym umieścisz linię . Zapisz plik i wyślij go na zdalny serwer. Po wywołaniu tego pliku przez przeglądarkę (wpisując adres URL taki jak /¡«p://www.przyklad.com/test.php,) zobaczysz stronę z pogrupowanymi parametrami PHP. Jeśli PHP nie działa poprawnie, skontaktuj się z dostawcą usługi. Po skończeniu próby upewnij się, że usunąłeś ten plik, ponieważ niepowołane użycie może zdradzić hakerowi wiele informacji na temat Twojego serwera WWW. Informacje ze strony phpinfo() można w razie potrzeby bezpiecznie odczytać w interfejsie administracyjnym Joomla!. Po skopiowaniu plików do głównego katalogu strony WWW uruchom w przeglądarce internetowej plik index.php. Powinieneś zobaczyć pierwszy ekran procesu instalacji, jak przedstawiono na lysunku 2.4. Zawiera listę wyboru z dostępnymi językami'. Zaznacz wybrany język i kliknij przycisk Dalej, aby przejść do kolejnego kroku. 1
Polski pakiet językowy dla zaplecza i strony głównej można pobrać ze strony — przyp. tłum.
http://www.joomla.pl/
38
Joomla!. Profesjonalne tworzenie stron WWW
Rysunek 2.4. Pierwsza strona instalacji pozwala na określenie języka
?
'i J O O T
r T » Q !
Kroki 1 : Jçzyk
,
. . . irlSi313Cj3
Wersja 1.5
Wybierz język Wybierz jeżyk
2 : Pi zetjlail u s t a w i e el-GR- Greek en-GB - English (United Kingdom) eo-XK - Esperanto e s - E S - S p a n i s h ( E s p a ñ o l internacional) e u - E S - B a s q u e (Euskara estandarra) fa-IR-Persian^jU) fi-FI - Finnish ( S u o m i ) : f r - F R - F r e n c h (Fr) ; he-IL- Hebrew(IL) hi-IN - D e v a n a g a r i / H i n d i (India) j h r - H R - C r o a t i a n (Hr) ; hu-HU - Hungarian (Magyar) j it-IT - Italian (Italy) Ija-JP - Japanese(JP) l o - L A - Lao ('.'í."í:',.) i I t - L T - Lithuanian Iv-LV - Latvian
3 : Licencja 4 : Biaza d a n y c h 5 : U s t a w i e n i a FTP 6 : Konłtłjiii a c j a 7 : Zakończ
i n b - N O - Norsk bokmSl (Norway) nl-NL - Nederlands (NL-BE)
Joomla! jest Wolnym Oprogramowaniem udostępnianym na licencji GNU/GPL.
Następny ekran (zobacz rysunek 2.5) umożliwi Ci sprawdzenie przed rozpoczęciem instalacji, czy wszystkie niezbędne elementy systemu działają poprawnie. Jeśli ustawienie któregoś z parametrów koliduje z wymaganiami Joomla!, w podrozdziale „Konfiguracja PHP" poszukaj wyjaśnienia opcji, które trzeba poprawić. Rysunek 2.5. Ekran sprawdzania przed instalacją potwierdzi, czy wszystkie niezbędne funkcje działają poprawnie
• M l V » W W 'iflniiir-t isiaiai/ja
Kroki 1 : Jeżyk
Przegląd ustawień
• Wersja 1.5
Sprawdź ponownie
O
O 'Potnij
Dalej
P r z e g l ą d u s t a w i e ń d l a J o o m l a ! 1.5.0 P r o d u c t i o n S t a b l e [ K h e p r i ]
. 2 : Przegląd ustawień 3 : Licencja
wyróżnione na czerwono, proszę podejmij działania w celu ich zmiany, Jeśli tego nie zrobisz instalacja Joomla! może . być niemożliwa.
4 : Baza danych 5 : Ustawienia FTP 6 : hoiifiłjui acja
Wersja PHP >=4.3,10 - obsługa kompresji zlib - obsługa XML - MySQL Domyślny język wielobajtowy Nadpisywanie funkcji wielobajtowych wyłączone
7 : Zakończ Zalecane ustawienia: Joomla! może nadal działać mimo, ze ustawienia Twojego serwera nie są do końca niedostosowanym środowisku może KCW !*spoctarv\'5ne próbie?:,y.
Bieżące Wy lar zone Włączone Włączone Wyłączone Wyłączone
Wyłączone Wyłączone Wyłączone Wyłączone
Kolejny etap wymaga wyrażenia zgody na warunki Powszechnej Licencji GNU. Po kliknięciu Dalej zostaniesz przeniesiony do ekranu konfiguracji bazy danych (zobacz rysunek 2.6). Możesz tutaj ustawić adres serwera MySQL (w przypadku instalacji lokalnych jest to często local host), wpisać nazwę użytkownika bazy danych i hasło. Zwróć uwagę, że niektórzy dostawcy usług internetowych nie pozwalają na tworzenie baz danych przez programy. W takiej sytuacji utwórz bazę ręcznie, a jej nazwę wpisz w odpowiednie pole. Instalator Joomla! utworzy wewnątrz niej niezbędne tabele. W zakładce Dodatkowe ustawienia, na dole ekranu znajdziesz opcje umożliwiające utworzenie kopii lub usunięcie istniejących danych w bazie.
Rozdział 2. • Szczegóły instalacji i konfiguracji
39
lysunek 2.6. Ekran konfiguracji bazy danych umożliwia Ci wprowadzenie danych dostępu do konta i nazwę bazy
Kroki
Konfiguracja bazy danych
1 : Język
Ustawienia
potaczenia:
2 : P i zeyi«i
P o d s t a w o w e nstat wymaga czterech prostych kroków,,,
3 : Licencia -I : B a z a dat t y c h 5 : Ustawienia FTP 6 : K o i if iyt ii a c i a 7 : Zakończ 1
W tym ktoku poświęconym I onhgur äcii bazy danych, proszę podaj adres serwera. na którym Joomla! ma być zainstalowany. Następnie podaj nazwę użytkownika MySQL, hasło oraz nazwę bazy danych, którą ma używać Joomla!. leśii Twój serwer posiada ograniczoną liczbę baz danych użyi toznych w zedrostkow tabel żeby zainstalować kilka serwisów Joomla! przy użyciu jednej bazy danych, Określisz je w ustawieniach dodatkowych. Tam możesz również oto eślić sposób w jaki Joomla! potraktuje istniejące tabele o tym samym co wybr any przedrostiu.
Typ bazy danych
mysql
v
Nazwa serwera
>; iacuJhoat
localhost Nazwa użytkownika
iroot
Nazwa bazy danych joomla15|
Konfiguracja główna (zobacz rysunek 2.7) polega na ustawieniu kluczowych parametrów strony. Możesz tutaj ustawić jej nazwę, hasło administratora, a także wczytać przykładowe dane. Po kliknięciu Wczytaj przykładowe dane w bazie danych MySQL zostaną zapisane przykładowe dane. W ten sposób możesz się upewnić, że komunikacja z serwerem baz danych przebiega bezbłędnie. Rysunek 2.7. Na ekranie konfiguracji głównej można ustawić nazwę strony, hasło administratora, a także wczytać przykładowe dane
Główna konfiguracja Narwa
witryny:
Wpis2 lazw^ Twoje} witryny.
www JoomlaJumpstart com
Nazwa
witryny Potwierd: email i hasło
administratora
Wpisz adres email, będzie to gjówny adres witryny i adres głównego administratora zignorować tą seteji;, ponieważ twoje beda przeniesione z poprzedniego ser
Z a ł a d u j p r z y k ł a d o w e d a n e . d a n e z s e r w i s u J o o m l a ! 1.0.x l u b k o p i i WAŻNE: Zaleca się instalowanie przykładowych danych. A b y to zrobić, wybierz odpowiednią opcję i zatwierdź j ą zanim przejdziesz dalej. Przed zakończeniem instalacji możesz wypełnić bazę danych ptzykładową treścią, Oto jakie są możliwości: > I W.rnv<£im> d;»t i f i i i 7 > U r i ( l n w t ' 11
zapasowej
Wczytaj ( » ) przykładowe
Wczytaj!
) Załaduj skrypt
i.
<
Instalacja zwieńczona jest infonnacją o jej zakończeniu. Na ekranie pojawiają się także przyciski kierujące na główną stronę Joomla! lub do interfejsu administracyjnego (zaplecza).
40
Joomla!. Profesjonalne tworzenie stron WWW Jeśli instalacja nie powiodła się, a na ekranie nie pojawił się żaden komunikat o błędzie, sprawdź, czy włączone jest zgłaszanie błędów w PHP (zobacz podrozdział ,, Zmiana zgłaszania błędów PHP"). Sporadycznie pojawiają się problemy, które nie są wykrywane przez system Joomla!, w takiej sytuacji tylko inspekcja błędów generowanych przez PHP (które bez ustawienia odpowiedniej dyrektywy pozostają ukryte) może pomóc Ci w zdiagnozowaniu kłopotu.
Konfiguracja Apache Web Server Aby uzyskać najlepszą wydajność serwera Joomla!, musisz zacząć od dołu: od serwera Apache. Serwer Apache jest jednym z najlepiej sprawdzonych i przetestowanych serwerów świata. Wykorzystuje się go do prowadzenia największych, lecz także najmniejszych stron internetowych. Ponad 70 procent wszystkich stron internetowych uruchamianych jest na Apache. Ze względu na ogólnoświatowe rozmieszczenie i testowanie stabilne wydania Apache są bardzo trwałe. Nawet jeśli wystąpi jakiś problem, to po jego zbadaniu okazuje się zazwyczaj, że spowodowany został błędną konfiguracją, a nie błędem w samym serwerze. Podstawowa instalacja Apache jest prosta, ale już w dopasowywaniu konfiguracji do własnych potrzeb mogą wystąpić trudności. W głównym pliku konfiguracyjnym (httpd.conf) dostępnych jest ponad czterdzieści różnych dyrektyw. Wiele z nich ma wpływ nie tylko na działanie serwera, ale także na bezpieczeństwo i wydajność.
Pliki konfiguracyjne Jeśli chcesz uzyskać najlepszą wydajność Joomla!, musisz po kolei sprawdzić wszystkie dyrektywy wykorzystywane przez serwer WWW. Ustawienia rekomendowane nie zawsze spełniają wszystkie potrzeby. Główny wpływ na konfigurację ma określenie grupy odbiorców. Czy spodziewasz się tysięcy użytkowników, którzy będą odwiedzać Twoją stronę tylko przez kilka minut? Czy może planujesz stworzenie portalu, na którym użytkownicy spędzą większość czasu poświęcanego na przeglądanie internetu? Ustawienie właściwych wartości dla niektórych parametrów, takich jak te odnoszące się do przekroczenia czasu, wymaga pewnego doświadczenia, chociaż wiele ustawień można zmienić od razu, aby ułatwić sobie życie, gdy jest się administratorem Joomla!. Trzy najważniejsze dyrektywy Joomla! to: Di rectorylndex, LogLevel i ServerRoot.
Dyrektywa Direclorylndex Ta dyrektywa pozwala ustawić, który plik będzie traktowany jako plik indeksowy. Domyślnie dyrektywa ustawiona jest na Di rectorylndex index.html. Oznacza to, że wywołanie katalogu w przeglądarce bez podania nazwy pliku spowoduje zwrócenie pliku index.html. Ponieważ do uruchomienia Joomla! konieczny jest plik index.php, musisz dodać do listy odpowiedni wpis. Podczas przeglądania pliku httpd.conf powinieneś natrafić na poniższą dyrektywę: # D ¡rectorylndex: sets the file that Apache will server if a directory is requested Directorylndex index.html
Rozdział 2. • Szczegóły instalacji i konfiguracji
41
Poprawne uruchamianie Joomla! wymaga dodania pliku indeksowego PHP do tej listy. Wstaw odwołanie do index.php tuż przed odwołaniem do pliku HTML, jak poniżej: Di rectoryIndex index.php index.html
Następnym razem, kiedy użytkownik poda adres URL bez wskazania pliku (np. http://localhost), katalog zostanie przeszukany pod kątem obecności index.php, plik index.html zostanie wykorzystany, jeśli nie uda się znaleźć pliku PHP. lyrektywa LogLevel Ustawienie LogLevel wpływa na liczbę komunikatów zapisywanych przez system w dzienniku błędów. Podczas wczesnego poznawania Joomla! lub testów w czasie wdrażania zwiększenie LogLevel może znacząco ułatwić diagnozę i usuwanie problemów. Takie działanie pozwala Ci także natychmiast wyłapać małe problemy, zamiast później, gdy ciężko obciążony system może wyolbrzymić małe wady. Jak mówi stare powiedzenie — najlepiej zabić potwora, kiedy jest jeszcze mały. Domyślnym ustawieniem LogLevel jest warn. Poniżej wymieniono osiem dostępnych ustawień (w porządku rosnącym względem liczby komunikatów): •
emerg — Zapisuj tylko krytyczne wpisy, gdy w systemie wystąpił błąd i system nie może dalej funkcjonować.
•
alert — Zapisuj ostrzeżenia wymagające natychmiastowej reakcji, aby zapobiec awarii części systemu.
•
crit — Przechowuj informacje o błędach, które mogą uszkodzić działanie serwera.
•
warn — Zapisuj wszystkie ostrzeżenia generowane przez system. Jest to domyślne ustawienie.
•
error — Przechowuj błędy dotyczące uruchamiania systemu.
•
notice — Zapisuj informacje o normalnych okolicznościach, które nie zagrażają działaniu systemu.
•
info — Dostarczaj dodatkowych informacji wraz z sugestiami optymalizacji.
•
debug — Zapisuj wszystkie komunikaty systemu, włączając w to potwierdzenie uruchamiania procesów.
Ustawienie LogLevel na danym poziomie spowoduje zapisywanie komunikatów przewidzianych dla tego poziomu i wszystkich poziomów o wyższym znaczeniu. Komunikaty należące do poziomu notice są zapisywane zawsze, niezależnie od ustawienia LogLevel. Zalecanym ustawieniem dla serwera produkcyjnego jest przynajmniej crit. Po ustawieniu na warn wpis do dziennika może wyglądać tak: [Sat Nov 18 08:16:04 2006] [error] [client 127.0.0.1] File does not exist: C:/Program Fnles/Apache Software Foundation/Apache2.2/htdocs/AVE, referer: http://www.yahoo.com
42
Joomla!. Profesjonalne tworzenie stron WWW Istnieje także dyrektywa LogFormat, która pozwala dostosować format wpisów do dziennika. W podręczniku Apache znajdziesz dokładne informacje na temat jej wykorzystania. Dyrektywa, która określa położenie i nazwę pliku dziennika błędów, nosi nazwę ErrorLog. Przydatną funkcją, dostępną za pośrednictwem ErrorLog, jest możliwość zapisywania wpisów na zdalny serwer. Możesz wykorzystać zdalny serwer jako miejsce centralnego przechowywania dzienników wielu serwerów do analizy. Przechowywanie dziennika na zdalnym serwerze uniemożliwia hakerom, jeśli uda im się włamać na któryś z serwerów, usunięcie dziennika zawierającego ślady ich działań. Aby skorzystać z funkcji wysyłania wpisów dziennika na zdalny serwer, musisz tylko określić zdalny serwer syslog, jak pokazano poniżej: ErrorLog syslog:logwarehouse
Spowoduje to przesyłanie wpisów dziennika na serwer o nazwie logwarehouse. Aby uzyskać więcej informacji na temat uruchamiania zdalnego serwera wpisów dziennika, odwiedź artykuł w Wikipedii poświęcony standardowi syslog: http://en.wi ki pedi a.org/wi ki/Syslog
Dyrektywa ServerRoot ' Dyrektywa ServerRoot określa główny katalog serwera WWW. W przypadku systemu Linux dyrektywa byłaby ustawiona podobnie jak poniżej: ServerRoot "/usr/local/apache"
Na platformie Windows wyglądałaby raczej tak: ServerRoot "C:/Program Files/Apache Software Foundation/Apache2.2"
Wartość ta będzie dodana na początku do wszystkich ścieżek, które nie są w pełni odpowiednie. Jeśli dziennik nie jest zapisywany we właściwym miejscu lub pliki konfiguracyjne są niedostępne, sprawdź ustawienie tej dyrektywy.
Inne dyrektywy httpd.conf W poprzednich podrozdziałach szczegółowo opisano najważniejsze dyrektywy, które należy ustawić na początku. Dostępnych jest jednak wiele innych, których ustawienie wpływa na Joomla!. Sugerowane ustawienia dla takich opcji, jak języki, SSL, katalogi użytkowników itd., można znaleźć w podkatalogu /defaults, wewnątrz /conf który z kolei znajduje się w głównym katalogu serwera WWW. Przykładowe pliki .conf zawierają sugestie, które mogą Ci pomóc w ustawianiu systemu pod kątem uzyskania danych funkcji. Tabela 2.1 zawiera listę znaczących dyrektyw i ogólny opis każdej z nich. Wszystkie dyrektywy znajdziesz w pliku konfiguracyjnym. Odpowiednie ustawienie uzależnione jest od Twoich potrzeb względem instalacji.
Rozdział 2. • Szczegóły instalacji i konfiguracji Tabela 2.1. Ważne dyrektywy serwera
Przypisuje wybrane rozszerzenia do podanego zestawu znaków.
AddDefaultCharset On|Off|zestawZnaków
Dodaje domyślny zestaw znaków do typu MIME text/plain i text/HTML.
AddLanguage
Przypisuje język dla plików z danym rozszerzeniem.
AllowCONNECT
Określa porty, na których mogą być przyjmowane połączenia przez proxy.
AllowOverride
Określa typy dyrektyw, których użycie jest dozwolone w pliku .htaccess.
CacheDefaultExpi re
Oznacza domyślny czas przechowywania dokumentu w pamięci podręcznej, jeśli nie zostanie ustawiony czas wygaśnięcia tego pliku.
CharsetDefault
Określa domyślny zestaw znaków.
CookieExpires
Przechowuje czas wygaśnięcia tracking cookic w sekundach.
CustomLog
Pozwala ustawić własny plik dziennika, a także jego format.
DefaultLanguage
Określa domyślny język, który zostanie przesłany w postaci znacznika MIME.
Deny
Określa listę adresów, które mają zabroniony dostęp do serwera WWW. Ta dyrektywa może być ogromnie pożyteczna w przypadku obrony przed atakami hakerów lub ograniczenia połączeń z nieautoryzowanymi lub nieprzyjaznymi odwiedzającymi.
DocumentRoot
Przechowuje ścieżkę dostępu do głównego katalogu przeznaczonego dla odwiedzających. Najczęściej dyrektywa ta wskazuje ścieżkę do folderu htdoes, w którym zainstalowany jest Joomla!. Na platformie Windows może być ustawiona jako C:/Program Files/Apache Software Foundation/Apache2.2/htdocs.
ErrorDocument
Wskazuje dokument, który zostanie zwrócony odwiedzającemu w przypadku wystąpienia błędu. System Joomla! nadpisuje to ustawienie i powoduje zwrócenie własnej strony z komunikatem o błędzie. Taką stronę można zastąpić określonym, własnym szablonem.
ErrorLog
Wskazuje ścieżkę do pliku dziennika, w którym zapisywane są komunikaty systemu.
Header
Pozwala ustawić nagłówek odpowiedzi HTTP.
HeaderName
Wskazuje nazwę pliku, którego zawartość zostanie wstawiona przed listą plików w katalogu, jeśli ustawiono dyrektywę Header.
IdentityCheck
Włącza lub wyłącza zapisywanie informacji o odwiedzających, dostarczonych w postaci tożsamości RFC 1413 dołączanej przy żądaniu.
KeepAlive
Włącza lub wyłącza obsługę trwałych połączeń lub sesji.
KeepAliveTimeout
Określa limit czasu, po przekroczeniu którego zostanie przerwane trwałe połączenie lub trwała sesja.
44
Joomla!. Profesjonalne tworzenie stron WWW
Tabela 2.1. Ważne dyrektywy serwera Apache — ciąg dalszy Dyrektywa
opis
LanguagePriority
Przechowuje kolejność wariantów językowych, jeśli język nie został określony przez odwiedzającego.
Listen
Umożliwia ustawienie portu i adresu IP, na którym serwer będzie czekać na połączenia. Zobacz także dyrektywę ServerName.
MaxKeepAli veRequests
Określa dopuszczalną liczbę żądań dla jednego trwałego połączenia. Domyślne ustawienie to 100.
Script
Wskazuje skrypt CGI (Common Gateway Interface), który zostanie uruchomiony w odpowiedzi na określone żądanie. W przypadku uruchamiania PHP przez CGI należy odpowiednio skonfigurować tę dyrektywę.
ScriptLog
Użyteczna tylko w przypadku uruchamiania PHP przez CGI. W takim przypadku dyrektywa określa plik dziennika błędów, do którego trafiają komunikaty CGI.
ServerAdmin
Podczas wysyłania wiadomości od serwera do klienta dołączany jest adres e-mailowy. Administrator Joomla! może zdefiniować to ustawienie, aby umożliwić użytkownikom przesyłanie żądań i raportów.
ServerName
Nazwa komputera i port wykorzystywane przez serwer. Domyślnym ustawieniem jest ServerName localhost :80. Jeśli korzystasz z kilku serwerów na jednym komputerze (np. Apache i IIS), możesz użyć tę dyrektywę do zmiany portu, na którym Apache nasłuchuje połączeń.
TimeOut
Ilość czasu, jaką Apache może poświęcić na przetwarzanie żądania, zanim zostanie ono przerwane. Domyślne ustawienie to 300 sekund.
TraceEnable
Włącza lub wyłącza obsługę zapytań TRACĘ. Domyślnie ustawiona na on.
TransferLog
Wskazuje położenie pliku dziennika z informacjami o transferach.
UserDi r
Określa katalog, w którym użytkownicy mogą umieszczać swoje strony. Jeśli z Twojego serwera będzie korzystać wielu użytkowników, możesz tutaj ustawić odpowiedni katalog.
Vi rtua 1 DocumentRoot
Pozwala ustawić główny katalog dla serwera wirtualnego. Możesz wykorzystać tę dyrektywę, jeśli chcesz uruchomić Joomla! na wirtualnym serwerze.
Vri tua1DocumentRootIP
Określa adres IP wirtualnego serwera.
Pliki dziennika Pliki dziennika serwera Apache m o g ą być bardzo pomocne w monitorowaniu serwera W W W . M i m o iż niektóre rozszerzenia Joomla! potrafią tworzyć statystyki, nie jest to zalecane, ponieważ obniża wydajność systemu. Jeśli więc chcesz dokładnie monitorować ruch na stronie, musisz wykorzystać do tego dzienniki serwera W W W . Istnieją trzy typy takich dzienników: access, error i install2. 2
Informacje o próbie, informacje o błędach i komunikaty instalacyjne — p r z y p . tłum.
Rozdział 2. • Szczegóły instalacji i konfiguracji
45
Analiza plików zawierających te dzienniki ułatwi Ci: •
Wyrównywanie obciążenia — Musisz zdać sobie sprawę, że jeśli Twoja strona stanie się popularna, serwer, na którym działa, zostanie poddany sporemu obciążeniu. Powinieneś znać pory dnia, w których obciążenie jest największe, a także te, kiedy ruch na stronie jest bardzo mały. W określonych sytuacjach (np. opublikowanie informacji podawanych przez media) możesz spodziewać się ogromnego ruchu na stronie. Te ekstremalne przypadki mogą skłonić Cię do wyłączenia funkcji, które szczególnie obciążają procesor (np. funkcja wyszukiwania), dopóki obciążenie nie zmaleje. W czasie małej aktywności warto wykorzystać okazję i zrobić kopię zapasową strony.
•
Określenie, jacy użytkownicy korzystają ze strony — Dzienniki zawierają ogromne ilości informacji, które mogą okazać się szczególnie użyteczne dla administratora systemu. Czy nie chciałbyś poznać, jaki procent odwiedzających korzysta z danej przeglądarki? Często jest to zaskakujące. A co jeśli połowa odwiedzających pochodzi z Holandii? Jakie ma to znaczenie przy doborze treści, które pojawią się na stronie? Czy nie chciałbyś dowiedzieć się, za pośrednictwem której strony trafiają do Ciebie użytkownicy z Holandii? To tylko kilka pytań, na które można odpowiedzieć, jeśli tylko dokładnie przyjrzeć się plikom dziennika.
•
Sprawdzenie, jakie błędy wystąpiły na stronie — Jeśli któryś z modułów serwera nie działa poprawnie lub pojawia się błąd podczas uruchamiania jednej z funkcji, powinieneś o tym wiedzieć. Dziennik błędów zawiera informacje przydatne podczas usuwania problemów, dzięki czemu możesz zapewnić poprawne działanie serwera.
•
Dostrzeżenie prób ataków i włamań na stronę — Sieć Web przypomina trochę Dziki Zachód, ponieważ obowiązuje w niej niewiele reguł. W latach siedemdziesiątych rząd Stanów Zjednoczonych borykał się z problemem nastoletnich hakerów, którzy dla zabawy włamywali się do systemów komputerowych. Obecnie jest to problem globalny, a hakerów cechują często groźniejsze zamiary. Dzienniki mogą zawierać informacje o próbach dostępu przeprowadzanych według pewnego wzorca. Dzieje się tak w sytuacji, kiedy haker próbuje zaatakować system z użyciem oprogramowania, które popularnie nazywa się botem. Jeśli dowiesz się, że system stał się obiektem ataku, możesz podjąć przeciwdziałania różnego typu — włączając w to zablokowanie dostępu z adresu IP, który wykorzystuje haker. Nie zdołasz zapobiec czemukolwiek, jeśli nie wiesz, co się dzieje. Uważna analiza plików dziennika może dostarczyć sygnałów, że system stanie się obiektem ataku.
Po instalacji serwera Apache uruchom go na krótki czas, a następnie sprawdź zawartość podkatalogu /logs, który znajduje się wewnątrz głównego katalogu Apache. Znajdziesz w nim trzy pliki. Przejrzyj ich zawartość w zwykłym edytorze tekstu, aby zapoznać się z nimi. W miarę postępu pracy z tą książką będziesz wracać do plików dziennika, aby udoskonalać konfigurację i lepiej zarządzać stroną.
Foldery modules i extensions Foldery /modules i /extensions zawierają wszystkie wtyczki, które umożliwiają współpracę serwera Apache z innymi programami, np. PHP. Nie ma powodu, abyś zmieniał zawartość tych folderów podczas pracy z Joomla!. Jeśli jednak zauważysz dziwne zachowanie systemu.
46
Joomla!. Profesjonalne tworzenie stron WWW warto sprawdzić, czy są dostępne uaktualnione wersje modułów umieszczonych w tych katalogach. W systemie Linux, aby określić wersję modułu lub rozszerzenia, powinieneś wykorzystać komendę fi le, przykładowo: file mod auth dbm.so
W przypadku platformy Windows możesz sprawdzić wersję rozszerzenia lub modułu, klikając zakładkę Wersja w oknie Właściwości pliku, jak przedstawiono to na rysunku 2.8. W internecie lub na stronie serwera Apache (www.apache.org) możesz sprawdzić, czy inni użytkownicy zgłaszali problemy z zainstalowaną u Ciebie wersją wtyczki. Jeśli masz zamiar poprosić innych o pomoc w rozwiązaniu Twojego problemu, dołącz dokładne informacje o wersjach wtyczek, które wykorzystujesz. Umożliwi to precyzyjniejszą ocenę Twojej sytuacji. Rysunek 2.8.
^taśdvrości: mod_auth_dbm.so
Sprawdź wersje plików w folderach modules i extensions, jeśli napotkałeś trudności
Ogólne
Wersja
Wersja pliku: Opis:
auth_dbm_module for Apache
Prawa autorskie:
Copyright
Pozostałe informacje o wersji Nazwa elementu: Język Komentarze Nazwa produktu Nazwa wewnętrzna Oryginalna nazwa pliku Wersja pliku Wersja produktu
Wartość: ! Apache Software Foundation
j;
OK
I[
Anuluj
)
Nie wszystkie moduły, które znajdują się w tych folderach, są aktywne. Korzystając z odpowiednich dyrektyw w pliku httpd.conf, możesz wyłączać lub włączać poszczególne wtyczki. Dodatkowe moduły, które nie są domyślnie zainstalowane, można pobrać ze strony: http://moduł es.apache.org
Folder htdocs Domyślnie katalog ten zawiera pliki stron internetowych. Musisz zwrócić szczególną uwagę na zabezpieczenie folderu /htdocs. Ponieważ pliki wewnątrz tego katalogu mają prawa pozwalające uruchamiać kod PHP, należy zapobiec sytuacji, w której haker mógłby umieścić własny kod lub wirusa wewnątrz /htdocs. W rozdziale 14. omówiono sposoby zabezpieczenia tego katalogu.
Rozdział 2. • Szczegóły instalacji i konfiguracji
47
Konfiguracja PHP Konfiguracja PHP jest znacząco prostsza niż konfiguracja Apache, jednak niesie ze sobą nie mniej potencjalnych zagrożeń bezpieczeństwa. Silnik PHP bezpośrednio uruchamia kod, dlatego konieczna jest poprawna konfiguracja, która zapobiegnie lukom w zabezpieczeniach. W przypadku udanego ataku haker może zdobyć dostęp do informacji poufnych, usunąć dane lub uruchomić program, który pozwoli mu na dodatkowe szkodliwe działania. Joomla! wymaga do poprawnego działania PHP w wersji 4.3.0 lub nowszej. Przed rozpoczęciem instalacji (zwłaszcza zdalnej) sprawdź wersję PHP, aby uniknąć problemów. Częstą sztuczką wykorzystywaną przez hakerów jest uruchomienie fałszywej podstrony na Twoim serwerze. Poprzez skierowanie na nią użytkowników mogą zdobyć poufne dane, rozsyłać wirusy, przeprowadzać ataki DoS pochodzące z Twojego serwera lub rozsyłać spam. Najprostszym sposobem określenia konfiguracji PHP jest wykorzystanie funkcji phpinfoO. W ten sposób dowiesz się także, czy PHP działa poprawnie. Plik zawierający pojedynczą linię spowoduje wyświetlenie konfiguracji, jak przedstawiono na rysunku 2.9. Rysunek 2.9.
i
:
—
Komenda pbp\nfo() wyświetli kompletną konfigurację PHP w sekcji Configuration
1
PHP Credits Configuration PHP Core Mastei Value
Local Value
Directive allow j : a l l j i i n e j > a s s j efei ence On
On
allow j i i l J o p e n
On
On
altów ml inchitle
Off
Off
always j ł o p u l a t e j aw j j o s t j l a t a Off
Off
aMjjsepaiatoi .input
&
&
ai
&
&,
asp J a g s
Off
Off
autojippeiidjile
no value
no value
aiitojjlobals J i t
On
On
auto j ) i epend Jfile
no value
no value
lnowscap
C:\xampp\php\brQwscap \browscap.ini
C Axa m p p\ph p\b rows c a p \browscap.ini
default chai set
no value
no value
detauttjniinetype
texUhtml
textfhtrni
define_syslo
Off
Off
disalde_classes
no value
no value
Po przewinięciu strony do sekcji Configuration możesz przejrzeć listę dyrektyw oraz ich ustawienia. Poniżej w poszczególnych sekcjach przedstawiono konfiguracje dla poszczególnych wtyczek — wiele z nich zawiera także informacje o wersji. Sekcja PHP Variables, która znajduje się na dole strony, zawiera wartości zmiennych PHP. Możesz wykorzystać te informacje, aby lepiej zrozumieć działanie systemu, a także wytropić źródło występowania błędu.
48
Joomla!. Profesjonalne tworzenie stron WWW Jeśli ręcznie kompilujesz PHP, musisz dołączyć obsługę trzech bibliotek: MySQL, Zlib i XML. W przeciwnym wypadku Joomla! nie będzie działać poprawnie. Podczas uruchamiania systemu Joomla! sprawdzane są wartości kilku dyrektyw. Oto ich lista wraz z zalecanymi ustawieniami: •
Safe mode — U s t a w safe_mode na Off.
•
Di spl ay Errors — Ustaw di spl ay_errors na On (tylko na serwerze testowym).
•
File Uploads — U s t a w file_uploads na On.
•
Magic Quotes GPC — U s t a w magic_quotes_gpc n a On.
•
Magic Quotes Runtime — U s t a w magic_quotes_runtime na Off.
•
Output Buffering — U s t a w output_buffering na Off.
•
Session auto start — U s t a w session.auto_start na Off.
•
Register Gl obal s — U s t a w register_gl obal s na Off w pliku
globals.php
w instalacji Joomla!. •
Register Globals Emulation — U s t a w RG_EMULATION na Off () w pliku
u
Zlib compression — U s t a w zlib.ouput_compression na On.
globals.php.
Upewnij się, że plik configuration.php znajduje się w katalogu Joomla!, a także że ma ustawione uprawnienia zapisu, aby możliwe były zmiany ustawień systemu Joomla! z poziomu interfejsu administratora. Zapis powinien być także możliwy w katalogu zapisu sesji (ang. session save path), w przeciwnym wypadku pojawią się błędy w funkcjonowaniu Joomla!. Zmiany miejsca zapisu sesji możesz dokonać poprzez modyfikację dyrektyw PHP.
Dyrektywy PHP Nie wszystkie spośród wielu opcji konfiguracyjnych PHP mają bezpośredni wpływ na Joomla!. Wiele z nich nigdy nie będzie potrzebnych, dlatego w tym podrozdziale opisano tylko te, które mają znaczenie dla użytkownika Joomla!.
Zgłaszanie błędów PHP Aby włączyć wyświetlanie komunikatów o błędach PHP (bardzo pomocne podczas usuwania błędów w szablonie lub nowym rozszerzeniu), musisz zmienić ustawienie dyrektywy display_errors w pliku php.ini. Aby włączyć display_errors użyj poniższej linii: display_errors = On
Ta dyrektywa jest domyślnie wyłączona, aby zapobiec zdobyciu przez hakera dodatkowych informacji na temat systemu, w którym działa strona. Komunikaty o błędach są jednak zapisywane do pliku dziennika błędów serwera Apache, o ile ustawiona jest poniższa dyrektywa: log_errors = On
Rozdział 2. • Szczegóły instalacji i konfiguracji
49
Jest to ustawienie domyślne. Podczas diagnozowania błędów w kodzie PHP ciągłe otwieranie pliku dziennika błędów, aby sprawdzić, czy problem został rozwiązany, jest niewygodne i niepraktyczne. Dużo prościej jest włączyć wyświetlanie informacji o błędach w oknie przeglądarki wraz z właściwą treścią strony. Funkcja display_errors powinna być wyłączona na wszystkich serwerach produkcyjnych. Informacje o błędach mogą zdradzić konfigurację bazy danych, nazwy ścieżek, nazwy i adresy serwerów, a także wiele innych kluczowych informacji, które haker może wykorzystać podczas ataku. Podobnie jak w przypadku Apache, możesz kontrolować obfitość komunikatów o błędach. Do wyboru są poniższe ustawienia: •
E_ALL — Wyświetla wszystkie błędy i ostrzeżenia, poza błędami E_STRICT.
•
E_ERR0R — Wyświetla krytyczne błędy wykonywania.
•
E_RECOVERABLE__ERROR — Wyświetla prawie krytyczne błędy wykonywania.
•
E_WARNING — Wyświetla ostrzeżenia.
•
E PARSE — Wyświetla błędy parsowania kodu PHP.
•
E_N0TICE — Wyświetla wskazówki.
•
E_STRICT — Informuje o zalecanych zmianach kodu, aby zapewnić kompatybilność z przyszłymi wersjami PHP.
•
E_C0RE_ERR0R — Wyświetla krytyczne błędy, które wystąpiły podczas uruchamiania PHP.
•
E_CORE_WARN ING — Wyświetla ostrzeżenia, które wystąpiły podczas uruchamiania PHP.
•
E_C0MPILE_ERR0R — Wyświetla błędy dotyczące kompilacji kodu.
•
E_COMPILE_WARNING — Wyświetla ostrzeżenia dotyczące kompilacji kodu.
•
E_USER_ERROR — Wyświetla komunikaty o błędach zdefiniowane przez programistę.
•
E_USER_WARNING — Wyświetla ostrzeżenia wygenerowane przez użytkownika.
•
E_USER_NOTICE — Wyświetla wskazówki wygenerowane przez użytkownika.
Domyślnym ustawieniem zgłaszania błędów jest E ALL, jednak możesz zmienić to ustawienie, aby dołączyć także ostrzeżenia E_STRICT. Wykorzystaj do tego celu operator OR ( | ) , jak pokazano poniżej: error_reporting = E_AEL|E_NOTICE
Możesz wykluczyć daną kategorię błędów, wykorzystując operatory AND (&) i NOT
):
error_reporting - E_ALL & ~E_USER_NOTICE
Być może jeszcze nie zdajesz sobie sprawy z tego, jak ważne jest zgłaszanie błędów. Zrozumiesz to w momencie, kiedy natrafisz na problem, którego nie pojmiesz. Przykładowo możesz napotkać pustą stronę podczas próby dostępu do strony Joomla! bez żadnej wskazówki, gdzie leży problem. Dzięki włączonemu wyświetlaniu błędów możesz natychmiast przystąpić do szukania źródła problemu.
50
Joomla!. Profesjonalne tworzenie stron WWW W przypadku instalacji pusta strona występuje najczęściej z powodu problemu ze ścieżką zapisu sesji. Dzięki włączonemu wyświetlaniu błędów (lub po zbadaniu treści dziennika błędów) zostanie wyświetlony komunikat podobny do poniższego: Warning: session_start() [function.session_start()]: open(C:\D0CUME-l\danny\LOCALS~l\Temp\php\upload\sess_61p04kg4fu0fho31vagt3je8d74, 0_RDWR) failed: No such file or directory (2) in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\libraries\joom1a\environment\session.php on line 234.
Komunikat zawiera informację, że nie można rozpocząć sesji ponieważ „nie ma takiego pliku lub katalogu" (ang. no such file or directory). Oznacza to błędną konfigurację serwera PHP, co uniemożliwia zapisywanie i odczytywanie katalogu sesji. Otwórz plikphp.ini i wyszukaj dyrektywę session.save_path. Prawdopodobnie serwer WWW nie ma dostępu do podanej ścieżki. Ustawienie dyrektywy w taki sposób, aby katalog sesji znajdował się wewnątrz katalogu serwera WWW, rozwiąże problem na serwerze testowym. W środowisku produkcyjnym powinieneś wykorzystać narzędzia udostępnione przez dostawcę usług internetowych, żeby ustawić uprawnienia do wybranego katalogu. W przypadku platformy Windows dyrektywa ustawiona jest podobnie jak poniżej: session.save_path="
C:\DOCUME~l\danny\LOCALS~l\Temp\php\upload"
Aby rozwiązać problem, należy utworzyć folder o nazwie php session wewnątrz głównego katalogu serwera WWW, a następnie wskazać ten folder w konfiguracji PHP. Po stworzeniu nowego katalogu ustaw dyrektywę jak poniżej (całość w jednej linii): session.save_path="C:/Program Files/Apache Software Foundation/Apache2.2/htdocs/php_sessions"
W przypadku instalacji zdalnej na serwerze z zainstalowanym Linuksem zmień ustawienie dyrektywy z przypominającej poniższą: session.save_path = /var/php_sessions
na katalog, do którego dostęp ma serwer WWW, na przykład: session.save_path = /bi1lcat/ws/bl833/pow.dan/php_sessions
Następnie uruchom ponownie Apache, a Joomla! powinien działać poprawnie. Na podstawie tego prostego przykładu możesz zaobserwować, jak bardzo wyświetlanie komunikatów o błędach może pomóc w rozwiązywaniu problemów. Opisana dyrektywa jest tylko wierzchołkiem góry lodowej w zakresie konfiguracji PHP.
Ważne ustawienia PHP W tabeli 2.2 przedstawiono skróconą listę dyrektyw PHP, które znacząco wpływają na działanie Joomla!. Pierwsza kolumna zawiera nazwy dyrektyw, druga — możliwe ustawienia. W trzeciej kolumnie umieszczono krótki opis funkcji, którą pełni dana dyrektywa.
Rozdział 2. • Szczegóły instalacji i konfiguracji abela 2.2. Ważne ustawienia
51
PHP
Dyrektywa
Możliwe wartości
Opis
doc root
Ciąg znaków
Określa katalog, w którym będą uruchamiane skrypty PHP. W celu poprawnego działania Joomla! najlepiej pozostawić tę dyrektywę nieustawioną.
expose_php
On lub Off
Wyłącza informacje o PHP dołączane do nagłówka odpowiedzi. Domyślnym ustawieniem w większości środowisk produkcyjnych jest Off.
extension dir
Ciąg znaków
Wskazuje katalog, w którym znajdują się rozszerzenia i moduły PHP. Sprawdź ustawienie tej dyrektywy, jeśli np. wystąpi problem połączenia z MySQL.
filejjploads
On lub Off
Włącza lub wyłącza obsługę wysyłania plików. Wiele funkcji systemu Joomla!, takich jak dodawanie szablonów, rozszerzeń i obrazków, wymaga ustawienia na On.
mclude_path
Ciąg znaków
Określa listę katalogów, które będą przeszukiwane przez funkcje require i include.
magic_quotes_gpc
On lub Off
Włącza lub wyłącza automatyczne kodowanie apostrofów, cudzysłowów, lewych ukośników lub znaków zerowych. Ustawieniem zalecanym dla Joomla! jest On, chociaż na wielu serwerach domyślnie jest Off.
magi c_quotes_ '-•runtime
On lub Off
Włącza lub wyłącza automatyczne kodowanie apostrofów, cudzysłowów, lewych ukośników lub znaków zerowych pochodzących ze źródeł zewnętrznych. Ustawieniem zalecanym dla Joomla! jest Off.
max_execution_ '-»time
Liczba
Ustawia w sekundach maksymalny czas uruchamiania skryptu PHP. Ustawienie na 0 wyłącza limit. Domyślne ustawienie to 30 sekund. Jeśli przykładowo korzystasz z rozszerzenia, które potrzebuje sporo czasu, aby pobrać informacje z zewnątrz, możesz zwiększyć tę wartość.
maxjnput_time
Liczba
Ustawia w sekundach maksymalny czas odbierania danych przychodzących. Wpływa to także na czas oczekiwania na zakończenie wysyłania plików. Domyślne ustawienie to 60 sekund. Jeśli przewidujesz, że wysyłanie plików może trwać dłużej, zmień ustawienie tej dyrektywy.
memoryjimit
Liczba
Ustawia limit pamięci.
safe mode
On lub Off
Wprowadza ograniczenia dla skryptów na współdzielonym serwerze (stosowane często przez dostawców usług internetowych). Blokowane jest między innymi uruchamianie plików (oprócz plików PHP), funkcje chmod() (zmiana praw dostępu do katalogów i plików) i system(). Jeśli safejnode jest włączona na serwerze, z którego korzystasz, wiele z powyższych ograniczeń można ominąć (jednak nie za pośrednictwem PHP) dzięki narzędziom dostarczonym przez administratora.
52
Joomla!. Profesjonalne tworzenie stron WWW
Tabela 2.2. Ważne ustawienia PHP — ciąg dalszy
Dyrektywa
Możliwe wartości
Opis
upload_max_ "-»•fi lesize
Ciąg znaków
Określa maksymalny rozmiar (w megabajtach) wysyłanych plików. Domyślne ustawienie to 2M, co odpowiada 2MB.
Ciąg znaków
Określa katalog, w którym tymczasowo zapisywane są wysyłane pliki.
Ciąg znaków
Podstawowa nazwa katalogu używanego jako katalog domowy użytkownika dla plików PHP, na przykład publ icjltml.
zlib.output_ "-»compression
On, Off lub liczba
Włącza lub wyłącza obsługę kompresji zlib. Wyłączenie uniemożliwia skorzystanie z tej funkcjonalności w Joomla!.
zlib.output_ "-•handler
Ciąg znaków
Wskazuje inną bibliotekę kompresji, gdy standardowa jest niedostępna. Domyślnie nieustawiona, co powoduje wykorzystanie standardowej biblioteki.
upt oad_tmp_di r
user dir
Zanim zaczniesz zmieniać ustawienia PHP, zrób kopię zapasową pliku php.ini, abyś zawsze mógł wrócić do ustawień oryginalnych. Ponieważ plik Ani jest plikiem tekstowym, i z tego powodu nie zajmuje zbyt dużo miejsca na twardym dysku, warto rozważyć robienie kopii zapasowej przy każdej większej zmianie ustawień. Pamiętaj, że po wprowadzeniu zmian w konfiguracji PHP musisz uruchomić ponownie Apache lub IIS, aby nowe ustawienia zaczęły obowiązywać. Konfiguracja odczytywana jest podczas uruchamiania serwera PHP, dlatego ponownie uruchomienie serwera W W W spowoduje wprowadzenie nowych ustawień. Alternatywnym podejściem do robienia kopii zapasowych pliku phpAni jest zamiana aktualnego ustawienia w komentarz poprzez wstawienie znaku średnika (;) na początku linii. Nowe ustawienie wprowadza się poniżej. Jeśli dokonujesz zmian w konfiguracji z określonego powodu, zalecane jest dodanie komentarza, który opisze powód modyfikacji. Podczas konfigurowania następnego serwera możesz odwołać się do istniejącego pliku .ini, co ułatwi Ci dobór odpowiednich ustawień.
Konfiguracja MySQL Uruchomienie MySQL jest zaskakująco proste. Prawdziwą sztuką jest jednak dostrojenie wydajności pod kątem jak najszybszej odpowiedzi na żądania Joomla!. MySQL zawiera wiele ustawień, które pozwalają wpływać na sposób wykorzystania sesji i zużycia pamięci. Możliwa jest także taka konfiguracja, przy której obciążenie będzie równoważone na kilku serwerach. Jest to szczególnie przydatne, jeśli Twoja strona stanie się wyjątkowo popularna. Poprawna konfiguracja MySQL jest wynikiem obserwacji faktycznego wykorzystania zasobów, a nie przewidywania przyszłych obciążeń. Najczęstszym ograniczeniem wydajności MySQL jest wyszukiwanie, czytanie i zapisywanie informacji na dysku twardym. Właściwy dobór ustawień możliwy jest tylko dzięki obserwacji, jak faktyczne kształtuje się obciążenie systemu.
Rozdział 2. • Szczegóły instalacji i konfiguracji
53
istalacja MySQL Instalacja MySQL jest jednocześnie najprostsza i najbardziej skomplikowana ze wszystkich serwerów wykorzystywanych przez Joomla!. Serwer MySQL nigdy nie nastręczał trudności w nowym systemie, w przeciwieństwie do sporadycznych problemów z pozostałymi serwerami. Problemem może być natomiast komunikacja MySQL z pozostałymi serwerami — szczególnie z PHP.
oprawne ustawienie zmiennei Path w Windowsie Jeśli po uruchomieniu Joomla! na platformie Windows otrzymasz komunikat, że serwer MySQL jest wyłączony, upewnij się, że po instalacji PHP uruchomiłeś ponownie system operacyjny. Aby skorzystać z rozszerzeń PHP, zmienna Path musi wskazywać na katalog PHP. Podczas instalacji odpowiednie zmiany wprowadzane są automatycznie, a odpowiednia ścieżka wstawiana jest na listę wartości zmiennej Path. Zmiany nie zostaną jednak wprowadzone do momentu ponownego uruchomienia systemu operacyjnego, ponieważ zmienna Path odczytywana jest wyłącznie podczas startu systemu. Aby sprawdzić, czy zmienna Path została właściwie ustawiona, przejdź do Panelu Sterowania, otwórz System i kliknij zakładkę Zaawansowane. Kliknij przycisk Zmienne środowiskowe na dole zakładki. Aktualna wartość zmiennej Path widoczna jest na liście Zmiennych systemowych. Ciąg znaków przypisany zmiennej Path jest z reguły dość długi. Dlatego, jeśli chcesz zmienić lub sprawdzić jej wartość, wybierz ją z listy i naciśnij przycisk Edytuj. Zmienna zostanie wyświetlona w polu tekstowym, a jego zawartość będzie zaznaczona. Naciśnij Ctrl+C, aby skopiować wartość zmiennej do schowka. Następnie wklej ją do edytora (np. systemowego notatnika), co pozwoli Ci łatwiej określić aktualne ustawienie lub wprowadzić zmiany. Upewnij się, że wartość zmiennej zawiera odniesienie do katalogu PHP. Jeśli go brakuje, dodaj na końcu listy średnik (;), a następnie wprowadź ścieżkę. Uruchom komputer ponownie i sprawdź, czy problem nadal występuje. W większości przypadków problem zostanie rozwiązany.
'olączenie z MySQL 5 Po ukończeniu pierwszego etapu instalacji Joomla!, kiedy zostanie wyświetlony ekran konfiguracji bazy danych, możesz natrafić na kolejny problem. Po wpisaniu poprawnego adresu serwera MySQL, nazwy użytkownika i hasła może pojawić się komunikat „nie można się połączyć" (ang. can't connect). Powodem jest prawdopodobnie korzystanie z wprowadzonego w MySQL 5 nowego kodowania haseł. Istnieją dwa sposoby rozwiązania tego problemu. Możesz wyłączyć nowy rodzaj kodowania w całym systemie MySQL lub włączyć stare kodowanie haseł dla poszczególnych użytkowników bazy danych. Jeśli oprócz Joomla! korzystasz z innych aplikacji, które łączą się z MySQL, zalecane jest drugie rozwiązanie.
54
Joomla!. Profesjonalne tworzenie stron WWW Aby włączyć kodowanie haseł zgodne z MySQL 4., uruchom z wiersza poleceń narzędzie zarządzania MySQL. Po pojawieniu się znaku zachęty mysql> wprowadź poniższą linię, zastępując admi ni stratorJooml a właściwą nazwą użytkownika, a mojehasl o hasłem, które będziesz wykorzystywać: SET PASSWORD FOR 'administratorJoomla' = 0LD_PASSW0RD('mojehaslo'):
W odpowiedzi uzyskasz komunikat, że zapytanie dotyczyło 0 wierszy (ang. 0 rows affected). Mimo to zmiana kodowania hasła powinna zostać poprawnie wprowadzona. Uruchom ponownie instalację Joomla!, a problem z połączeniem z bazą danych nie powinien już występować. Aby zmienić sposób autoryzacji w całym systemie MySQL, otwórz aplikację MySQL Administrator3 i kliknij przycisk Setup Variables. Wybierz zakładkę Security i przewiń na dół, dopóki nie zobaczysz opcji Use old passwords. Zaznacz pole wyboru po lewej stronie. Aby zmiany zaczęły obowiązywać, uruchom ponownie serwer MySQL — odpowiednią opcję znajdziesz, klikając przycisk Service Control.
Tryb Strict i problemy ze wstawianiem danych Poprawne połączenie z bazą danych może oznaczać koniec Twoich kłopotów z MySQL — lub nie. Podczas próby zainstalowania przykładowych danych Joomla! może pojawić się na ekranie lub w pliku dziennika błędów Apache, jeśli wyświetlanie błędów na stronie zostało wyłączone, błąd o treści przypominającej: SQL=BLOB/TEXT column 'comments' can't have a default value: ...
Przyczyną tego błędu jest prawdopodobnie serwer MySQL działający w trybie strict. Oznacza to włączenie opcji STRICT_TRANS_TABLES lub STRICT_ALL_TABLES, czego wynikiem jest anulowanie całej operacji, jeśli wystąpi błąd przy zapisywaniu choćby jednego rekordu. Otwórz panel Startup Variables w aplikacji MySQL Administrator. Wybierz zakładkę Advanced i sprawdź ustawienie opcji SQL Mode, jak to przedstawiono na rysunku 2.10. Jeśli w polu tekstowym, po prawej stronie pojawia się któraś z wyżej wymienionych opcji, oznacz pole wyboru, a następnie kliknij przycisk Apply Changes na dole ekranu. Opcja SQL Mode odczytywana jest podczas startu serwera — zmiany nie zostaną wprowadzone, dopóki nie uruchomisz ponownie MySQL lub systemu operacyjnego.
Zarządzanie MySQL System Joomla! automatycznie tworzy bazę danych serwera MySQL i zarządza nią. Jednak aby dokładnie zrozumieć działanie MySQL, powinieneś samodzielnie zbadać strukturę bazy danych Joomla!. Najłatwiej jest to zrobić, wykorzystując aplikację MySQL Administrator. Domyślna instalacja serwera MySQL nie zawiera tego programu, ale jest on darmowy i dostępny jako część pakietu MySQL GUI Tools na stronie: http://dev.mysql.com.
3
Skąd można pobrać program MySQL Administrator, dowiesz się w jednym z kolejnych podrozdziałów — przyp. tłum.
Rozdział 2. • Szczegóły instalacji i konfiguracji lysunek 2.10.
General Parameters Log files
Odznacz pole vyboru SQL VI ode, jby wyłączyć ryb strict
Replication
Myl SAM Parameters InnoDB Parameters Advanced Networking Security
55
Performance Advanced
Advanced Configure the startup variables. Note that changes will have no effect until you restart the server. A J
• N/A
d Enable symbolic link support
• • Ji^^l
Each thread that does a sequential scan allocates a buffer of this size for each table it scans. If you do many sequential scans, you may want to increase this value.
0 Read buffer size
256
0 SQL Mode:
STRICT _TRANS_T AB LE S ,N0_AU 1 j
Using this option will cause most temporary files created to use a small set of names, rather than a unique name for each new
Q Use pool for temporary files
0 Read rnd buffer size
Syntax: sql-mode=option[,option[,option...]] where option can be one of: REAL AS FLOAT, PIPES_AS_CONCAT^NSI_QUOTES,
v
k
512
When reading rows in sorted order after a sort, the rows are read through this buffer to avoid a disk seeks. If not set, then it's set to the value of record_buffer.
v
j
Po uruchomieniu aplikacji wyświetlane są ogólne informacje na temat stanu serwera, jak to przedstawiono na rysunku 2.11. W lewej części okna programu umieszczono listę dostępnych funkcji, jak np. Service Control (pozwala uruchomić, zatrzymać i restartować serwer MySQL) lub Startup Variables (konfiguracja parametrów MySQL). Rysunek 2.11. Program MySQL Administrator umożliwia łatwe zarządzanie bazą MySQL za pośrednictwe m graficznego interfejsu użytkownika
# MySQL Administrator - Connection: root®localhost:3306 File
Edit
View
Tools
Window
Help
Service Control
Server status: M y S Q L S e r v e r is running.
Startup Variables
M y
^•iaUj User Administration Server Connections
••I Hea"h M
Server Logs
j j f Replication Status
i
Connected to MySQL Server Instance Username: Hostname: Port:
localhost 3306
Server Information
Backup
MySQL Version:
MySQL 5.0.51 b-community-nt via TCP/IP
Restore
Network Name:
localhost
Catalogs
W
127.0.0.1
Client Information Version:
MySQL Client Version 5.1.11
Network Name: IP: Operating System: Hardware:
Jako administrator większość czasu poświęcisz prawdopodobnie opcji Catalogs, która jest ostatnią pozycją na liście w panelu po lewej stronie. Kliknięcie przycisku Catalogs spowoduje wyświetlenie listy dostępnych baz danych, a także schematu wybranej bazy. Po zaznaczeniu bazy Joomla! (w tym przypadku joomlalS) na liście w panelu po prawej stronie zostanie wyświetlona lista tabel, jak zilustrowano to na rysunku 2.12.
56
Joomla!. Profesjonalne tworzenie stron WWW
Rysunek 2.12. Schemat bazy danych zawierający wszystkie tabele systemu Joomla!
Widziałeś już możliwości dwóch opcji konfiguracyjnych w panelu Startup Variables, które m o g ą rozwiązać problemy z uruchamianiem Joomla!. Większe możliwości daje jednak bezpośrednia manipulacja danych w bazie MySQL. Bezpośrednie zapytania do bazy danych mogą utworzyć raport o stanie danych w tabelach Joomla!. Przykładowo Joomla! nie pozwala stworzyć listy artykułów, dla których nie ustawiono metadanych, i z tego powodu są kiepsko indeksowane przez roboty internetowe. Aby sprawdzić, których pozycji dotyczy taki problem, wystarczy wykonać zapytanie względem tabeli jos_content i wyświetlić wszystkie artykuły, dla których pole metadesc jest puste. Zaznacz bazę danych Joomla! w programie MySQL Administrator, a następnie kliknij prawym przyciskiem pozycję jos_content. Wybierz opcję Edit Table Data z menu kontekstowego, jak zilustrowano to na rysunku 2.13. Zostanie wyświetlone okno z zawartością wybranej tabeli. Zauważ, że w górnej części okna znajduje się zapytanie, które zostało wykonane: SELECT * FROM "joomla".~jos_content'
Jest to zapytanie, które spowoduje pobranie wszystkich rekordów należących do tabeli jos_content. Możesz skorzystać z klauzuli WHERE, aby w prosty sposób ograniczyć pobierane rekordy. Poniższe zapytanie zwróci tylko te rekordy, dla których pole metadesc jest puste: SELECT * FROM 'joomla".~jos_content~ WHERE metadesc = ""
Kliknięcie przycisku Execute spowoduje wykonanie zapytania, a w oknie pojawią się tylko te rekordy, dla których nie ustawiono metadanych. W menu File znajduje się opcja eksportu do pliku. Do wyboru jest kilka formatów (np. XML, HTML, CSV i Excel). Raport utworzony w ten sposób możesz wykorzystać jako listę wpisów do poprawienia.
Rozdział 2. • Szczegóły instalacji i konfiguracji lysunek 2.13.
Schema Tables
Wybierz opcję '.dit Table Data r menu kontekstowego
Schema Indices
Views
57
Stored proceduies
|oomla15 All tables of the joornla15 schema Engine
Rows
Data length
Index len...
Update time
jos_banner
Myl SAM
8
1.3 kB
4 kB
2808-10-29 23:22:42
jos_bannerclient
Myl SAM
1
76 B
2 kB
2008-10-29 23:22:42
jos_bannertrack
MylSAM
0
OB
1 kB
2008-18-28 23:16:34
jos_categories
MylSAM
22
17 kB
5 kB
2008-10-29 23:22:42
jos_components |os_contact_details
MylSAM
32
3.9 kB
3 kB
2008-18-29 23:22:42
MylSAM
1
580 B
3 kB
2008-10-29 23:22:42
Table Name
-
''
3
f
•
MylSAM
5
45 B
2 kB
2008-10-29 23:22:42
MylSAM
0
OB
1 kB
2008-10-29 23:16:36
MylSAM
1
32 B
4 kB
2008-10-29 23:22:42
Create Table
MylSAM
11
464 B
4 kB
2008-10-29 23:22:42
:
Drop Table
MylSAM
0
OB
1 kB
2008-10-29 23:16:36
¡'
Refresh
MylSAM
1
24 B
4 kB
2008-18-28 23:22:42
lû',C0re_aCLnfcupî
MylSAM
1
20 B
3 kB
2008-10-29 23:22:42
ios_core_log_items
MylSAM
0
OB
1 kB
2008-10-29 23:16:36
jos_co(e_log_search..
MylSAM
0
OB
1 kB
2008-10-29 23:16:36
|os_groups
MylSAM
3
60 B
2 kB
2003-10-29 23:22:42
¡os_menu
MylSAM
23
11,3 kB
4 kB
2008-10-29 23:22:42
"""""
:
Maintenance
-
''
Edit Table
Details >>
I
I Create Table j
[
Edit Table
j
j Maintenance J
Refresh
"
„
V
j
lesetowanie hasła użytkownika MySQL Żaden użytkownik poza administratorem nie powinien mieć dostępu do tabeli użytkowników, w której przechowywane są informacje na temat użytkowników i ich uprawnień. Dostęp do tej tabeli oznacza w zasadzie kontrolę nad całym systemem. Jeśli jesteś administratorem Joomla! i od dłuższego czasu nie korzystałeś bezpośrednio z MySQL, może zdarzyć Ci się kłopotliwa sytuacja, kiedy zapomnisz hasła dostępu do MySQL. W systemie MySQL nie jest możliwe odzyskanie zapomnianego hasła. Ale można je zresetować. Przedstawiona poniżej metoda działa także dla kont administratora i roota, dlatego korzystaj z niej tylko na serwerach, do których masz uprawniony dostęp. Utwórz plik tekstowy, wprowadź do niego poniższą linię i zapisz plik pod nazwą resetpwd. txt w głównym katalogu: SET PASSWORD FOR ' r o o t l o c a l host' - PASSW0RD('hasło');
W przypadku Linuksa, aby zresetować hasło, uruchom następujące polecenie: mysq1_safe -init-file = -/resetpwd.txt &
W systemie Windows komenda powinna brzmieć: C:\mysql\bi n\mysqld-nt - i ni t-file=C:\resetpwd.txt
Usuń plik resetpwd.txt po zresetowaniu hasła. Nierozważne jest pozostawienie na dysku rzeczy potencjalnie niebezpiecznej, która potem w jakiś sposób może zostać wykorzystana przez hakera.
58
Joomla!. Profesjonalne tworzenie stron WWW
Konfiguracja Joomla! Prawdopodobnie potrafisz już skonfigurować Joomla! według potrzeb. Możliwe jednak, że przeoczyłeś mniej oczywiste funkcje, które potrafią znacząco wpłynąć na sprawne działanie systemu. Jeśli instalacja Joomla! sprawia Ci kłopot, skopiuj po prostu pliki i upewnij się, że główny katalog nie zawiera pliku configuration.php. Jego obecność świadczy o tym, że Joomla! został już zainstalowany i skonfigurowany. W przeciwnym razie instalator Joomla! automatycznie zostanie uruchomiony.
configuration.php Twórcy Joomla! zalecają wprowadzanie wszystkich zmian w konfiguracji z poziomu interfejsu administratora. Bezpośrednia manipulacja pliku configuration.php może mieć jednak swoje zalety. Przykładowo jeśli zarządzasz wieloma stronami Joomla! i potrzebujesz wprowadzić daną zmianę w kilku plikach, rozwiązaniem może okazać się napisanie makra. Ręczne modyfikacje z użyciem interfejsu graficznego byłyby w takim przypadku męczące. Główna konfiguracja systemu Joomla! znajduje się w pliku configuration.php. Wszystkie ustawienia przechowywane są wewnątrz klasy PHP o nazwie JConfig. Jeśli otworzysz plik konfiguracyjny w edytorze tekstu, zauważysz, że na początku znajduje się definicja klasy: class JConfig {
Plik został podzielony na różne części. Site Settings (ustawienia strony) to pierwsza grupa parametrów, przypominająca poniższą listę: /* Site Settings */ var Soffline = '0' ; var $offlinejnessage « 'This site is down for maintence. Please check back again soon.1 ;
var $sitename = 'Joomla!1:
// Name of Joomla site
var Seditor = 'tinymce' : var îlistjimit = '20' : var îlegacy = '0';
Zwróć uwagę, że przedstawiony plik pochodzi z domyślnej instalacji. U Ciebie wartości powinny odpowiadać wprowadzonym ustawieniom. Sekcja Database (ustawienia bazy danych) wygląda podobnie, jak to przedstawiono poniższej: var îdbtype = 'mysql': var $host - 'localhost':
var $user = '':
// MySQL usemame
var îpassword = 1': var $db = 1': var idbprefix = 'jos_';
Rozdział 2. • Szczegóły instalacji i konfiguracji S e k c j a Server Settings ( u s t a w i e n i a s e r w e r a ) : // Change this to something more secure var Ssecret = 'FBVtigI151ApEU4H'; var $gzip = 'O': var ilifetime = '900': // Session timeout var $error_reporting = '-l': var Shelpurl = 'http://help.joomla.org': var $xmlrpc_server = 'O'; var $ftp_host = 'O'; var Sftp_port = 'O'; var Sftp_user = ''; var $ftp_pass = " ; var $ftp_root = '': var $ftp_enable = ''; var $tmp_path = '/tmp'; var $log_path = '/var/logs';
value
S e k c j a Locale Settings ( u s t a w i e n i a j ę z y k a ) : var var var var var var
S e k c j a Debug Settings ( u s t a w i e n i a d i a g n o s t y k i ) : var Sdebug = '0'; var $debug_db = 'O': var Sdebugjang = 'O': S e k c j a Meta Settings ( m e t a d a n e ) : var var var var
Sekcja Feed Settings (ustawienia RSS): var $feed_limit = 10: var $feed_summary = 0: } ?>
Zawsze twórz kopię zapasową pliku konfiguracyjnego przed wprowadzaniem jakichkolwiek zmian. Jeśli nowe ustawienia okażą się błędne, będziesz mógł wrócić do poprzednich, zastępując plik konfiguracyjny kopią bezpieczeństwa. Nie zapisuj kopii bezpieczeństwa w tym samym folderze, w którym przechowywany jest eonfiguration.php. Jeśli nazwiesz kopię przykładowo „configuration.backup", haker może wpisać adres URL odwołujący się do tego pliku, a ponieważ serwer WWW nie rozpozna typu pliku, jego zawartość zostanie wyświetlona na ekranie hakera — ujawniając przy okazji kluczowe informacje.
Resetowanie hasła użytkownika Joomla! Hasła są często zapominane przez użytkowników, ale za pośrednictwem interfejsu administratora można je zresetować. Jeśli jednak zdarzyło Ci się kiedyś zapomnieć hasła administratora, na pewno znasz frustrujące uczucie bycia odciętym od własnego systemu. Podczas pisania tej książki sam znalazłem się w podobnej sytuacji, kiedy w wyniku awarii dysku utraciłem losowo utworzone hasło zapisane w pliku. Nie muszę chyba dodawać, że nie pamiętałem tego hasła. Każde hasło w systemie Joomla! zapisywane jest jako skrót stworzony za pomocą algorytmu MD5, co uniemożliwia jego odzyskanie. Możesz jednak zresetować hasło poprzez bezpośrednią modyfikację tabeli zawierającej dane użytkowników Joomla!. Message-Digest 5 (MD5) jest algorytmem z dziedziny kryptografii, któty na podstawie pobranego ciągu znaków generuje skrót określonej długości. Zosta! opisany jako standard internetowy w RFC 1321. Skrót zapisywany jest w postaci 128-bitowego ciągu (32 liczby heksadecymalne). Założeniem algorytmów tego typu jest, że minimalna zmiana danych wejściowych (np. dodanie jednej litery) znacząco zmienia cały skrót. Wykorzystanie skrótu jest z reguły bezpieczne, ponieważ potrzeba ogromnej ilości obliczeń, aby odzyskać dane wejściowe. Istnieją jednak bezpieczniejsze algorytmy (takie jak SHA-1), które mogą zostać wykorzystane w Joomla! w przyszłości.
Rozdział 2. • Szczegóły instalacji i konfiguracji
61
Uruchom aplikację M y S Q L Administrator lub inną aplikację online, np. phpMyAdmin. W obu przypadkach procedura jest podobna. W programie MySQL Administrator wybierz tabelę jos users w bazie Joomla!. Zwróć uwagę, że dostęp do poprawnie zabezpieczonej bazy danych, czyli także do tabeli jos users, wymaga posiadania uprawnień administratora lub roota. Jeśli nie masz wymaganych uprawnień, poproś administratora systemu, aby zresetował Twoje hasło (jeśli zdarzyło Ci się je zapomnieć) lub nadal niezbędne uprawnienia. Po kliknięciu prawym przyciskiem pojawi się menu kontekstowe zawierające opcję Edit Table Data, jak zilustrowano to na rysunku 2.14. ysunek 2.14. 'o kliknięciu irawym przyciskiem os_users wybierz • menu opcję •dit Table Data
W rezultacie powinno pojawić się okno edytora tabeli z wyświetloną aktualną listą użytkowników Joomla!. W moim przypadku musiałem zresetować hasło administratora, dlatego wyszukałem wiersz, dla którego pole username („nazwa użytkownika") odpowiadało wartości admin. Przewiń zawartość okna w prawo, dopóki nie pojawi się kolumna oznaczona password, w której umieszczone są skróty haseł. Wybierz pole, którego wartość chcesz zmienić, a następnie, jeśli korzystasz z systemu Windows, naciśnij klawisz F2. Wprowadź teraz skrót MD5 nowego hasła. Poniższy skrót odpowiada słowu „hasło" 4 : 207023ccb44feb4d7dadca005ce29a64
Po wprowadzeniu tego długiego tekstu kliknij zakładkę Apply Changes na dole okna, jak przedstawiono to na rysunku 2.15.
Pisanemu bez polskich znaków! — p r z y p . tłum.
62
Joomla!. Profesjonalne tworzenie stron WWW
Rysunek 2.15. Wprowadź znany skrót MD5 i zapisz zmiany w tabeli
r a ^ a t a i W l H P W i K W ! ^ Plik
Edycja
Widok
Zapytanie
j
Skrypt
SELEiT
Narzędzia '
FROH
Okno
Pomoc
jooinlallS
.
j t
Odśwież O
\
Schemata
Wynik 1 password
use
omlaJ umpstarl.com
i •
cdcol
•
information_schema
•
a
:
joomldl 5 •
jos_banner
•
jos_bannerclient
•
: |os_bannertrack
•
: |os_calegories
• • • •
i jos_components .
jos_contact_details |os_content a jos_content_frontpage
Składnia Data Definition Statements Data Manipulation Statements MySQL Utility Statements MySQL Transactional and Locking ... Database Administration Statements ; Replication Statements SQL Syntax for Prepared Statements
> 1 row fetched in 0,0132 Si
#
Edycja
P
Znajdź
t
Możesz teraz zalogować się na konto, dla którego zmieniałeś hasło, wprowadzając słowo „hasło" jako hasło. Niezwłocznie zmień hasło na bezpieczniejsze. Jeśli nie masz dostępu do programu MySQL Administrator lub wolisz korzystać z tekstowego interfejsu MySQL, użyj poniższej komendy: UPDATE josjjsers SET password^207023ccb44feb4d7dadca005ce29a64' WHERE name='admin';
Zwróć uwagę, by w miejsce admin wstawić odpowiednią nazwę użytkownika. Ten kod zamieni aktualne hasło na „hasło". Możesz teraz dostrzec, jak proste byłoby dła hakera włamanie do systemu Joomla!. Dlatego kluczowe jest zabezpieczenie instalacji MySQL. Wykorzystaj wskazówki i sugestie zawarte w rozdziale 14.
Serwer testowy a serwer produkcyjny W tym rozdziale przedstawiono ogólną konfigurację systemu. Należy jednak pamiętać, że różne środowiska powinny mieć różne ustawienia. Podczas wstępnego tworzenia strony i dalszej pracy nad jej rozwojem powinieneś korzystać z serwera testowego, na którym możesz instalować dowolne rozszerzenia i wprowadzać znaczące zmiany. Na takim serwerze powinno być także włączone wyświetlanie wszystkich komunikatów systemowych, co pozwala na szybkie rozwiązywanie problemów. Serwer testowy jest zazwyczaj słabo zabezpieczony, aby nie utrudniać dostępu i testowania.
Rozdział 2. • Szczegóły instalacji i konfiguracji
63
Po ukończeniu prac nad stroną powinieneś ją przenieść na serwer produkcyjny (zwany także serwerem wdrożeniowym). Może być to zdalny serwer WWW (oferowany np. przez SiteGround.com) lub inna maszyna, która została odpowiednio zabezpieczona. W środowisku testowym ważne jest wyświetlanie jak największej ilości informacji, dokładnych komunikatów o błędach, monitorowanie wydajności i prób dostępu. Włączenie tych opcji negatywnie wpływa na wydajność systemu, ponieważ powoduje zużycie dodatkowych zasobów. Dlatego ich stosowanie nie jest zalecane w środowisku produkcyjnym. Wszystkie komunikaty systemu w środowisku produkcyjnym powinny być przechowywane w ukryciu, ponieważ ich ujawnianie ułatwi hakerowi włamanie. Jeśli pracujesz na platformie Windows, możesz wykorzystać dedykowane rozwiązanie do testowania stron opartych na Joomla!. Joomla Standalone Server (JSAS) to połączenie serwera Apache, PHP, MySQL i Joomla!, które nie wymaga praktycznie żadnej konfiguracji. Dodatkowo możliwe jest jednoczesne uruchamianie kilku stron na jednej maszynie i zarządzanie nimi z poziomu pojedynczego interfejsu. JSAS możesz pobrać zjsas.joomlasolutions.com.
Istawienia serwera testowego Joomla! nie posiada trybu usuwania błędów z prawdziwego zdarzenia, dlatego rozwiązywanie problemów sprowadza się do analizy komunikatu systemu, umieszczania własnych komunikatów (za pomocą instrukcji PHP echo) w kluczowych miejscach w kodzie, a także badania treści dziennika błędów. Zanim strona zostanie upubliczniona, jest poddawana testom w środowisku, w którym włączono wyświetlanie komunikatów systemu. Następnie strona przenoszona jest na serwer — jego konfiguracja blokuje pokazywanie informacji diagnostycznych, które ograniczają wydajność i mogą stanowić zagrożenie w przypadku wykorzystania przez hakerów. Podobnie jak większość aplikacji PHP, praca nad Joomla! sprowadza się do zasady: wprowadź zmianę, odśwież stronę, popraw, spróbuj ponownie. Dodatkowe informacje dostarczane przez system ułatwiają zlokalizowanie i usunięcie przyczyny problemu, jeśli taki wystąpi. Komunikaty o błędach (pod warunkiem że odzwierciedlają źródło problemu) są prawdopodobnie najbardziej użytecznym narzędziem podczas usuwania błędów w aplikacji Joomla!. Komunikaty PHP są w tym wypadku szczególnie pomocne, ponieważ nie tylko informują o problemie, ale także podają nazwę pliku i numer linii, w której wystąpił. Typowy komunikat o błędzie w kodzie komponentu wygląda tak: Notice: Use ot undefined constant kasjda - assumed 'kasjda' in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\components\com_content\content.php on line 32
Serwery WWW (zarówno Apache, jak i Microsoft Internet Information Server) przechowują dokładne informacje na temat występujących problemów w dzienniku błędów. Analiza pliku dziennika może okazać się niesamowicie przydatna w rozwiązywaniu nie tylko dużych problemów, które blokują działanie strony, lecz także mniejszych, które często pozostają niezauważone. Przykładowo głosowanie w sondzie powinno zakończyć się zapisaniem oddanego głosu w odpowiedniej tabeli. Jeśli wystąpi błąd, ponieważ nie istnieje tabela o danej
64
Joomla!. Profesjonalne tworzenie stron WWW nazwie, żaden komunikat nie zostanie wyświetlony. Dziennik błędów zawiera jednak informację, że instrukcja SQL Insert zakończyła się niepowodzeniem. Dzięki analizie dziennika możesz poprawić także małe błędy.
Ustawienia serwera produkcyjnego Po zakończeniu konfiguracji i testów systemu Joomla! zechcesz pewnie upublicznić swoją stronę w internecie. Założenia środowiska produkcyjnego, które wykorzystuje się do tego celu, różnią się diametralnie od tych dla serwera testowego. Głównym zmartwieniem jest w tym przypadku bezpieczeństwo i wydajność. Wiele ustawień, które są pomocne w usuwaniu błędów, może jednocześnie zdradzić informacje przydatne podczas ataku na system Joomla!. Dodatkowo konfiguracja pod kątem diagnozowania i rozwiązywania problemów spowalnia cały system. Ograniczenie liczby komunikatów diagnostycznych prowadzi do znaczącego wzrostu wydajności.
Domyślne hasła wbudowanych kont Często pierwszą czynnością wykonywaną przez hakera podczas ataku jest sprawdzenie, czy wbudowane konta nie mają ustawionych domyślnych haseł. Dlatego powinieneś regularnie zmieniać hasła wszystkich wbudowanych kont. Poniższe serwery mają wbudowane konta: •
MySQL — Konto root przeznaczone jest dla superadministratora systemu. Domyślnie w przypadku wielu instalacji hasło tego konta jest puste. Upewnij się, że zmieniłeś domyślne hasło. Warto także rozważyć utworzenie innego konta dla superadministratora i ograniczenie praw konta root.
U Joomla! — Domyślne konto superadministratora Joomla! nosi nazwę admin. Dzięki zmianie tej nazwy, np. na jadmin, haker w pierwszym odruchu nie zdobędzie połowy danych niezbędnych do zalogowania się na konto administratora. Domyślna instalacja MySQL jest dobrze zabezpieczona. Powinieneś zmienić jak najwięcej domyślnych ustawień dostępu (np. port działania MySQL), co uniemożliwi hakerowi zgadnięcie (na podstawie najczęstszych wartości) części informacji niezbędnych do penetracji systemu. Wszystkie przykładowe hasła wykorzystane w tej książce powinny zostać zmienione. Materiały zawarte w tej książce są dostępne dla każdego, kto ją kupi. Nazwy kont i hasła umieszczone w tej książce mogą zostać dodane przez hakera do słownika, który zostanie wykorzystany do zautomatyzowanego ataku na hasła. Zmień wszystkie hasła pochodzące z tej książki, zanim zdecydujesz się upublicznić stronę.
Komunikaty o błędach dostarczają wskazówek na temat wewnętrznej struktury strony WWW, włączając w to nazwy folderów, baz danych, tabel itd. Podczas gdy informacje diagnostyczne mają kluczowe znaczenie w środowisku testowym, na serwerze produkcyjnym mogą pomóc hakerowi włamać się do systemu. Dlatego zawsze sprawdzaj, czy wyświetlanie komunikatów o błędach zostało ograniczone w środowisku produkcyjnym.
Rozdział 2. • Szczegóły instalacji i konfiguracji
65
odsumowanie Instalacja i konfiguracja Joomla! wydaje się prosta, dopóki nie natrafi się na problemy. W tym rozdziale opisano sposoby instalacji i konfiguracji Joomla!, a w szczególności: •
Opcje konfiguracyjne serwera Apache w pliku httpd.conf, a także dyrektywy, dzięki którym można usprawnić działanie Joomla!.
•
Sposoby na poprawę wydajności serwera przez zmianę ustawień zgłaszania i zapisywania komunikatów systemowych. Dzięki zwiększeniu liczby komunikatów możesz łatwiej zdiagnozować źródła obecnych i potencjalnych problemów.
•
Udoskonalanie konfiguracji PHP przez zmianę ustawień w pliku PHP.ini. Odpowiednie zmiany mogą zapobiec przekroczeniom limitu czasu, a także udoskonalić zabezpieczenia.
•
Obszerny proces instalacji MySQL, włączając w to bezpośrednią manipulację bazą danych, co daje szerokie możliwości, od tworzenia raportów, po resetowanie haseł.
•
Zastosowanie serwera testowego, co ułatwia dokładne sprawdzenie i usunięcie błędów strony Joomla! bez konieczności publikacji w internecie oraz pozwala uniknąć związanych z tym zagrożeń.
•
Migrację ze środowiska testowego do środowiska produkcyjnego.
Właściwa, drobiazgowa konfiguracja strony Joomla! nie sprowadza się wyłącznie do ustawienia serwera pod kątem wydajności. Wizerunek profesjonalnego i solidnego portalu wymaga także właściwego wyglądu. W rozdziale 3. dowiesz się, jak samodzielnie wykonać atrakcyjny szablon, który może służyć za wzorzec dla kolejnych, które stworzysz w przyszłości.
66
Joomla!. Profesjonalne tworzenie stron WWW
3 Tworzenie własnych szablonów Możliwość wykorzystania szablonów jest jednym z kluczowych powodów, dla których Joomla! jest tak popularny na świecie. Stronę, której wygląd zasługuje na określenie „mierny", można w ciągu pięciu minut zmienić w imponującą witrynę dzięki profesjonalnym szablonom. Kwitnący rynek szablonów jest jednym z kluczowych segmentów działalności związanej z Joomla!. Wiele stron wykorzystuje model miesięcznej subskrypcji, podczas której klient może pobierać dowolne szablony będące w ofercie. Taki model gwarantuje zapotrzebowanie na nowe szablony, które służą utrzymaniu zainteresowania abonentów. W tym rozdziale dowiesz się, jak od podstaw stworzyć szablon, a później wykorzystać arkusze stylów, aby wprowadzić złożony układ strony. Większość darmowych szablonów opiera się na jednej podstronie, która wykorzystywana jest na całej witrynie. Poznasz sposoby tworzenia grup szablonów, dzięki czemu nadasz swoim stronom profesjonalny wygląd, a zastosowanie arkuszy stylów pozwoli Ci kształtować spójny wizerunek lub markę strony internetowej. Zanim zaczniesz tworzyć szablony, warto przyjrzeć się ich strukturze. Dokładne zrozumienie tego zagadnienia ułatwi Ci projektowanie własnych i edycję istniejących, ponieważ struktura szablonu nie różni się znacząco w poszczególnych przypadkach.
Struktura szablonu Szablony Joomla! mogą składać się z dowolnej liczby plików i folderów, chociaż zastosowanie się do przyjętych norm pozwala jednakowo postępować z każdym szablonem. Dzięki temu można zmienić wygląd i zewnętrzną funkcjonalność strony Joomla!, wybierając po prostu inny szablon. Dopóki zawiera on miejsce na wyświetlenie komponentu, a także kilka typowych pozycji modułów, można wykorzystywać go zamiennie z innymi. Z tego powodu musisz wiedzieć, jakie foldery powinien zawierać szablon (często jest są do dwa foldery \css i 1 imageś), a także jakie pliki (index.php, template.css i templadeDetails.xml), aby można było z niego poprawnie i bezproblemowo skorzystać. Istnieje też grupa nieobowiązkowych plików (parameters.ini i template thumbnail.png), które ułatwiają zarządzanie
68
Joomla!. Profesjonalne tworzenie stron WWW szablonem. Ponieważ Twoje dotychczasowe doświadczenia mogą ograniczać się wyłącznie do perspektywy użytkownika szablonów, zaczniemy od ogólnej organizacji szablonu Joomla!.
Pliki i foldery Wszystkie szablony instalowanie na stronie Joomla! są zapisywane w katalogu \templates, który znajduje się wewnątrz głównego katalogu strony Joomla!. Folder 1 templates zawiera po jednym podkatalogu dla każdego zainstalowanego w systemie szablonu. Nazwa folderu musi dokładnie zgadzać się z nazwą szablonu, także pod względem wielkości liter. Przykładowo szablon rhukjnilkyway musi znajdować się w folderze \rhuk milky way. Choć jest możliwe, by tylko jeden plik stanowił cały szablon (index.php), to nawet najprostsze z nich składają się przynajmniej z czterech plików (index.php, template.ess, templateDetails.xml i banner jpg). Większość opiera się jednak na liczniejszej grupie plików, np. dodatkowych arkuszach stylów i obrazkach, pomocniczej grafice (służącej do tworzenia zaokrąglonych rogów, elementów oddzielających itd.). Każdemu głównemu plikowi przypisano oddzielną funkcję: •
index.php — Zawiera logikę szablonu, miejsce na wyświetlenie komponentu i modułów. W tym pliku często znajduje się także odwołanie do skryptów JavaScript, wzbogacających funkcjonalność strony. Niestety, wiele szablonów umieszcza w tym pliku też informacje o układzie, np. wielokolumnowe tabele, obrazki i formatowanie tekstu. Właściwym miejscem dla definicji układu i wyglądu są arkusze stylów.
•
template.ess — Określa krój pisma1, kolory, pozycjonowanie, obrazki i inne aspekty warstwy prezentacji danego szablonu. Ponieważ wszystkie główne przeglądarki obsługują technologię CSS, arkusz stylów umieszczony w tym pliku pozwala zdefiniować praktycznie każdy aspekt, od układu kolumn, po formatowanie list.
•
templateDetails.xml — Przechowuje metadane na temat szablonu, które wykorzystywane są podczas instalacji, a także zarządzania w interfejsie administracyjnym Joomla!. Zapisano w nim listę wszystkich plików, z których składa się szablon, informacje o autorze i publikacji, a także parametry, które może zmieniać za pomocą interfejsu administratora.
•
banner.fff— Chociaż nie jest absolutnie wymagana, większość szablonów zawiera graficzną formę nagłówka — banner, która nadaje charakter szablonowi. W przypadku komercyjnych szablonów ich konstrukcja umożliwia wykorzystanie w ich miejsce logo, znaku handlowego lub nazwy strony, co sprawia, że strona wygląda jakby była projektowana na zamówienie. Banner zapisywany jest zazwyczaj w formacie JPG lub PNG (co odpowiada rozszerzeniom jpg i png w miejsce f f f podanego wyżej).
Szablony zawierają zazwyczaj dwa foldery, w których umieszcza się pliki i banner.fff.
1
Zwany popularnie czcionkami komputerowymi — przyp. tłum.
template.ess
Rozdział 3. • Tworzenie własnych szablonów •
\css — Zawiera jeden lub więcej plików CSS, które są wykorzystywane w szablonie. Zazwyczaj umieszczony jest tutaj co najmniej plik template.ess.
U
\images — Przechowuje wszystkie pliki graficzne użyte w szablonie. To tutaj najprawdopodobniej zamieszczony zostanie plik banner.ff. W przypadku większości szablonów umieszczono tutaj także małe pliki graficzne, które dopełniają układ strony.
69
Prawie wszystkie szablony Joomla!, które poznasz w przyszłości, zawierają co najmniej te podstawowe foldery i pliki. Dzięki zachowaniu opisanej wyżej struktury szablony można łatwo wykorzystać w systemie Joomla!. W przeciwieństwie do modułów i komponentów, które trzeba instalować w interfejsie administratora (dzięki czemu niezbędne ustawienia zostaną zapisane w bazie danych), aby wykorzystać szablon na stronie, wystarczy skopiować go do folderu 1 templates. Szablony zawierają często dwa dodatkowe foldery: •
1 html— Przechowuje pliki, które zmieniają wygląd dodatków systemu Joomla!. Więcej informacji na ten temat znajdziesz w podrozdziale „Modyfikacja wyglądu dodatków".
•
\javascript — Zawiera kod JavaScript wykorzystywany w szablonie.
Szablony dostępne są zazwyczaj w postaci archiwum .zip lub .tar, które zawiera pliki w odpowiednich podkatalogach. System Joomla! korzysta z biblioteki Zlib, aby rozpakowywać archiwa .zip, które dodano na stronę za pośrednictwem opcji Instaluj Rozszerzenia. Wypakowane pliki i foldery umieszczane są w katalogu o nazwie odpowiadającej nazwie szablonu. Najważniejszym z tych plików jest index.php, który przechowuje całą główną logikę szablonu.
.ogika szablonu: plik index.php Plik index.php jest głównym i jedynym wymaganym elementem szablonu Joomla!. Stanowi on kombinację kodu HTML i PHP. Kod HTML zawiera głównie elementy, które w połączeniu z arkuszami stylów tworzą warstwę prezentacji. W kodzie PHP umieszcza się odwołania do platformy Joomla!, aby wymagane treści pobrane z bazy danych umieścić na stronie. Najprostszy plik index.php przypomina poniższy: Hello World!
Powyższy kod HTML nie jest raczej zgodny z wytycznymi standardu World Wide Web Consortium (W3C), ale spowoduje wyświetlenie powitania „Hello World!" 2 na stronie Joomla!. Dosłownie: „Witaj, świecie!", wyświetlenie tej frazy stanowi w literaturze często pierwszy przykład wykorzystania danego narzędzia czy języka programowania—przyp. tłum.
70
Joomla!. Profesjonalne tworzenie stron WWW Zwróć uwagę, że ten podstawowy szablon nie wyświetli żadnej treści. Wywołanie funkcji Joomla! (w postaci znacznika ) powoduje wstawienie informacji nagłówkowych, jeśli są one dostępne. W dalszej części tego rozdziału dowiesz się, jak stworzyć bardziej skomplikowany szablon, wyświetlający kilka modułów i komponent. Powyższy szablon został maksymalnie ograniczony, abyś mógł zaobserwować, które elementy stanowią wymagane minimum, niezbędne do poprawnego działania szablonu. Prawdę mówiąc, usunięcie dyrektywy Joomla! nie sprawi, że szablon przestanie działać. Warto jednak zapoznać się z dyrektywami Joomla!, ponieważ stanowią one o potędze szablonu.
Instrukcje Joomla! Joomla! działa w oparciu o bezpośrednie wywoływanie kodu PHP, a aplikacja sama w sobie jest platformą składającą się z klas PHP. Poprzez odwoływanie się do obiektów Joomla!, takich jak JDocument i JDocumentHTML, możesz umieścić w szablonie wynik działania modułów i komponentów, a także zdobyć informacje na temat środowiska, w którym uruchamiany jest kod.
Wykorzystanie obiektu JDocument W podstawowym szablonie przedstawionym wcześniej umieszczono wywołanie metody include obiektu jdoc. Większość wywołań odnosi się do klasy JDocument (dostępnej za pośrednictwem obiektu jdoc). Widziałeś już wykorzystanie metody include w szablonie Hello World!. Została uruchomiona za pomocą poniższej instrukcji:
Powyższy kod spowoduje uruchomienie metody, która zwróci informacje nagłówkowe dla danej strony Joomla!. Możesz także wykorzystać wywołanie include do wyświetlania komunikatów systemowych. Poniższy kod spowoduje wyświetlenie komunikatów systemowych:
Najczęściej include wykorzystuje się do wstawienia kodu HTML modułu Joomla!. Przykładowo aby dołączyć wydruk modułu top (co powoduje zazwyczaj wyświetlenie bannera strony), użyjesz poniższej instrukcji:
Oprócz dyrektyw jdoc możesz wykorzystać także ogólne polecenia PHP. PHP jest zaawansowanym językiem programowania, który ma bogate możliwości — od struktur sterujących po programowanie obiektowe (OOP — ang. object oriented programming). Jeśli nie znasz PHP, ale rozumiesz ogólne zasady programowania, powinieneś pojąć większość przykładów przedstawionych w tej książce. Mimo to polecam lekturę Beginning PHP5 Apache and MySQL Web Development (Wiley, Indianapolis 2005), dzięki której zdobędziesz solidną wiedzę na temat PHP.
Rozdział 3. • Tworzenie własnych szablonów
71
W starszych wersjach Joomla! wykorzystywano w szablonach interpreter komend o nazwie patTempl ate jako uzupełnienie dyrektyw Joomla!. W nowej wersji porzucono patTemplate, ponieważ nauczenie się go wymagało dodatkowego czasu, a wykorzystanie ograniczało wydajność serwera. Zastąpiono go kodem PHP, którego kompilacja pozwala osiągnąć jeszcze wyższą wydajność — pod warunkiem że nie korzysta się z dyrektyw Joomla!. Stare rozwiązanie wymagało od programistów, oprócz nauki PHP, poznania także funkcji sterujących interpretera (takich jak pętle).
korzystanie odwołania Sthis Jedną z najczęściej wykorzystywanych przez Ciebie dyrektyw PHP będzie instrukcja $this. Instrukcja ta umożliwia odwołanie do obiektu, w zakresie którego uruchamiany jest kod. W przypadku szablonu Joomla! $this zawiera referencję do obiektu JDocumentHTML. Klasa JDocumentHTML zawiera kilka przydatnych pól. Przykładowo aby wyświetlić wybrany język, należy wykorzystać wartość pola language: language; ?>
Poniżej znajduje się lista pozostałych pól klasy JDocumentHTML, których wartość można pobrać za pomocą odwołania Sthis: •
di recti on — Informuje o kierunku czytania, od prawej do lewej (przyjmuje wartość Itr3), od prawej do lewej (przyjmuje wartość rtl) itd.
•
templ ate — Określa ścieżkę dostępu do katalogu szablonu.
•
titl e — Przechowuje tytuł dokumentu.
•
descri pti on — Zawiera opis dokumentu (z metadanych HTML).
•
link — Wskazuje adres URL dokumentu.
•
1 anguage — Określa język dokumentu, np. angielski (przyjmuje wtedy wartość en).
Klasa JDocumentHTML zawiera także kilka użytecznych metod, które można wykorzystać podczas tworzenia szablonu. Za pośrednictwem operatora $thi s można wywołać na przykład metodę countModules(), dzięki której określisz liczbę modułów na danej stronie. Aby pobrać liczbę wystąpień pojedynczego modułu, należy wywołać metodę, jak pokazano to poniżej: $this->countModules('userl');
Możesz wykorzystać tę funkcję do zliczenia sumy wystąpień kilku modułów: $this->countModules('userl + user2'):
Możliwe jest także skorzystanie z operacji logicznych, takich jak: $this->countModules('userl and user2'); $this->countModules('userl or user2');
Poniższy kod sprawdza, czy obszar top zawiera jakieś moduły. Jeśli tak, zostaną one wyświetlone, w przeciwnym razie — zostanie wstawiony obrazek zastępczy (ang. placeholder). ' ang. left-to-right — przyp. tłum.
72
Joomla!. Profesjonalne tworzenie stron WWW countModules('top')) : ?>
: ?>
Pamiętaj, że operator Sthis odwołuje się do obiektu, w zakresie którego uruchamiany jest dany kod. Dlatego odwołanie Sthis w kodzie komponentu odnosi się do zupełnie innego obiektu niż w przypadku szablonu. Aby zapobiec bezpośredniemu uruchomieniu (szczególnie przez hakerów) kodu Joomla! • z pominięciem systemu, powinieneś wstawić poniższą linię przed wprowadzeniem właściwego kodu PHP. definedC'_JEXEC') or dieCBrak dostępu');
Powyższy kod sprawdza, czy stała _JEXEC została zdefiniowana, w przeciwnym wypadku wyświetli komunikat o braku dostępu i zakończy uruchamianie kodu. Powyższa instrukcja jest bardzo ważna z punktu widzenia bezpieczeństwa Joomla!. Zanotowano przypadki włamań na strony Joomla! z wykorzystaniem stron zawierających kod PHP (takich jak pliki szablonów), które nie zawierały powyższej dyrektywy. P r y m i t y w n y index.php Prymitywny przykład wszystkich tematów poruszonych do tej pory wyglądałby podobnie do poniższego:
Powyższy kod rozpoczyna się sprawdzeniem, czy uruchamiany jest wewnątrz platformy Joomla!. Jeśli nie, wykonywanie zostaje przerwane. Następnie wartości pól language i dir wprowadzane są do atrybutów znacznika . W nagłówku umieszczone zostaje odwołanie do informacji jdoc head. Treść dokumentu HTML rozpoczyna się wydrukiem komunikatów systemowych (które zazwyczaj nie występują). Teraz, po wyświetleniu powitania „Hello World!", zostaje wyświetlony moduł dla pozycji top, o ile j ą określono. W przeciwnym wypadku wyświetla się plik placeholder.gif. Ostatnim elementem powyższego kodu jest sprawdzenie wartości parametru showComponent, i jeśli został ustawiony na True, dołączenie wydruku komponentu. Chociaż kod w powyższej postaci nie zadziała samodzielnie (do poprawnego funkcjonowanie wymagane jest przynajmniej stworzenie parametru showComponent), ale pozwoli Ci lepiej zrozumieć strukturę szablonu niż minimalny szablon Hello World! przedstawiony wcześniej.
ezentacja szablonu: plik CSS Drugim najważniejszym elementem po index.php jest plik CSS. Szablony mogą wykorzystywać jeden lub więcej plików CSS, aby określić kolory, fonty i ich atrybuty, które zostaną wykorzystane do wyświetlania strony. Jeśli dany szablon spełnia Twoje potrzeby, ale chciałbyś, aby odnośniki były koloru czerwonego zamiast zielonego, wystarczy tylko zmodyfikować CSS. Wraz z wprowadzeniem wersji Joomla! 1.5 umożliwiono wykorzystywanie kilku plików CSS, podczas gdy w starej wersji wszystkie style musiały znajdować się w pojedynczym pliku. Celem programistów Joomla! było (maksymalnie możliwe) oddzielenie warstwy prezentacji od logiki programu. Dzięki wprowadzeniu jasnego podziału zmianę wyglądu i zewnętrznej funkcjonalności strony można przeprowadzić, wybierając inny szablon, bez wpływu na kod odpowiadający np. za koszyk z zakupami lub zapisanie w bazie danych głosu w sondzie. Ważną rolę w oddzielaniu warstwy prezentacji i logiki programu odgrywa CSS. Pozwala na zdefiniowanie formatowania dowolnego elementu — od stylu font po kolor obramowania tabeli. W pliku HTML niezbędne jest tylko odwołanie do pliku CSS, aby zastosować określone w nim style. Do stworzenia skutecznego szablonu niezbędna jest możliwość dokładnego określenia pozycji elementów, które znajdują się na stronie. Za pomocą CSS można wpływać na wygląd modułów, określać względną pozycję, opływanie i odstępy. Dzięki regułom i metodom dostępnym w arkuszach stylów jesteś w stanie dopasować wygląd tekstu do swoich wymagań.
74
Joomla!. Profesjonalne tworzenie stron WWW Podczas tworzenia arkusza stylów musisz wziąć pod uwagę, jak zostanie on zinterpretowany przez różne przeglądarki. Na maszynie testowej powinieneś mieć zainstalowane przynajmniej dwa programy tego typu. Niezależnie od systemu operacyjnego jednym z nich powinna być przeglądarka Mozilla Firefox. Jest to obecnie najpopularniejszy program spośród tych, które działają w wielu systemach operacyjnych. Nawet jeśli nie korzystasz z systemu Windows, sprawdź tworzoną stronę w programie Internet Explorer (najlepiej w wersji 6 i 7) na komputerze z Windowsem. Prawdopodobnie większość odwiedzających będzie korzystać właśnie z tej przeglądarki. Regularnie sprawdzaj, jak wygląda Twój szablon w różnych przeglądarkach, ponieważ są one stale rozwijane. Szablon może zawierać jeden lub kilka plików CSS. Prawdę mówiąc, nawet na pojedynczej stronie można wykorzystać kilka plików CSS. Jeśli definicja stylu pokrywa się z inną, określoną wcześniej w (tym samym lub innym) pliku CSS, zostanie wykorzystana ostatnia definicja, która zastąpi wszystkie poprzednie.
Elementy blokowe i liniowe
W pliku CSS można określać styl dla dwóch typów elementów: blokowych i liniowych. Element}' liniowe traktowane są jak zwykły tekst i nie wpływają na układ szablonu. Przykładem takich elementów są znaczniki , lub 4. Elementy blokowe określają konkretny obszar, np. z użyciem znaczników
,
,
lub
. Podczas projektowania ' szablonu zwróć uwagę na odpowiedni dobór elementów. Odwołanie do pliku arkusza stylów wymaga wstawienia poniższych dwóch linii w nagłówek pliku index.php'.
Pierwsza linia powoduje dołączenie podstawowych stylów systemu Joomla!. Określają one wygląd takich podstawowych elementów HTML, jak znacznik . Druga linia odwołuje się do głównego pliku CSS dla danego szablonu (tradycyjnie ten plik nosi nazwę template.ess).
Wbudowane style
Stworzenie poprawnego arkusza stylów, który można następnie wykorzystać w Joomla!, wymaga odpowiednich nazw stylów. Style dla elementów takich jak komponenty zawierają w swojej nazwie stosowną informację. Przykładowo wygląd tytułu komponentu (zobacz rysunek 3.1) określa się przez odwołanie do stylu componentheadi ng.
Jeśli chciałbyś wyświetlić tytuł szablonu z dolnym obramowaniem w kolorze białym o szerokości jednego piksela i z tekstem w kolorze czerwonym, powinieneś umieścić poniższą definicję stylu w pliku CSS:
4
W przypadku szablonów Joomla!, które są w głównej mierze plikami XHTML, znaczniki należy pisać
małymi literami —przyp. tłum.
Rozdział 3. • Tworzenie własnych szablonów
75
class="contentpaneopen"
rsunek 3.1. 'ygląd tytułu omponentu kreślą się 'zez odwołanie o stylu jmponent •heading
Niektóre style nie są wyświetlanie na stronie, ponieważ nie zostały zdefiniowane. Z tego powodu pozostają niewidoczne. Dobrym przykładem jest styl article_separator. Ponieważ wiele szablonów nie zawiera jego definicji, nie pojawia się on na stronie. Poniższa definicja spowoduje wyświetlanie zielonego separatora o szerokości dwóch pikseli między kolejnymi artykułami: ,article_separator { margin: 10px 0: border: 2px solid #00FF00;
System Joomla! zawiera ogromną liczbę stylów. Wiele z nich wykorzystywanych jest w szablonie dołączonym w domyślnej instalacji Joomla!. Na rysunku 3.1 przedstawiono domyślny szablon wraz z zaznaczonymi poszczególnymi stylami. Zwróć uwagę na miejsca, w których są wykorzystywane. Wbudowane style można podzielić na trzy główne kategorie: treść, administracja i rozszerzenia. Do kategorii treść należą poniższe style: •
article_separator
•
author
•
content_emai1
•
content_rating
•
contet vote
76
Joomla!. Profesjonalne tworzenie stron WWW •
contentdescription
•
contentpagetitle
•
contentpane
•
contenttoc
•
created-date
•
intro
•
title
•
modifydate
•
smali
•
smalldark
Dla kategorii a d m i n i s t r a c j a m o ż n a o d w o ł y w a ć się d o n a s t ę p u j ą c y c h stylów: •
adminform
•
cl r
•
date
•
input
•
inputbox
•
outline
•
pagenav
•
pagenavjiext
•
pagenav_prev
•
pagenavbar
•
pagenavcounter
•
pathway
Dla kategorii r o z s z e r z e n i a m o ż n a o d w o ł y w a ć się d o poniższych: •
bannerfooter
•
bannergroup
•
bannerheader
•
banneritem
•
blog
•
blog_more
•
blogsection
•
button
•
buttonheading
Rozdział 3. • Tworzenie własnych szablonów •
lastetnews
•
loclink
•
message
•
metadata
•
module
•
newsfeed
•
pollstableborder
•
read
•
searchintro
•
sections
•
sectiontable_footer
•
sectiontableentry
•
sectiontablefooter
•
sectiontableheader
•
sublevel
•
wrapper
77
Nie musisz definiować wszystkich wyżej wymienionych stylów. Minimum w przypadku szablonu to zazwyczaj definicja stylu body, który określa, jak zostanie wyświetlony na stronie tekst, któremu nie przypisano innego stylu. Definicja stylu body będzie znajdować się na samym początku pliku CSS i będzie przypominać: .body { font: 0.7em/l.5 Verdana. Arial, Helvetica, sans-serif;
} Wykorzystanie stylu body pozwala na określenie fontu bez konieczności ingerencji w plik index.php, dzięki czemu można oddzielić warstwę prezentacji, której opis przechowywany jest w pliku arkusza stylów. Dobrym pomysłem jest także odwołanie do obrazków wyłącznie w ramach arkusza.
itawianie obrazków w CSS Wstawianie obrazków w CSS może okazać się użyteczne, choć także problematyczne. Powinieneś unikać tworzenia arkuszy, które są zbyt szczegółowe, co nie pozwala na wykorzystanie ich dla dowolnych artykułów. Jednocześnie odwołania do kluczowych obrazków warto umieścić w pliku CSS. Dzięki temu wszystkie odwołania skupiane są w jednym miejscu. Jeśli przykładowo chcesz wstawić w miejsce starego nowy obrazek, ponieważ wygląd strony został zmieniony, poprawić trzeba wyłącznie jedno wystąpienie w pliku CSS, przez co pojawi się on na wszystkich stronach w miejscu starego.
78
Joomla!. Profesjonalne tworzenie stron WWW
Ważniejszym zagadnieniem jest jednak problem techniczny: względny adres URL. Adres obrazka musi zostać określony tak, aby przeglądarka była w stanie znaleźć właściwy obrazek. W przypadku szablonu katalog images znajduje się na tym samym poziomie co katalog css Dlatego, aby z poziomu arkusza stylów odwołać się do obrazka, trzeba skonstruować ścieżkę, która odwoła się do katalogu images, znajdującego się poziom wyżej: background: url (.,/images/bottomleft.gif)
Metadane szablonu: plik lemplateDetails.xml
Każdy szablon potrzebuje pliku z metadanymi, który zawiera podstawowe informacje o autorstwie (nazwę szablonu, autora, prawa autorskie itd.), listę plików i ewentualne parametry, które można określić z poziomu interfejsu administratora.
Na listingu 3.1 przedstawiono przykładowy plik ze szczegółami szablonu. Puste linie służę do oddzielania czterech części pliku. Listing3.1. Standardowy plik ze szczegółami składa się zazwyczaj z trzech sekcji: informacji o autorstwie, listy plików i parametrów Szablon dwukolumnowy Dwie kolumny z użyciem CSS w świecie Joomla! i ndex.phptemplateDetai1s.xmlimages/LSlogo.jpg css/template.cssleftright Tak
Pierwsza sekcja zawiera informacje o autorstwie szablonu. Poza samą nazwą inne pola nie są wymagane. Jeśli nie zostaną określone, w interfejsie Joomla! pojawi się unknown zamiasi stosownej wartości.
Rozdział 3. • Tworzenie własnych szablonów
79
Druga część pliku jest dużo ważniejsza, ponieważ przedstawia listę plików, z których składa się szablon. Lista wykorzystywana jest przez instalator do wypakowania plików z archiwum i umieszczenia ich w odpowiednich folderach. Poza tym wykorzystywana jest wyłącznie podczas usuwania szablonu. Trzecia sekcja to lista możliwych pozycji modułów, które umieszczono w szablonie szablon. Zwróć uwagę, że są to tylko informacje dla użytkownika — nie wpływają na przypisanie pozycji w interfejsie administratora. Czwarta sekcja opisuje parametry wykorzystywane przez szablon. Parametry to zmienne wpływające na działanie szablonu, których wartość można ustawić z poziomu interfejsu administratora. Najczęściej parametry wykorzystywane są do określenia opcji wpływających na prezentacje, np. kolor tła. Wartości zapisywane są w pliku parametrów, który opisano w kolejnym podrozdziale.
lienne szablonu: plik parametrów W pliku templateDetails.xml można wstawić parametry szablonu, których zmiana wpływa na funkcjonowanie szablonu. Domyślny szablon Joomla! zawiera parametr showComponent, któiy pozwala administratorowi na wyłączenie wydruku komponentu (w ten sposób nie zostaną wyświetlone żadne artykuły). Wartości parametrów przechowywane są w plikuparams.ini, który znajduje się w głównym katalogu danego szablonu. W przypadku szablonu domyślnego zawiera on tylko jedną linię: showComponent=l
Wartości parametrów zapisywane są w formacie INI, dzięki czemu plikiem można manipulować za pomocą zwykłego edytora tekstowego. Najlepszym rozwiązaniem jest jednak zmiana wartości za pomocą opcji Szablony w interfejsie administratora, jak to przedstawiono na rysunku 3.2. Parametry szablonu wykorzystywane są najczęściej do tego, aby umożliwić ustawianie opcji wpływających na prezentację, takich jak schemat kolorów, liczba kolumn w układzie szablonu, szerokość kolumn itd. Dzięki parametrom szablony stają się bardziej przyjazne użytkownikom, ponieważ ingerencja w wygląd nie wymaga ręcznej edycji plików. Wartość parametrów można odczytać w szablonie, wykorzystując instrukcję analogiczną do $this->params->get( 'showComponent'), którą zademonstrowano wcześniej w tym rozdziale. Dzięki parametrom możesz nadać szablonowi większą elastyczność.
•afika szablonu: folder images Wszystkie obrazki i grafiki wykorzystywane przez szablon powinny zostać umieszczone wewnątrz katalogu images. Najczęściej umieszcza się w nim główny banner strony, graficzne przerywniki, obrazki zaokrąglonych rogów, własne znaki wypunktowania i strzałki wskazujące. Liczba plików graficznych może się znacząco różnić w przypadku różnych szablonów.
80
Joomla!. Profesjonalne tworzenie stron WWW
Rysunek 3.2. Możesz ustawić parametry szablonu, wybierając go z listy w części Szablony
www.JoomlaJ
HMl ¿ Pomoc
[ Zmień ]
"M Podgląd
K Podgląd
< 5z.»l>lon RHUK Milhyw.i\
u
u
Edytuj HTML.
Edytuj CSS
0
y Zapisz
Zastosuj
'S 1
o Zamknij
^ Wyloguj
o Pomoc,
Preferencje Parametr-Plik ltemplatesVhuk_milkyway\pararris.ini jest , ,-iprvy\v,-
Niebieski
Wariant t!.( Niebieski Brak - >Wybierz z listy
Szerokość szablonu
v v
Maksymalna szerokość V
Miniatura szablonu W interfejsie administracyjnym, w części Szablony po najechaniu kursorem myszy na nazwę szablonu zostanie wyświetlona w małym okienku jego przykładowa miniatura, o ile jest ona dostępna. W przypadku większości szablonów miniatura przedstawia tylko główny fragment strony, jak zilustrowano to na rysunku 3.3. Aby przyciąć niepotrzebne paski narzędzi, paski przewijania i inne niepotrzebne elementy, które nie są częścią szablonu, możesz użyć programu graficznego, np. aplikacji Adobe Photoshop lub darmowego GNU Image Manipulation Program, czyli w skrócie: GIMP (www.gimp.org). Rysunek 3.3. Wielkość pliku template_thumbn ail.png powinna wynosić około 200x150 pikseli
Miniatura powinna zostać zapisana pod nazwą template thumbnail.png w głównym katalogu danego szablonu. Zwróć uwagę, że musi to być główny katalog, a nie podkatalog taki jak images. Aby stworzyć miniaturę, należy wykonać zrzut ekranu, na którym widać Twój szablon, a następnie przyciąć go i zmniejszyć do rozmiaru około 200x150 pikseli. Sposób wykonania zrzutu ekranu będzie się różnić w zależności od systemu operacyjnego.
Rozdział 3. • Tworzenie własnych szablonów
81
W systemie Windows możesz wykorzystać klawisz Print Screen (często oznaczony na klawiaturze jako PrtSc), co spowoduje umieszczenie zrzutu ekranu w schowku. Wciśnięcie i przytrzymanie klawisza Alt, a następnie naciśnięcia klawisza Print Screen spowoduje skopiowanie zrzutu aktywnego okna, zamiast całego ekranu. Po tej operacji możesz wkleić zawartość schowka do wybranego programu graficznego. Jeśli tworzysz sporo szablonów, możesz rozważyć wykorzystanie komercyjnego programu do wykonywania zrzutów ekranów, np. Snaglt (www.techsmith.com/snagit.asp). Zawiera on bogate funkcje, w tym automatyczne przycinanie i zmianę rozmiaru. W przypadku Macintosha zrzut ekranu zostanie zapisany na dysku twardym komputera po jednoczesnym naciśnięciu klawiszy Shift+Apple+3. Aby zapisać tylko wybrany fragment ekranu, należy nacisnąć kombinację Apple+Shift+4. Kursor przybierze kształt krzyża, co oznacza, że możesz zaznaczyć fragment ekranu, którego zrzut zostanie wykonany. W systemie MacOS zawarto także narzędzie o nazwie Grab, które zawiera szereg opcji związanych z wykonywaniem zrzutów. Program można znaleźć w menu Applications/Utility. Dla Linuksa napisano wiele programów służących do tworzenia zrzutów. Jeśli korzystasz z interfejsu XWindows, możesz wykorzystać program xvidcap (http://sourceforge.net/project/ xvidcap/). Użytkownicy GTK+ mogą użyć programu Gsnapshot (http://sourceforge.net/ projet/gsnapshot). Po wykonaniu zrzutu ekranu należy skorzystać z programu graficznego, aby zmniejszyć obraz do odpowiednich rozmiarów i zapisać go w formacie PNG. Gotową miniaturę zapisz w głównym katalogu swojego szablonu pod nazwą templatejhumbnail.png. Od teraz miniatura szablonu będzie automatycznie wyświetlana w interfejsie administratora Joomla! po najechaniu kursorem myszy na nazwę szablonu w części Szablony.
worzenie trójkolumnowego układu Szablony rzadko konstruuje się od podstaw. Większość projektantów wykorzystuje wzorzec do tworzenia nowych szablonów. W tym podrozdziale opisano tworzenie trójkolumnowego wzorcowego szablonu, który możesz wykorzystać jako podstawę wszystkich Twoich kolejnych prac. Do określenia układu elementów i ich wyglądu wykorzystasz CSS. Jeśli masz już jakieś doświadczenia z tą technologią, to zdajesz sobie sprawę, że arkusze stylów są w różny sposób interpretowane przez różne przeglądarki. Najbardziej znaczącym przykładem jest Internet Explorer 6, który zawiera błędną implementację wielu podstawowych funkcji standardu CSS lub wcale jej nie ma. Z tego powodu twórcy Joomla! dołączają do swoich szablonów specjalny plik o nazwie ieonly.css5. Wraz z wydaniem Internet Explorera 7 większość problemów została rozwiązana, jednakże program w wersji 6 będzie jeszcze długo wykorzystywany przez użytkowników.
Tylko dla Internet Explorera" —przyp. tłum.
82
Joomla!. Profesjonalne tworzenie stron WWW Dlatego jeśli jakiś fragment CSS nie działa poprawnie, prawdopodobnie niezbędny jest dodatkowy kod konieczny do zapewnenia kompatybilności z różnymi przeglądarkami. W tej książce starałem się umieścić wystarczająco dużo kodu CSS i opisu specjalnych przypadków, aby zapewnić jak najszerszą kompatybilność z najpopularniejszymi przeglądarkami. Jeśli jednak Twój szablon jest niepoprawnie wyświetlany w przeglądarce, sugerowałbym znalezienie fragmentu arkusza stylów, który powoduje problem, a następnie przeszukanie internetu pod kątem obejścia dla tego problemu (najczęściej błędnej implementacji CSS). W ten sposób uda Ci się najprawdopodobniej rozwiązać problem i dodatkowo poprawić kompatybilność wzorcowego szablonu. Jedną z pożytecznych funkcji Joomla! jest możliwość wykorzystania kilku arkuszy stylów w jednym szablonie. Jeśli szablon składa się wyłącznie z jednej strony i pojedynczego arkusza stylów, musi być on „do wszystkiego". Jednak będąc projektantem, życzyłbyś sobie raczej, żeby różne podstrony wyświetlane były w odrobinę inny sposób. Zamiast wykorzystywać kilka szablonów, można wykorzystać jeden, który w zależności od potrzeb danej podstrony zmieni swój wygląd dzięki specjalnemu plikowi CSS. Jeśli tworzysz nowe szablony lub poprawiasz wygląd już istniejących, zalecane jest skorzystanie z rozszerzenia przeglądarki, które pozwoli Ci „na żywo" badać, a nawet modyfikować arkusze stylów. W przypadku programu Firefox istnieje narzędzie o nazwie Firebug (https://addons.mozilla.org/en-US/firefox/addon/1843), które umożliwia diagnozowanie, edycję, a także monitorowanie kodu CSS i JavaScript interpretowanego przez przeglądarkę. Dla Internet Explorera możesz znaleźć na stronie Microsoftu (www.microsoft.com) Internet Explorer Developer Toolbar. To darmowe narzędzie pozwoli Ci przeglądać i zmieniać obiektowy model dokumentu (DOM), ustawiać styl poszczególnych elementów, sprawdzać poprawność kodu CSS, a także wiele więcej.
Tworzenie struktury szablonu Pierwszym krokiem podczas projektowania nowego szablonu jest utworzenie folderu, w którym zostanie umieszczony. Ja zawsze nadaję nazwom szablonów przedrostek tmpl, dzięki temu, jeśli znajdzie się w katalogu miscellaneous, będę wiedział, że chodzi o szablon, a nie o moduł lub inny element Joomla!. Ponieważ masz zamiar stworzyć szablon trójkolumnowy, rozważ nazwanie go tmplThreeCor, a następnie umieść w katalogu templates systemu Joomla!. Jeśli projektujesz szablon na serwerze testowym (zalecane) w środowisku Windows, ścieżka dostępu do Twojego szablonu będzie przypominać poniższą: C:\Program Files\Apache Software Foundation\Apache 2.2\htdocs\templates\tmplThreeCol
Aby nie zajmować się później przygotowaniami, utwórz od razu foldery css i images w katalogu szablonu. Do momentu ukończenia szablonu znajdzie się w nich wiele plików, arkusze stylów, grafiki pomocnicze, a także logo strony.
6
Z ang. szablon trój kolumnowy — p r z y p . thun.
Rozdział 3. • Tworzenie własnych szablonów
83
Potrzebujesz także podstawowy plik templateDetails.xml, aby móc przeprowadzać testy w czasie tworzenia szablonu. Joomla! wykorzystuje ten plik, by zdobyć informacje na temat szablonu, a także umożliwić jego wybór za pomocą opcji Szablony. Wprowadź poniższy kod i zapisz go w pliku templateDetails.xml, w katalogu Twojego szablonu: <1nstal1 version»"1.5" type="template"> Trzy Kolumny Wzorzec szablonu o układzie trój kolumnowym i ndex.phptemplateDetai1s.xml userlright
Po utworzeniu podstawowej struktury szablonu możesz przejść do etapu — konstruowania logiki szablonu. Pierwszym krokiem jest stworzenie prototypowego pliku index.php.
wonzenie pliku index.php Wstępna wersja pliku index.php będzie bardzo prymitywna — ma to umożliwić szybkie uruchomienie szablonu. Będzie się składać z trzech kolumn, z czego każda będzie odpowiadać za inną część interfejsu. W domyślnej instalacji Joomla! szablon wzorcowy spowoduje wyświetlenie strony głównej przypominającej tę, która jest przedstawiona na rysunku 3.4. Każda kolumna ma obramowanie, co ułatwia określenie elementów, które zawiera. Kolejnym uproszczeniem jest brak oddzielnego pliku arkusza stylów — zamiast tego kod CSS zostanie umieszczony w nagłówku pliku index.php. Jeśli masz już jakieś doświadczenie w pracy z Joomla!, wiesz, że strona składa się z pewnej liczby paneli nazywanych modułami. Każdy z tych modułów może zawierać menu, artykuł, sondę lub inny dowolny element. Szablon strony może zawierać określoną liczbę modułów, widocznych lub ukrytych, w zależności od ustawień strony. Poprzez wyświetlanie lub ukrywanie poszczególnych modułów szablon strony można dopasować do funkcji poszczególnych podstron. Aby zrozumieć, na czym polega układ modułów, wyobraź sobie zwykłą gazetę. Logo znajduje się na górze, spis treści w ramce na dole, a resztę miejsca podzielono na kilka różnych paneli. Mogą one zawierać komentarze, reklamy, ogłoszenia, prognozę pogody lub praktycznie dowolny inny element. Moduły Joomla! odzwierciedlają tę funkcję. Strona składa się z różnych modułów umieszczonych w panelach. Podstawowy wyświetla zawartość artykułu. Bardziej zaawansowany może zawierać sondę na temat mody i umożliwiać wybór konkretnej odpowiedzi, np. „Tak, w tym sezonie spódniczki są krótsze niż w poprzednim". Przykładem dynamicznego modułu jest wyświetlanie aktualnego notowania giełdy.
84
Joomla!. Profesjonalne tworzenie stron WWW
Rysunek 3.4. Strona główna wyświetlona z wykorzystaniem trójkolumnowego wzorcowego szablonu
Welcome to the Frontpage
Maili Menn
[ X ] [5J
Welcome to Joomla! Wpisał Administrator
• Home
• Joomla!
Foils
czwartek, 12. październik 2006 10:00 .Joomla) is a free open source framework and content publislimg system designed for quickly treating highly interactive multi-language Web sites, online communities, media poitals, blogs and eCommerce applications.
Overview
Joomla! > FAO ' The News • Web Links ' News Feeds
Powered fcjy
Joomla! provides an easy-to-use graphical user interface that simplifies the management and publishing of large volumes of content including HTML, documents, and rich media. Joomla! is used by organisations of all sizes for Public Web sites. Intranets, and Extranets and is supported by a community of thousands of users.
Joomla!
loiJldl v is used for? ) Community Sites • Public Brand Sites ) eCommerce O Blogs . Intranets Photo and Media Sites : ; All of the Above! [_Gtosuj I I vVymk
j
Zmiemony ( czwartek, 08. listopad 2007 12:06 )
WllO'S ' >Mil11'
Wiçcej.
•••
W e are Volunteers
Key Concepts
Sticktothi
[DDL]
i
"Wpisał Administrator
Wpisał Administrator
ś r 0 < j Ł 07 ¡ p l e t ; 0 0 4 12:00
środa, 07 lipiec 2004 09:54
To msure
The Joomla 1 Core Team
Wilco Jansen resorted to
^
cocie
release,
Naszą witrynę przegląda teraz 2 gości
Ailvei-lisemellf |
W podstawowym układzie trójkolumnowym w lewej kolumnie wyświetlony zostanie moduł userl, który zawiera menu z najnowszymi wiadomościami. Środkowa kolumna zawiera treść artykułu, a w prawej wyświetlany jest moduł przypisany do r i g h t , co w domyślnej instalacji Joomla! odpowiada sondzie. Jeśli w interfejsie administracyjnym po wybraniu szablonu wzorcowego klikniesz przycisk Podgląd, na ekranie pojawi się szablon wraz z zaznaczeniem poszczególnych modułów, jak przedstawiono to na rysunku 3.5. Rysunek 3.5. Kliknięcie przycisku Podgląd spowoduje wyświetlenie szablonu wraz z oznaczeniem modułów
k r iiuiWei«»"
•••
Welcome to the Frontpage Welcome to Joomla! Wpisał Administrator czwartek, 12. październik 2006 10:00
LJoomla! is a free open source framework and content Vublishmg system designed foi quickly creating lugldy interactive multi-language Web sites, onlnie communities lilpdia poitals, blogs and eCommerce applications
Powe«i W
Joomla! provides an easy-to-use graphical user interface that simplifies the management and publishing of large volumes of content including HTML, documents, and rich media. Joomla! is used by organisations of all sizes for Public W e b sites, Intranets, and Extranets and is supported by a community of thousands of users. Zmiemony ( czwartek, 08. listopad 2007 12:06 )
^^ J o o m l a !
version i >
Wigcej
.
We are Volunteers
0 S S
Stick t0
Code!
0 E3 S
Wpisał Administrator
Wpisał Administrator
środa, 07. lipiec 2004 09:54
środa, 07. lipiec 2004 12:00
The Joomla! Core Team consists To ensure this code release, of volunte er develop ers,
Wile o J a n s e n r e s o r t e d t o s ending
designers, administrators and
rum to joint lead-developer Johan
managers who, together with a
Jans sens. Johan, who's had a
I
Rozdział 3. • Tworzenie własnych szablonów
85
Domyślna instalacja Joomla! zawiera moduły login, polling, who is online, syndication i search. Każdy z nich zostanie dokładniej opisany w kolejnych rozdziałach. Istnieje możliwość załączenia dodatkowych modułów w postaci rozszerzeń. Aby stworzyć szablon Trzy Kolumny, wprowadź poniższy kod, a następnie zapisz go pod nazwą index.php w katalogu szablonu:
 :
86
Joomla!. Profesjonalne tworzenie stron WWW
Szablon powinien być teraz gotowy do testów. Otwórz opcję Szablony, a na liście powinieneś znaleźć szablon Trzy Kolumny. Kliknij przycisk opcji po lewej stronie tego szablonu, a następnie kliknij przycisk Domyślnie. W kolumnie Domyślnie powinna pojawić się gwiazdka obok wybranego szablonu, jak przedstawiono to na rysunku 3.6. Rysunek 3.6. Ustaw szablon Trzy Kolumny jako szablon domyślny
Witryna
Menu
Artykuły
Komponenty
Rozszerzenia
llaizędzia
Pomoc
g * Podgląd
1
o
B'..! Szablony WffllVlH
Z.I(||CC.'.
Ttzy Kolumn-.' Ter, kolumny Zaokreślone
Ponieważ podstawowa część szablonu działa już poprawnie, przyszła pora na udoskonalenie wyglądu. Przykładowo profesjonalne szablony mają bardziej wyrafinowany układ niż trzy proste kolumny. Jednym z elementów profesjonalnego układu będzie dodanie zaokrąglonych rogów.
Tworzenie arkusza stylów dla zaokrąglonych rogów
Większość zabiegów w celu dodania zaokrąglonych rogów sprowadza się do pracy nad arkuszem stylów. Pierwszym krokiem jest umieszczenie go w oddzielnym pliku. Zamień znaczniki , a także cały kod znajdujący się między dwiema poniższymi liniami:
Dodanie tych dyrektyw spowoduje załadowanie arkuszy stylów z zewnętrznych plików. Pierwszy odpowiada domyślnym stylom sytemu Joomla!. Drugi to arkusz, który zostanie za chwilę utworzony. Zwróć uwagę na kod PHP, który odczytuje wartość pola template obiektu wskazywanego przez zmienną Sthis. Wartość zostanie wstawiona w ścieżkę dostępu przez co przeglądarka będzie w stanie znaleźć odpowiedni plik CSS.
Wprowadź poniższy kod w edytorze tekstu, a następnie zapisz go pod nazwą template.ess w folderze ess szablonu Trzy Kolumny zaokrąglone: /* Arkusz stylów dla szablonu Trzy Kolumny zaokrąglone */ /* Definicja kolumn tworzących układ, bez widocznego obramowania */ #colLeft { float: left; width: 151; padding: 5px:} #colCenter { float; left: width: 60$; padding: 5px; } #colRight { float: left: width: 1535: padding: 5px: }
Rozdział 3. • Tworzenie własnych szablonów /* Domyślny krój pisma */ .body { font: 0.7em/l.5 Verdana, Arial. Helvetica, sans-serif:
}
/* Pierwszy znacznik div odpowiedzialny za lewy górny zaokrąglony róg */ di v.modułe_menu. div.module { margin-top: 10px: background: #999999 url(../images/topleft.gif) top left no-repeat: width: 9 M :
} /* Wyświetl prawy górny zaokrąglony róg */ di v.modułe_menu div, div.module div { background: url(../images/topright.gif) top right no-repeat: padding:0px: border-bottom: lpx solid #fff; margin:0: color: #FFFFFF:
} /* Wyświetl dolny lewy zaokrąglony róg */ div.module_menu div div. div.module div div { background: url (../images/bottomleft.gif) bottom left no-repeat: padding:Opx; border-bottom: lpx solid #fff:
} /* Wyświetl dolny prawy zaokrąglony róg */ div.modułe_menu div div div. div.module div div div { background: url(../images/bottomright.gif) bottom right no-repeat: padding:0px: border-bottom: lpx solid #FFFFFF;
} /* Menu i tytuły modułów pisane białym kolorem div.modułe_menu div div div h3. div.module div div div h3 { padding:lOpx: border-bottom: lpx solid #FFFFFF; margin:0: color: #FFFFFF:
*/
}
/* WIE6 lista nachodzi na zaokrąglenia, poniższa definicja zapobiega temu */ div.modułejnenu div div div ul { padding-top:5px; padding-bottom:5px:
}
87
88
Joomla!. Profesjonalne tworzenie stron WWW /* Opcje w sondzie wyświetlane na jasnoszarym tle */ .pol 1 td { background: #cccccc; font-size: 80X; margin-left:5px; padding-left:5px; marg1n-right:5px; margin-top:Opx;
} .latestnews, .menu, .keyconcepts, .othermenu { background: #cccccc top right repeat-y: margin-left:5px: padding-left:Opx: margin-right:5px: margin-top:Opx:
} div.modułetable li, .menu li. .keyconcepts li, .othermenu In { background: #cccccc top right repeat-y; margin-left: 1.5em: padding:5px; font-size: 80«:
}
* Powyższy zestaw stylów jest bardziej skomplikowany niż trzy style dołączone wcześniej w pliku index.php. Komentarze wyjaśniają wykorzystanie poszczególnych stylów. Zwróć uwagę, że większość z nich zastępuje podstawowe style Joomla!. Na wygląd modułów i komponentów wpływa kilka stylów, m.in. moduł etable i contentheading. Poprzez zastąpienie tych stylów możesz dokładnie kontrolować wygląd treści na stronie.
Tworzenie grafiki zaokrąglonych rogów Arkusz stylów zawiera definicje, które odwołują się do czterech plików graficznych: topleft.gif, topright.gif, bottomleft.gif i bottomright.gif. Te pliki odpowiadają zaokrąglonym rogom. Musisz wykonać je samodzielnie lub ktoś musi je zrobić dla Ciebie. Poniżej opisano pokrótce, jak można je stworzyć w programie Adobe Photoshop. Niezbędne kroki będą prawie identyczne dla innych programów graficznych, takich jak np. GIMP. Rozpocznij od utworzenia obrazu o rozmiarze 100 x 100 pikseli w trybie RGB. Zamiast tradycyjnie białego tła wybierz tło przezroczyste, jak zilustrowano to na rysunku 3.7. Zaokrąglone rogi będą przezroczyste, dzięki czemu kolor kolumn będzie można ustawić w arkuszu stylów (dzięki czemu nie będzie konieczne tworzenie oddzielnych plików dla każdego koloru). W miejsce obrazu powinna zostać wyświetlona szachownica, co oznacza, że jest on pusty. Po wybraniu opcji Fili... z menu Edit pojawi się okno dialogowe. Wybierz biały (ang. White) jako kolor wypełnienia, jak zilustrowano to na rysunku 3.8, i kliknij przycisk OK. Obraz powinien zostać wypełniony białym kolorem.
Rozdział 3. • Tworzenie własnych szablonów
89
sunek 3.7. ybierz zezroczyste tło a tworzonego irazu
Wysokość: p 00 Bozdiiefczość: ¡72 I r y b koloru: j RGB
j piks/cal _*J j 8 bitów na kanał
Rozmiar obrazka:
¿awartośćtła: (Przezroczyste
29.3K
s • Zaawansowane
sunek 3.8. 'ybierz biały jako iior wypełnienia
Kolejnym krokiem jest narysowanie zaokrąglonego prostokąta. Wybierz najpierw narzędzie rectangle, następnie konieczne będzie dopasowanie kilku opcji na pasku narzędzi. Po pierwsze, jak przedstawiono to na rysunku 3.9, wybierz wypełnianie pikseli, później zaznacz zaokrąglony prostokąt. Odznacz opcję Anti-aliased po prawej stronie, dzięki czemu krawędzie będą ostre. Rysowany prostokąt ma być w kolorze czarnym, dlatego kliknij przycisk Default Foreground and Background Color. Na koniec ustaw przybliżenie na 400 procent i narysuj prostokąt, który wypełni dostępną przestrzeń.
'
'
..
:
:
"" "
SUnek 3.9. Ustaw wszystkie niezbędne opcje, a następnie narysuj zaokrąglony prostokąt, /pełni dostępną przestrzeń
IZZM
który
90
Joomla!. Profesjonalne tworzenie stron WWW Wybierz narzędzie Magie Wand i odznacz opcję Anti-aliased, jak pokazano to na rysunku 3.10. Kliknij prostokąt, który narysowałeś wcześniej, i naciśnij klawisz Delete. Płótno powinno teraz przedstawiać szachownicę (co odpowiada przezroczystości) wraz z czterema zaokrąglonymi rogami. Zwróć uwagę, że w przypadku tego szablonu będziesz wykorzystywać białe tło. Jeśli chciałbyś wybrać inny kolor tła, musisz stworzyć nowe zaokrąglone rogi, a w miejsce białego wybrać odpowiedni kolor. jjQlJSl
Pük
Edycja
Qbrazek
•RFI > >'* • L3
Carstwa
Zaznsęz
Fftr
Widok
Okno
POEIX)£
r«w—. F«w> V •¡•¡••i
mm J L
,
V.
14 S o. y !..
»
>.
T
4.-J
«
Bpi!
J.S
vi;
;
i;;;-;-
^ -r/-*.^{'il'H:'
j
iÊKmSÊÊ'
::
:
: i' :
•
'
V
V
' i^ f t :
1
:
!
WÈÊm Rysunek 3.10. Wyłącz opcję Anti-aliased
dla narzędzia Magic Wand
Wybierz narzędzie do prostokątnego zaznaczania i zaznacz lewy górny róg. Z menu Image wybierz opcję Crop, co spowoduje takie przycięcie obrazu, aby zawierał tylko zaznaczony wcześniej róg, jak przedstawiono na rysunku 3.11. Zapisz obraz pod nazwą topleft.gif w podkatalogu images szablonu. Aby utworzyć pozostałe trzy rogi, musisz tylko obrócić obraz i zapisać go pod odpowiednią nazwą. Z podmenu Rotate Canvas w menu Image wybierz opcję Flip Horizontal i zapisz plik pod nazwą topright.gif. Następnie wybierz opcję Flip Vertical z tego samego podmenu, a plik zapisz jako bottomright.gif. Ostatecznie uruchom ponownie polecenie Flip Horizontal i zapisz wynik jako bottomleft.gif Szablon jest już prawie gotowy, ale jeszcze nie zamykaj programu graficznego.
Tworzenie bannera
Kolejny etap to stworzenie bannera, który będzie zawierać logo i nazwę strony. Opis tego procesu wykracza poza ramy tej książki. Jedną z szybkich metod jest wykorzystanie prostego, tekstowego logo za pomocą makr Script-Fu, dołączonych do programu GIMP. W menu Xtns/Script-Fu/Logos znajdziesz listę kilkudziesięciu różnych skryptów, które umożliwiają
Rozdział 3. • Tworzenie własnych szablonów
91
unek 3.11. ytnij obraz, > obejmował :o lewy ny róg
wprowadzenie tekstu, określenie podstawowych kolorów, dzięki czemu uzyskasz proste, ale profesjonalnie wyglądające logo. Dla aktualnie tworzonego szablonu powinieneś wykonać banner o szerokości przynajmniej 800 pikseli (żeby wypełniał górną część strony) i wysokości około 150 pikseli. Po jego ukończeniu zapisz rezultat pod nazwą banner.png w folderze images szablonu.
iana modułów Pomimo że moduł sondy jest domyślnie włączony, większość stron internetowych nie zawiera sondy na stronie głównej. Dlatego w tym podrozdziale wstawisz w miejsce sondy moduł Lastest News, którego obecność będzie preferowana w przypadku większość stron W W W . Strona Joomla! składa się z modułów, dla których zarezerwowano miejsce w szablonie. W Joomla! 1.5 wprowadzono możliwość łatwego określenia pozycji modułów dzięki opcji Podgląd. W części Szablony kliknij nazwę szablonu, a następnie kliknij przycisk Podgląd, aby wyświetlić wybrany szablon wraz z opisanymi pozycjami modułów. Dobrym zwyczajem podczas tworzenia szablonów jest wykorzystywanie domyślnych nazw pozycji, dzięki czemu użytkownicy mogą łatwo dopasować wyświetlanie modułów. Dlatego, zanim zdefiniujesz własne pozycje w tworzonym szablonie, zbadaj układ któregoś z domyślnych szablonów. Dzięki opcji Podgląd poznasz najczęściej używane nazwy pozycji, które powinieneś umieścić w tworzonym szablonie. W interfejsie administratora wybierz opcję Szablony. Przewiń listę do pozycji Pol 1 s, następnie kliknij ikonę po prawej stronie, jak pokazano na rysunku 3.12. W jej miejsce pojawi się czerwony X, co oznacza że moduł został wyłączony.
92
Joomla!. Profesjonalne tworzenie stron WWW
Rysunek 3.12. Kliknij ikonę Wyłącz moduł, aby wyłączyć sondę
W miejsce sondy możesz włączyć wyświetlanie modułu Lastest News. Znajdź go na liście, a następnie kliknij jego nazwę, aby przejść do ekranu zmiany. Upewnij się, że moduł jest włączony i przypisany do strony głównej, a następnie wybierz pozycję right, jak przedstawiono to na rysunku 3.13. Aby wprowadzić zmianę pozycji, kliknij przycisk Zastosuj. Rysunek 3.13. Ustaw opcję Pozycja na right, co spowoduje wyświetlanie Latest News w prawej kolumnie
: Wyświetla listę łączy do artykułów o; modyfikowanych.
Prryi ostek Masy moduhi • Piiuimetiy: rozsietzone
Wszystkie ' Pozycje wybi
Exumpfe Pages
Na danej pozycji można umieścić dowolny moduł, poprzez wybranie jednej z pozycji na liście. Poniżej znajduje się grupa parametrów, które możesz zmienić, aby dopasować działanie modułu do swoich potrzeb. Jeśli otworzysz teraz stronę główną, moduł Lastest News powinien pojawić się w prawym górnym rogu jak na rysunku 3.14.
Rozdział 3. • Tworzenie własnych szablonów sunek 3.14.
Joomla! is a f i e e open source framework and content
f Layouts
pubbslung system designed for quickly creating lugldy
1 The Joomla!
mtei active multi-language Web sites, online communities
I Community Welcome to
media portals, blogs and ¿Commerce applications
. Joomla! I Newsflash
Joomla!
Powered by
Joomla! provides an easy-to-use
FAQ
J^ Joomla !
graphical us er inteifac e that simplifies
version 1.5
! -4 Newsflash
tta management and publishing of large volumes of content including HTML,
documents, and rich media. Joomla! is used by organisations of all sizes for Public Web sites, Intranets, and Extranets and is supported by a community of thousands of users. Zmiemony ( czwartek, 08. listopad 2007 12:06 ) Wigcei...
Joottdai Home Joomla! Fomms
We are Volunteers
0
0
0
Stick to the Code !
0
0
Wpisał Administrator
Wpisal Administrator
środa, 07. lipiec 2004 09:54
środa, 07. lipiec 2004 12:00
S
The Joomla! Core Team consists To ensure this code release,
Advertís tmei Featured Links:
of volunteer developers,
Wilco Jans en resorted to sending
Joomla!
Help
designers, administrators and
rum to joint lead-developer Johan
Joomla! The mo s
OSMHome \
managers who, together with a
Jans sens. Johan, who's had a
popular and wide
Joomla!
lasny kod CSS dla komponentów Wspaniałą funkcją dostępną w Joomla! jest możliwość wykorzystania, w zależności od sytuacji, różnego kodu CSS dla komponentów (środkowa kolumna), np. po wybraniu danego elementu menu lub artykułu. Oznacza to, że pliki CSS mogą odpowiadać schematom kolorów, które ustalisz dla poszczególnych części systemu. Przykładowo na stronie zarządzania nieruchomościami część odpowiadająca za refinansowanie może być wyświetlana w kolorystyce ciemnoniebieskiej, a część sprzedaży w kolorystyce jasnozielonej. Możliwe jest stworzenie wariacji stylu i przypisanie jej do danego menu. Przejdź do folderu szablonu Trzy Kolumny i otwórz plik template.css. Wprowadź poniższy kod i zapisz zmiany: ,componentheading_blue. .contentpage_blue { color: blue;
} Aby przypisać zmieniony styl do danego menu, otwórz Projektanta Menu w interfejsie administracyjnym. Kliknij ikonę Zarządzaj pozycjami menu po prawej stronie menu, do którego chcesz przypisać zmieniony styl, co przedstawiono na rysunku 3.15. W tym przypadku klikamy Main Menu, ponieważ nowe pozycje tego menu pojawią się w lewej górnej części strony. Teraz kliknij ikonę Utwórz, aby dodać nową pozycję menu. Na ekranie pojawi się hierarchiczna lista dostępnych typów. Kliknij pozycję Artykuły, żeby wyświetlić listę dostępnych sekcji. Dodawana pozycja ma prowadzić do listy artykułów w danej sekcji, dlatego wybierz pozycję Lista — Kategorie artykułów w sekcji, jak przedstawiono na rysunku 3.16. Zostaniesz przeniesiony do ekranu dodawania nowej pozycji menu, gdzie możesz ustawić jej parametry.
94
Joomla!. Profesjonalne tworzenie stron WWW
Rysunek 3.15. Kliknij ikonę Zarządzaj pozycjami menu po prawej stronie menu, któremu chcesz przypisać zmieniony styl
Joomla! wwwJoomiaJumpstart.com Ąrtytutly
Komponenty
P.ozszei
U l Projektant menu
O
Resources
Q
Example Pages
S
0
Key Concepts
W
»• jest wolnym oprogramowaniem dostępnym ne
Rysunek 3.16. Kliknij Lista — Kategorie artykułów, aby wybrać pozycję menu tego typu
Joomlci! www.JoomlaJumpstart.com
t l i Pozycjja menu: [utwórz W y t » i « i tyj» pozycji I ¡«y Łącze wewnęta , Artykuły iii Archiwum
Wprowadź nazwę pozycji, a w ramce Parametry: podstawowe wybierz sekcję, z której będą wyświetlane artykuły. Rozwiń ramkę Parametry: systemu, która znajduje się poniżej. W polu oznaczonym jako Przyrostek klasy CSS wprowadź błue, co zilustrowano na rysunku 3.17, i kliknij przycisk Zapisz. Jeśli wejdziesz teraz na stronę główną i wybierzesz stworzoną przed chwilą pozycję menu, elementy komponentu zostaną wyświetlone w kolorze niebieskim.
Tworzenie dystrybucyjnego pliku templateDetails.xml Twój szablon jest już prawie gotowy! Zanim udostępnisz go szerszemu gronu, warto poprawić plik templateDetails.xml i wprowadzić dodatkowe informacje o autorstwie oraz licencji. Po ukończeniu plik ze szczegółami powinien przypominać poniższy:
Rozdział 3. • Tworzenie własnych szablonów
95
sunek 3.17. odaj przyrostek )lue, aby ementy wiązane tą pozycją były /świetlane Bdług stylów ym przyrostkiem
Trzy kolumny zaokrąglonel.0l/20/07Dan Rahmeladmi ntajooml a jumstart. com http://www. joomla jumpstart,com GNU/GPL Wzorzec szablonu o układzie trójkolumnowym i ndex.phptemplateDetai1 s.xmlparams.inii mages/banner.pngcss/ i ndex.htmlcss/template.cssleftri ght
Jeśli spakujesz zawartość folderu do archiwum zip pod nazwą, która dokładnie odpowiada nazwie folderu z szablonem, będziesz mógł udostępnić szablon innym. Możesz tego dokonać na stronie Joomla Hut (www.joomlahut.com), która umożliwia dodawanie darmowych szablonów.
96
Joomla!. Profesjonalne tworzenie stron WWW
Zaawansowane techniki tworzenia szablonów Kluczowy element składowy systemu szablonów Joomla! to CSS. Możliwe jest nie tylko wykorzystywanie kilku plików CSS dla jednego szablonu, lecz także utworzenie arkusza stylów definiującego style nawet dla poszczególnych artykułów. Dla projektanta pracującego z Joomla! dużo większe znaczenie mąjąjednak same funkcje CSS. Inspekcja plików CSS prowadzi do konkluzji, że większość ich autorów wykorzystuje tylko najbardziej podstawowe funkcje. Technologia CSS składa się z ogromnej liczby atrybutów, dzięki którym jesteś w stanie doprowadzić wygląd strony WWW do perfekcji. Dobrą wiadomością jest fakt, że większość atrybutów określonych w specyfikacji CSS jest obsługiwana przez popularne przeglądarki. W tym podrozdziale zapoznasz się z technikami, które sprawią, że Twoja strona będzie wyróżniać się na tle innych. Dowiesz się, jak umiejscowić tekst, aby nakładał się na obrazek. Następnie poznasz inne zalecane praktyki, takie jak umieszczanie odwołań do obrazków w plikach CSS, a także przypisanie odpowiedniego pliku CSS danemu artykułowi lub wybranej platformie (może być to np. telefon komórkowy lub PDA).
Wykorzystanie grupy szablonów a CSS Projekt szablonu dla systemu Joomla! może zakładać wykorzystanie jednego szablonu dla wszystkich podstron lub przypisanie oddzielnych szablonów do poszczególnych kategorii i sekcji, dzięki czemu wygląd będzie odzwierciedlać funkcję danej części witryny. W dalszej części tego rozdziału termin szablon będzie odnosić się do pojedynczego szablonu, a zestaw szablonów przypisanych do poszczególnych kategorii i sekcji będzie nazywany grupą szablonów. Zaprojektowanie jednego lub drugiego wymaga zupełnie innego podejścia, począwszy od fazy organizacji i planowania. W przeciwieństwie do pojedynczego szablonu, który musi odpowiadać wszystkim potrzebom strony, elementy grapy szablonów mają spełniać określone zadania, przykładowo strona główna ma przedstawiać ogólny wizerunek (dzięki doborowi kolorów, organizacji i wyborze fontów), podczas gdy podrzędne szablony nadają stronie tożsamości. Grupa szablonów gra podobną rolę jak marka. Przykładowo wszystkie pochodne marki Coca-Cola (Cherry Coke, Coca-Cola Zero itd.) zawierają wspólne elementy, więc nawet przypadkowy obserwator może zauważyć związek. Po stworzeniu kilku szablonów możesz przypisać je do poszczególnych części strony za pomocą opcji Szablony, jak pokazano na rysunku 3.18. W poniższym przykładzie jasnozielony szablon został przypisany do wszystkich elementów sekcji Kluczowe pomysły.
Rozdział 3. • Tworzenie własnych szablonów unek 3.18. pomocą opcji iblony można ypisać szablon określonych iści strony
97
^ f ^ i W ^ t W i i i W î i f f f î C i
m
Szablon; [zmicn]
Ha;-.
Szablon RHUK Milkyway
®t
Piefet encje Parametr-Plik ïemplates\rhuk_milkywaylparams in
Opis; MilkyWay jest szablonem przygotowanym specjalnie
y-ii'l')! jest wolnym oprogramowaniem dostępnym na i-
/icon.ico Szablon Joomla! może zawierać plik favicon.ico1, umieszczony w jego głównym katalogu. Jest to mała ikona (o rozmiarze 16x16 pikseli), która po umieszczeniu odpowiedniego odwołania w pliku index.php zostanie wyświetlona na pasku adresu przeglądarki internetowej* (zobacz rysunek 3.19), a także po lewej stronie na liście zakładek. Jeśli plik favicon.ico będzie umieszczony w głównym katalogu serwera WWW, zostanie automatycznie odczytany przez większość przeglądarek. Aby umieścić odwołanie do tego pliku w szablonie, wprowadź kod podobny do poniższego w sekcji pliku index.php:
Powyżej umieszczono dwa typy odwołania, ponieważ poszczególne przeglądarki odczytują plik favicon.ico dla różnych wartości atrybutu rei. Nowsze przeglądarki umożliwiają dołączenie ikon zapisanych jako pliki GIF lub PNG, a nawet wstawienie animowanej grafiki w tych formatach. Nie musisz wprowadzać poniższego kodu, jeśli umieściłeś w szablonie dyrektywę dołączenia standardowych nagłówków , ponieważ Joomla! automatycznie wstawi odwołanie do ikony ulubionych.
\ ang. favorites icon — ikona ulubionych —przyp. thim. 'rzeglądarka Internet Explorer w wersji wcześniejszej niż 7 wyświetla tę ikonę dopiero po dodaniu trony do ulubionych, Favicon — Wikipedia, the free encyclopedia [online][dostęp 28.10.2008]
tip: //en. wikipedia. org/wiki/Favicon
98
Joomla!. Profesjonalne tworzenie stron WWW
Rysunek 3.19.
S Narzędzia
Plik favicon.ico wyświetlony na pasku adresu i liście zakładek
g a g
Pomoc
Dodaj zakładkę... Subskrybuj tę stronę
Ctrl+D
Zarządzaj zakładkami
Ctrl+Shift+B
' Pasek 2akładek
s
&
'X Ą *<•'•
Sfc
d i HNr
- *
-ŁUbS:'
Ostatnio dodane .¿Ostatnio używane etykiety
MAIM M E N U
*
Î 2: Installing C o m p o n e n t s
Dodatki zwijane z zakładkami
Why do I need
@ Joomla Jumpstart -- Home of Beginning Joomla • • " ^ B f c
'
Joomla? * 2. How is Joomla! organized? » 3. Joomla! Presentation * Frequently Asked
H
In Part 1, you installed a module to the Joomla system. Part 2 will take you mgh the quick and simple process of installation and configuration of a :ornponent. Components are the dominant type of extension and form the backbon *> ; of much of the extensible functionality available to the Joomla CMS. • R E A D MORE...
Questions (FAQs) » Beginning Joomla! * Professional Joomla!
J o o m l a E x t e n s i o n s -- D i g g T h i s ! p a t c h e d for 1.5
P r o b i n g t h e Joomla! S o u r c e C o d e for Information
» General Joomla! « > Get Paid to Write Articles
O&
Zakonczono
Aby zapisać obrazek w formacie ICO, możesz wykorzystać darmową wtyczkę do programu Photoshop, którą znajdziesz na stronie: http: //www. telegraphics. com.
au/sw/Mcoformat
Możesz także skorzystać z aplikacji internetowej do rysowania plików .ico pod adresem: http://www.favicon.
cc
Kolejną opcją jest program GIMP, za pomocą którego, bez dodatkowych wtyczek, można zapisywać w formacie .ico. Aby stworzyć ikonę ulubionych w programie GIMP, utwórz obrazek o rozmiarach 16x16 pikseli, a następnie zapisz go w formacie Microsoft Windows leon (.ico).
Modyfikacja wyglądu rozszerzeń
Chociaż wykracza to poza ramy tego rozdziału, warto wspomnieć, że rozszerzenia (komponenty, moduły itd.) mają własne szablony, które określają ich wygląd i funkcjonalność. Zazwyczaj szablony te zapisane są w podkatalogu \tmpl, który znajduje się w głównym katalogu danego rozszerzenia. System Joomla! zaprojektowano z myślą o możliwości zmiany szablonu wykorzystywanego przez rozszerzenia, aby dopasować jego wygląd i funkcjonalność do reszty strony. Możesz dołączyć do szablonu podkatalog \html, w nim znajdą się podfoldery dla poszczególnych modułów i komponentów, których wygląd chcesz zamienić (na przykład \com_contact, \com_weblinks, \mod_poll i \mod_search). Przykłady modyfikacji wyglądu rozszerzeń można znaleźć w podkatalogu \html szablonu beez w domyślnej instalacji Joomla!.
Zazwyczaj jednak wystarczy stworzyć odpowiedni arkusz stylów, który zastępuje definicje danego komponentu. Istnieje prosty sposób, aby upewnić się, że Twój szablon zawiera definicję dla wszystkich głównych stylów. Sprawdź w przeglądarce, jak wyświetlane są wszystkie moduły, komponenty i inne elementy interfejsu dla wybranego szablonu.
Rozdział 3. • Tworzenie własnych szablonów
99
Wykorzystaj opcję Pokaż źródło strony, aby zobaczyć kod HTML dla danej strony. Przeglądając kod źródłowy pod kątem atrybutów id i class, natrafisz na wszystkie definicje elementów CSS wykorzystywanych na stronie. Teraz, kiedy zapoznałeś się z ich nazwami, możesz zmienić ich wygląd za pomocą arkusza stylów dołączonego do szablonu.
iorzenie układu strony dla telefonów komórkowych Coraz więcej osób przegląda strony WWW za pośrednictwem telefonów komórkowych. Widząc ogromną popularność urządzeń PDA, takich jak np. iPhone, można spokojnie założyć, że mobilny dostęp do internetu będzie coraz powszechniejszy. Dzięki przygotowaniu strony pod kątem wygodnego przeglądania na takich urządzeniach możesz powiększyć grono osób odwiedzających stronę, a w przypadku witryny komercyjnej — zwiększyć zyski. Stworzenie w systemie Joomla! szablonu dla telefonów komórkowych, dopasowanego do ekranu o małych rozmiarach, jest wyjątkowo proste, ponieważ na wygląd strony w głównej mierze wpływa arkusz stylów. W czasie, kiedy pisałem tę książkę, poniższe programy były najpopularniejszymi mobilnymi przeglądarkami: •
Pocket Internet Explorer — Główna przeglądarka wszystkich PDA z systemem Windows (nazywana często także Pocket PC).
•
Opera — Prawdopodobnie najpopularniejsza mobilna przeglądarka instalowana przez użytkowników.
•
NetFront — Popularna przeglądarka, szczególnie na nieużywanych już urządzeniach Sony Clie. Na jej podstawie powstała przeglądarka Blazer.
•
Blazer — Popularna przeglądarka dostępna w modelach Tungsten i Treo PDA.
•
Minimo — Darmowa przeglądarka o otwartym kodzie źródłowym, oparta na silniku programu Mozilla Firefox.
•
Safari — Domyślna przeglądarka urządzenia iPhone.
Poza tym istnieje spora liczba przeglądarek przygotowanych specjalnie na daną platformę (np. OpenWave czy Series 60), a biorąc pod uwagę dynamiczny rozwój tego rynku, lista mobilnych przeglądarek będzie rosnąć. Dobra wiadomość jest taka, że Twoja strona nie musi być zaprojektowana z myślą o każdej z tych przeglądarek. Dołączenie pliku CSS wygląda zazwyczaj podobnie do:
Dla tego znacznika istnieje dodatkowy atrybut o nazwie media, który jest poprawnie odczytywany przez większość mobilnych przeglądarek. Atrybut media pozwala określić platformę, dla której należy odczytać podany plik CSS. Trzy najczęściej stosowane wartości to: screen, print i handheld9. Z tego powodu Twój szablon może odwoływać się jednocześnie, bez kolizji do więcej niż jednego pliku CSS. ikran, drukarka i urządzenie przenośne — p r z y p . tłum.
100
Joomla!. Profesjonalne tworzenie stron WWW Aby dołączyć pliki CSS dla każdej platformy, możesz wstawić w szablon poniższy kod:
Znacznik z atrybutem media ustawionym na screen może odnosić się do zwykłego pliku CSS. Wartość atrybutu print może oznaczać odwołanie do arkusza, który wyłącza wyświetlanie bannerów, kolumn i elementów nawigacyjnych nieprzydatnych na papierze. Często jest to kopia głównego pliku CSS z atrybutem visible (widoczny) ustawionym na false dla elementów, które powinny zostać pominięte na wydruku. W czasie, kiedy pisałem tę książką, przeglądarka Pocket Internet Explorer wykorzystywała arkusze stylów oznaczone zarówno jako screen, jak i media do wyświetlania stron na urządzeniach mobilnych, co było powodem frustracji wielu projektantów. Zwykła wersja Internet Explorer 6 (najpopularniejsza przeglądarka internetowa) w przeciwieństwie do wersji mobilnej nie wyświetla stylów oznaczonych jako handheld. Sposobem na osiągnięcie kompatybilności z Internet Explorerem jest umieszczenie odwołania do pliku CSS odpowiadającego screen przez odwołaniem do tego, który odpowiada handheld. Dzięki temu na normalnych komputerach plik oznaczony jako handhe Id zostanie zignorowany, a przeglądarka Pocket IE odczyta najpierw style zawarte w pliku odpowiadającym screen, a następnie odczyta zawartość pliku odpowiadającego handheld, unieważniając wcześniejsze definicje.
Typ handheld wykorzystywany jest przez urządzenia przenośne, które obsługują CSS. W czasie pisania tej książki większość sprawdzanych urządzeń pozytywnie przeszła testy i odczytała plik CSS oznaczony atrybutem handheld. Sprawdzone zostały następujące przeglądarki: Blazer (w urządzeniu Treo), Opera (w Nokii) i Pocket Internet Explorer (w iPAQ-u). Niestety, pewna liczba testowanych przypadków nie obsługiwała poprawnie tego atrybutu (głównie Netfront 3.1). Jednak patrząc w przyszłość, można z pewnością stwierdzić, że wszystkie nowe przeglądarki będą poprawnie obsługiwać ten atrybut.
Definiowanie arkusza stylów dla urządzeń przenośnych
Jeśli masz zamiar dołączyć alternatywny arkusz stylów dla urządzeń przenośnych, poniżej znajdziesz kilka wskazówek. Pamiętaj, że nie można po prostu wykorzystać zwyczajnego pliku CSS, ponieważ został stworzony z myślą o osiągnięciu innych celów, innej prezentacji graficznej. Poniżej znajduje się lista rzeczy, o których należy pamiętać podczas projektowania arkusza stylów dla urządzeń przenośnych: •
Ustaw marginesy na 0 — Dla znaczników zawierających tekst ustaw atrybut margin: 0 0 0 0: przez co margines zostanie ustawiony na 0, a tekst będzie zajmować całą dostępną przestrzeń.
•
Ustaw szerokość obramowania na 0 — Dla znaczników di v i table ustaw atrybut border-width: 0 0 0 0: aby usunąć ramkę wokół komórek.
•
Ustaw wysokość linii na lem — Zamiast określić inną wysokość linii (co i tak nie będzie dobrze wyglądać na urządzeniu przenośnym), wykorzystaj kod 1 i ne-height: lem: aby ustawić standardową wysokość linii.
Rozdział 3. • Tworzenie własnych szablonów
101
Korzystając z tych wskazówek, możesz wprowadzić modyfikacje domyślnego szablonu Joomla!. Utwórz pod nazwą mobile.css nowy arkusz stylów w folderze css i wprowadź poniższy kod: Body { margin: O.Oem 0 0 0: line-height: lem: padding: 0 0 0 0.2em: font-size: 100%: line-height: lem; color: black; border-width: 0:
Wstaw w index.php odwołanie do pliku CSS z atrybutem media ustawionym na handheld, a plik mobile.css zostanie automatycznie wykorzystany na urządzeniach przenośnych. Wykorzystanie tego arkusza wprowadzi jednakowy wygląd i wielkość tekstu na całej stronie, a nagłówki i inne specjalne style Joomla! zostaną pogrubione.
laptowanie szablonów Mambo lub Joomla! 1.0 Szablony Mamo działają bez problemów w Joomla! 1.0. Z powodu ich popularności od pięciu lat powstawały tysiące szablonów. W Joomla! 1.5 istnieje możliwość wykorzystywania szablonów napisanych z myślą o starych systemach, jednak musi zostać włączony Tryb spuścizny. Niestety, włączenie tego trybu powoduje utratę wszystkich nowych funkcji i wzrostu wydajności wersji 1.5. Na szczęście adaptacja szablonu w większości przypadków nie jest trudna. Praktycznie wszystkie wywołania systemowe w starej wersji Joomla!/Mambo mają swoje odpowiedniki w nowej wersji Joomla!. Najbardziej oczywistym przykładem jest funkcja modCountModules, która została zastąpiona przez $this->countModules. Elementy z a s t ą p i ł y w i ę k s z o ś ć funkcji mosLoadModul es. Ponadto wykorzystanie zmiennych globalnych nadal jest możliwe, choć niezalecane, ponieważ prawdopodobnie zostaną usunięte w przyszłych wersjach Joomla!. Najlepiej jest unikać wykorzystania zmiennych globalnych.
102
Joomla!. Profesjonalne tworzenie stron WWW W systemie Mambo i starszych wersjach Joomla!, jeśli na danej stronie niezbędny był edytor, trzeba było go włączać ręcznie, podczas gdy w nowej wersji włącza się automatycznie, jeśli wystąpi taka potrzeba. Jedyną nieobecną technologią w nowej wersji Joomla! jest patTemplate. Wtyczka patTemplate umożliwiała proste rozwiązywanie złożonych problemów, jakie w przeszłości napotykali projektanci szablonów. Głównie ze względu na wydajność, patTemp late została usunięta w nowej wersji platformy Joomla!. Dlatego jeśli szablon stworzono w oparciu o intensywne wykorzystanie patTemplate, jego adaptacja do nowego systemu będzie trudniejsza niż w większości przypadków.
Podsumowanie Po przeczytaniu tego rozdziału powinieneś wiedzieć już, jak od podstaw stworzyć szablon. Na projektowanie szablonów składa się wiele aspektów, m.in. stworzenie właściwego arkusza stylów. W rozdziale zawarto informacje, dzięki którym będziesz w stanie: •
Stworzyć od podstaw szablon, który dzięki CSS wykorzystuje układ wielokolumnowy.
•
Dodać elementy graficzne, które sprawią, że szablon będzie wyglądał profesjonalnie.
•
Udoskonalić kompatybilność z różnymi przeglądarkami, dzięki czemu błędy obsługi CSS nie wpłyną negatywnie na wygląd strony.
•
Stworzyć stronę zgodną ze standardami dostępności, aby umożliwić każdemu jej przeglądanie.
•
Wykorzystać arkusze stylów w celu dostosowania wyglądu strony do danej platformy, takiej jak PDA lub telefon komórkowy.
Tworzenie własnego szablonu to tylko wierzchołek góry lodowej w zakresie modyfikacji strony Joomla!. W rozdziale 4. przedstawiono rozszerzenia, które znacznie wzbogacą funkcjonalność Twojej strony.
4 Dodawanie i modyfikacja dostępnych rozszerzeń Gama rozszerzeń Joomla! zaczyna się szablonami (najprostsza forma) i kończy się na dodatkach (najbardziej zaawansowana). Między tymi dwiema skrajnościami znajdują się moduły i komponenty. Podczas gdy szablony wpływają na prezentację Joomla!, dodatki wpływają na działanie najbardziej podstawowych funkcji systemu. Komponenty i moduły są prostszymi rozszerzeniami, które służą do dodania określonej funkcjonalności (np. sondy, fora lub menu). Wykorzystanie rozszerzeń trzech typów (modułów, komponentów i dodatków) może ogromnie zwiększyć funkcjonalność systemu Joomla!. Dla Joomla! dostępnych jest wiele rozszerzeń i czasem trudno wybrać któreś z nich. Przykładowo istnieje sześć różnych dodatków służących do tworzenia galerii zdjęć — każdy ma swoje wady i zalety. Niektóre mają zapewnioną bardzo dobrą obsługę klienta, inne zawierają więcej funkcji. Czasem wybranie właściwego rozszerzenia sprowadza się do sprawdzenia wszystkich dostępnych z danej kategorii. W tym rozdziale przedstawiono najbardziej zaawansowane i najpopularniejsze rozszerzenia, które można przypisać do następujących obszarów: •
funkcjonalność strony;
•
organizacje i e-commerce;
•
zawartość strony;
•
komunikacja na stronie.
Przegląd rozszerzeń z powyższych kategorii uzmysłowi Ci potencjał tkwiący w Joomla!. Zanim przejdziemy do sprawdzenia poszczególnych rozszerzeń, warto odwiedzić ich katalog, który można znaleźć na stronie głównej Joomla!.
104
Joomla!. Profesjonalne tworzenie stron WWW
Katalog rozszerzeń Na stronie głównej Joomla! (www.joomla.org) dostępny jest katalog rozszerzeń działających z Joomla! wraz z systemem oceniania i komentowania, co pozwala użytkownikom dzielić się ich doświadczeniami związanymi z danymi rozszerzeniami. Katalog znajduje się pod adresem: http://extensions.joomla.org
Katalog rozszerzeń Joomla! (ang. Joomla Extension Directory — JED) zawiera prawie 4000 pozycji (w momencie pisania tej książki) zarejestrowanych w systemie. Każde rozszerzenie przypisano do jednej z 23 kategorii. Na stronie głównej katalogu umieszczono także pięć najnowszych rozszerzeń i pięć najwyżej ocenianych. Każda pozycja zawiera opis i informacje związane z wykorzystaniem rozszerzenia. Typowy wpis do katalogu zawiera poniższe informacje: •
Opis — Opis danego rozszerzenia. Zazwyczaj jest to krótkie podsumowanie historii wersji programu, a także lista zmian wprowadzonych w najnowszej wersji.
•
Typ rozszerzenia — Większość wpisów to połączenie kilku rozszerzeń w jedną całość. Poszczególne elementy oznaczane są ikonami: czerwoną literą Mw przypadku modułów, zieloną literą C w przypadku komponentów i purpurową literą P w przypadku dodatków. Ikony wyświetlane przy danym wpisie wskazują na typy rozszerzeń, które zawiera.
•
Strona domowa (ang. Homepage) — Strona domowa rozszerzenia. Jeśli dane rozszerzenie Ci się podoba i uważasz, że jest użyteczne, możesz wykorzystać ten odnośnik, aby przejść na stronę, gdzie najprawdopodobniej znajdziesz inne rozszerzenia tego samego autora.
•
Wersja (Version) — Wyświetla oznaczenie najnowszej wersji i informacje, kiedy została upubliczniona.
•
Deweloper i e-mail — Te dwa pola zawierają nazwę i adres e-mailowy twórcy danego rozszerzenia.
•
Liczba odwiedzin (Views) — Przedstawia liczbę odwiedzających, którzy kliknęli wpis w katalogu, aby przeczytać cały opis danego rozszerzenia.
•
Licencja (License) — Licencja, pod jaką udostępniono rozszerzenie. Najpopularniejsze licencje to GNU GPL, komercyjne i inne darmowe lub wolne licencje.
•
Kompatybilność (Compatibility) — Wersja Joomla!, z którą działa rozszerzenie. Obecnie możliwe jest określenie kompatybilności z wersją Joomla! 1.0, Joomla 1.5 i obiema wersjami 1 .
•
Data dodania (Date added) — Data włączenia rozszerzenia do katalogu.
Oznaczone odpowiednio 1.0 Native, 1.5 Native i l.ONative,
1.5 Legacy — przyp. tłum.
Rozdział 4. • Dodawanie i modyfikacja dostępnych rozszerzeń •
105
Komentarze i oceny użytkowników (User Reviews) — Prawdopodobnie najużyteczniejszy element wpisu. Zawiera nadesłane przez użytkowników doświadczenia, komentarze i opisy różnych problemów związanych z rozszerzeniem. Często znajdują się tutaj, poza komplementami, także informacje odnośnie do funkcjonalności i instalacji lub rekomendacje innych rozszerzeń, które spełniają to samo zadanie — tylko lepiej.
Na stronie wyszczególniono 23 kategorie rozszerzeń, a każda z nich zawiera podkategorie. Dla ułatwienia w kolejnych podrozdziałach kategorie podzielono na cztery główne aspekty: •
funkcjonalność i obsługa strony;
•
organizacje i e-commerce;
•
zawartość strony;
•
komunikacja na stronie.
Powyższy podział uprości wyszukiwanie rozszerzeń, które dodają określone funkcje do Joomla!. Katalog rozszerzeń zawiera wyszukiwarkę, chociaż często jest ona mało pomocna w znajdowaniu rozszerzeń z określonymi cechami. Podczas wyszukiwania powinieneś ograniczać się do pojedynczych słów, ponieważ masz wtedy największą szansę znaleźć wpisy, które będą zawierać wymaganą funkcję. Wyszukiwanie przy wpisaniu wielu słów zwraca zazwyczaj zbyt wiele wpisów niezwiązanych z interesującymi możliwościami.
inkcjonalność i obsługa strony Rozszerzenia funkcjonalność i obsługi strony rozbudowują kluczowe funkcje, które można znaleźć w interfejsie administratora. Rozszerzenia tego typu umożliwiają np. ustalenie dokładniejszej hierarchii artykułów niż tylko kategorie i sekcje czy dodanie opcji wyszukiwania. Ponieważ ten typ zmian dotyczy kluczowej funkcjonalności systemu, najczęściej konieczne jest instalowanie dodatków. Rozszerzenia dla tego obszaru pogrupowano w JED w następujące kategorie: •
Administracja (ang. Administration) — Rozszerzenia dla zaplecza. Zawiera podkategorie: Rozszerzenia dla administratorów (Admin Addons), Interfejs administracyjny (Admin Interface), Zmiana formatów danych (Data Coversion), Zarządzanie bazą danych (Database Management), Zarządzanie plikami (File Management), Serwer (Server).
•
Rozbudowywanie podstawowej funkcjonalności (Core Enhancements) — Wzbogacenie podstawowej funkcjonalności systemu Joomla!. Zawiera podkategorie: Zarządzanie treścią (Content Management), Tworzenie raportów (Data Reports), Wstawianie i dołączanie (Embed & Include), Instalatory (Installers), Menu (Menu Systems), Funkcjonalność dla kilku stron (Multiple Sites), Sekcje i kategorie (Sections & Categories), Nawigacja (Site Navigation).
106
Joomla!. Profesjonalne tworzenie stron WWW •
Wyszukiwarki i indeksowanie (Search & Indexing) — Zawiera podkategorie: Wyszukiwanie domen (Domain Search), Wyszukiwanie rozszerzeń (Extensions Search), Powiązane wpisy (Related Items), Wyniki wyszukiwania (Search Results), Wyszukiwanie na stronie (Site Search) i Chmury znaczników (Tags & Clouds).
•
Języki (Languages) — Rozszerzenia dla instalacji Joomla! zorientowanych na inne języki niż angielski. Zawiera podkategorie: Automatyczne tłumaczenie (Automatic translations), Treści w wielu językach (Multi-Ungual Content) i Tłumaczenia Joomla! (Translations for Joomla!).
•
Narzędzia (Tools) — Lista zewnętrznych rozszerzeń, np. rozszerzenie dla programu Dreamweaver do obsługi stron Joomla!, programy instalacyjne dla różnych platform, środowiska programistyczne PHP i inne.
•
Obsługa strony (Site Management) — Rozszerzenia związane z obsługą strony i zarządzaniem nią. Zawiera podkategorie: Pamięć podręczna (Cache), Statystyki treści (Content Statistics), Informacje autorskie (Crédits), Ranking (Ranks), Przyjazne adresy (SEF), Pozycjonowanie i metadane (SEO & Metadata), Statystyki strony (Site Analytics), Mapa strony (Site Map), Statystyki mchu na stronie (Site Traffic Statistics), Przekierowywanie (URL Redirection) i Odwiedzający ( Visitors).
W poniższym podrozdziale opisano instalację alternatywnego edytora w systemie Joomla!.
Instalacja dodatkowego edytora WYSIWYG
System Joomla! zawiera dwa edytory: TinyMCE i XStandard Lite. Domyślnym edytorem jest TinyMCE, za pomocą którego można wprowadzać formatowany tekst, wybierać fonty, styl (pogrubiony, pochylony itd.), rozmiar i inne. Wprowadzony tekst pojawi się w tej samej formie na stronie. XStandard Lite także zawiera funkcje WYSIWYG 2 . Różnica między dwoma edytorami polega na tym, że XStandard Lite w przeciwieństwie do TinyMCE tworzy w pełni poprawny kod XHTML i HTML. Jeśli nie określono domyślnego edytora, wszystkie artykuły będą wprowadzane jak zwykły tekst. Ponieważ Joomla! jest systemem opartym na HTML, zwykły tekst oznacza w praktyce kod HTML.
Edytor TinyMCE został napisany w JavaScripcie, a jego poprawne działanie potwierdzone na wielu różnych przeglądarkach (Internet Explorer, Firefox, Opera i Safari). Pozwala na tworzenie kodu XHTML 1.0, a także instalację dodatkowych języków (w tym polskiego), tematów i wtyczek (włączając w to Adobe Flash Player). XStandard Lite jest edytorerr dostępnym w postaci skompilowanej, co oznacza, że obecnie można go stosować tylke w systemie Windows. Pomijając przewagę funkcjonalności XStandard, uruchamianie skompilowanego kodu oznacza ogromną przewagę pod względem wydajności nad TinyMCE.
Oba wymienione edytoiy nie są jedynymi, które dołączono do Joomla!. Istnieje kilkanaście innych edytorów w katalogu JED, które można pobrać i zainstalować. Szeroki wybór edytorów oznacza różnorodność dodatkowej funkcjonalności, np. profile ustawień użytkowników. 2
Ang. What You See Is What You Get — To, co widzisz, jest tym, co otrzymasz —przyp. tłum.
Rozdział 4. • Dodawanie i modyfikacja dostępnych rozszerzeń
107
formatowanie kodu źródłowego, obsługa wtyczek, zarządzanie dokumentami, edytowanie arkuszy stylów i wiele innych. Przykładowo możesz zainstalować rozszerzenie JoomlaFCK, które zawiera mniej funkcji niż TinyMCE lub XStandard, ale jest dużo mniejsze i szybsze niż standardowe edytory. Rozszerzenie JoomlaFCK, przedstawione na rysunku 4.1, oparto na skrypcie FCKeditor, stworzonym przez Frederico Caldeira Knabbena. Jest to jeden z pierwszych edytorów dostępnych za pośrednictwem przeglądarki WWW, który miał pełną funkcjonalność WYSIWYG bez konieczności instalacji dodatkowego oprogramowania. sunek 4.1. iytor JoomlaFCK a niewielki kod, :ięki czemu :ia!a sprawnie
ID 1 .1 tyk ulu: St.it iis Odsłony Popi awiony Ut *oi zony Po|»i.iniony
Tak 'Tak
Latest
M '" B O
1 Opublikowan 92 Wyczyi< 29 razy czwartek, 1 i czwartek, 08
Parametry: artykuł
Autor
Inny «Mit os
^ G?
!•«'>;• i.>»'. <;*<>!»!
Joomla 1 is a f i e e open soiuce framework and content publishing system designed foi quickly creating highly interactive multi-language Web sites, onlme I communities, media portals, blogs and eCommerce applications
Joomla! provides an easy-to-use graphical user interface that simplifies the management and publishing of large volumes of content including HTML, documents, and rich media. Joomla! is used by organisations of all sizes for Public Web sites. Intranets, and Extranets and is supported by a community of thousands of users.
» Mst.idaiie
With a fully documented library of developer resources, Joomla! allows the customisation of every aspect of a Web site including presentation, layout, administration, and the rapid integration with third-party applications. Joomla! has a rich heritage and has been crowned CMS king many times over. N o w with more power under the hood, Joomla! is shifting gear and provides developer power while
_
JoomlaFCK składa się z pojedynczego dodatku, który można zainstalować w zapleczu administracyjnym. Jedną z najbardziej użytecznych (i unikatowych) funkcji JoomlaFCK jest możliwość wykorzystania szablonów dla wprowadzanych artykułów — w podobny sposób jak Microsoft Word zawiera szablony dla résumé, prezentacji itd. Szablony powinny zostać zapisane w katalogu, który znajduje się najprawdopodobniej (w odniesieniu do głównego katalogu Joomla!) w: \p lugins \editors Xfckeditor Szablony zapisywane są w formacie XML w pliku fcktemplates.xml. dwa szablony. Poniżej kod pierwszego z nich:
Domyślnie dostępne są
One main image with a title and text that surround the image.
Type the title here
Type the text here ]]>
108
Joomla!. Profesjonalne tworzenie stron WWW Zauważ, jak proste jest w tym przypadku zastosowanie szablonów. Projektowanie szablonów dla wprowadzanych treści może być szczególnie przydatne, jeśli Twoja strona ma kilku redaktorów. W ten sposób możesz nadać artykułom jednakową formę, jednocześnie oferując więcej funkcji niż za pomocą prostego formularza. Przykładowo jeśli prowadzisz stronę telewizyjnego programu o gotowaniu i chciałbyś, żeby przepisy były dodawane na stronę przez pracowników programu, szablon przepisu znacząco przyspieszyłby wprowadzanie wpisów.
Dodawanie własnych stylów do TinyMCE Istnieje możliwość dodania własnych stylów do listy w edytorze TinyMCE, jak zilustrowano na rysunku 4.2, dzięki czemu redaktorzy mogą korzystać ze stylów odpowiadających funkcjom strony. Przykładowo strona poświęcona programowaniu będzie zawierać artykuły z elementami kodu źródłowego. Można wtedy stworzyć styl, który powodowałby automatyczne wyświetlanie kodu źródłowego fontem Courier z szarym tłem, oddzielając go od reszty tekstu. 51HS—
Rysunek 4.2. Dodanie jednego lub kilku stylów TinyMCE umożliwia lepsze dopasowanie treści i strony
Sekcja
welcome^o^oomla
" S t r o n a startowa
News
Kategoria
U .—
—
—
~
--Styles-
_j ' x. x' 12 -»• J yellowhighlighler ""fTiii!
Odsłony
92
Popiaiviony
29 razy
Wy*;
utwoi zony
Czwartek
Poplamiony
Czwartek
P.ll.iriifrtly: .irtyk
Joomla! is a free open source framework and content publishing s y s t e m designed for guickly creating highly interactive mujti-language Web sites, online communities, media portals, blogs and eCommerce applications. Powered fey
Joomla!
J o o m l a ! p r o v i d e s an e a s y - t o - u s e graphical user interface t h a t simplifies the m a n a g e m e n t and p u b l i s h i n g of large v o l u m e s of content including H T M L , d o c u m e n t s , and rich m e d i a . J o o m l a ! is u s e d by o r g a n i s a t i o n s of all sizes for Public W e b sites, I n t r a n e t s , a n d E x t r a n e t s and is s u p p o r t e d by a c o m m u n i t y of t h o u s a n d s of users.
W i t h a fully d o c u m e n t e d library of d e v e l o p e r r e s o u r c e s , J o o m l a ! allows t h e c u s t o m i s a t i o n of every aspect of a W e b site Including p r e s e n t a t i o n , l a y o u t , a d m i n i s t r a t i o n , a n d t h e rapid i n t e g r a t i o n with t h i r d - p a r t y applications.
D.ït.i ut rtoi R u - p o r z m i pi iMil
Zakończ publik.' P.nametiy: 10 Metad.ine
TinyMCE pozwala wykorzystać własny plik CSS zamiast domyślnego. Dobrym pomysłem jest skopiowanie domyślnego pliku CSS i dodanie do niego swoich nowych stylów. Domyślnie plik znajduje się, względem głównego katalogu Joomla!, w: \plugim\editors\tmymce\jscripts\tiny_mce\themes\advanced\css\editor_content.css Skopiuj plik editor content.css do innego katalogu. Generalnie najprościej jest skopiować ten plik do katalogu \css dla wybranego szablonu, dzięki czemu style można będzie lepiej dopasować do wyglądu strony. Dla uproszczenia skopiowałem ten plik do głównego katalogu serwera W W W i nazwałem go mytinymce.css. Wprowadź do tego pliku style, których potrzebujesz na stronie. Ja dodałem kilka stylów, by podświetlić treść: .purplehlghlighter { background: purple: color: #000000:
} Aby dołączyć stworzony arkusz stylów, otwórz opcję Dodatki w interfejsie administratora Joomla!. Kliknij Editor— TinyMCE 2.0, aby przejść do ustawień dodatku. W polu Własny arkusz stylów wprowadź adres URL, który prowadzi do utworzonego wcześniej pliku, pliku CSS, jak przedstawiono to na rysunku 4.3. sunek 4.3.
Nie c z y s c e n c j i
O
jrowadź mpletny adres ?L nowego ku CSS w pole asny arkusz A ów
O-sti ze
(t' W y ł ą c z o n e
O Włączone
Wer sja skompresowana
'
' . Vtfączone
A
Tak
' . ; Nie
Względne
v
Od lewej do prawej € > Nie O
Tak
en
Zabronione elementy Klasy CSS szablonu Własny arkusz stylów
O
Nie ®
Tak
/
//
/
http :fllocalhost^ooml
Na zdalnym serwerze adres może przypominać poniższy: http://www.przyklad.com/mytinymce.css Kliknij przycisk Zapisz, aby wprowadzić zmiany. Od teraz, po otwarciu artykułu w edytorze TinyMCE, dodane style będą dostępne w menu.
idawanie obsługi plików i FTP Czasem konieczny jest bezpośredni dostęp do strony Joomla! za pomocą przeglądarki, kiedy niedostępny jest klient FTP, szczególnie wówczas, gdy korzystasz z urządzenia przenośnego lub publicznego dostępu do sieci (np. w kawiarence internetowej lub bibliotece). Dzięki rozszerzeniu joomlaXplorer możesz dodać funkcjonalność zarządzania plikami do Joomla!. Po zainstalowaniu dostępu do joomlaXplorer (zobacz rysunek 4.4) można klikając opcję w menu Komponenty, w interfejsie administratora. W joomlaXplorer wyświetlana jest kompletna lista katalogów i plików w danym folderze serwera WWW, a nawet pasek stanu informujący o wolnym miejscu. Obecnie joomlaXplorer jest wydany prawie w 20 językach, m.in. angielskim, duńskim, niemieckim, francuskim, hiszpańskim i rosyjskim 3 .
Niestety, nie jest dostępny po polsku — p r z y p . tłum.
110
Joomla!. Profesjonalne tworzenie stron WWW
Rysunek 4.4. Za pomocą rozszerzenia joomlaXplorer można zarządzać plikami, a także symulować połączenie FTP z poziomu przeglądarki internetowej
Rozszerzenie można wykorzystać do wyszukiwania, edytowania, usuwania, kopiowania, zmieniania nazw, tworzenia i rozpakowywania archiwów plików oraz katalogów. Pozwala na wysyłanie i pobieranie plików za pomocą dostarczonego interfejsu lub symulacji FTP. JoomlaXplorer umożliwia użytkownikom zmienianie praw dostępu do plików i katalogów za pomocą narzędzia przypominającego chmod. Komponent może zostać wykorzystany tylko przez użytkownika z uprawnieniami superadministratora. Komponent joomlaXplorer można pobrać z poniższej strony: http://joomlacode.org/gf/project/joomlaxplorer/frs/
Dodawanie mapy strony Dodanie mapy strony jest często jedną z najlepszych metod uproszczenia nawigacji na niej. Mapy strony brakuje często na mniejszych witrynach, ponieważ ręczne stworzenie jej jest trudne, a zarządzanie męczące. Na szczęście dla użytkowników Joomla! istnieje wiele rozszerzeń, które m a j ą możliwość automatycznego tworzenia mapy strony. Czas instalacji i konfiguracji jest krótki, a zmiany wprowadzane są automatycznie i zawsze odpowiadają aktualnemu stanowi strony WWW. Najpopularniejszym narzędziem do tworzenia mapy strony jest rozszerzenie Joomap, które przedstawiono na rysunku 4.5. Mapa strony składa się m.in. z menu, kategorii i sekcji. Joomap potrafi także stworzyć mapę strony w formacie Google Sitemap XML, co pozwala na lepszą integrację z systemem Google. Joomap jest prostym komponentem, który można zainstalować dzięki opcji Rozszerzenia, a następnie dodać jako ostatni wpis do Main Menu.
Rozdział 4. • Dodawanie i modyfikacja dostępnych rozszerzeń sunek 4.5. zszerzenie omap umożliwia orzenie namicznej 3py strony, ira 'zwierciedla Zanizację strony
111
Joomap Mam Menu Heme Section • Category 2
• Another Arlid
• Testcategory
SectlonBlog •
Another Article
i rti îtarticli Cate>
Secondary
Menu #3
W rozdziale 13. zawarto więcej informacji na temat map strony (i Joomap). Znajdziesz tam także opisy innych rozszerzeń, których działanie wpływa na pozycję strony w wyszukiwarkach internetowych.
immunity Builder Community Builder (CB) jest rozszerzeniem o otwartym kodzie źródłowym, które znacząco zwiększa możliwości Joomla! w zakresie zarządzania użytkownikami. Jest to jedno z najpopularniejszych rozszerzeń w świecie Joomla!. Funkcje CB to m.in.: •
zarządzane hasła i grupy;
•
ustawianie przez użytkowników własnego awatara;
•
dodatkowe pola w profilach użytkowników;
•
listy użytkowników;
•
ścieżki połączeń między użytkownikami;
•
własne zakładki;
•
zarządzanie przebiegiem procesów, takich jak potwierdzenie Warunków korzystania z serwisu, wysyłanie wiadomości e-mailowych z żądaniem aktywacji konta, informowanie administratora o nowych użytkownikach, możliwość zdefiniowania wiadomości e-mailowych wysyłanych do nowych użytkowników, które mogą zawierać dowolne informacje z profilu użytkownika, w formacie tekstowym lub HTML;
•
integracja z innymi komponentami, takimi jak systemy wiadomości prywatnych (PMS — Personal Mail System), galerie i wiele innych.
112
Joomla!. Profesjonalne tworzenie stron WWW Rozszerzenie Community Builder można znaleźć pod adresem: www.joomlapolis.
com/
Jedną z wad CB (ale to jednocześnie zaleta) jest całkowicie odmienny system rejestracji i logowania niż standardowy w Joomla!. Oznacza to częściowe oddzielenie funkcji związanych z zarządzaniem użytkownikami od reszty interfejsu Joomla!.
Struktura Community Buildera Rozszerzenie CB posiada, podobnie jak Joomla!, własną strukturę wtyczek 4 . Główny komponent nadal nosi oryginalną nazwę Community Buildera {comprofiler). Większość funkcji zawarta jest w jednym z trzech kluczowych modułów dołączonych do CB. Podstawą CB jest system logowania — odpowiada za złożony proces rejestracji oraz logowania — który może zostać rozszerzony przez administratora. Za pomocą CB można dołączyć pola z dodatkowymi informacjami do profilu użytkownika, co przypomina rozszerzalny system zarządzania kontaktami. Platforma logowania dostępna jest także za pomocą interfejsu rozszerzeń Joomla!, dzięki temu możliwa jest wymiana informacji z innymi dodatkami Joomla!. System logowania CB można zintegrować (między innymi) z poniższymi rozszerzeniami Joomla!: •
Simpleboard lub JoomlaBoard,
•
myPMS,
•
Mamboblog,
•
Yanc tab newsletter,
•
zOOm Gallery,
•
uddelM (prywatne wiadomości),
•
CB Gallery,
•
PHPBB bulletin board system,
•
Group Jive.
Strona główna komponentu w interfejsie administratora zawiera listę wtyczek, które są domyślnie dostępne, co zilustrowano na rysunku 4.6. Gdy zainstalujesz nowe rozszerzenie CB, pojawi się ono na liście. Podstawowy ekran ustawień użytkownika, przedstawiony na rysunku 4.7, składa się prawie z tych samych opcji, co zwykły system rejestracji Joomla!. Na tym kończą się podobieństwa. W przypadku CB istnieje możliwość określenia dodatkowych parametrów dla wybranych grup lub wszystkich użytkowników.
4
Wtyczki (ang. plug-ins) nazywane są w Joomla! dodatkami — p r z y p . tłum.
Rozdział 4. • Dodawanie i modyfikacja dostępnych r o z s z e r z e ń
Copyright 2004 - 2006 MamboJoe JoomlaJoe, Be.it and CB team. This component is leleased undei the GIIUGPL License and a fiee C o m m u n copyright statements m u s t be kept. Deiivate work m u s t piominently duly acknowledge original work and include visible online link www.ioomiapoiis.com Credits: Nick A. Documentation and Public Relations
If y o u like the services provided by this free component, please consider making a small donation to support the team behind it: Donate in EUR to [email protected] Donate in USD to [email protected] Community Builder includes following components:
¡unek 4.7. dstawo we tawienia profilu rtkownika podobne tych ystemu imla!
(UTC 00:00) Uniwersalny: Dublin, Lizbona, L o n d y n Witryna
Group:
"
^
Block U s e r :
No
V
^¡j
Approve User:
Yes
v
%
Confirm User:
' Yes
V
^
Dodatkowe pola m o g ą przyjąć jeden z 11 typów: •
przycisk wyboru,
•
data,
^
- Autor - Redaktor - Wydawca - Zaplecze - Operator - Administrator - Główny administrator
:
%
V
114
Joomla!. Profesjonalne tworzenie stron WWW •
adres e-mailowy,
•
obszar edycyjny,
•
pole tekstowe,
•
wielowierszowe pole tekstowe,
•
przycisk opcji,
•
adres W W W ,
•
lista rozwijalna,
•
przyciski wyboru dla kilku opcji,
•
ogranicznik pól.
Dla każdego z pól CB można wybrać dowolny z powyższych typów. Przykładowo jeśli chcesz dać użytkownikom możliwość określania preferowanego typu CMS w swoich profilach, możesz wykorzystać rozwijalną listę. Pola możesz dodawać za pośrednictwem opcji Field Management, dostępnej w menu Community' Buildera, co przedstawiono na rysunku 4.8. Rysunek 4.8. Dodawanie nowego pola, które pozwala użytkownikowi określić preferowany system CMS
i Type:
Drop Down (Single Select)
Tab:
Contact Info
Name:
cb_cmbtype
V
Ule:
Referowany Typ C K' ichowuje preferowany typ CHS
Description/"!" field-tip: text or HTML:
Required?:
N>
Show on Profile?:
T;
User Read Only?:
N
Show at Registration?:
N
Published:
N
Size: Use the table below to add new values. Add a Value Name Joomla 1.5 Joomla 1.0 Vigenette
Po zapisaniu pola musisz je opublikować. Następnie, jeśli przejdziesz do ekranu ustawień profilu użytkownika, przedstawionego na rysunku 4.7, zobaczysz, że pojawiło się nowe pole. Możliwość dostosowania profilów użytkownika (włączając w to nawet „wymagane" polaj daje efekt w postaci zbierania najważniejszych informacji o odwiedzających.
Być może zauważyłeś, że na rysunku 4.7 wszystkie informacje o użytkowniku pojawiły się w jednej zakładce, zatytułowanej Contact Info. Być może zauważyłeś także, że podczas tworzenia nowego pola wybrana była opcja umieszczenia go właśnie w tej zakładce. System
Rozdział 4. • Dodawanie i modyfikacja dostępnych rozszerzeń
115
CB umożliwia stworzenie dodatkowych zakładek, zawierających nie tylko informacje o użytkownikach, ale także połączonych z innymi rozszerzeniami, których funkcje związane są z profilem użytkownika, np. blog użytkownika. Wszystkie zakładki w profilu użytkownika wyświetlane są w Tab Manager (przedstawiono to na rysunku 4.9). Korzystając z tej opcji, możesz zmienić nazwę zakładki, jej pozycję i typ wyświetlania. Jeśli jest to zakładka szczególnego typu (na przykład zakładka menu), zostanie wyświetlony panel zawierający dodatkowe parametry. rsunek 4.9. pcja Tab lanager rzechowuje stę zakładek, tóre można odać do profilu żytkownika
tyczki CB Community Builder zawiera obsługę własnych wtyczek. Większość z nich łączy system autoryzacji CB z innymi rozszerzeniami. Na rysunku 4.10 zilustrowano ekran Plugin Manager, który przedstawia listę wtyczek zainstalowanych domyślnie. Część z nich jest oznaczona w kolumnie Type jako templates, co oznacza, że wpływają na wygląd CB. Wtyczka typu user odpowiada za kluczowe funkcje systemu lub za połączenie z innymi rozszerzeniami Joomla!. Zauważ, że domyślna instalacja zawiera wtyczki łączące z Simpleboard Forum, Mamblog Blog, YaNC Newsletters, PMP MyPMS i Pro. Więcej wtyczek tego typu można znaleźć na stronie internetowej CB.
watar użytkownika Jedną z kluczowych opcji, które sprawiają, że użytkownicy odwiedzający stronę angażują się w jej funkcjonowanie, jest możliwość ustawienia określonego awatara (obrazka), ich graficznej wizytówki. Obrazek ten wyświetlany jest w profilu użytkownika. Chociaż wybrana nazwa użytkownika może go wystarczająco reprezentować, to jednak mały obrazek pozwala w większym stopniu zakomunikować własną osobowość.
116
Joomla!. Profesjonalne tworzenie stron WWW
Rysunek 4.10. Ekran Plugin Manager przedstawia listę wtyczek zainstalowanych w systemie CB
Wysyłanie obrazków może być dodatkowo moderowane, aby awatary były wyświetlane, dopóki nie zostaną zaakceptowane. Opcja moderacji może być bardzo przydatna w przypadku strony o tematyce rodzinnej lub ochrony przed naruszaniem praw autorskich do obrazków. Prawa autorskie i wykorzystanie obrazków w internecie to temat pełen kontrowersji. Bez wątpienia kopiowanie treści chronionych prawem autorskim jest naruszeniem praw właściciela — fakt ten nie podlega dyskusji. Jest wielu autorów i posiadaczy praw autorskich, którzy nie mają nic przeciwko publikowaniu ich obrazków, o ile nie są wykorzystane do działalności zarobkowej, a także nie są przedstawiane w sposób negatywny. Fanfilmy inspirowane różnymi produkcjami tworzone są od lat, a tylko kilka studiów zabrania tworzenia takich dzieł. Jeśli martwi Cię status prawny, powinieneś skontaktować się z prawnikiem. Aby umożliwić użytkownikom dodawanie obrazków, zaloguj się na stronę, na której masz zainstalowany CB. Przejdź do profilu użytkownika, gdzie zobaczysz pustą ikonę. Kliknij ją, a następnie wybierz pozycję My CB Profile w User Menu. Następnie możesz wybrać opcję Update Your Image w Edit menu, żeby dodać własny obrazek. Nie zostanie on jednak wyświetlony do momentu zatwierdzenia przez administratora.
Pobieranie i instalacja Po pobraniu Community Buildera zauważ, że nie jest to pojedynczy plik, lecz zestaw plików, które należy zainstalować. W zestawie tym znajdują się następujące elementy: •
comprofi Ter — To archiwum zawiera właściwy komponent CB, który należy zainstalować w Joomla!.
•
cblogin
— Moduł logowania, który należy dodać do głównej strony Joomla!.
Rozdział 4. • Dodawanie i modyfikacja dostępnych rozszerzeń •
mod_comprof i 1 ermoderator — Przypisuje poszczególnym moderatorom możliwość zatwierdzania procesu rejestracji.
•
mod_comprofi 1 eronl i ne — Wyświetla listę użytkowników CB, którzy właśnie odwiedzają stronę.
117
Wymagane są tylko dwa elementy: komponent comprofiler — odpowiada za zarządzanie systemem z poziomu interfejsu administracyjnego, i moduł cblogin — pozwala użytkownikom zalogować się do systemu CB. Comprofiler to także oryginalna nazwa Community Buildera, do której odwołania znajdziesz w wielu miejscach zaplecza. Przy pierwszym uruchomieniu CB powinieneś wybrać opcję Tools z menu. Jak zilustrowano na rysunku 4.11, dołączone narzędzia pozwalają zainstalować przykładowe dane, skopiować dane użytkowników z obecnego systemu rejestracji, a także sprawdzić poprawność danych w bazie CB.
Tools Manager
This will load sample data Into the Joomla Community Builder component. This will s y n c h r o n i z e the JoomlaMlambo U s e r table w i t h the Joomla Community Builder U s e r Table. Please make s u r e b e f o r e s y n c h r o n i z i n g that the u s e r name t y p e (first/la stria me mode c h o i c e ) is set c o r r e c t l y in C o m p o n e n t s • Builder - s Configuration - » G e n e r a l , s o that the u s e r - s y n c h r o n i z a t i o n imports the n a m e s In the appropriate format. This will p e r f o r m a s e r i e s of t e s t s o n the Community Builder d a t a b a s e and report back potential inconsistencies without c h a n g i the database.
•Unek 4.11. Na stronie narzędzi CB możesz wybrać opcję instalacji przykładowych danych, skopiowania nych użytkowników Joomla! do systemu CB, a także sprawdzić poprawność danych w bazie CB
rganizacje i e-commerce Rozszerzenia związane z organizacjami i e-commerce często służą do połączenia systemu Joomla! z zasobami zewnętrznymi (na przykład zewnętrznymi sieciami), dzięki którym można skorzystać z programów partnerskich, systemów elektronicznej płatności i innych. Rozszerzenia tego typu wykorzystywane są głównie przez organizacje, koordynują oraz ułatwiają komunikację wewnątrz i na zewnątrz organizacji. Rozszerzenia dla tego obszaru pogrupowano w JED w następujące kategorie: •
Reklamy i programy partnerskie (ang. Ads & Affiliates) — Zawiera podkategorie: Programy partnerskie ( A f f i l i a t e Advertising), Amazon, Zarządzanie bannerami (Banner Management), Ogłoszenia (Classified Ads), Bannery narożnikowe (Corner Banners), Reklamy Google (Google Ads), Odnośniki i reklamy tekstowe ( Text & Link Ads).
•
E-Commerce — Zawiera podkategorie: Handlowe programy partnerskie (Affiliate Carts), Aukcje (Auction), Bilingi i faktury (Billing & Invoices), Darowizny (Donations), Płatny dostęp (Paid Access and Content), Systemy płatności (Payment systems). Sklepy internetowe (Shopping Cart).
118
Joomla!. Profesjonalne tworzenie stron WWW •
Dla poszczególnych rozszerzeń (Extensión Specijic) — Zawiera podkategorie dla rozszerzeń i wtyczek: AdsManager, AlphaContent, BannersManager, Community Builder, dcsFlashGames, DOCMan, ECJC, Fireboard Forum, Freeway, Hot Property, JCE, JContent Subscription, jDownloads, Jomres, Joom!Fish, JoomLeague, JoomSEF, nBill, Pages-and-Items, Phoca, PUArcade, RSGallery2, SEF Service Map, Seyret, SOBI2, VirtueMart.
•
Klienci i oprogramowanie do pracy grupowej (Clients & Groupware) — Zawiera podkategorie: Autorzy (Authors), CRM, Pomoc użytkownikom (Help desk), Status internetowy (Online Status & Profile), Zarządzanie projektem i zadaniami (Project & Task Management), Social Bookmarking, Wiki.
•
Rynki branżowe (Vertical Markets) — Zawiera podkategorie: Samochody i inne pojazdy (Auto & Vehicles), Łodzie i jachty (Boat & Yachting), Książki i biblioteki (Books & Librarles), Edukacja (Education), Jedzenie i napoje (Food & Beverage), Nieruchomości (Real Estate), Podatki i zastawy hipoteczne (Taxes & Mortgages). Niektóre z możliwości oferowanych przez rozszerzenia z tych kategorii potrafią zmienić prostą stronę Joomla! w profesjonalną i (lub) komercyjną witrynę. Opcja subskrypcji jest przykładowo jedną z popularniejszych funkcji.
Menedżer subskrypcji Jedną z wbudowanych funkcji Joomla! jest możliwość ograniczenia treści dla poszczególnej grupy lub po prostu uczynienia artykułów niewidocznymi dla niezarejestrowanych użytkowników. Niestety, nie istnieje funkcja ograniczania dostępu do treści do poszczególnych użytkowników w ograniczonym czasie. Takie możliwości ma rozszerzenie Open Source Account Expiration Control & Subscription Manager (AEC). Jak przedstawiono na rysunku 4.12, powyższy komponent dodaje na stronie Joomla! funkcjonalność płatnego dostępu do treści. Rozszerzenie AEC można połączyć z innymi (np. CB), co pozwala na korzystanie z takich systemów płatności, jak: Paypal, Authorize.Net, 2Checkout, Allopass, viaKLIX i inne. Umożliwia określenie różnorodnych planów płatności, na przykład darmowe okresy próbne, płatne i dożywotnie oraz darmowe próbki. Za pomocą interfejsu administratora można w prosty sposób skonfigurować opcje płatności za treści, a także połączenie z różnymi usługami płatności. Możliwe jest także ustawienie subskrypcji dla różnych kont użytkowników Joomla!.
Twórcy AEC ciągle dodają nowe systemy płatności, dlatego upewnij się, że dysponujesz najnowszą wersją. Dodatkowo na stronie rozszerzenia znajduje się forum 5 , na którym można uzyskać pomoc. Odwiedź stronę AEC pod adresem: https://globalnerd.
5
org/index.php/AECl.
Dostępne po uiszczeniu opłaty —przyp. tłum.
html
Rozdział 4. • Dodawanie i modyfikacja dostępnych rozszerzeń sunek 4.12. imponent AEC nożliwia introlowany istęp treść oparciu model ibskrypcyjny
the AEC hns also I ecently •irlrleil stippoittoi tliese:
m While these integrations have been tested to be working, there might be a bug left here or there, so just tell us if you have a problem with one of the
We are CUIIently woihimj out incotpoiatmy: WorłdPay
O
u also have the choice to offer non-automatic payments to your plans This way, you can even handle customers who cant pay with one of the p
VISA1
klep internetowy MicroShop z płatnościami Paypal MicroShop jest wygodnym i prostym sklepem internetowym (zobacz rysunek 4.13), który umożliwia dodawanie przedmiotów i składanie zamówień. Jest w pełni zintegrowany z systemem płatności Paypal, co upraszcza zamówienie. rsunek 4.13. ozszerzenie [icroShop vożliwia a stronie odawanie zedmiotów o koszyka
Browse
Capelo C a p e l o " is an artist, an architect, a painter, a sculptor, a n d a ceramist. H i s paintings a n d c e r a m i c pieces decorate his breathtaking h o m e a n d can be f o u n d in collections a r o u n d the w o r l d
»derby:
Product N a m e v
t
Display* «Start
10 v < Prev t 2 •
Ceramic Sink. ^ y&KBUXBs
Capelo is an artist, an architect, a painter, a sculptor, and a ceramist. His paintings arid ceramic pieces decorate numerous places throughout the world.
$242.12 A d d to Cart
Capelo is an artist, ari architect, a painter, a sculptor, and a ceramist. His paintings and ceramic pieces decorate numerous places throughout the world.
Ś242.12
:
Quantity: 1 A d d to Cart
Interfejs administratora, który umożliwia ustawienie opcji systemu płatności, a także składania zamówień, przedstawiono na rysunku 4.14.
120
Joomla!. Profesjonalne tworzenie stron WWW
Rysunek 4.14. Zaplecze rozszerzenia MicroShop umożliwia ustawienie systemów płatności takich jak Paypal
[ Simple Layout | Extended Layout ]
Sfedl-
VirtueMart 1.1.2 (Check for latest version) C o n t r o l Panel
§|i Your Store: : Control Panel mwm
Administration j1 U
Statistics
Store Summary
)% Edit Store •!<'; List Payment Methods fp- A d d Payment M e t h o d
Menedżer projektów Project Fork Koordynacja ludzi pracujących nad danym projektem może być trudna i frustrująca, jeśli nie zostaną użyte właściwe narzędzia. Programy takie jak Microsoft Project lub Copper doskonale nadają się do zarządzania dużymi projektami, ale ich sztywność ogranicza praktyczne wykorzystanie przy małych i średnich projektach. Dla systemu Joomla! istnieje rozszerzenie o nazwie Project Fork, które umożliwia zarządzanie projektami z poziomu przeglądarki. Jak zilustrowano na rysunku 4.15, rozszerzenie Project Fork jest narzędziem do zarządzania projektami, a dokładniej — do kontroli nad wieloma zadaniami i ludźmi. Ponieważ działa w ramach systemu Joomla!, dostęp do Project Fork możliwy jest w każdym miejscu, w którym można przeglądać strony internetowe. Różnorodne opcje tworzenia raportów pomocne są w analizie obecnej i wcześniejszej wydajności. Funkcja obsługi dokumentów i plików powiązanych z projektem sprawia, że to rozszerzenie staje się miniaturową aplikacją do pracy grupowej. Nowy projekt tworzy się, klikając przycisk New Project po wybraniu zakładki Projects. Po utworzeniu projektu można przypisać do niego zadania. Każde z nich ma nazwę, opis w postaci formatowanego tekstu, stan (np. anulowany, kompletny, opóźniony itd.), datę rozpoczęcia, datę ukończenia, aktualny postęp (np. w procentach) i użytkownika, który jest odpowiedzialny za to zadanie. Dodatkowo użytkownik przypisany do zadania może być automatycznie powiadamiany, kiedy ulegnie ono zmianie. Większość funkcji zarządzania projektami w Project Fork (włączając w to konfigurację użytkowników) dostępna jest z poziomu strony Joomla!. Rozszerzenie zostało pomyślane w ten sposób, ponieważ w przeciwieństwie do innych zadań związanych z zarządzaniem stroną administrator projektu nie musi mieć uprawnień administratora strony. Interfejs administracyjny umożliwia całkowitą kontrolę nad prawami dostępu i aktualnymi projektami.
Rozdział 4. • Dodawanie i modyfikacja dostępnych rozszerzeń
iOid y o u k n o w ? Voters clicking or» a project, ft will be set as- your éurrerrt workspace.
project ^i-rtrol Panel
Projects
Tasks
File M a n a g e i
Calendar
Board
Profile
121
»It . Select your proj
Us
» A nevy project h a s b e e n created!
/ Projects Hew
Copy
]
Archive
Delete
Title
j
Search;
Project fountlei
Zapozmii ? si ? z J o o m l a !
Administrator
Total t a s k s
Total m e m b e r s
Total ł j i o u p s
, 0
1
,, 0
Cieatedon 10/30/2008, ,
Pokaż: wszystko V lle*v
Copy
A i chive
Delete
linek 4.15. Strona główna rozszerzenia Project Fork przedstawia listę projektów, do których dany
zszerzenie kart pracy Aby zarządzać czasem w projekcie (a szczególnie zliczać płatny czas), możesz wykorzystać rozszerzenie TimeWriter. Interfejs tego rozszerzenia, który pozwala rejestrować czas pracy, zilustrowano na rysunku 4.16. Dostępne są dwa sposoby prowadzenia rejestru: czas przeznaczony na klientów lub czas przeznaczony na projekty. Można tworzyć powtarzalne zadania, a także wyświetlać karty pracy. Timesheet Calendar
43 Total Billable H o u r s : Total N o n - B i l l a b l e H o u r s
0 00 0 00
Podobnie jak w przypadku Project Fork, większość funkcji rozszerzenia TimeWriter dostępna jest za pośrednictwem strony głównej. Aby uzyskać dostęp do tych funkcji, kliknij odnośnik Reports (lekko niefortunna nazwa) w prawym górnym rogu. Zostanie wyświetlona lista odnośników do następujących funkcji: •
Timesheet Report by Company (Przegląd kart pracy według firm)',
•
Timesheet Report by Project (Przegląd kart pracy według
projektów)',
122
Joomla!. Profesjonalne tworzenie stron WWW •
Report Total Hours by Project (Przegląd całkowitej liczby godzin dla poszczególnych projektów);
•
Report Total Mileage (Przegląd całego przebiegu)-,
•
Set User Preferences (Ustawienia
•
Show Vehicles (Pokaż listę pojazdów)',
•
Mileage Log Form (Formularz notowania
•
Manage Companies (Zarządzaj
•
Manage Projects (Zarządzaj
użytkownika);
przebiegu)',
firmami)', projektami).
Zanim utworzysz projekt, musisz najpierw utworzyć firmę — dopiero wtedy możesz zacząć notować liczbę godzin. Kliknij odnośnik Manage Companies, aby dodać nową firmę. Następnie możesz kliknąć odnośnik Manage Projects, aby stworzyć nowy projekt. Kolejnym krokiem jest kliknięcie ikony Assign na liście projektów, aby przypisać użytkowników Joomla! do danego projektu. Funkcje tworzenia raportów umożliwiają ogólne zarządzanie, a także tworzenie raportów tygodniowych dla określonych parametrów. Z poziomu zaplecza możesz zaimportować dane Mambotastic Timesheets.
Dodawanie na stronie platformy aukcyjnej Strona serwisu aukcyjnego eBay jest jedną z najpopularniejszych witryn internetowych. Wielu ludzi żyje ze sprzedaży produktów za pośrednictwem tego serwisu. Jeśli chciałbyś zostać jednym z nich, Joomla! może pomóc! Dostępna jest spora liczba rozszerzeń, które umieszczą informacje o aukcjach na Twojej stronie Joomla!. W praktyce oznacza to, że możesz założyć wirtualny sklep na stronie Joomla!, a oglądających kierować na aukcje w serwisie eBay. Większość udanych przedsięwzięć biznesowych opiera się na powracających klientach. Nie inaczej jest w przypadku przedsięwzięć uruchomionych w serwisie aukcyjnym eBay. Dzięki wstawieniu na stronie sklepu aukcyjnego stworzysz dla regularnych odwiedzających miejsce, w którym będą mogli kupować produkty i usługi. Istnieje kilka rozszerzeń aukcyjnych, które dosłownie dodają funkcję prowadzenia aukcji na stronie Joomla!. Jest to opłacalne tylko w sytuacji, kiedy wielu kupujących przebija swoje oferty, podnosząc cenę do akceptowalnego poziomu. Ponieważ eBay pozwala dotrzeć dosłownie do milionów potencjalnych klientów, przy czym zapewnia ochronę przed fałszywymi przebiciami, zastosowanie własnej implementacji serwisu aukcyjnego jest kiepskim wyborem dla większości webmasterów. Jeśli mimo wszystko chciałbyś dodać takie funkcje, sprawdź zawartość kategorii Auction w JED.
Rozszerzanie My EBay Store, przedstawione na rysunku 4.17, umożliwia zaprezentowanie oferty Twojego sklepu w serwisie eBay na stronie Joomla!. Informacje na temat poszczególnych aukcji są dynamicznie aktualizowane i zawierają najświeższe informacje. Rozszerzenie wyświetla informacje o produkcie, dołączone zdjęcia, aktualną cenę i datę zakończenia aukcji. Bez problemu przedstawia informacje o więcej niż 150 aukcjach.
Rozdział 4. • Dodawanie i modyfikacja dostępnych rozszerzeń ¡unek 4.17. zszerzenie ' EBay Store świetla tualne órmacje temat branych aukcji
123
My Ebay Store 1 SEARCH
MV
J
'
o
Reload
J M 1
»-PLAYER 512Mb H:¡ i Pod USB Musie : -I MP2&MP4 EUR 45,00 32 min;':1; Ocehiai 8 speccr« • Rayban pornobrile: te. avsater NEW EUR 24,99 31 minii FRIGÛ PORTATILE a • DUE fUNZIONitíl il CALDO E F RE DDO EUR 62,55 18 min
J
Moduł My EBay Storę może zostać umieszczony w dowolnym panelu na stronie Joomla!. Jego położenie, a także pozostałe ustawienia możesz zmienić, wybierając moduł na liście opcji Moduły. Ekran parametrów przedstawiony na rysunku 4.18 pozwala ustawić dobór wyświetlanych przedmiotów. P«il«»metry tmnlufu Ebay Site
United States
v
Seller ID K e y w o r d Search ferrari Search title and description
O
Tak
Cr)
Nie
Search í . r t e y o i y ID -1 ü n i n v H n j>t ice M á x i m u m price S h o w H e m s w i t h Gallery i m a g e s only
.» Tak
' ' Nie
S h o w Buy It H o w i t e m s only
O
B>,ry Store Module Size
Wide Skyscraper (160 x 600)
Headet Image Ebay L o g o Enable Search Box Search Box position
Tak ® Nie
Electronics (GRAY) 12: Gray ® Tak O
V
O
Nie
Góra ( t ) Dolne
Sort By
EndTime
S o i l Dir
(?) Ascending O
Tar get L ink
V
Y
® Tak
v
O
Descending
Nie
Hull Result Handling.
Show Most Watched Items on Ebay.
S h o w Gallery t n u g e
0
Tak
O
V
Nie
awartość strony Sercem każdej strony opartej na CMS jest jej zawartość. Rozszerzenia przedstawione w tym podrozdziale pozwolą Ci wzbogacić typ treści zarządzanych za pomocą Joomla! o podcasty, kartki elektroniczne, mapy i inne. Istnieją nawet rozszerzenia potrafiące zmienić stronę Joomla! w rozszerzalny system wiki.
124
Joomla!. Profesjonalne tworzenie stron WWW Rozszerzenia dla tego obszaru pogrupowano w JEB w następujące kategorie: •
Zawartość i newsy (ang. Content & News) — Rozszerzenia, które umożliwiają import lub tworzenie treści wykraczających poza standardowe artykuły Joomla!. Zawiera podkategorie: Lista artykułów (Article Listing), Pokaz slajdów dla artykułów {Article Slideshow), Blog, Newsy na stronie głównej (Frontend News), Najnowsze wiadomości (Latest News), Mikroblogi (Microblogging), Paski z wiadomościami (News Tickers & Scrollers), Losowe newsy i artykuły (Newsflash & Random), Popularne treści (Popular Content), Cytaty (Quotes), Oceny i przeglądy (Ratings & Reviews), Kanały RSS (RSS Syndicate).
•
Katalogi i dokumentacja (Directory & Documentation) — Rozszerzenia, które umożliwiają tworzenie dokumentacji na stronie. Zawiera podkategorie: Bibliografia (Bibliography), Katalog (Directory), Pobieranie plików (Downloads), FAQ, Słowniki (Glossary & Directory), Portfolio i katalogi (Portfolio & Catalog), Odnośniki (Weblinks).
U
Grafika i multimedia (Images & Multimedia) — Rozszerzenia, które dodają obsługę treści multimedialnych. Zawiera podkategorie: Grafiki dla artykułów (Article Images), Odtwarzacze audio i galerie (Audio Players & Galleries), Kartki elektroniczne (eCards), Grafiki (Images), Pokaz slajdów (Image Slideshow), Mapy (Maps), Wyświetlanie multimediów (Multimedia Display), Panoramy (Panorama), Galerie zdjęć (Photo Galleries), Dodatki do galerii (Photo Galleries— extras), Podcasting, Radio internetowe (Radio & Shoutcast), Streaming i nadawanie (Streaming & Broadcasting), Galeria filmów (Video Gallery), Odtwarzacze wideo (Video Players), Rzeczywistość wirtualna i 3D (Virtual Reality & 3D).
Podcasting w Joomla! Podcasting to nowe znaczące medium. Najnowsze badania Bridge Ratings pokazują, że liczba ludzi, którzy pobierają podcasty, wzrosła z 820 000 w 2004 roku do 4,8 miliona ludzi w 2005. Prognozy na rok 2010 przewidują poszerzenie grupy odbiorców do 45 milionów. Według „Business Week" przez ostatnie sześć miesięcy roku 2004 i pierwsze sześć miesięcy 2005 liczba podcastów wzrosła o 2500 procent. Podcasting to wersja audio kanałów RSS. Być może zauważyłeś ikonę odpowiadającą za RSS na ulubionej stronie z newsami. Za pomocą aplikacji zwanej czytnikiem kanałów można subskrybować (zapisać się do) dany kanał. Program będzie na bieżąco automatycznie pobierać najnowsze wiadomości na Twój komputer do późniejszego przeczytania. RSS to umowne oznaczenie dla grupy formatów opartych na języku XML, które zawierają informacje o subskrypcj i.
Podcasty wykorzystują praktycznie identyczne pliki RSS, co upodabnia czytniki podcastów do czytników kanałów. Najnowsze pliki audio pobierane są przez czytnik podcastów (najczęściej w formacie MP3 lub AAC) na dysk komputera lub urządzenie przenośne. Następnie możesz odsłuchać ich zawartość na komputerze (częściej będzie to odtwarzacz MP3 lub iPod). Najpopularniejszą stroną zawierającą podcasty jest iTunes — witryna firmy Apple.
Rozdział 4. • Dodawanie i modyfikacja dostępnych rozszerzeń
125
Joomla! umożliwia dołączenie podcastów na stronie, tak żeby dodanie nowego pliku audio powodowało jego automatyczne pojawienie się na odpowiednim kanale RSS. W ten sposób użytkownicy będą mogli pobrać go automatycznie. Rozszerzenie Podcast Suitę, które dodaje funkcje obsługi podcastów, można pobrać pod adresem: http://wwwjIleblanc.com/joomla/Articles/Podcast_Suite,_Version_l.l_Stable/ Powyższy pakiet składa się z komponentu, modułu i dodatku, które połączone dają pełną funkcjonalność podcastów w Joomla!. Rozszerzenie umożliwia także integrację z serwisem iTunes. Moduł z pakietu Podcast Suitę, zilustrowany na rysunku 4.19, wyświetla odnośnik do dynamicznie tworzonego kanału RSS. sunek 4.19.
oduł Podcast lite zawiera Inośnik nożliwiający >danie ibskrypcji 'dcastów
• Your Details • Submit an At tide • Submit ,i W#b Link » Logout
Login Form Witaj Administrater, ( Wyloguj J Podcast
We are Volunteers & & ^ M-
Stick to the Code!
The Joornla! Core Team consists of volunteer developers, designers, administrators and managers who, together with a large range of work Groups of dedicated community members have taken Joomla! to new heights In its relatively short life This well-oiled machine ¡s often copied but never surpassed. Joomla! has some wonderfully talented people taking Open Source concepts to the forefront of industry standards. Joomla! 1.5 is a major leap forward and represents the most exciting Joomla! release in the history of the project.
To ensure this code release, Wilco Jansen resorted to sending rum to joint lead-developer Johan Janssens. Johan, who's had a penchant for rum ever since the first "Pirate's of the Caribbean" movie screened, took the bait, mixed it with Cola, arid here we are with our latest 1.5 release It looks like pirate talk will figure quite a lot in future Joomla1 development!
Więcej...
Only one edit window! How do ! , A ' create "Read more. "?
»
What is the FTP layer for ?
# si _
? m
The FTP Layer allows file operations (such as installing Extensions ot updating the main configuration file) without having to make all the folders and tiles writable. This has been an
J. This is now implemented by Inserting a Re.id mo« e... tag (the button is located below the editor area) a dotted line appears in the edited text showing the split location for the Read more... A new Plugm takes care of the rest. It is worth mentioning that this does not have a negative effect on migrated
Kanał tworzony jest na podstawie ustawień określanych w interfejsie administracyjnym, na ekranie konfiguracji komponentu, co przedstawiono na rysunku 4.20. Rozszerzenie automatycznie wyszukuje nowe pliki w określonym folderze i tworzy kanał na podstawie jego zawartości. Niestety, to rozszerzenie nie ma funkcji obsługi wideo, czyli vodcastingu (yideo-on-demangcasting). Biorąc pod uwagę znaczący wzrost vodcastingu, to niedociągnięcie powinno zostać wkrótce poprawione.
ileria zdjęć na stronie Joomla! Galerie zdjęć (pryede wszystkim zawierające zdjęcia z rodzinnych albumów) zaczynają dominować w sieci. Wiele krążących w sieci dowcipów dotyczy liczby przesyłanych zdjęć małych dzieci — z powodu skali zjawiska dojdzie do przeciążenia łączy. Potrzeba dzielenia się cyfrowymi zdjęciami i wydarzeniami ze swojego życia między rozdzielonymi o setki czy tysiące kilometrów członkami rodzin sprawia, że galerie zdjęć stają się bardzo atrakcyjnym narzędziem.
126
Joomla!. Profesjonalne tworzenie stron W1NW
Rysunek 4.20.
Konfiguracja pakietu przebiega za pomocą komponentu dołączonego do Podcast Suitę
K o n t kjtii i i c j a Pamięć p o d r ę c z n a
- . Nie i v Tak
Path f o i u p l o a d e d m e d i a components/com_podcast/media
Link titles. R a s h playei, c o d e , or Q u i c k T i m e
®
Links O
Flash Player O
HTML Code
:
Quicktime Player
Player W i d t h Player Hekjht Enclosure Link Titles
Listen Now!
E»K-losi.ii e C o d e
€ z,» i ; p r z e c h o w y w a n i a 3600 MIME t y p e
audio/mpeg
» Items 5 Tytuł
My Podcast H y regular podcast
Opis
Niezależnie od tego, czy chcesz przedstawić profesjonalne portfolio, czy tylko umieścić ujęcia pierwszych kroków Twojej córeczki, Joomla! może być odpowiednim rozwiązaniem. Funkcję galerii zdjęć może spełniać kilka różnych rozszerzeń. Według ostatnich wyliczeń wyszukiwanie Google prowadziło do 50 różnych rozszerzeń dodających galerie na stronach Joomla!, zarówno komercyjnych, jak i darmowych. Rozszerzenie RSGallery2 jest najwyżej ocenianym wśród aplikacji przeznaczonych dla Joomla! i cechuje się bogactwem funkcji. Umożliwia profesjonalne zarządzanie galeriami i obrazkami. System kontroli dostępu, zintegrowany z systemem rejestracji użytkowników Joomla!, występuje w kilkudziesięciu językach. Jeśli masz zamiar zarządzać dużą łiezbą zdjęć cyfrowych, sprawdź system Gallery2. Jest to jedna z najpopularniejszy aplikacji do tworzenia galerii, zawiera wiele profesjonalnych funkcji. Automatycznie tworzy kanały RSS, zawiera obsługę komentarzy, wielu typów multimediów (nie tylko zdjęć), a także działa nawet na popularnych (dużych) stronach internetowych. Chociaż jest to oddzielna aplikacja PHP, może zostać połączona ze stroną Joomla! za pomocą specjalnej wtyczki Gallery 2 Bridge.
Rozszerzenie RSGallery2 (zobacz rysunek 4.21) napisano z myślą o Joomla!. Tworzone pliki HTML i CSS są zgodne ze standardami. Posiada także kompletną obsługę Joomfish, przez co może działać w wybranym języku. Dodatkową funkcję stanowi zarządzanie animacjami Flash!. Zanim zainstalujesz to rozszerzenie, upewnij się, że przynajmniej jedna z popularnych bibliotek graficznych (GD2, ImageMagick lub Netpbm) dostępna jest na Twoim serwerze PHP.
Rozdział 4. • Dodawanie i modyfikacja dostępnych rozszerzeń ¡unek 4.21.
flower_5_bg_040404 Home Gallery Demo Display Demo Download Forum Tutorial Documentation wiki FAQ j Development ACL explained Known issues Nightly Builds API Documentation Module Tutorials Flash Slide show Login Form
RSGallery2 zawiera panel sterowania, z którego można zarządzać każdym aspektem rozszerzenia: od konfiguracji systemu, przez dodawanie zdjęć (pojedynczo lub w pakietach), zarządzanie galeriami, zmianę opcji wyświetlania, po zarządzanie bazą danych zdjęć. Dodatkowo opcja wprowadzania zmian w CSS umożliwia dopasowanie galerii do wyglądu aktualnego szablonu. Warto odwiedzić stronę domową RSGallery2 (http://rsgallery2.net/). Możesz tam znaleźć przykładową implementację galerii, pobrać najnowszą wersję rozszerzenia, czytać i wysyłać wiadomości na forum poświęconym rozszerzeniu lub uczyć się na podstawie zamieszczonych przewodników. Dostępne są przewodniki opisujące wszystkie aspekty — od instalacji, przez własne szablony dla galerii, po tworzenie modułów. Strona zawiera także kompletną dokumentację API, opis wszystkich klas, z których składa się platforma RSGallery2.
omunikacja na stronie Istnieją rozszerzenia Joomla!, które pozwalają dodać różne funkcje komunikacji między użytkownikami, np. czat, kalendarz imprez lub nawet wspólnie redagowane przepisy. Komunikacja jest kluczowym elementem stron, które pretendują do tytułu Web 2.0. Kilka rozszerzeń, które poszerzają Joomla! o funkcje budowania wirtualnych społeczności, przedstawiono w rozdziale 10. Rozszerzenia dla tego obszaru pogrupowano w JED w następujące kategorie: •
Komunikacja (ang. Communications) — Zawiera podkategorie: Zakładki i polecane (Bookmarks & Recommended), Czat (Chat), Komentarze (Comments), Kontakty (Contacts), E-mail, Formularze (Forms), Fora (Forums), Integracja z forami (Forum Bridges), Dodatki do forów (Forum extras), Księgi gości (Guest Book),
128
Joomla!. Profesjonalne tworzenie stron W1NW
Listy mailingowe (Mailing & Distribution Lists), Newsletter, Sondy (Polls), Quizy i badania (Quiz & Surveys), Shoutbox, SMS & PMS, Komunikacja z użytkownikami (User interaction). •
Kalendarze i wydarzenia (Calendars & Events) — Zawiera podkategorie: Urodziny i wydarzenia historyczne (Birthdays & Historie Events), Rezerwacja (Booking & Reservations), Kalendarze (Calendars), Zegarki (Clocks), Odliczanie (Countdown), Data i czas (Date & Time), Wydarzenia (Events), Uroczystości (Festivities).
Dodawanie komentarzy do artykułów
Jedną z najpopularniejszy metod budowania wirtualnych społeczności jest umożliwienie użytkownikom nadsyłania własnych komentarzy związanych z danym artykułem lub wpisem na blogu. Fora internetowe są często puste, ponieważ brakuje na nich prowokatorów piszących nowe wiadomości, które skłaniają innych do odpowiedzi. Funkcja dodawania komentarzy do istniejącej treści może być solidną motywacją dla użytkowników. Prawie każdy lubi od czasu do czasu dorzucić swoje trzy grosze. Posiadanie sekcji komentarzy wymusza konieczność moderacji. Ludzie często nadsyłają treści zabronione, atakują innych, zdradzają informacje osobiste, dodają reklamy, materiały obraźliwe i obsceniczne, a także (co jest najgorsze) krytykę pod adresem autora strony. Zgoda na komentarze wymaga od administratora większej uwagi odnośnie do tego, co dzieje się na stronie niż w przypadku braku komentarzy. Musisz zdawać sobie sprawę, że poświęcenie dodatkowego czasu jest niezbędne, o ile nie chcesz, żeby Twoja strona przerodziła się w Dziki Zachód rządzony mentalnością „wszystko wolno".
Dodatek Akocomment umożliwia użytkownikom Joomla! dodawanie komentarzy pod każdym artykułem. Rozszerzenie Akocomment (omówione dokładniej w rozdziale 10) jest jednym z najczęstszych rozszerzeń dodających komentarze w systemie Joomla!. Poprawnie obsługuje komentarze w różnych językach, np. angielskim, chińskim czy norweskim. Najczęściej stosowana wersja rozszerzenia to Akocomment Tweaked Special Edition.
Interfejs administracyjny umożliwia dokładną konfigurację rozszerzenia, włączając w to zakładki, dodawanie, powiadomienia, zgłaszanie, ulubione i szablony.
Księga gości
Jedną z funkcji najczęściej pojawiających się na hobbystycznych stronach WWW jest księga gości. Księgi gości zaliczane są do pierwszy funkcji komunikacyjnych, które sięgają początku samych stron internetowych. Umożliwiały odwiedzającym zamieszczanie komentarzy (najlepiej komplementów) lub sugestii związanych z zawartością strony.
Księga gości jest nadal bardzo popularna. Jedną z najlepszych funkcji dynamicznego systemi takiego jak Joomla! jest fakt, że zmienia się automatycznie. Dzięki temu wygląda na ciąglt aktualizowaną — nawet jeśli nie była odświeżana od jakiegoś czasu. Wyszukiwarka Google wykorzystuje okolicznościowe bannery, aby zmieniać wygląd strony głównej. A gdyby Twoje
Rozdział 4. • Dodawanie i modyfikacja dostępnych rozszerzeń
129
witryna wyświetlała losowy wpis z księgi gości na stronie głównej? Oczywiście musiałbyś wprowadzić moderację księgi gości, aby zapobiec pojawianiu się reklam, spamu i treści obscenicznych na stronie. Moderacja wymagałaby co prawda dodatkowej pracy, ale za to mielibyśmy stronę WWW, która za każdym razem wita odwiedzającego zachętą, wyrażoną słowami poprzednich użytkowników. Zanim napiszesz moduł, który pobiera losowy cytat z księgi gości, musisz zainstalować dodatek odpowiedzialny za zbieranie opinii użytkowników. W rozdziale 10. znajdziesz więcej informacji na ten temat.
:at na stronie Joomla! Czat może być doskonałym dodatkiem na stronie WWW, ale może także okazać się trudny w promocji i jeszcze trudniejszy w zarządzaniu. Większość stron WWW ogranicza dostęp do czatu, jest on uruchamiany tylko na specjalne okazje, np. obecność gościa, co może być najrozsądniejszym wyborem. Biorąc pod uwagę ilość drapieżników i ludzi z niejasnymi intencjami w sieci, czat pozbawiony monitoringu i ograniczeń jest prostą receptą na katastrofę dla webmastera. Joomla Live Chat, przedstawiony na rysunku 4.22, jest czatem administrator-użytkownik, który pozwala na komunikację jeden-do-jednego z odwiedzającymi Twoją stronę. Rozszerzenie to doskonale nadaje się do pomocy technicznej związanej ze stroną. Wykorzystuje technologię Ajax do dynamicznego uaktualniania okna rozmowy, pozwala na alerty dźwiękowe i żądania sesji. sunek 4.22.
terfejs Joomla ve Chat :zypomina oglądem asyczny czat
Live Chat L st Chat R o o m s
Message
Panel Refresh Chat Name
Reset Chat
Finish Chat
— 1
Message
Send
130
Joomla!. Profesjonalne tworzenie stron W1NW
Uruchamianie systemu wiki w Joomla! Ward Cunningham wynalazł w latach osiemdziesiątych nową metodę współpracy zwaną wiki, co odpowiada stronie internetowej, na której odwiedzający mogą dodawać, zmieniać, rozszerzać i usuwać artykuły. Najbardziej znanym przykładem tego systemu jest internetowa encyklopedia o nazwie Wikipedia (www.wikipedia.org). Użytkownicy samej tylko angielskiej wersji stworzyli dotychczas ponad 2,5 miliona artykułów. W ciągu ostatniego dziesięciolecia fenomen wiki zanotował ogromny wzrost. Społeczność open source szczególnie skorzystała na istnieniu stron wiki, ponieważ wielu programistów aplikacji open source nie ma czasu, aby tworzyć dokumentację dla swojej pracy. Strona wiki stworzona dla danej aplikacji (np. narzędzie do tworzenia mapy myśli FreeMind) pozwala pasjonatom programu dodawać użyteczne informacje, wskazówki, a także opisywać te części, których wykorzystanie nie jest oczywiste. Joomla! umożliwia stworzenie systemu wiki dzięki komponentowi o nazwie OpenWiki. OpenWikijest adaptacją projektu DokuWiki (stworzonego przez Adreasa Göhra) na potrzeby Joomla!. Jest to aplikacja PHP zawierająca funkcje wiki, zaprojektowana z myślą o szybkości i prostocie. Chociaż inne aplikacje wiki posiadają większy zasób opcji (np. projekt open source MediaWiki wykorzystywany przez Wikipedię), OpenWiki zajmuje mniej zasobów i działa dużo szybciej. OpenWiki można pobrać na poniższej stronie: http://www.joomla.sk/rozsirenia/startdown/294/ Po zainstalowaniu OpenWiki zostanie wyświetlony ekran początkowy. Uprawnienia edycji połączone są z kontrolą dostępu Joomla!, także możliwe jest ustawienie praw odczytu (Read), edycji (Edit), tworzenia (Create) i usuwania (Delete) dla każdej grupy użytkowników. Po kliknięciu przycisku Edit This Page na górze ekranu zostanie wyświetlone okno edytora zawierające treść artykułu (zobacz rysunek 4.23) w standardowej notacji wiki. Odnośniki kierujące do innych części strony zapisane są w postaci podwójnych nawiasów kwadratowych ( / / ] ] ), a odnośniki zewnętrzne umieszcza się w pojedynczych nawiasach kwadratowych ( [ J )• Przyciski znajdujące się nad oknem edytora pozwalają wstawiać kod dla obrazków lub nagłówków. Poszczególne strony wiki przechowywane są w postaci plików tekstowych w katalogu \pages komponentu: \com_openwiki\data\pages Ze względu na format plików edycja stron możliwa jest za pomocą każdego zwykłego edytora tekstu. Rozszerzenie OpenWiki wykorzystuje format DocBook. Jest to język znaczników podobny do HTML. Ma on ułatwić tworzenie dokumentacji dla systemów open source, takich jak FreeBSD, KDE, GTK+, Gnomę i Linux. Format został zaprojektowany z myślą przechowywania danych, a nie o ich prezentacji, dlatego jest zgodny z wzorcem Model-WidokKontroler (MVC). Temat wzorca MVC został szerzej opisany w rozdziale 8.
Rozdział 4. • Dodawanie i modyfikacja dostępnych rozszerzeń
sunek 4.23.
[J[
3 ekranie iycji wyświetla = tekst 'korzystujący andardowe rmatowanie ki
]]
Of
j Show p a g e J j Qldrevisions | [ Recent changes j j Trace: »
131
LEff^J
»
Edit the page and hit Save. S e e for Wiki s y n t a x . Please edit the page only if you c a n i m p r o v e it. If you want to test some things, learn to make your first steps on the
Projects of JoomProsolutiQn.coro DokuWiki for Joomla! [[wiki:DokuWiki]] is a standards compliant, simple to use [[wp>Wiki]], mainly aimed at creating documentation of any kind. It is targeted at developer teams, workgroups and small companies. It has a simple but powerful [[wiki: syntax]] which makes sure the datafiles remain readable outside the Wiki and eases the creation of structured texts. All data is stored in plain text files — no database is required. JOOMLA! ===== Joomla! is a Content Management System (CMS) created by the same award-winning team that brought the Matrbo CMS to its current state of stardom.Joomla! is the ideal tool for Hoirolnninn
amal I
t-n
lariw
rlmismi^
cnwmtinitTr
i.icVi ^ i t c ^
i nti-n
j S a v e j j Preview j j Cancel j
Począwszy od wersji 4, sposób przechowywania danych oparty jest na formacie X M L . Przykładowy fragment kodu DocBook:
id="pro_joomla">
< t i t l e > P r o f e s s i onal
Joomla!
id="rozdzial_1">
Rozdział Jeśli
1.
Wprowadzenie
czytasz
Sposób
na
tę
książkę..,
opanowanie
Joomla!..,
id="rozdzial_2">
Rozdział Joomla!
2.
Szczegóły
opiera
się
na
instalacji 4
różnych
technologiach
serwerowych..,
Dzięki przechowywaniu informacji w takim formacie dane mogą być modyfikowane przez oprogramowanie niezwiązane z systemem wiki. Oznacza to, że artykuły stworzone w OpenWiki mogą zostać przetworzone na dowolny typ treści statycznych 6 . Przy wprowadzaniu zmian na stronie zostają zapisane także różnice, dzięki czemu możliwe jest odtworzenie poprzednich wersji. Na rysunku 4.24 przedstawiono przykładowy ekran porównania wersji. Wstawiony tekst oznaczony jest znakiem plusa (+) po lewej stronie nowej wersji, wyświetlanej w prawej kolumnie. Dodatkowo zmiany są podświetlane, co ułatwia ich lokalizację.
ákich jak pliki HTML w przypadku Joomla! —przyp. tłum.
132
Joomla!. Profesjonalne tworzenie stron W1NW
Rysunek 4.24. W rozszerzeniu OpenWiki jest funkcja porównywania wersji pliku
OPENWIKI
[[sta it]] Show page J f O l d revisions I
| Recent changes
!
| Search
Differences T h i s s h o w s y o u the differences b e t w e e n the selected revision and the current version of the page.
Jviit ','•'
-v.iit
H
i
current
Line 2:
===== Dokutfliki for Joomla! =====
===== DokuTtfiki for Joomla! ===== + T h i s i s great 1 [[wiki:Doku¥iki]] is a standards [ [wiki:DokuWiki] ] is a standards compliant, simple to use [[wp>Wiki]], compliant, simple to use [[wp>Wiki]], mainly aimed at creating documentation mainly aimed at creating documentation of any kind. It is targeted at developer of any kind. It is targeted at teams, workgroups and small companies, developer team3, workgroups and small It has a simple but powerful companies. It has a simple but powerful [ [wiki: syntax] ] which makes sure the [ [wiki: syntax] ] which makes sure the datafiles remain readable outside the datafiles remain readable out3ide the Wiki and eases the creation of ¥iki and eases the creation of structured texts. Ail data is stored in structured texts. All data is stored in plain text files — no database is plain text files — no database is required. required. s t a r t . H 6 9 8 7 4 8 2 3 . t x t (13312207 views) • Last m o d i f i e d : 2008/10/30
j Show page j [ Old r e v i s i o n s j
01:32
| Index [ [ Back to top j
OpenWiki ma jednak kilka cech, które mogą sprawiać problemy operatorom adaptującym to rozszerzenie. Dla wielu użytkowników mylący może być brak przycisku New Page (Nowa strona). Ponieważ wszystkie strony muszą być ze sobą połączone, aby dodać nową, musisz najpierw stworzyć odnośnik na istniejącej stronie. Przykładowo nowe odwołanie, które należy wstawić w treść istniejącego artykułu, może wyglądać tak: [[joomlajumpstart]]
Po kliknięciu odnośnika zostanie wyświetlony ekran tworzenia nowej strony, co zilustrowano na rysunku 4.25. Rysunek 4.25. Kliknięcie odnośnika prowadzącego do nieistniejącej strony spowoduje wyświetlenie ekranu tworzenia nowej strony
OPEN WIKI
[[joomlajumpstart]] __ | Create this page | | Old revisions j [ Recent changes j Trace: »
| Search J
<
This topic does not exist yet Y o u ' v e f o l l o w e d a link t o a t o p i c t h a t d o e s n ' t e x i s t y e t . I f p e r m i s s i o n s allow, y o u m a y c r e a t e It b y u s i n g t h e c r e a t e t h i s page b u t t o n
Create this page
Old revisions
OpenWiki with Slimbox by
| Index
Back to top
| Powered by
Kilka ograniczeń OpenWiki: •
Wszystkie pliki kodowane sąjako UTF-8 — Dokumenty dostępne są tylko w formie zakodowanej w UTF-8, niezależnie od zestawu znaków ustawionego w Joomla!. Dlatego, niektóre artykuły napisane w innych językach niż angielski (np. inne pliki DocBook) mogą sprawiać problemy w systemie.
Rozdział 4. • Dodawanie i modyfikacja dostępnych rozszerzeń
•
Brak części administracyjnej — Z tego powodu systemem wiki nie można zarządzać jak zwyczajnym rozszerzeniem Joomla!, cała konfiguracja musi przebiegać z poziomu strony głównej.
•
Oddzielna wyszukiwarka — Artykuły OpenWiki nie są dostępne dla reszty systemu Joomla!, z tego powodu wymagają oddzielnej wyszukiwarki. Dlatego artykuły Joomla! są niewidoczne dla wyszukiwarki wiki, a artykuły wiki dla wyszukiwarki Joomla!.
133
Nriting Przedstawione na rysunku 4.26 rozszerzenie eWriting umożliwia dodawanie artykułów przez odwiedzających stronę. Rozszerzenie stworzono z myślą o stronach poświęconych fan fiction (na których umieszczane są autorskie romanse lub historie związane ze Star Trekiem). W interfejsie przewidziano możliwość dodawania obrazków i automatycznego przydzielania do kategorii. rsunek 4.26. trona
i n I h i i s e c t i o n vve h a v e J'! S t o n e s
i.zszerzenia Iniide The Taidis Stones Nriting, Categories a której tytkownicy mogą Mtnłtl O o c t i w Stfine* odawać własne oowiadania toth Doctor Storic,
{3)
(27)
.".¡iwii:;^
(3>
Powered by eWriting 1.2.1
Zanim umożliwisz dodawanie opowiadań, najpierw musisz określić kilka kategorii, do których mogą być przydzielane. Kategorie rozszerzenia eWriting przypominają kategorie Joomla!, można im przypisać obrazek i nadać opis. Po utworzeniu kategorii opowiadania można dodawać w interfejsie administracyjnym mb z poziomu strony głównej. Opowiadania zapisywane są w postaci rozdziałów i mogą być wprowadzane z klawiatury lub wysyłane w postaci plików tekstowych (.ixt) lub plików HTML (.htm albo .html) — istnieje jednak możliwość określenia dodatkowych typów plików w interfejsie administracyjnym. Na stronie głównej można też wstawić moduł, który wyświetla statystyki. W interfejsie administracyjnym można zarządzać dodanymi opowiadaniami, dołączać nowe i tworzyć rozdziały. Istnieje także możliwość dodawania obrazów do galerii użytkownika, integracji z rozszerzeniem Community Builder, Joomlaboard Forum lub systemami prywatnych wiadomości (PMS), takimi jak Missus lub MyPMSII.
134
Joomla!. Profesjonalne tworzenie stron W1NW
Twórcy e Writing są jednocześnie autorami rozszerzenia Missus, które dodaje możliwość wysyłania prywatnych wiadomości na stronie Joomla!. Wiadomości wysyłane między użytkownikami mogą zawierać załączniki. Rozszerzenie Missus możesz pobrać ze strony internetowej e Writing.
Implementacja ogłoszeń Wprowadzenie na stronie możliwości umieszczania ogłoszeń może być dobrodziejstwem dla Twoich użytkowników. Wielu ludzi myśli o eBayu jako głównym miejscu sprzedaży używanych przedmiotów, ale istnieją też strony, takie jak www.photo.net, które robią świetny interes, trafiając w niszę rynkową, której grupa odbiorców składa się ze specjalistów. W przypadku rynków niszowych osoby odwiedzające stronę należą do konkretnej, określonej grupy, co może zwiększyć dochody z wymiany. Oczywiście ogłoszenia nie muszą być ograniczone wyłącznie do sprzedaży produktów. Oferty usług, informacje o wydarzeniach, anonse towarzyskie itp. — wszystko to można umieścić jako ogłoszenie. Biura ogłoszeń nabrały nowego znaczenia w dobie internetu dzięki takim stronom jak cragslist1. Rozszerzenie Noah's Classifieds, przedstawione na rysunku 4.27, umożliwia tworzenie hierarchicznych kategorii bez ograniczenia liczby zagnieżdżeń, dołączanie zdjęć do ogłoszeń, , określanie dodatkowych pól dla wybranych kategorii, a także powiadomienia e-mailem. Rysunek 4.27.
Strona główna rozszerzenia Classifieds
1
Największa na świecie strona internetowa poświęcona publikacji ogłoszeń — p r z y p . tłum.
Rozdział 4. • Dodawanie i modyfikacja dostępnych rozszerzeń
135
Jeśli klikniesz odnośnik Home w menu Noah Classifieds, pojawi się opcja Create New Categon> (Utwór: nową kategorią). Następnie możesz ustawić parametry kategorii, aby umożliwić zwykłym użytkownikom dodawanie ogłoszeń. Wtedy, po wybraniu danej kategorii, zostanie wyświetlona opcja Submit Ad (Dodaj ogłoszenie). Za pomocą interfejsu administracyjnego, pokazanego na rysunku 4.28, można w pełni kontrolować rozszerzenie, np. zablokować daną kategorię (żeby nie można było dodawać do niej nowych ogłoszeń) lub przypisać dodatkowe pola dla danej kategorii. sunek 4.28. zęść iministracyjna ikietu 'assifieds
Expirât on properties N u m b e r of days the user must be informed about the e x p i r a t i o n before N u m b e r of times: the user is allow ed to pro ong h i s / h e r e x p i r e d ads
^
-
image up Maximum picture size in bytes
0
Maximum picture w i d t h in pixels
0
M a x i m u m picture height in pixels
0 Layout -ustomization
Menu points
0 Loger,.
01
0 Register
0Sh
a m
Bsu
0 Recent ads
0P
O
:
,
. ; ar ads
0i 13 Help 'Help" ¡ink destination Additional H E A D content
ngtt befon
i
Upewnij się, czy w sekcji ogłoszeń umieściłeś informację, że nie ponosisz odpowiedzialności za żadne transakcje zawarte za jej pośrednictwem. Dodatkowo umieść oświadczenie, że zastrzegasz sobie prawo do usunięcia dowolnego ogłoszenia z dowolnego powodu, jeśli w Twoim mniemaniu godzi ono w dobro strony. Doskonałym przykładem są „Terms of Use" („Warunki użycia") na stronie www.craigslist.org.
idawanie śledzenia wyników sportowych Dzięki rozszerzeniu JoomLeague, które zilustrowano na rysunku 4.29, możesz umieścić na stronie śledzenie wyników sportowych z różnych dyscyplin, np. piłki nożnej, baseballu, futbolu amerykańskiego itd. Możliwe jest śledzenie statystyk wybranych drużyn lub całej ligi. System punktów jest elastyczny, co pozwala na prowadzenie tabeli wyników prawie dla każdej dyscypliny. Istnieje też funkcja dodawania obrazków danej drużyny, np. zdjęć, logotypów, herbów itp.
136
Joomla!. Profesjonalne tworzenie stron W1NW
Rysunek 4.29.
Rozszerzenie JoomLeague pozwala śledzić wyniki z większości dyscyplin sportowych
S K l E I l i Quail-WM 2010 Spieltag auswählen: 04 •
E r g e b n i s s e 4. Spieltag ( 1 5 . 1 0 . 2 0 0 8 19.11.2008)
Home * Fussball-Forum * Credits
Gruppe 1
* Impressum
Mittwoch, 15. Oktober 2008 Ä
Malta
Ungarn
Portugal
0
Quali WM 2010
: 1 (0:1)
Gruppe 1
0: 0
H l Albanien
Gruppe 2 Platz
Mannschaft
1 '
Dänemark
Punkte
Spiele
7
i
G
U
V
Tore
Diff.
1 0
Gruppe 4 Gruppe 5
1 1
Ungarn
Gruppe 6
Albanien j^jft
Gruppe 3
Gruppe 7 Gruppe 8
Portugal
Gruppe 9 Schweden
1
2
0
2:1 ' Anmeldung
Malta
0
4
0:11
-11
Śledzenie wyników podzielone jest na projekty, co w praktyce opowiada danym ligom. Następnie określane są drużyny i gracze. Oprócz głównego komponentu odpowiedzialnego za śledzenie wyników pakiet zawiera także kilka modułów: •
Events Statistic Module (Statystyki wydarzeń) — Wyświetla listę eventtype dla wybranego projektu.
•
Next Match Module (Następny mecz) — Wyświetla następny mecz dla wybranej lub ulubionej drużyny.
•
Random Player Module (Losowy gracz) — Wyświetla losowego gracza dla wybranego projektu i wybranej drużyny. Ranking Module projektu.
(Ranking)
Przedstawia aktualne zestawienie dla wybranego
Results Module (Wyniki) — Przedstawia ostatnie wyniki dla wybranego projektu. Results Tab Module (Zakładki wyników) — Przedstawia ostatnie wyniki pogrupowane za pomocą JavaScriptu w trzy pojedyncze zakładki. Team Players Module (Gracze z drużyny) — Wyświetla listę graczy Twojej ulubionej drużyny według pozycji graczy. Navigation Menu Module (Nawigacja) — Dostarcza dodatkowego menu nawigacyjnego, które umożliwia szybki dostęp do zapisanych informacji.
Rozdział 4. • Dodawanie i modyfikacja dostępnych rozszerzeń
137
W części administracyjnej można skonfigurować miejsca docelowe dla poszczególnych pozycji menu. Z poziomu interfejsu administratora można w pełni skonfigurować system śledzenia wyników. Śledzić można według projektów, klubów, drużyn, graczy, pozycji graczy, wydarzeń i sędziów wydarzeń. Odwiedź stronę domową rozszerzenia, aby pobrać najnowszą wersję wraz kilkoma przykładowymi konfiguracjami. Część strony jest w języku niemieckim, dlatego znajomość tego języka ułatwi Ci pełne wykorzystanie możliwości rozszerzenia. Stronę domową możesz odwiedzić pod adresem: www.joomleague. de
idawanie gier hazardowych Jedną z propozycji poprawy atrakcyjności strony Joomla! są gry dla odwiedzający. Korzystając z pakietu rozszerzeń Joomla Casino, można dodać na stronie jedną z następujących gier: bakarat, jednoręki bandyta, video poker, ruletka i blackjack (zobacz rysunek 4.30). Joomla Casino to platforma stale poszerzana o nowe gry, dlatego do czasu, kiedy będziesz czytać tę książkę, mogła wzbogacić się o dodatkowe pozycje. sunek 4.30.
a Joomla isino blackjack a piękny terfejs ytkownika
Aby zainstalować grę, musisz najpierw dodać komponent bazowy o nazwie com_casinobase, który zawiera główną bibliotekę. Następnie możesz zainstalować jedną lub więcej gier. Gry dostępne są także w wersji Flash, co przekłada się na atrakcyjniejszy wygląd i żywszą rozgrywkę. Grą, która dostarcza najwięcej emocji, jest prawdopodobnie ruletka. Łatwo popaść w uzależnienie, dlatego może się okazać, że odwiedzający będą ciągle wracać na Twoją stronę.
138
Joomla!. Profesjonalne tworzenie stron W1NW
Obsługa quizow Quiz może przybrać wiele form — od prostej zagadki, po próbne podejście do SAT-u s . Dodatki typu quiz wykazują spory potencjał na polu edukacji — zarówno formalnej, jak i samodzielnej. Wyobraź sobie, że jesteś nauczycielem angielskiego, który umieścił na stronie internetowej prosty test z gramatyki, aby uczniowie mogli poćwiczyć przed głównym sprawdzianem. Inny przykład — prowadzisz stronę internetową promującą zalety Peru, a na niej umieszczasz prosty quiz dotyczący położenia głównych prowincji. Dzięki komponentowi Quiz 2.0, przedstawionemu na rysunku 4.31, możesz tworzyć quizy różnego rodzaju: od najprostszych, zawierających odpowiedzi tak lub nie albo prawda lub fałsz, po test wyboru (także wielokrotnego). Po ukończeniu quizu zostanie wyświetlony jego wynik wraz z informacją o powodzeniu lub niepowodzeniu, w zależności od ustawień w interfejsie administracyjnym. Rysunek 4.31.
Frage 1
Część użytkownika rozszerzenia Quiz 2.0 przedstawia aktualnie wybrany quiz
Question 3 of 4 Frage 3 i
m Antwort 1
2.
0 Antwutl 2
3.
tJ Antwort 3
4. S3 Antwort A Submit answer
Interfejs administracyjny Quiz 2.0 składa się z dwóch opcji: edycji quizow i edycji kategorii quizow. Edycja quizow umożliwia stworzenie nowego lub modyfikację istniejącego. Statystyki zawierające informacje o liczbie udanych lub nieudanych prób, łącznej liczbie quizow i punktacji dostępne są po wpisaniu adresu podobnego do: www.przyklad.com/index.php?
option=com_quiz&task=stats
Rozszerzenie umożliwia wyświetlanie quizow w różnych językach: angielskim, włoskim, francuskim, duńskim, norweskim i szwedzkim.
Podsumowanie Rozszerzenia to jeden z kluczowych powodów szerokiego wykorzystania Joomla!. Wśród prawie 4000 można znaleźć niemalże dowolną funkcję wzbogacającą system. W tym rozdziale przedstawiono różnorodne rozszerzenia, które wzbogacają Joomla!, a w szczególności:
s
SAT — ustandaryzowany test dla uczniów szkół średnich w USA, odpowiada polskiej maturze — p r z y p . tłum.
Rozdział 4. • Dodawanie i modyfikacja dostępnych rozszerzeń •
Udoskonalanie kluczowych funkcji strony WWW i rozbudowywanie interfejsu administracyjnego o bogatsze opcje wyszukiwania, specjalistyczne edytory WYSIWYG, zarządzanie plikami, automatyczne tworzenie mapy strony i wiele innych.
•
Wzbogacanie funkcjonalności związanych z prowadzeniem organizacji i e-commerce przez implementację sklepu internetowego, płatnych subskrypcji, zarządzania projektami, śledzenia kart pracy, prezentacji aukcji.
•
Poszerzanie zawartości strony Joomla! o dodatkowe media, np. podcasty i galerie zdjęć.
•
Ulepszanie komunikacji na stronie przez wprowadzenie systemu komentarzy, czata, księgi gości lub funkcjonalności wiki.
•
Dodawanie śledzenia wyników sportowych i gier, co zwiększa atrakcyjność.
139
Spośród setek dostępnych rozszerzeń masz sporą szansę znaleźć takie, które spełnią większość Twoich potrzeb. Jeśli jednak szukasz czegoś specjalnego, dotychczas niedostępnego, możesz napisać własne rozszerzenie. Pierwszy krok w tworzeniu rozszerzeń, począwszy od najprostszego typu — modułu, opisano w rozdziale 5.
140
Joomla!. Profesjonalne tworzenie stron W1NW
5 Tworzenie prostych rozszerzeń: moduły Chociaż z szerokiej palety dostępnych rozszerzeń Joomla! można często dobrać takie, które spełnia większość potrzeb, wiele stron wymaga stworzenia specjalnego kodu. Często oznacza to zaprogramowanie rozszerzenia, które wyświetla informacje w określony sposób. Taką rolę grają właśnie moduły, najprostsza forma rozszerzeń. Ich zadaniem jest głównie wyświetlanie informacji przy minimalnej interakcji z użytkownikiem. W systemie Joomla! moduły wykorzystywane są przede wszystkim do wyświetlania podstawowych elementów strony głównej, takich jak menu, bannery, pola wyszukiwania i sondy. Często wyświetlają też informacje związane z konkretnym komponentem. Przykładowo moduł search wyświetla pole, którego wartość przekazywana jest do komponentu search, a ten wykonuje zapytanie do bazy danych. Ponieważ funkcją modułów jest niemal wyłącznie wyświetlanie informacji, zarówno programowanie, jak i instalacja są bardzo proste. W tym rozdziale opisano proces tworzenia trzech modułów: •
Pierwszy wyświetla proste powitanie „Hello World!", stanowi solidną podstawę dalszego tworzenia modułów dowolnego typu.
•
Drugi moduł wykorzystuje specjalną tabelę w bazie danych do przechowywania życzeń świątecznych. Jeśli dany dzień odpowiada jednemu spośród świąt zapisanych w bazie, związane z nim życzenia zostaną wyświetlone na stronie.
•
Trzeci moduł pobiera i wyświetla informacje o kontaktach, które zostały wprowadzone do systemu za pośrednictwem komponentu Kontakty.
Podczas tworzenia powyższych modułów dowiesz się, w jaki sposób wykorzystywać interfejs administratora Joomla!, aby konfigurować moduły. Poznasz także zasadę działania modułów w ramach platformy Joomla!. Ponieważ programowanie modułów jest proste i nie wymaga dużych nakładów czasowych, wiele spośród specyficznych problemów daje się rozwiązać właśnie podczas tworzenia rozszerzenia tego typu, posiadającego określoną funkcjonalność.
142
Joomla!. Profesjonalne tworzenie stron W1NW
Tworzenie moduhi Hello World Konstruując nawet najprymitywniejszy moduł, będziesz miał szansę zrozumieć podstawy systemu modułów. Z tego powodu programowanie warto rozpocząć od prostego rozszerzenia wyświetlającego powitanie „Hello World!", a następnie zainstalować je w systemie. Moduł ten można wykorzystać jako podstawę późniejszych prac. Na początek musisz utworzyć folder, w którym będą przechowywane pliki modułu. Nazwa folderu powinna zawsze odpowiadać nazwie modułu. Częstą praktyką jest wykorzystywanie w nazwie przedrostka mod_, co stanowi jasny komunikat odnośnie do zawartości folderu. Utwórz folder o nazwie modhelloworld w głównym katalogu dysku twardego. Ostatni etap sprowadza się do utworzenia archiwum modułu, co umożliwia instalację w interfejsie administracyjnym. W folderze modhelloworld wprowadź poniższy kod:
stwórz plik modhelloworld.php
i za pomocą edytora tekstu
* * * * *
@version $Id: mod hellojoomla.php 5203 2007-03-27 0l:42:10Z Danr $ @package Joomla @copyright (C) 2007 Dan Rahmel, Wszystkie prawa zastrzeżone. @license GNU/GPL Prosty moduł wyświetlający powitanie Hello World
*/
/ / Zablokuj bezpośrednie uruchamianie definedi
'_JEXEC' ) or dieC 'Brak dostępu' ):
echo JText::_(
'Hello World!' ):
Powyższy moduł składa się z dwóch linii wykonywalnego kodu. Pierwsza powinna być umieszczana we wszystkich tworzonych rozszerzeniach, ponieważ stanowi gwarancję, że rozszerzenie uruchamiane jest przez system Joomla!, a nie z zewnątrz. Takie działanie zabezpiecza przed hakerami, którzy mogliby nadużyć rozszerzenia do celów, których nie planowałeś. W drugiej linii umieszczono komendę echo, która spowoduje wyświetlenie powitania. Zwróć uwagę, że komenda echo nie została użyta do wyświetlenia zwykłego tekstu. Powitanie jest najpierw przekazywane do metody _ (znak podkreślenia) klasy JText, a dopiero jej wynik zostaje wyświetlony. Klasa JText odpowiada za wyświetlanie tekstu w różnych językach, w zależności od zainstalowanych pakietów językowych. Jeśli tekst przekazany do metody _ dostępny jest w wersji, która odpowiada językowi ustawionemu na stronie, zostanie zwrócona przetłumaczona wersja. Załóżmy, że metoda została wywołana z parametrem o wartości „Hello". Załóżmy także, że hiszpański pakiet językowy zawiera tłumaczenie tego słowa, a na stronie zostało ustawione wyświetlanie komunikatów w języku hiszpańskim. W takiej sytuacji zwrócony tekst brzmiałby „Hola". Dlatego, jeśli aktualnie ustawiony pakiet językowy zawiera tłumaczenie powitania „Hello World!", zostanie ono wyświetlone właśnie w wybranym języku.
Jeśli nie uda się znaleźć odpowiedniego tłumaczenia, metoda zwróci po prostu przekazany tekst. Zwróć uwagę, że nie jest brana pod uwagę wielkość liter ani nie jest dostosowywana interpunkcja. Dobrym pomysłem jest wykorzystywanie klasy JText podczas wyświetlania komunikatów, ponieważ jeśli Twój moduł stanie się popularny, twórcy pakietów językowych będą w stanie przetłumaczyć go bez konieczności wprowadzania zmian w Twoim rozszerzeniu. Kolejnym krokiem jest utworzenie pliku deskryptora w formacie XML, w którym znajdują się informacje dla systemu Joomla! dotyczące instalacji modułu. Utwórz nowy plik pod nazwą modhelloworld.xml, a następnie w edytorze tekstu wprowadź poniższy kod: Hello WorldDan RahmelMarzec 2007(C) 2007 Dan Rahmel, Wszystkie prawa zastrzeżone. <1icense>GNU/GPL admi [email protected]www.joomlajumpstart.org l.0.0Moduł Hello Worldmod_hel1oworld.php
Plik deskryptora zawiera informacje „co" i „dokąd", niezbędne przy instalacji rozszerzenia Joomla!. Atrybut type znacznika wskazuje, że instalowane rozszerzenie jest modułem. Atrybut version informuje, że moduł przeznaczono do instalacji w Joomla! w wersji 1.5 i nowszych. Element określa nazwę modułu. Element przechowuje opis, który pojawi się na ekranie po zakończeniu instalacji. Element zawiera listę modułów plików przypisanych do modułu wskazywanego przez atrybut module. To już wszystko, co niezbędne jest do działania modułu Hello World. W odróżnieniu od szablonów modułów nie można po prostu skopiować do odpowiedniego folderu, trzeba je najpierw zarejestrować w systemie Joomla!. W tym celu musisz stworzyć archiwum ZIP zawierające folder z plikami modułu, które następnie zainstalujesz za pomocą opcji Rozszerzenia/Instaluj. Sposób tworzenia archiwum będzie różnić się w zależności od systemu operacyjnego. W przypadku Windowsa i MacOS-a wystarczy kliknąć prawym przyciskiem na danym folderze i wybrać opcję utworzenia archiwum 1 . Jeśli korzystasz z Linuksa, sprawdź w dokumentacji, który program lub narzędzie najlepiej wykorzystać do tego celu. Podczas rejestracji nowego modułu informacje o nim zapisywane są w tabeli josjnodu les w bazie danych. Przechowywane są: nazwa modułu, informacje na temat rejestracji, ustawienia parametrów, pozycja i kolejność modułu, a także czy moduł jest aktywny. W systemie Windows XP opcja tworzenia archiwum ZIP dostępna jest jako Wyślij do/Folder Skompresowany z menu kontekstowego — p r z y p . tłum.
144
Joomla!. Profesjonalne tworzenie stron W1NW
Zmiany w pliku XML przeprowadzone po instalacji nie wpłyną na informacje o module wyświetlane w interfejsie administratora (wyjątek stanowi definicja parametrów pobierana z pliku XML). Zmiana tych informacji wymaga bezpośredniej manipulacji w bazie danych MySQL lub ponownej instalacji modułu. Otwórz zaplecze Joomla! w oknie przeglądarki, a następnie uruchom opcję Rozszerzania/ Instalator. Wybierz archiwum ZIP zawierające moduł, kliknij przycisk Wczytaj plik & Instaluj, aby dodać nowy moduł w systemie. Po ukończeniu procesu instalacji kliknij opcję Rozszerzenia/Moduły, a na liście powinien pojawić się moduł zainstalowany przed chwilą, jak to przedstawiono na rysunku 5.1. Rysunek 5.1.
Moduł Hello World pojawił się na liście modułów
Na liście Moduły pojawiają się egzemplarze modułów dostępnych w systemie. Rozszerzenie stworzone przed chwiląjest właściwie typem modułu, to w pewnym sensie szablon, na podstawie którego można dodawać jeden lub więcej egzemplarzy. W prawej kolumnie pojawiają się informacje na temat typu modułu, nowy egzemplarz jest typu mod hel loworld. Możesz tworzyć dodatkowe egzemplarze tego modułu i innych, klikając przycisk Nowy, a następnie wybierając moduł konkretnego typu. Zastosowanie kilku egzemplarzy jednego modułu może mieć sens szczególnie wtedy, kiedy zmiana parametrów przekłada się na zmianę wyglądu lub funkcji. Przykładowo moduł modjnainmenu (Menu) wyświetla listę pozycji danego menu, ustawianego za pośrednictwem parametrów. W folderze /modules strony Joomla! znajdziesz katalog zawierający zainstalowany moduł. Podczas tworzenia nowego modułu zmiany należy wprowadzać w plikach źródłowych w tym katalogu. W systemie Windows ścieżka dostępu do nowego modułu przypomina poniższą: C:\Program Files\Apache mod hełłoworłd
Domyślnie nowe moduły są wyłączone. Kliknij czerwony X w kolumnie Włączony, aby włączyć moduł. Następnie powinieneś sprawdzić ustawienia modułu, aby upewnić się, czy pojawia się w odpowiednim miejscu. Domyślnie moduł pojawi się na pozycji left. W tym przypadku takie było nasze założenie, jednak należy sprawdzić, czy ustawienia są poprawne. Kliknij nazwę modułu na ekranie Moduły, aby otworzyć okno ustawień modułu. Sprawdź, czy moduł wyświetlany jest w odpowiednim miejscu (zobacz rysunek 5.2). Ustawienie parametru Kolejność wskazuje, że moduł zostanie wyświetlony jako ostatni element w lewym panelu. Ta informacja ułatwi zlokalizowanie rozszerzenia na stronie głównej. ¡unek 5.2.
ewnij się, moduł pojawi • na pozycji left
modJiellowoi Id
ii
Hello World
ł
i ?yi>is
Brak
Zaznaczone
B'fflj
•ill
Otwórz stronę główną Joomla! w przeglądarce. Panel zawierający Main Menu powinien wyświetlać także powitanie Hello World! (zobacz rysunek 5.3). Moduł Helto World jest kompletnym przykładem tworzenia i instalacji modułów. Możesz go wykorzystać jako podstawę dla bardziej zaawansowanych modułów. Powinieneś go teraz wyłączyć, aby nie zaśmiecał strony, ponieważ nie zawiera użytecznych funkcji.
worzenie modułu Świąteczne Życzenia Niewiele spośród prawdziwych modułów jest tak prostych, jak przykładowe rozszerzenie Hello World!. Często wymagany jest dostęp do bazy danych w celu pobrania informacji do wyświetlenia. Jednym z prostych (ale jednocześnie użytecznych) modułów jest rozszerzenie Świąteczne Życzenia. Zadaniem tego modułu jest sprawdzenie, czy w bazie danych zapisano jakieś święto, które odpowiada aktualnej dacie. Jeśli tak, automatycznie zostaną wyświetlone odpowiednie życzenia. W przeciwnym wypadku zostanie wyświetlony aktualny dzień i data.
146
Joomla!. Profesjonalne tworzenie stron W1NW
Rysunek 5.3. Powitanie Hello World! powinno pojawić się pod innymi modułami w lewym panelu
Hasło
Pamiętaj mnie 1 i Zaloguj i
administrators and managers who, together with a large range of Work Groups of dedicated community members have taken Joomla! tc^iew heights in its relatively s h o j ^ f T T h i s well-oiled machine is oftpfuopied but never surpassed. Jodimla! has some wonderfully taleaKra peopie taking Open Source corrupts to the forefront of industrydfandards. Joomla! 1.5 is a p forward and represents the ¡t exciting Joomla! release in the ' history of the project.
Only one edit window! How do create "Read more..."?
Hello World Hello World!
Więcej..
What is the FTP layer
joint lead-developer Johan Janssens. Johan, who's had a penchant for rum ever since the first "Pirate's of the Caribbean" movie screened, took the bait, mixed it with Cola, and here we are with our latest 1.5 release. It looks like pirate talk will figure quite a lot in future Joomla' development!
t
..,, .,
The FTP Layer allows file operations (such as installing Extensions or updating the main configuration file) without having to make all the folders arid files writable. This has been an issue on Linux and other Unix based platforms in respect of file permissions. This makes the site admin's life a lot easier and increases security of the site. You can check the write status of relevent folders by going to "HeIp->System Info" and then in the sub-menu to "Directory Permissions"
This is now implemented by inserting a Read more... tag (the button is located below the editor area) a dotted line appears in the edited text showing the split location for the Read more. .. A new Plugin takes care ofthe rest. It is worth mentioning that this does not have a negative effect on migrated data from older sites. The new implementation is fully backward compatible
Podobnie jak działo się to przy tworzeniu modułu Hello World, zaczniemy od stworzenia folderu w głównym katalogu dysku twardego. Nazwij folder /modjiolidaygreetings. Tak samo będzie też nazywać się folder wewnątrz katalogu /modules, po zainstalowaniu modułu w systemie Joomla!.
Tworzenie pliku deskryptora Wprowadź w edytorze tekstu poniższy kod, a następnie zapisz go pod nazwą mod greetings.xml w folderze /modjiolidaygreetings: <1nstal1 type="module" version="1.5.0"> Moduł Świąteczne ŻyczeniaDan RahmelMarzec 2007(C) 2007 Dan Rahmel. Wszystkie prawa zastrzeżone. <1icense>http://www.gnu.org/copyleft/gpl.html GNU/GPL [email protected]www.joomlajumpstart.orgl.0.0Moduł Świąteczne Życzenia wyświetla życzenia w zależności od aktualnej daty. Życzenia przechowywane są w tabeli jos_holidays, wpisy można dodawać za pośrednictwem interfejsu MySQL.mod_hoI idaygreetings.php
"Tekst, który pojawi się pod życzeniami świątecznymi." /> Tak
Porównując powyższy kod z utworzonym wcześniej, zauważysz pewnie, że w pliku pojawiły się definicje dwóch parametrów w sekcji . Te parametry (greeting i boldgreeting) stanowią przykład własnych ustawień modułów, dostępnych w większości przykładów. Po instalacji w systemie Joomla! wartość tych parametrów można zmieniać za pomocą opcji Moduły. Obecność modułów pozwala administratorowi zmienić wygląd modułu lub jego funkcje bez konieczności modyfikacji kodu źródłowego. Powyższym parametrom przypisano dwa typy: text i radio. Parametr typu text przyjmuje jako wartość ciąg znaków o maksymalnej długości 255. Wartość radio odpowiada wyborowi jednej spośród listy możliwości. W tym przypadku jest to wybór między nie (wartość 0) a tak (wartość 1). Wartość parametrów ustawia się za pomocą opcji Moduły, po kliknięciu modułu ich wartości są automatycznie zapisywane w bazie danych Joomla!. Parametry zdefiniowane w pliku deskryptora mogą przyjmować jeden z 21 dostępnych typów. System Joomla! ma wbudowane funkcje niezbędne do wyświetlania i zmiany ustawień tych parametrów. Lista typów zawiera m.in.: category, editors, filelist, folderlist, helpsites, imagelist, languages, list, menu,menuitem, password, radio, section, spacer, text i textarea.
vorzenie kodu modułu W edytorze tekstu wprowadź poniższy kod, a następnie zapisz go w pliku o nazwie mod_ holidaygreetings.php w folderze /mod holiday,greetings:
* * * * *
@version $Id: mod holidaygreetings.php 5203 2007-03-27 01:42:107, Daw $ ((¡¡package Joomla @copyright (C) 2007 Dan Rahmel, Wszystkie prawa zastrzeżone. @license GNU/GPL Modul wyświetlający życzenia świąteczne w odpowiednie dni.
*/
/ / Zablokuj bezpośrednie uruchamianie defined(
'_JEXEC' ) or die( 'Brak dostępu' ):
?>
Dzi si aj jest ' ); echot dateC'l, j F Y") . 'r. ' );
Powyższy kod jest bardziej skomplikowany niż składający się z jednej linii moduł Hello World. Pierwsza instrukcja wyświetla aktualną datę jako ograniczoną znacznikiem W następnej sekcji pobierane są wartości dwóch parametrów, które można ustawić w interfejsie administratora. Jeśli parametrowi boldgreeting przypisano wartość Tak, to zmiennym $bb i $be przypisywane są odpowiednie znaczniki HTML powodujące wyświetlenie tekstu pismem pogrubionym. W kolejnym kroku obecny dzień i obecny miesiąc zostają przypisywane do odpowiednich zmiennych wykorzystywanych w późniejszym etapie.
Później, po zakończeniu przygotowań, następuje główna część skryptu — pobranie z bazy danych listy świąt. Najpierw zmiennej Sdb przypisywana jest referencja do aktualnego obiektu bazy danych. Następnie tworzona jest zmienna, która przechowuje zapytanie pobierające życzenia dla obecnego dnia i miesiąca. Zwróć uwagę na fakt, że wartości pobrane z funkcji date() przesyłane są najpierw do funkcji intval (), zanim zostaną umieszczone w zapytaniu. Dzieje się tak, ponieważ funkcja date() zwraca numer miesiąca w postaci dwóch cyfr, uzupełniając go zerem (styczeń = 01). A ponieważ numery miesięcy przechowywane są w postaci liczb całkowitych w bazie danych (styczeń = 1), zastosowanie funkcji intval () usunie zbędny przedrostek, co zapobiegnie niejasnościom 2 .
Alternatywnym rozwiązaniem byłoby pobranie aktualnego dnia poprzez wywołanie date(" j") oraz aktualnego miesiąca poprzez wywołanie date( "n") — obie funkcje nie dodają zer wiodących, PHP: date - Manuał [online] http://piphp.net/date [dostęp 02.11.2008] — p r : y p . tłum.
Zapytanie jest zapisywane w obiekcie bazy danych, a metoda 1 oadOb jectLi st () uruchamia zapytanie i zwraca listę wartości. Funkcję countO zastosowano celem sprawdzenia, czy znaleziono jakieś święta odpowiadające obecnej dacie. W przeciwnym wypadku wyświetlane jest proste powitanie „Witaj!". Jeśli udało znaleźć się pasujące życzenia, zostają wyświetlone w postaci kolejnych paragrafów (o ile kilka świąt przypisano do jednej daty), a całość zwieńczana jest dopiskiem ustawianym jako parametr modułu. Po zakończeniu wprowadzania kodu stwórz archiwum ZIP lub TAR, zawierające folder z plikami modułu. Następnie zainstaluj stworzone przed chwilą archiwum za pomocą opcji Rozszerzenia/Instalator w interfejsie administratora. Jeśli instalacja zostanie zakończona powodzeniem, pojawi się stosowny komunikat z instrukcjami dotyczącymi korzystania z modułu — co przedstawiono na rysunku 5.4. ;unek 5.4. udanej talacji świetlana jest vartość pola scription •Iliku skryptora
Witivii-i
r.l-i.u
Altykuły
Komponenty
Rozszei zeni.i
il.łizędzi,i
Pomoc
vJ Rozszerzenia Instaluj
Komponenty
Moduły
Dodatki
Języki
Szablony
Instaluj Modni: Powodzenie
Moduł Świąteczne Życzenia w y ś wietla życzenia w zależności od aktualnej daty. Życzenia przechowywane są w tal» pośiednictwein interfejsu MySQL.
Wczytaj paczkę Plik pakietu:
FYseglądaj...
Wcsytaj plik & Instaluj
Instaluj z katalogu Katalog instalacyjny:
Instaluj
Instaluj z Sieci Podaj adres VWWVi
http://
Instaluj
Zanim jednak będzie można wstawić moduł na stronę, należy wprowadzić do bazy danych daty świąt wraz z odpowiednimi życzeniami, do których rozszerzenie może się odwoływać.
rorzenie tabeli i zapisywanie przykładowych danych Do stworzenia tabeli przechowującej życzenia możesz wykorzystać graficzny interfejs aplikacji MySQL Administrator. Jest to proste i szybkie rozwiązanie. Tabela powinna nosić nazwę jos_greetings i zawierać trzy kolumny id (klucz główny — primay key, pole typu integer z ustawionym atrybutem auto_increment), greeting (pole typu varchar), holidayMonth (pole typu integer) i holidayDay (pole typu integer).
150
Joomla!.
Profesjonalne tworzenie stron W1NW
Alternatywnym rozwiązaniem jest uruchomienie poniższego kodu SQL z wiersza poleceń: CREATE TABLE jos_greetings ( id int(10) unsigned NOT NULL auto_increment. greeting varchar(45) NOT NULL, holidayMonth int(10) unsigned NOT NULL, holidayDay int(lO) unsigned NOT NULL, PRIMARY KEY ('id')
):
Po utworzeniu tabeli wprowadź kilka przykładowych życzeń. W programie MySQL Administrator możesz to zrobić, klikając prawym przyciskiem tabelę i wybierając opcję Edit Table Data z menu kontekstowego. Nie zapomnij dodać także przykładowego wpisu dla obecnej daty, aby sprawdzić, czy moduł działa poprawnie.
Jeśli chciałbyś dodać przykładowe dane z poziomu wiersza poleceń, możesz użyć poniższego kodu, który dodaje wpisy dla najpopularniejszych świąt: INSERT INTO 'jos_greetings' ('id','greeting','holidayDay'.'holidayMonth') (1, 'Wesołych Świąt Bożego Narodzenia!'.25.12). (2. 'Szczęśliwego Nowego Roku'.1.1). (3, 'Wszystkim paniom, najlepsze życzenia',8.3):
VALUES
Korzystając z opcji Rozszerzenia/Instalator, zainstaluj archiwum zawierające moduł. Jeśli instalacja zakończy się powodzeniem, pojawi się stosowny komunikat.
Konfiguracja moduhl
W interfejsie administratora przejdź do opcji Moduły i kliknij pozycję Świąteczne Życzenia. W dolnej części strony znajdują się parametry modułu, które zdefiniowałeś w pliku XML. jak przedstawiono to na rysunku 5.5. Wprowadź własny dopisek i włącz opcję pogrubiania tekstu.
Warto rozważyć wyświetlanie modułu na pierwszej pozycji lewej kolumny — przed innymi modułami przypisanymi do pozycji left. Moduły wyświetlane na ekranie Moduły można filtrować za pomocą list rozwijalnych znajdujących się w górnej części strony. Wybierz pozycję left z drugiej listy, a spis modułów powinien zostać ograniczony tylko do tej pozycji. Następnie klikaj strzałkę w górę w kolumnie Kolejność, odpowiadającą modułowi Świąteczne Życzenia, dopóki nie pojawi się na samej górze (kolejność = 1), jak zilustrowano to na rysunku 5.6 Drugą możliwościąjest wprowadzenie liczby 0 w pole w kolumnie Kolejność i kliknięcie małej ikony dyskietki w nagłówku kolumny, co odpowiada funkcji Zapisz kolejność.
Po poprawnym wprowadzeniu zmian w konfiguracji modułu otwórz stronę główną Joomla! w przeglądarce. W lewej części strony powinny pojawić się życzenia, podobnie jak na rysunku 5.7.
W obecnej implementacji styl fontów określany jest w kodzie modułu. Dobrą praktyką jesl wyświetlanie elementów modułu z wykorzystaniem stylów zdefiniowanych w Joomla! (np. klasy moduł etable). Dzięki wykorzystaniu standardowych stylów wygląd modułu będzi komponował się z resztą strony.
¡unek 5.5. irowadź własny pisek i włącz cję pogrubiania (stu
sunek 5.6. 7ień kolejność Ddułów, y moduł Ziąteczne czenia był świetlany
Jeśli masz zamiar wykorzystać ten moduł na Twojej stronie, powinieneś dodać życzenia zarówno dla danego dnia świąt, jak i dla dnia przed świętami. Możesz także odpowiednio dostosować wpis do życzeń poprzedzających święta (np. dla Wigilii Świąt Bożego Narodzenia).
152
Joomla!. Profesjonalne tworzenie stron W1NW
Rysunek 5.7.
Na stronie głównej pojawią się życzenia
¿4 J o o m l a !
Joomla! 1.5 - 'Experience the Freedom! It has nevei easierto create your own dynamic Web site Manag content from the best CMS admin interface and in vii language you speak.
Szukej... Popular Wszystkim paniom, najlepsze życzenia Wesołego świętowania!
Home Joomla! Joomla! License Mo«« ahout sloomia* FAO The NewsWeb Links News Feeds
Content Layouts The Joomla! Commui i Welcome to Joomla! 1 Newsflash 4 • New ish ' 1 1
W e l c o m e to t h e F r o n t p a g e
Welcome to Joomla!
Joomla! is a free open source fiamewoik and content piii>iisliin
Ptwered try ¿4 J o o m l a r
; Joomlai provides an easy-to-use graphical user interface thai simplifies the management arid publishing of large volumes of c ontent including HTML, documents, and rich media. Joomla! is used by organisations of all sizes for Public Web sites,
Tworzenie modułu Kontakt z Nami Wiele narzędzi dołączonych do systemu Joomla! można rozszerzyć, aby spełniały założenia danej strony. Ponieważ wszystkie dane przechowywane są w centralnej bazie danych MySQL, bardzo łatwo jest napisać rozszerzenia, które pobierają i modyfikują dane Joomla!. Dodatkowo platforma Joomla! zawiera wbudowane funkcje niezbędne do komunikacji z bazą danych, które upraszczają i zabezpieczają cały proces. Dostęp do danych w bazie wymaga, w przypadku modułu i korzystania z funkcji platformy Joomla!, zaledwie kilku linii kodu. Przykładowo Joomla! zawiera komponent do zarządzania kontaktami, który pozwala na przyporządkowanie wpisów bezpośrednio zarejestrowanym użytkownikom. Możliwe jest także utworzenie kategorii grupującej informacje o kontaktach dostępnych publicznie. Te informacje mogą być automatycznie pobierane i wyświetlanie na stronie Kontakt z Nami. Za pomocą specjalnego modułu możliwe byłoby wyświetlenie tych informacji w dowolnym miejscu na stronie Joomla!. Zmiany wprowadzane w bazie danych są automatycznie odzwierciedlane na karcie Kontakt z Nami, ponieważ informacje przechowywane są w jednym miejscu. Pierwszym krokiem w tworzeniu takiego modułu jest określenie publicznej kategorii zawierającej kontakty. Wybierz pozycję Kategorie z menu Komponenty/Kontakty w interfejsie administratora. Domyślna instalacja Joomla! zawiera tylko jedną kategorię o nazwie Contacts. Kliknij przycisk Utwórz, aby dodać nową kategorię. Wprowadź parametry podobnie jak na rysunku 5.8. Upewnij się, że opcja Publikacja ustawiona jest na Tak, co pozwoli dodawać kontakty do tej kategorii. Kliknij przycisk Zapisz, aby zapisać nową kategorię w bazie danych Joomla!.
Nórz nową bliczną tegorię, której staną dodane ormacje kontaktach
M
Kategoria:
[ Zmień ]
Szczegóły Tytuł: Tehst zastępczy:
Publiczne kontakty Kontakty przypisane do tej kategorii będą pubi
Publik acja:
Nie
* Tak
Sekcja: brak Upoi z,idNov*<łnie:
0 (Contacts)
P o z i o m dostępu:
IsSRSSH
•
Zastrzeżony Specjalny
Gi afika: Położenie yiafiki:
- Wybierz grafiką Lewa Podgląd
Dostęp do bazy danych w rozszerzeniu Kontakt z Nami przypomina kod modułu Świąteczne Życzenia. Jednak w tym przypadku tabela, z której będą pobierane dane, istnieje już w systemie Joomla!. Wszystkie informacje o kontaktach przechowywane są w tabeli jos_contact_detai 1 s. Zwróć uwagę na fakt, że przechowywane są tutaj wszystkie kontakty — nie tylko publiczne, które powinien wyświetlać moduł. W kodzie rozszerzenia powinno wystąpić zapytanie do bazy danych, która pobiera wyłącznie kontakty przypisane do kategorii publicznej. Odpowiednie zapytanie wymaga znajomości pola category id kategorii publicznej. Na szczęście wartość pola nd można odczytać z listy kategorii. Po zapisaniu nowej kategorii pojawi się ona na liście. W prawej kolumnie widnieją wartości pola category id dla poszczególnych wpisów. Zanotuj numer odpowiadający kategorii, która ma być publiczna, jak pokazano na rysunku 5.9. sunek 5.9.
notuj wartość la ID dla vorzonej tegorli
Aby wyświetlić listę publicznych kontaktów, musisz najpierw wprowadzić dane użytkowników. Otwórz opcję Komponenty/Kontakty/Zarządzaj kontaktami, aby wyświetlić aktualną listę wpisów. Możesz utworzyć nowy wpis (zobacz rysunek 5.10) lub wybrać istniejący i przypisać go do publicznej kategorii. Po zakończeniu wprowadzania zmian kliknij przycisk Zapisz, aby zapisać w bazie danych informacje o kontakcie.
154
Joomla!. Profesjonalne tworzenie stron W1NW
Rysunek 5.10.
3
Utwórz nowy kontakt i przypisz go do kategorii publicznej
ff Kontakt: [Zmień]
Szczeyófy N azw*
Henryk Sienkiewicz
Tek«t z«słip«zy Publik acf
Nie
• Tak
_
K.Hegona Polecz 7. ( i z y t N o w n i k i v m
- Brak użytkowników 1 (Name)
Poziom dostępu
*
•
¡25SH3w Zastrzeżony Specjalny
m
1
Wszystkie niezbędne ustawienia zostały wprowadzone, dlatego można przejść do fazy implementacji modułu, aby wykorzystać przygotowane wcześniej informacje. Utwórz folder o nazwie mod contactus, w którym znajdzie się plik z kodem i plik deskryptora. W edytorze tekstu wprowadź poniższy kod i zapisz go pod nazwą w folderze mod contactus:
5203 2007-03-27
Struktura kodu w dużym stopniu przypomina moduł Świąteczne Życzenia. Dla tego rozszerzenia pierwszy znacznik
posiada przypisany atrybut stylu, który powoduje wyświetlenie obramowania wokół modułu. Po uruchomieniu modułu pobierana jest najpierw wartość parametru publiccat, która odpowiada wartości category id dla kategorii publicznej. Następnie pobierane są z bazy danych wszystkie kontakty zapisane w tabeli jos_contact_detai 1 s, z uwzględnieniem odpowiedniej wartości catid. Wynik zapisywany jest w postaci zmiennej $contacts. Jest to lista pozycji, które zostają kolejno wypisane, najpierw pojawi się imię i nazwisko, następnie pełniona funkcja, numer telefonu i adres e-mailowy. Jeśli nie znaleziono żadnych rekordów, na stronie pojawi się e-mailowy adres pomocy technicznej. Aby ukończyć moduł, należy skonstruować jeszcze plik deskryptora. Zapisz w folderze modułu pod nazwą mod_contactus.xml poniższy kod: Modul Kontakt z NamiDan RahmelMarch 2007(C) 2007 Dan Rahmel. Wszystkie prawa zastrzeżone. <1 i cense>http://www.gnu.org/copy1eft/gpl.html GNU/GPL admi n{ajooml a jumpstart ,org www. jooml a jumpstart. org l.0.0Modul Kontakt z Nami wyświetla informacje kontaktowe wpisów przyporządkowanych do publicznej kategorii. Id odpowiedniej kategorii można wprowadzić po wybraniu tego modułu w części Moduły. mod_contactus.php
Prawdopodobnie zauważyłeś, że pole zawiera wskazówki dotyczące konfiguracji. Wartość tego pola wyświetlana jest po poprawnym zakończeniu instalacji, dlatego dobrym rozwiązaniem jest umieszczanie w tym miejscu wskazówek dotyczących niezbędnej konfiguracji modułu. Dla modułu Kontakt z Nami został zdefiniowany pojedynczy parametr: publ i ccat. Jego wartość wykorzystywana jest w zapytaniu do bazy danych, która zwraca listę kontaktów przypisanych do kategorii publicznej. Jeśli wybór dotyczyłby zwykłych kategorii Joomla! (kategorii artykułów), typ parametru mógłby zostać ustawiony na category. W rezultacie system Joomla! automatycznie stworzyłby listę rozwijalną zawierającą listę dostępnych kategorii.
156
Joomla!. Profesjonalne tworzenie stron W1NW
Utwórz archiwum podobnie jak przy poprzednich modułach, a następnie zainstaluj je w systemie za pomocą opcji Rozszerzenia/Instalator. Jeśli moduł zostanie poprawnie zainstalowany, wybierz go na liście Moduły i ustaw parametr, aby jego wartość odpowiadała ID kategorii publicznej, które będzie wykorzystywane w zapytaniach do bazy danych.
Wybierz pozycję Kontakt z Nami na liście Moduły, aby otworzyć ekran edycji parametrów. Kliknij pole oznaczone ID publicznej kategorii kontaktów, a następnie wprowadź ID, które zapisałeś wcześniej, jak pokazano na rysunku 5.11. Rysunek 5.11.
Ustaw ID kategorii w parametrach modułu
Prefei ¿neje l))0
• P ai anteny modułu ID ubiieznej kiiteyofti kontaktó^J
Moduł Kontakt z Nami • Nie
Tak
Nie * Tak left
•
2::Main Menu
•
^ ^ ^
Zastrzeżony Specjalny 59 Moduł Kontakt z Nami wyświetla informacje kontaktowe wpisów przypisanych do publicznej kategorii. Id odpowiedniej kategorii można wprowadzić po wybraniu tego modułu w części Moduły.
Uruchom teraz stronę główną w przeglądarce. Powinieneś zobaczyć listę kontaktów przypisanych do kategorii publicznej, podobnie jak to jest na rysunku 5.12. Stworzony moduł stanowi doskonałą demonstrację dostępu do danych zapisanych w systemie Joomla!. Poświęć trochę czasu na przejrzenie tabel w bazie danych Joomla!, co pozwoli Ci określić miejsce przechowywania danych, które będą niezbędne przy implementacji danego modułu. Rysunek 5.12.
Informacje o kontaktach pojawią się w panelu na stronie głównej
E>ziiia,i jest Saturday, 8 March 2008r.
Latest N e w s
Wszystkim paniom, najlepsze życzenia
. J',M !.. • v A jrii-v to .Joornla! . Newsflash 4 ^ ^ .
Wesołego świętowania!
Popular
^ ^ ^
Kontakt z Nami
W e l c o m e to the F r o n t p a g e
Hewyk Sienkiewicz.
W e l c o m e to J o o m l a !
123 45 67, sr«riki ewi cz fg;p o lsovpisarze.pl
'i
• • Welcome lo Joomla' « What's New In 1 5'>
^ S1
Joomla! is afiee open source ft amewotk and content publishiug system designed foi quickly ci eating highly interactive multi-language Welt sites, online communities, media poitals. Nogs and eCoinmeice applications. 1
» Home * Joomla" * Joomla! License • Moi e about Joomla' » FAO • The News » Wel> Links • News Feeds
ISfMiBISIIllll I 1
F w e a i by . . . JOOmlQ! version l.s
i Joomla! provides an easy-to-use graphical user Mnterface thai simplifies the management arid publishing of large volumes of content including HTML, documents, and rich media. Joomla! is used by organisations of all sizes for Public Web sites, Intranets, and Ertranets and is supported bv a community of thousands of users
Wiscej.. >.> W e are Volunteers
& # ss
The Joomla' Core Team consists of volunteer developers, designers.
S t i c k to the C o d e !
#
To ensure this code release, Wilco Jansen resorted to sending rum to
Zsumowanie Spośród programowalnych rozszerzeń Joomla! moduły stanowią najprostsze i najłatwiejsze w implementacji rozwiązanie. Stworzenie modułu nie jest trywialne, jednak jego dystrybucja i instalacja, ze względu na zapisywanie w postaci archiwum ZIP, nie nastręczają trudności. Na stronie może pojawiać się dowolna liczba modułów, dlatego stosując moduły, można uzupełnić system Joomla! praktycznie o każdą pomniejszą funkcję. Jeśli jednak dane zastosowanie wymaga bardziej rozbudowanej interakcji z użytkownikiem, najlepszym rozwiązaniem jest stworzenie takiego komponentu, jak te, które opisano w rozdziale 6. W tym rozdziale przedstawiono proces tworzenia modułów, wyszczególniając poniższe etapy: •
Tworzenie modułu Hello World, stanowiącego podstawę bardziej złożonych rozszerzeń.
•
Implementacja modułu, który pobiera z bazy danych życzenia odpowiadające aktualnej dacie, a następnie wyświetla je na stronie.
•
Programowanie modułu, który wyświetla publiczne informacje o kontaktach, opartego na komponencie Joomla! do zarządzania kontaktami.
Moduły są najprostszą form rozszerzeń Joomla!. W rozdziale 6. znajdziesz informacje na temat tworzenia własnych komponentów. Programowanie komponentów stanowić będzie prawdopodobnie główną część pracy w zakresie profesjonalnego programowania Joomla!.
158
Joomla!. Profesjonalne tworzenie stron W1NW
6 Zaawansowane rozszerzenia: komponenty Dzięki wskazówkom umieszczonym w rozdziale 5 stworzyłeś kilka prostych rozszerzeń, poznając przy okazji podstawowe aspekty rozszerzalności systemu Joomla!. Programowanie tych kilku modułów ograniczało się do wykorzystania prostego edytora tekstu, ponieważ wprowadzany kod był nieskomplikowany i wcześniej sprawdzony. Profesjonalne programowanie wymaga jednak dużo większej kontroli nad projektem. Przykładowo stworzenie komponentu sklepu internetowego z kilkoma dołączonymi modułami wymaga koordynacji wielu plików, co często oznacza współpracę z innymi programistami. W tym rozdziale naświetlono proces tworzenia zaawansowanego rozszerzenia Joomla!. Do tego celu wykorzystasz profesjonalne środowisko programistyczne (Eclipse), system kontroli wersji (Subversion), a także automatyczną generację dokumentacji projektu (phpDocumentor). Będziesz miał okazję poznać wszystkie kolejne etapy programowania, co pozwoli Ci lepiej pojąć, jak wygląda tworzenie profesjonalnych, komercyjnych aplikacji Joomla!.
wygotowanie środowiska programistycznego Wskazówki w rozdziale 5. sugerowały wykorzystanie edytora tekstu do tworzenia i zapisywania plików źródłowych. Ta szybka i prowizoryczna metoda jest jednocześnie jedną z zalet tworzenia programów PHP, ponieważ nie jesteś zmuszony do korzystania ze złożonych, skomplikowanych zintegrowanych środowisk programistycznych (IDE — Integrated Development Environment). To spontaniczne podejście do procesu programowania sprawdza się w sytuacjach, kiedy musisz napisać prosty moduł lub wprowadzić niewielką zmianę. Jednakże dowolny, przynajmniej średniej wielkości (dotyczy to praktycznie każdego komponentu) projekt to zadanie, które można znacząco uprościć, stosując potężniejsze narzędzia programistyczne. Dodatkowo
160
Joomla!. Profesjonalne tworzenie stron W1NW
jeśli nad projektem pracuje grupa lub choćby dwie osoby, wykorzystanie profesjonalnycl" narzędzi może zadecydować o zakończeniu projektu o czasie i nieodkładaniu go w nieskończoność.
Mając to na uwadze, przykłady opisane w tym rozdziale zostaną stworzone z użyciem dwócł profesjonalnych narzędzi programistycznych. IDE o nazwie Eclipse posiada funkcjonalność daleko wykraczającą poza zwykły edytor tekstu. Organizacja pracy zorientowana jest m projekty, a architektura oparta na wtyczkach dodatkowo usprawnia konstrukcję oprogramowania Joomla!, ponieważ dostępne są rozszerzenia np. dla Subversion (SVN), kodu PHP XML i HTML. System kontroli wersji SVN usprawnia zespołową pracę nad kodem, a takżt umożliwia zarządzanie archiwum kodu źródłowego, nawet kiedy nad projektem pracuje tylkc jedna osoba. Systemy kontroli wersji to kluczowy element prawie wszystkich projektów wyjątkiem są tylko te najmniejsze. Możliwe, że korzystasz już ze środowiska programistycznego, które spełnia Twoje potrzeby, i nie masz zamiaru zmieniać go. Jeśli tak jest, to wspaniale. Znalezienie środowiska programistycznego spełniającego oczekiwania przypomina wyszukiwanie samochodu, któiy Ci odpowiada—jest to kwestia indywidualnego wyboru. Mimo wszystko warto przynajmniej pobieżnie zapoznać się z podrozdziałami, w których opisano Eclipse. Być może dzięki temu odkryjesz nowe sposoby wykorzystania obecnego IDE, o których wcześniej nie pomyślałeś.
Stosowanie systemu kontroli wersji SVN
System kontroli wersji to jedna z technologii, z których powinna korzystać jak najszersz; grupa programistów. Niestety, wielu ludzi nie dostrzega zalet płynących z zastosowania jej a firmy programistyczne często nie traktują tego jako obowiązku. Tym sposobem system} kontroli wersji pozostają niedoceniane. Głównym zadaniem takiego systemu jest prowadzenif archiwum kodu źródłowego i notowanie wszystkich zmian wprowadzonych w plikach. Zmiam wprowadzone w kodzie mogą być konsultowane, a w razie potrzeby istnieje możliwość przy wrócenia starszej wersji.
Jednym z najczęściej wykorzystywanych systemów kontroli wersji jest program Subversioi (SVN). SVN to zaawansowany program składający się z części serwerowej i części klienta co umożliwia zarządzanie projektem przez sieć podczas konstrukcji oprogramowania. Na< jednym projektem może pracować kilku programistów jednocześnie. System obsługujt wprowadzanie zmian, ma narzędzia do rozwiązywania konfliktów, jeśli pojawią się dwie istotnie różniące się wersje tego samego pliku. Istnieje popularniejszy od SVN system kontroli wersji— nazywa się Concurrent Versions System (CVS). SVN stworzono z myślą o zastąpieniu CVS, ponieważ wiele decyzji projektowych poprzednika narzucało permanentne ograniczenia. Pomimo wielu podstawowych wad CVS został w znaczącym stopniu rozwinięty, a jego popularność nie słabnie. Ja w codziennym użyciu preferuję CVS, głównie ze względu na archiwum starszych projektów stworzone w tym systemie. W przypadku Joomla! wiodącym rozwiązaniem jest jednak SVN, dlatego programiści Joomla! powinni rozważyć korzyści płynące z adaptacji akurat tego systemu kontroli wersji.
Poniżej wymieniono kilka częstych problemów, które napotkasz w czasie tworzenia aplikacji, oraz sposoby rozwiązania ich dzięki SVN: •
W kodzie źródłowym nowej wersji programu wprowadzono wiele zmian, po czym nagle okazuje się, że jedna z podstawowych funkcji przestała działać — a Ty nie masz pojęcia dlaczego. Za pomocą SVN możesz zbadać wcześniejsze wersje kodu, zobaczyć, jakie zmiany wprowadzono w danej części. W razie konieczności możesz przywrócić projekt do stanu, kiedy dana funkcja pracowała poprawnie, a następnie zdiagnozować problem lub określić różnice w działaniu nowej wersji.
•
Twój komputer zepsuł się, a Ty nie zrobiłeś kopii zapasowej. Ponieważ SVN jest systemem działającym na serwerze, często gra także rolę aplikacji archiwizującej, uruchamianej na innej maszynie. Wprowadzenie zmian jest bardzo proste, ponieważ polega to do kliknięciu prawym przyciskiem pliku lub folderu i wybraniu opcji „check in", aby zapisać zmiany. Jest to wygodny sposób tworzenia kopii zapasowych nawet dla leniwych programistów.
•
Wielu ludzi pracuje jednocześnie nad danym projektem, z tego powodu niezbędna jest koordynacja wysiłków i wprowadzanych zmian. Aplikacje podobne do SVN powstały, ponieważ programiści open source, pracujący o różnych porach, w różnych miejscach potrzebowali skutecznego sposobu wprowadzania zmian bez ryzyka uszkodzenia projektu.
•
Funkcja, która została usunięta kilka miesięcy temu, jest znów potrzebna. Nie musisz szukać wśród kopii zapasowych, aby odnaleźć właściwy plik, ponieważ zmiany wersji oznaczane są w SVN. Dzięki przeglądaniu wersji programu według dat lub nazw można łatwo i szybko przywrócić najnowszą wersję kodu, która zawierała wymaganą funkcję.
•
Minimalna wersja danej procedury uruchamiała się dużo sprawniej przed wprowadzeniem zmian, więc programista chce poddać jąrefaktoryzacji, biorąc za podstawę pierwszą implementację. Pobranie starej wersji pliku z systemu kontroli wersji jest trywialne.
•
Firma zamierza stworzyć nową wersję aplikacji, która wymaga znaczących zmian, jednocześnie starsza wersja musi nadal być wspierana, muszą pojawiać się uaktualnienia i poprawki błędów. SVN pozwala na eleganckie rozwiązanie tego problemu dzięki opcji „fork" 1 . Możliwe jest stworzenie nowej wersji niezależnie od starej i kontynuowanie prac jednocześnie nad obiema.
Kilka przykładów wymienionych wyżej świadczy o tym, jak zastosowanie systemu kontroli wersji może uratować sytuację. W powyższym opisie całkowicie pominięto bardziej znaczące aspekty, takie jak możliwość wglądu w historię ukończonych projektów lub rola materiału dowodowego w przypadku oskarżenia o kradzież kodu, jaką odgrywa solidna dokumentacja konstrukcji oprogramowania.
Rozwidlenie — przyp. tłum.
162
Joomla!. Profesjonalne tworzenie stron W1NW
Instalacja SVN System SVN można zainstalować na kilka sposobów. Jeśli preferujesz wiersz polecenia, możesz pobrać bazę systemu SVN z poniższej strony: http -.//subversion, tigris.org/ Jeśli wolisz interfejs graficzny, możesz skorzystać z jednej z poniższych implementacji: •
TortoiseSVN— Najpopularniejsza implementacja dla systemu Windows. TortoiseSVN (http://tortoisesvn.tigris.org) integruje się z Eksploratorem Windows, co pozwala na dostęp do wszystkich funkcji bezpośrednio z menu kontekstowego.
•
eSvn — Wersja programu Subversion napisana w oparciu o bibliotekę Qt, można ją znaleźć na stronie http://esvn.umputun.com.
•
JSVN— Kod proof-of-concept, implementacja klienta SVN w Java Swingu, którą można znaleźć na stronie http://jsvn.alternatecomputing.com.
•
kdesvn — Kolejny klient SVN dla środowiska KDE, dostępny na stronie www.alwins-world.de/wiki/programs/kdesvn.
m psvn.el— Interfejs SVN dla programu Emacs, dostępny na stronie www.xsteve. at/prg/emacs. •
QSvn — Kolejny klient SVN napisany w oparciu o bibliotekę Qt, dostępny na stronie www.anrichter.net/projects/qsvn/
•
RapidSVN— Wieloplatformowa (Linux, Windows, MacOS X) nakładka graficzna napisana w C++ z wykorzystaniem platformy wxWidgets, dostępna na stronie http://rapidsvn. tigris. org.
•
SCPlugin — Wtyczkę dla narzędzia Finder w systemie MacOS X można znaleźć na stronie http://scplugin.tigris.org.
m SmartSVN— Wieloplatformowy (Linux, Windows, MacOS X) klient SVN dostępny na stronie www.syntevo.com/smartsvn. Można na niej znaleźć dwie wersje, darmową — Foundation, i komercyjną Professional. Jest to implementacja SVN w Javie z wykorzystaniem biblioteki SVNKit. •
Subcommander — Wieloplatformowa (Linux, Windows, MacOS X) nakładka napisana w C++ z wykorzystaniem biblioteki Qt, dostępna na stronie http://subcommander. tigris. org.
•
svnX— Nakładka graficzna narzędzi tekstowych SVN dla MacOS X, dostępna na stronie www.lachoseinteractive.net/en/community/subversion/svnx.
•
tkSVN— Klient systemów SVN i CVS napisany w Tcl/Tk, dostępny na stronie www. twobarley corns, net/tkcvs.html.
•
WorkBench — Wieloplatformowe (napisane w oparciu o wxPython i pysvn) narzędzie, obiektowa implementacja biblioteki SVN w Pythonie, można znaleźć j ą na stronie http://pysvn.tigris.org.
ZigVersion — Komercyjny klient SVN dla Mac OS X, dostępny na stronie http://zigversion. com.
•
Syncro SYN Client — Wieloplatformowa nakładka, dostępna na stronie www. syncrosvnclient. com.
163
Jeśli dopiero zaczynasz, zalecana jest instalacja TortoiseSVN. W doskonały sposób integruje się z systemem operacyjnym i pozwala na dostęp do menu TortoiseSVN po kliknięciu prawym przyciskiem dowolnego pliku lub folderu. Pliki można uaktualniać i pobierać z repozytorium pojedynczym kliknięciem. TortoiseSVN można pobrać ze strony: http://tortoisesvn. tigris. org Proces instalacji przeprowadzany jest w prostym, trójkrokowym kreatorze. Po zainstalowaniu aplikacji dostęp do niej uzyskasz po kliknięciu prawym przyciskiem okna Eksploratora Windows. Jeśli nie zaznaczyłeś żadnych elementów, możesz nadal korzystać z funkcji programu, klikając menu Plik, wpisy programu pojawią się jako jedne z pierwszych na liście.
orzenie repozytorium SVN Każdy system kontroli wersji wymaga repozytorium — to miejsce przechowywania aktualnej kopii plików i kopii archiwalnych, które zostały zarejestrowane. Dla pojedynczego programisty funkcję repozytorium może spełniać zwykły folder na dysku twardym. Po utworzeniu folderu należy zarejestrować go w SVN jako repozytorium. System automatycznie umieści w nim pliki i foldery niezbędne do zarządzania archiwum. Utwórz folder o nazwie Repozytorium_SVN. Możesz umieścić go na dysku twardym komputera lub na przykład na dysku sieciowym, których kopie bezpieczeństwa tworzone są automatycznie. Jeśli zamiast tego wolałbyś uruchomić serwer SVN, odwiedź stronę SVN, na której bez problemu znajdziesz potrzebne wskazówki. Konfiguracja serwera SVN (zwłaszcza zagadnienia związane z bezpieczeństwem) wykracza poza ramy tej książki. Kliknij prawym przyciskiem stworzony przed chwilą folder i z menu kontekstowego wybierz TortoiseSYN/Create repositoiy here...(rysunek 6.1). Powinien pojawić się komunikat informujący o poprawnym utworzeniu repozytorium. ¡linek 6.1.
orzenie lozytorium nenu ntekstowego
g,
SVN Checkout... TortoiseSVN
> Bii
Otwórz za pomocą.. Wyślij do
Repc-browser
•
Create repository here
Utwórz skrót Usuń
[>
Import,.,
Wytnij Kopiuj
Export...
ij? ; ?
Settings Help About
Zmień nazwę Właściwości
Ponieważ SVN można zintegrować z wieloma środowiskami programistycznymi (a co najważniejsze, z Eclipse), będziesz mógł obsługiwać repozytorium bezpośrednio z poziomu IDE.
164
Joomla!. Profesjonalne tworzenie stron W1NW
Korzystanie z Eclipse Eclipse jest profesjonalnym systemem programistycznym, stworzonym przez IBM, a następnie przekazanym społeczności open source. Eclipse posiada kompletne IDE, a za pomocą wtyczki obsługuje w pełni programowanie w PHP. Praca z programem sprowadza się do zarządzania projektami, do których dołącza się pliki. Dla systemu Eclipse opracowano wtyczkę o nazwie Subclipse, która bezproblemowo łączy system kontroli wersji SVN ze środowiskiem programistycznym. Proste kliknięcie prawym przyciskiem myszy i wybór odpowiedniej opcji z menu pozwala uaktualnić repozytorium lub pobrać z niego najnowszą wersję projektu.
Pobieranie i instalacja EasyEclipse Zamiast samodzielnej instalacji Eclipse, a następnie wszystkich niezbędnych wtyczek warto rozważyć pobranie pakietu EasyEclipse for PHP. Instalator zawiera wszystkie wtyczki niezbędne w przypadku programowania w PHP, czyli także Subclipse. Na stronie internetowej EasyEclipse możesz znaleźć instalatory dla systemów Windows, MacOS X i Linux: www. easyeclipse. org Pakiet zajmuje sporo ponad 100 MB, dlatego najlepiej pobierać go na szybkim łączu. Instalacja składa się zaledwie z dwóch etapów: akceptacji warunków licencji i wybrania katalogu docelowego.
Konfiguracja Eclipse Przy pierwszym uruchamianiu Eclipse pojawi się okno z pytaniem o położenie folderu roboczego. Wybierz odpowiedni folder i zaznacz opcję Use this as the default, dzięki czemu wybrany folder będzie wykorzystywany przy kolejnych uruchomieniach. Uruchomienie Eclipse powoduje wyświetlenie ekranu powitalnego, jak to przedstawiono na rysunku 6.2.
Podstawy workbencha Środowisko programistyczne w systemie Eclipse nosi nazwę workbench. Główne okno workbencha przypomina to przedstawione na rysunku 6.3. Na wygląd ekranu wpływa aktualnie ustawiona perspektywa. Kontroluje ona, które okna (lub części — w terminologii systemu Eclipse) są wyświetlane i które zasoby dostępne. W lewym górnym rogu znajduje się pasek skrótów pozwalający na przełączanie między perspektywami, a także otwieranie kolejnych. Na pasku tytułu znajduje się informacja o aktualnie wyświetlanej perspektywie. Na rysunku 6.3 ustawiona jest perspektywa Resource.
rsunek 6.2. kran powitalny wiera opcje, yóre pomocą Ci ipoznać się interfejsem rogramu skutecznie niego korzystać
File Edit Navigate Search Project Run Window
g C*php Sj- Navigator
•#
Result View
Resource
«==•
Księga Gości
j qî: Outline An outline is not available,
TODO Dodać pole formularza dla adresu e-mail
Możesz utworzyć nowy projekt, korzystając z jednego z dostępnych szablonów (np. Java, Statyczna strona WWW, PHP, XML) powiązanych z typem projektu, który zostanie utworzony. Programując Joomla!, powinieneś wybrać projekt PHP. Zanim jednak utworzysz nowy projekt, warto rozważyć dodanie opcji automatycznego wstawiania we wszystkich plikach zabezpieczenia, które zapobiegnie wykonywaniu kodu spoza platformy Joomla!.
166
Joomla!. Profesjonalne tworzenie stron W1NW
Zmiana domyślnego szablonu PHP w celu dodania zabezpieczenia Joomla! pozwoli Ci lepiej zapoznać się z Eclipse. Wybierz opcję Preferences z menu Window. Ustawienia wyświetlane są w postaci drzewa, co widać na rysunku 6.4. Rozwiń węzeł PHPeclipse Web Development, a następnie PHP, kliknij pozycję Code Templates. Rysunek 6.4.
K
Ustawienia skategoryzowane i przedstawione są w formie drzewa
Preferences type filter text
Code Templates
$ Amateras ffl Ant ffi Coloring Editor EdipseUtilPlugins ® Help m HTML Tidy is Install/Update ffi Internet ffi Java 8 PHPeclipse Web Deve Browser Configur Browser Preview S PHP Code Assist Code Templat Formatter Help (WIN_3i HTTP Query Installed Inte Mark Occurre PHP Parser Spelling Task Tags Templates + PHP Fvtfirnal Tnn
Configure generated code and comments: Comments Ei Code Newly created HTML files
(
Import...
j
Export...
]
Export All.,.
Pattern:
3{date}
| * To change the template f o r t h i s g e n e r a t e d f i i * W i n d o w ~ P r e f e r e n c e s - P H P e c l i p s e - PHP - C o i f < > 0 Automatically add comments for new methods and types s
(does not apply to comments contained in the code patterns) Restore Defaults
Apply
W prawym panelu okna Preferences pojawi się lista dostępnych szablonów dla projektu tego typu. Wybierz pozycję New PHP files i kliknij przycisk Edit. Możesz teraz wprowadzić kod, który będzie dodawany do każdego nowego pliku. W tym przypadku wprowadź poniższy: // zablokuj bezpośrednie
uruchamianie
defined( '_JEXEC' ) or die( 'Brak dostępu' );
Kliknij przycisk OK, aby zapisać zmiany. Od tej chwili wszystkie pliki PHP utworzone w Eclipse będą zabezpieczone przed uruchamianiem spoza systemu Joomla!. Pakiet EasyEclipse zawiera wtyczka Subclipse. Jeśli jednak zainstalowałeś standardową wersję Eclipse, musisz samodzielnie pobrać i zainstalować Subclipse, aby dodać funkcję współpracy z systemem SVN. Subclipse można pobrać na stronie: http://subclipse.
tigris. org
Tworzenie komponentu Księgi Gości Tradycyjna aplikacja internetowa, która może służyć za przykład komponentu, to księga gości. Umożliwia ona zamieszczanie komentarzy przez użytkowników, które widoczne są następnie dla wszystkich odwiedzających stronę. Najczęściej takie wpisy zawierają komplementy pod
adresem prowadzącego stronę. Mogą jednak zawierać także sugestie ulepszeń, a także (oby jak najrzadziej) krytykę. W tym przypadku stworzysz komponent, który składa się z dwóch części: frontowej, umożliwiającej wyświetlanie wpisów w księdze gości oraz dodawanie nowych za pośrednictwem formularza, i zaplecza, gdzie można edytować istniejące wpisy. Większość komponentów składa się z dwóch części, z czego jedna funkcjonuje jako interfejs użytkownika, a druga umożliwia zarządzanie rozszerzeniem przez administratora. Najpierw utwórz projekt dla Księgi Gości w Eclipse, wybierając File/New/PHP Project. W kreatorze wprowadź nazwę projektu com_guestbook, jak zilustrowano to na rysunku 6.5. sunek 6.5.
wórz nowy ojekt PHP Eclipse nazwie >m_guestbook
N e w PHP project | PHP P r o j e c t Create a new PHP Project
Project name:
com_guestbook]
[jjjjj] Use default location
[
Finish
J [
Cancel
|
ihrona przed spamem Spam w księgach gości jest częstym problemem. Spamerzy wykorzystują automatyczne narzędzia, które wyszukują formularze księgi gości na stronach WWW po to, by zamieszczać niepożądane odnośniki. Takie działanie ma dwojakie skutki: po pierwsze, zwiększa liczbę odwiedzin reklamowanej strony, a po drugie, wpływa na pozycję na stronach wyników wyszukiwania, ponieważ roboty internetowe zliczają odnośniki do strony. Ochrona przed spamem w księdze gości sprowadza się do dopuszczania dodawania wpisów tylko przez zarejestrowanych użytkowników, a także usuwania, za pomocą wyrażeń regularnych, elementów HTML (czyli także odnośników), które pojawiłyby się na stronie. Jeśli jednak zamierzasz udostępnić dodawanie wpisów niezarejestrowanym użytkownikom, powinieneś wprowadzić zabezpieczenie CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart). CAPTCHA to obrazek zawierający zniekształcone litery i cyfry, które użytkownik poprawnie musi wprowadzić w pole tekstowe. Programy wysyłające spam nie są w stanie odczytać znaków z obrazka, co uniemożliwia dodawanie spamu.
168
Joomla!. Profesjonalne tworzenie stron W1NW
Biblioteki służące do generowania C A P T C H A dostępne są za darmo w internecie. Jeśli wprowadzisz CAPTCHA PHP w wyszukiwarce internetowej, znajdziesz wiele przykładowych kodów. W czasie gdy powstawała ta książka, jedną z darmowych bibliotek można było znaleźć na stronie www.cryptographp.com.
Część frontowa komponentu Funkcją części frontowej jest wyświetlanie informacji na stronie i interakcja z użytkownikiem. Ponieważ komponenty są bardziej skomplikowane od modułów, wiele rozszerzeń (np. komponent Polis) wykorzystuje moduł jako część frontową interfejsu. Stanowi to jednak pewne ograniczenie — szczególnie jeśli planujesz modyfikację danych przez użytkowników. W przypadku komponentu księgi gości warstwa prezentacji zawiera nie tylko aktualną listę wpisów, ale także formularz dodawania nowych komentarzy, który znajduje się poniżej, co przedstawiono na rysunku 6.6. Do części frontowej komponentu można uzyskać dostęp z poziomu menu. Rysunek 6.6.
Księga gości zawiera listę wpisów wraz z informacją, kto je tam umieścił
lESESSBB • Home • Joomla" Overview • Joomla" L i c e n s e • More about Joomla! * FAO * The N e w s • Web Links • N e w s Feeds • MojaK$ie*ja Gości
I
Na pewno h i j e s z c z e w i oce ł - Jan Kowalski Wspaniała strona tak trzymać! - J a n Kowalski
Formularz dodawania wpisu do księgi gości Wprowadź treść wiadomości:
Lokacja (opcjonalne) ( Dodaj wpis ]
Podczas konstrukcji kodu zauważysz pewnie, że wartości zmiennych pobierane są (z łańcucha żądania lub z danych wysłanych formularzy) za pomocą metody getVarO, zamiast tradycyjnych instrukcji PHP. Metoda getVarO stanowi warstwę zabezpieczeń, w której przebiega kontrola poprawności danych nadesłanych przez użytkownika. Dane przesyłane przez hakerów (takie jak próby ataków SQL Injection) są automatycznie wykrywane i usuwane. Zawsze używaj tej metody, aby w pełni wykorzystać zabezpieczenia wbudowane w platformę Joomla!. Aplikacje internetowe, które pobierają dane ze źródeł zewnętrznych, powinny zawierać zabezpieczenia przed atakami przez wstrzyknięcie (ang. injection). Najpopularniejszym typem takiego ataku jest SQL Injection. Polega on na wstawieniu kodu SQL do wykonywanego zapytania. Przykładowo formularz zawiera pole, w które użytkownik powinien wpisać swoje nazwisko. Jeśli haker wprowadzi zamiast tego ciąg znaków podobny do "kowalski; Select * from Tabel aHasel", wyśle formularz, a kod PHP wprowadzi po prostu wartość pola w zapytanie, kod SQL nadesłany przez hakera zostanie uruchomiony, a w rezultacie wyświetli się zawartość tabeli (w tym przypadku będzie to lista haseł). Więcej informacji na ten temat i innych zagadnień związanych z bezpieczeństwem znajdziesz w rozdziale 14.
rorzenie kodu części frontowej Projekt rozpoczynamy od zaprogramowania frontowej części komponentu. Księga gości będzie dostępna dla zarejestrowanych użytkowników, zadaniem komponentu jest wyświetlanie obecnych wpisów i umożliwianie użytkownikom dodawania nowych. Komponent został podzielony na dwie części, zawarte w funkcjach: addEntryO i display '-»•Guestbook (). Funkcja addEntryO zostaje uruchomiona w momencie, gdy użytkownik wyśle wypełniony formularz. Funkcja di spl ayGuestbook() wykonuje zapytanie do bazy danych i wyświetla listę wpisów z tabeli księgi gości. Pod listą wpisów dołączany jest formularz, który pozwala użytkownikom dodawać nowe komentarze. Zwróć uwagę, że w zapytaniu do bazy danych odwołanie do tabeli nosi nazwę # guestbook. W większości przypadków będzie to odpowiadać tabeli jos_guestbook, o ile użytkownik nie zmienił domyślnego przedrostka nazw tabeli. Jeśli przedrostek został zmieniony, obiekt baz danych automatycznie wprowadzi go w miejsce zapisu #_. Aby utworzyć nowy plik składowy komponentu, kliknij prawym przyciskiem nazwę projektu w oknie nawigacyjnym Eclipse i wybierz opcję New/PHP File. Ustaw nazwę pliku na guestbook.php i wprowadź poniższy kod:
* @version $Id: guestbook.php 5203 2007-06-15 02:45:14Z DanR $ * @copyright (C) 2007 Dan Rahmel, Wszystkie prawa zastrzeżone. * @package Księga gości * Komponent ten wyświetla listą wpisów w księdze gości i umożliwia dodawanie * nowych komentarzy przez zarejestrowanych użytkowników */ // Zablokuj bezpośredni dostęp defined!
'_JEXEC' ) or die ( Brak dostępu' );
// Sprawdź wartość parametru task i wywołaj odpowiednią funkcję switch( JRequest::getVar( case 'add': addEntryi): break: default:
}
'task' )) {
displayGuestbookO; break;
// Przetwórz dane z nadesłanego formularza function a d d E n t r y O {
// Pobierz referencję obiektu bazy danych $db =& JFactory::getDB0():
Od razu po zapisaniu pliku kod zostaje automatycznie zanalizowany, a środowisko zaktualizowane. Przykładowo w oknie Outline, po prawej stronie workbencha wyświetlana jest lista wszystkich funkcji i metod zdefiniowanych w pliku, co przedstawiono na rysunku 6.7. Wpisy na tej liście mają postać odnośników, więc jeśli klikniesz któryś z nich, zostaniesz przeniesiony do odpowiedniego miejsca w oknie z kodem źródłowym. Kliknij funkcję displayGuestbook(), a w oknie edytora zostanie podświetlona odpowiednia funkcja. Zwróć uwagę, że po prawej stronie nagłówka funkcji znajduje się małe kółko ze znakiem minusa ( - ) . Jeśli klikniesz je, kod funkcji zostanie ukryty, a w miejsce minusa pojawi się plus (+). Możliwość ukrywania części kodu ułatwia zarządzanie dużymi plikami w Eclipse. usiinek 6.7.
• PHP - guestbook.php - EasyEclipie for PHP
unkcje i metody awarie w pliku 'yświetlane są ' oknie Outline o prawej stronie
File Edit Navigate Search Project PHP/Apache Run Window Help - JJ i i
S~J i «SB* PHP I t(b Resource
«
MIL
& J P Księga gości X .project IS* admin.guestbook.php •jSj guestbook. php x guestbook. xml 0 install.sql Cl i inin^tflll.snl !. Outline :
1% « xs
'Brak dostępu' ) ;
adz
paramet getVar(
o dp o
itch( ¿Request case ' a d d ' : addEntry(); break; default : displayGuestbook() break;
addEntry() displayGuestbook() Problems Console Bookmarks Tasks !: 1 items • 5 Description TODO Dodać do formularza pole do wprowadzania adr...
Resource
zęść administracyjna komponentu Części administracyjnej przypisano trzy scenariusze. Funkcja dl spl ayEntri es() wyświetli tabelę zawierającą listę wszystkich wpisów z tabeli księgi gości. Obok każdego wpisu pojawia się odnośnik, który umożliwia jego edycję. Kliknięcie odnośnika powoduje ponowne wywołanie komponentu, tym razem jednak z parametrem task w ciągu żądania ustawionym na edit. Spowoduje to uruchomienie funkcji editEntryO prezentującej formularz, którego pola odpowiadają wartością wybranemu wpisowi. Po wprowadzeniu zmian administrator klika przycisk Zapisz, aby zapisać zmiany, co skutkuje wywołaniem funkcji updateEntry(), która wprowadza zmiany w tabeli.
172
Joomla!. Profesjonalne tworzenie stron W1NW Utwórz nowy plik PHP w środowisku Eclipse i nazwij go admin.guestbook.php. zawiera część administracyjną komponentu, wprowadź poniższy kod:
Plik ten
bezpośredni
defined(
'_JEXEC' ) or die ( 'Brak dostępu' );
dodawanie
dostęp
// Sprawdź wartość parametru task i wywołaj odpowiednią switch( JRequest::getVar( 'task' )) { case 'edit': editEntryi); break: case 'update': updateEntry(): break; default:
funkcję
displayEntriesO; break;
} // Zapisz dane pobrane z formularza function updateEntry() { // Ustaw tytuł w interfejsie administratora JToolBarHelper::title( JText::_( 'Uaktualnianie wpisu w księdze gości' ). 'addedit.png' ); // Pobierz
iinsertFields = "UPDATE # _ g u e s t b o o k " . " SET message= " . SfldMessage . ". " . " location»" .ifldLocation . " WHERE id = " . ifldlD ; $db->setQuery( iinsertFields. 0): $db->'query(); echo "
// Wyświetl listę wpisów z księgi gości function displayEntriesO { // Ustaw tytuł w interfejsie administratora JToolBarHelper::title( JText::_( 'Wpisy w księdze gości' ). 'addedit.png' ):
Rozdział 6. • Zaawansowane rozszerzenia: komponenty // Wykonaj zapytanie i pobierz listę wpisów $db =& JFactory::getDB0(); iquery = "SELECT a.id, a.message, a.created. a.created_by, u.name" . " FROM #
guestbook AS a" .
" LEFT JOIN #
users AS u ON u.id=a.created_by" .
" ORDER BY created DESC"; $db->setQuery( iquery. 0. 10 ): Srows = Sdb->loadObjectList(); ?>
Kliknij treść wpisu w tabeli, aby przejść do ekranu edycji,
":
function e d i t E n t r y O { JToolBarHelper::title( JText::_(
'Edycja wpisu księgi gości' ), 'addedit.png' ):
$db =& JFactory::getDB0(): iquery = "SELECT a.id. a.message, a.created, a.created_by, a.location" . " FROM # guestbook AS a" . " WHERE a.id = " . JRequest::getVar( $db->setQuery( iquery. 0, 10 ); if (irows = $db->loadObjectList()) {
'id' ):
} ?>
Zapisz plik, kod zostanie automatycznie przeanalizowany, a w oknie Outline pojawi się rezultat, lista metod i funkcji.
Plik deskryptora Plik deskryptora tego komponentu jest zdecydowanie bardziej skomplikowany niż ten dla modułu Hello World. Definicje umieszczone w pliku powodują instalację plików zarówno części frontowej, jak i zaplecza. Ponieważ interfejs Eclipse nie zawiera opcji do tworzenia pliku XML, wybierz File/New/File selection. W oknie New File wprowadź guestbook.xml jako nazwę pliku. Następnie wprowadź poniższy kod: GuestbookDan Rahmell.0.0Wyświetla listę wpisów z księgi gości wraz z formularzem dodawania nowych komentarzy przez zarejestrowanych
Po zapisaniu pliku w oknie Outline pojawi się schemat XML, jak zilustrowano to na rysunku 6.8. Kliknięcie któregoś z elementów spowoduje jego podświetlenie w oknie edytora. Eclipse obsługuje format XML, więc jeśli klikniesz prawym przyciskiem okno edytora, w menu kontekstowym pojawi się opcja Validate. Wybranie tej opcji spowoduje walidację pliku XML i zaznaczenie błędów w pliku małymi czerwonymi ikonami na lewym marginesie. r
łsunek 6.8.
•
1
t
chemat XML anego pliku yświetlany jest ' oknie Outline
Resource
File
Edit '
i
•
—
—
— —
•
• •
•"'•'•—-——
,,u
g u e s t b o o k . x m l - Easy Eclipse f o r P H P
Source
Navigate
Search
.„,
Project
;
%
Navigator ' <1
Result View 3
%
- i tf? Księga Gości K .project
® :
&
Run
XML
(M
.
E Window
-
ê
5
V
'E): x*guestbook.xml ÎZ • i " G stall version."" 1.a u. ^ *1 - - ' i n Guestbook-/
[ej filename component=com_guestbook ® ie] install iSi jej uninstall % ( f j administration -
£ [ej filename component=admin.guestbook
B<
|ej filename
>
i « j filename
Design ! Source 1 Tasks
,/| X
PHP Browser
^
D
I
1 items v
!
Description
Resource
Path
TODO Dodać pole formularza dla adresu e-mail
>
Jjjg »
">
*
Plik deskryptora XML różni się od poprzednich przykładów, ponieważ zawiera odwołania do dwóch plików SQL, które tworzą tabelę # guestbook podczas instalacji i oraz usuwają podczas deinstalacji komponentu. Musisz stworzyć te dwa pliki i dołączyć je do archiwum. Utwórz nowy plik o nazwie install.sql i wprowadź do niego poniższy kod: CREATE TABLE IF NOT EXISTS
'#_guestbook'
C i d ' INTEGER UNSIGNED NOT NULL A U T O J N C R E M E N T . "message' text NOT NULL. 'created_by' INTEGER UNSIGNED NOT NULL, 'location' VARCHAR(45), 'created' TIMESTAMP NOT NULL, 'userip' V A R C H A R Ü 6 ) , PRIMARY KEY('id'))
Wprowadź następujący kod w nowym pliku o nazwie uninstall.sqh DROP TABLE IF EXISTS
'#_guestbook'
176
Joomla!. Profesjonalne tworzenie stron W1NW
Tworzenie archiwum Twój projekt jest teraz gotowy, możesz stworzyć archiwum, które posłuży do instalacji w systemie Joomla!. Eclipse posiada nawet taką funkcję! W oknie nawigacyjnym kliknij prawym przyciskiem projekt com_guestbook i wybierz opcję Export... Zostanie wyświetlone okno eksportu projektu, co zilustrowano na rysunku 6.9. Rozwiń kategorię General, wybierz opcję Archive File i kliknij przycisk Next. Rysunek 6.9.
Okno eksportu zawiera opcję tworzenia archiwum ZIP z plikami projektu
Select Export resources to an archive file on the local file system.
Okno tworzenia archiwum ma kilka parametrów. Na liście wyboru powinien być zaznaczony Twój projekt, a w prawym panelu wszystkie pliki do niego należące. O ile nie chcesz wykluczyć któregoś z plików (nikomu nie zaszkodzi jego obecność), domyślne ustawienia są odpowiednie. Pozostaw niezmienione domyślne ustawienia Save in zip format i Create directory structure for files. W pole tekstowe To archive file wprowadź ścieżkę, za pomocą której zostanie utworzone archiwum, możesz się także posłużyć przyciskiem Browse. Wprowadź nazwę archiwum com_guestbook.zip i kliknij przycisk Finish. Eclipse utworzy archiwum i zapisze je w wybranym miejscu.
Instalacja komponentu Otwórz opcję Rozszerzenia w interfejsie administratora Joomla! i zainstaluj komponenty. Archiwum utworzone w programie Eclipse jest poprawnie odczytywane przez platformę Joomla!, a pliki kopiowane są w odpowiednie miejsce. Jeden plik zostanie umieszczony w folderze components, a plik deskryptora i część administracyjna zostaną zapisane w folderze administrator\components. W przyszłości możesz wprowadzać zmiany bezpośrednio w plikach umieszczonych w tych folderach, o ile testowanie wymaga wyłącznie odświeżenia okna przeglądarki.
Jeśli zostanie wyświetlony komunikat o poprawnej instalacji, w menu Komponenty powinien pojawić się wpis Guestbook1, jak przedstawiono to na rysunku 6.10. Na razie nie ma potrzeby korzystania z tej opcji, ponieważ księga gości nie zawiera jeszcze żadnych wpisów. sunek 6.10. menu mponenty jawi się wpis lestbook, iry łączy :.zęścią 'ministracyjną ięgi gości
j/Velconie to JoontU! orjtjed tn llseis azyta i.Hipa
Poprzednia
Mieni
,
Wytoyiif
listrator
Po|>lll.ll Recent .Killed Anicie« Menu Stats
Utwórz nową pozycję w Main Menu, która łączy z komponentem Guestbook. Po wyświetleniu listy dostępnych komponentów wybierz pozycję Guestbook. Następnie na ekranie parametrów wprowadź nazwę Moja księga gości. Ze względów bezpieczeństwa upewnij się, czy pozycja będzie dostępna wyłącznie dla zarejestrowanych użytkowników — pomoże Ci w tym rysunek 6.11. sunek 6.11.
t
11
Pozycja menu:
[utwórz]
łyp pozycji menu
:
I Zmień typ 1
Guestbook
P.ir
Wyświetla listę wpisów z księgi gości, wraz z formularzem dodawania nowych komentarzy przez zarejestrowanych użytkowników. Szczegóły pozycji menu Tytłifc Moja Księga Gości Tekst zastępczy: Łącze: index ,php?oplion=com_guestbook Wyświetlaj w: Main Menu
v
a.
lladi zedna poayeja:
Joomla! Overview •$! - What's New in 1.5? More about Joomla! The News Web Links News Feeds Publikacja: O Nie
¿fr ^ ^ **
<3 Tak
Kolejność: Nowa pozycja znajdzie si^*nTońcu. Po zapisaniu można zmienić kolejność. Poziom dostępu: Powszechny Specjalny
'odczas tłumaczenia tej książki przyjęto konwencję tłumaczenia nazw rozszerzeń, ale zachowywania iryginalnych nazw plików. W przypadku komponentów Joomla! te dwa założenia wykluczają się, »onieważ przy instalacji pliki komponentu (dla modułów nie ma tego problemu) kopiowane są do katalogu ;om_nazwakomponentu, dlatego komponent Księga Gości będzie w części administracyjnej nosić oryginalną lazwę Guestbook —przyp. tłum.
178
Joomla!. Profesjonalne tworzenie stron W1NW
Aby przetestować księgę gości, otwórz stronę Joomla! w przeglądarce i kliknij odnośnik Moja księga gości. Na ekranie nie pojawią się żadne wpisy, tylko formularz dodawania nowego. Wprowadź wiadomość, podobnie jak zilustrowano to na rysunku 6.12, a następnie kliknij przycisk Dodaj wpis, aby zachować j ą w systemie. N.i p e w n o tu j e s z c z e w i ó c e I - J a n Kowalski
Rysunek 6.12. Wprowadź wiadomość w formularzu księgi gości
W s p a n i a ł a stroii.it.ik t i z y n t a ć ! - J a n Kowalski
Formularz dodawania wpisu do księgi gości Wprowadź treść wiadomości.
Lokacla (opcjonalne) D o d a j wpis
Na ekranie pojawi się potwierdzenie wraz z linkiem kierującym z powrotem do księgi gości. Kliknij go, aby wyświetlić listę wpisów. Teraz, kiedy w tabeli # guestbook znajdują się już jakieś wpisy, możesz przejść do części administracyjnej. Wybierz pozycję Księga Gości z menu Komponenty. Każdy wiersz tabeli odpowiada jednemu wpisowi w księdze gości, co pokazano na rysunku 6.13. Rysunek 6.13. W części administracyjnej zostanie wyświetlona lista wszystkich wpisów w księdze gości
Wpisy w księdze gości !t> W|>i&u
Wpis
2
Na pewno tu jeszcze wrócę )
1
Wspaniaja strona tak trzymać!
Kliknij tieść wpisu w tabeli. aby przejść do eki,11111 edycji.
Około 200 znaków każdego wpisu wyświetlanych jest w postaci odnośnika. Jego kliknięcie spowoduje wyświetlenie formularza edycji wpisu — co zilustrowano na rysunku 6.14. Rysunek 6.14. Kliknięcie odnośnika w tabeli spowoduje wyświetlenie formularza edycji danego wpisu
Edycja wpisu księgi gości W p r o w a d ź treść wiadomości: Ma pewno t u jeszcze wrócę :-)
Lokacja (opcjonalnie): Zapisz smiany
Zmiany można wprowadzić do bazy danych, klikając przycisk Zapisz zmiany. Ze względów bezpieczeństwa, a także dla wygody praktycznie wszystkie znaki, oprócz liter, cyfr i podstawowej interpunkcji, są usuwane z wiadomości dodawanych przez użytkowników części
frontowej. Część administracyjna nie ma takich zabezpieczeń. Pozwala to wstawiać dodatkowe elementy użytkownikom posiadającym prawa administratora. Komponent Księga gości składa się z części frontowej i administracyjnej, tworzy własną tabelę do przechowywania danych, a także przeprowadza na niej różne operacje (pobieranie, wstawianie, uaktualnianie). Te cechy sprawiają, że przykładowy komponent stanowi doskonałą podstawę dla kolejnych rozszerzeń zorientowanych na komunikację z bazą danych.
orzystanie z phpDocumentor Jednym z aspektów konstrukcji oprogramowania, którym programiści poświęcają najmniej czasu, jest tworzenie dokumentacji. Proces tworzenia i uaktualniania dokumentacji wraz z rozwojem aplikacji może być nudny i męczący. Brak dokumentacji przekłada się jednak na trudności w zarządzaniu kodem i jego dalszym rozwijaniu. Program phpDocumentor został stworzony, aby ograniczyć ten problem. Jest to aplikacja open source, która umożliwia programistom umieszczanie podstawowej dokumentacji, a także informacji na temat struktury aplikacji bezpośrednio w plikach źródłowych. Program analizuje wszystkie pliki źródłowe i zbiera informacje, z których następnie tworzy dokumentację. Możliwe jest utworzenie dokumentacji w takich formatach, jak HTML, PDF, CHM (skompilowany HTML) i XML. Ponieważ generowanie dokumentacji jest zautomatyzowane, aplikację phpDocumentor można uruchomić w dowolnym momencie, aby utworzyć najbardziej aktualną dokumentację danego projektu. Oznacza to, że dokumentacja może odwoływać się zawsze do stanu bieżącego, a słabo udokumentowane fragmenty kodu można łatwo zidentyfikować na podstawie przeglądu (dzięki czemu wiadomo, gdzie uzupełnić brakujące informacje).
stalacja Instalacja programu phpDocumentor na serwerze WWW jest wyjątkowo prosta. Program nie wymaga dostępu do bazy danych ani żadnych technologii renderowania, dlatego można go używać na dowolnym serwerze z obsługą PHP. Pierwszym krokiem jest pobranie archiwum zawierającego najnowszą wersję z serwisu SourceForge. Odpowiedni odnośnik znajduje się na stronie phpDocumentor, którą znajdziesz pod adresem: http: //www.phpdoc. org Następnie należy umieścić zawartość archiwum na serwerze WWW. Zwróć uwagę, aby było to miejsce publicznie niedostępne, ponieważ phpDocumentor nie jest bezpieczną aplikacją. Na moim serwerze testowym umieściłem program w folderze phpdoc w głównym katalogu serwera WWW. Dostęp do aplikacji odbywa się wtedy po wprowadzeniu poniższego adresu: http://localhost/phpdoc
180
Joomla!. Profesjonalne tworzenie stron W1NW Zostanie wyświetlony ekran powitalny zawierający kilka menu (Introduction, Config, Files, Outpuł itd.). Pojawia się także aktualnie wybrany katalog i stan aplikacji. Zazwyczaj będzie on brzmiał „Awaiting your command" („Czekam na rozkaz"). W tym rozdziale obsługa phpDocumentor została ograniczona do interfejsu strony WWW. Istnieje jednak możliwość uruchamiania aplikacji z wiersza poleceń. Jeśli zdecydujesz się na tę drugą opcję, warto rozważyć zastosowanie instalatora Pear, który ułatwia proces przygotowania aplikacji.
Wstawianie sekcji DocBlock w kodzie źródłowym Prawdopodobnie zauważyłeś, że kody źródłowe w tej książce rozpoczynają się komentarzami w stylu C++, które przypominają poniższe: *
*/
Powyższa sekcja komentarza nosi nazwę DocBlock, jest odczytywana i wykorzystywana przez program phpDocumentor przy tworzeniu dokumentacji kodu. Aby była ona kompletna, podobne sekcje powinny być wstawiane przed wszystkimi funkcjami, klasami, metodami i procedurami. Organizacja dokumentacji opiera się na podziale na pakiet (ang. package). Pakiet jest pojęciem zbiorczym dla grupy klas, metod i funkcji. Za pomocą znacznika @package możesz oznaczyć miejsce wystąpienia pakietu nadrzędnego. Pakiety podrzędne z kolei można opisywać znacznikiem @subpackage. Poniżej umieszczono fragment kodu źródłowego systemu Joomla!, który należy do pakietu Joomla i podrzędnego pakietu Content: * @package Joomla * @subpackage Content */ class T00LBAR_content { function _EDIT() {
Aby wypróbować działanie aplikacji phpDocumentor, możesz uruchomić proces generowania dokumentacji z kodu źródłowego Joomla!, ponieważ zawiera on niezbędne sekcje DocBlock. Utwórz na serwerze WWW katalog, w którym będzie przechowywana dokumentacja. Składa się ona z wielu plików HTML, dlatego najlepiej przechowywać je w jednym miejscu. Za pomocą phpDocumentor regularnie tworzona jest dokumentacja dla platformy Joomla!. Najnowszą wersję znajdziesz na stronie internetowej http://api.joomla.org. Uruchom w przeglądarce program phpDocumentor, a następnie kliknij zakładkę Output na górze strony. W pierwsze pole, oznaczone Target, należy wpisać katalog, w którym zostanie umieszczona dokumentacja. Wprowadź ścieżkę dostępu do katalogu, który utworzyłeś przed chwilą. 1
Kliknij zakładkę Files, aby wybrać pliki, które zostaną przetworzone w programie. Katalog includes systemu Joomla! zawiera wiele klas opisanych znacznikami DocBlock. Wprowadź ścieżkę dostępu do tego katalogu, która w przypadku systemu Windows może przypominać: C:\Program Files\Apache Software
Foundation\Apache2.2\htdocs\includes
Aby rozpocząć proces, kliknij przycisk Create (new window). Generowanie może potrwać kilka minut, ponieważ Joomla! zawiera dużo kodu, który należy przetworzyć. Po ukończeniu pojawi się okno zawierające informacje o wyniku generowania dokumentacji. Znajdują się w nim także informacje o błędach i problemach, które wystąpiły w trakcie tworzenia dokumentacji, co może być szczególnie pomocne, jeśli dopiero zaczynasz pracę z programem phpDocumentor. Przejdź do katalogu, w którym została zapisana dokumentacja i otwórz w przeglądarce plik index.html. W oknie zostanie wyświetlona lista plików zapisanych w katalogu includes. W lewej kolumnie znajduje się lista pakietów, które zostały zdefiniowane, następnie lista przypisanych do nich plików i klas. W sekcji klas kliknij odnośnik JSite. Zostanie wyświetlony przegląd informacji o klasie wraz z listą należących do niej metod. Oprócz szczegółów klasy (np. komentarzy programistów) na stronie znajduje się opis zmiennych, metod i stałych należących do klasy. Solidna dokumentacja dla programistów jest korzystna dla każdego projektu. Kilka chwil, które trzeba poświęcić, aby dodać niezbędne informacje do plików, przełoży się na znaczące ułatwienia w przypadku dalszego rozwijania programu. Zapoznaj się z instrukcjami programu phpDocumentor, ponieważ zawiera on wiele dodatkowych funkcji, m.in. możliwość tworzenia kilku wersji dokumentacji (np. jedna wersja dla programistów, a draga dla użytkowników), a także pobierania informacji z plików zewnętrznych, dzięki czemu kod źródłowy pozostaje wolny od obszernych komentarzy.
Zsumowanie System komentarzy zawiera z pewnością najwięcej cech wspólnych dla komponentów Joomla!, ponieważ oprócz bogatej funkcjonalności związanej z wyświetlaniem ma także funkcje dostępne z poziomu interfejsu administratora. Wykorzystując zaawansowane środowisko programistyczne, takie jak Eclipse, wzbogacone dodatkowo o możliwości systemu SVN, możesz tworzyć komponenty, stosując następujące techniki: •
dopasowywanie domyślnych szablonów Eclipse w celu wstawienia niezbędnego podstawowego kodu;
•
programowanie części frontowej i administracyjnej, zawierających pożądaną funkcjonalność;
•
tworzenie archiwum poprzednich wersji kodu źródłowego za pomocą interfejsu SVN dostępnego w Eclipse;
•
udoskonalanie interfejsu księgi gości, dołączanie dodatkowych elementów formularza;
182
Joomla!. Profesjonalne tworzenie stron W1NW •
uaktualnianie interfejsu administracyjnego w celu poprawienia integracji z platformą Joomla!;
•
generowanie dokumentacji w oparciu o komentarze zawarte w kodzie źródłowym przetwarzanym przez program phpDocumentor.
Komponenty stworzone w tym rozdziale są klasycznym przykładem tradycyjnej interakcji ze stroną WWW. Sercem nowego sposobu interakcji ze stronami WWW, nazywanym powszechnie Web 2.0, jest połączenie kilku technologii pod nazwą Ajax. W rozdziale 7. opisano tworzenie aplikacji Joomla!, której główną częściąjest dynamiczna interakcja z użytkownikiem bez ponownego przeładowywania strony.
7 Joomla! i Ajax Ajax (ang. Asynchronous JavaScript and XML — Asynchroniczny JavaScript i XML) to połączenie potężnych technologii, które leżą u podstaw Web 2.0. Dzięki technologii Ajax interakcja ze stroną WWW jest dużo atrakcyjniejsza dla użytkowników niż wcześniejsze rozwiązania. W przeszłości każda zmiana parametrów lub kliknięcie przycisków wiązały się z przesłaniem danych do serwera WWW, a następnie pobraniem w całości nowej strony, która odzwierciedlała wykonane akcje. Praca z aplikacjami internetowymi funkcjonującymi w tym modelu była niewygodna i nieatrakcyjna. W przypadku aplikacji zaprojektowanych z myślą o Ajaksie możliwe jest osiągnięcie prawie natychmiastowej reakcji na działania użytkownika. Wykonywanie takich czynności jak zmiana porządku sortowania danych w tabeli poprzez kliknięcie nagłówka cechuje się minimalnym opóźnieniem. Jeśli dana akcja wymaga pobrania dodatkowych informacji (np. wyjaśnienia dla danego terminu), to zamiast pobierać w całości nową stronę, można, korzystając z technologii Ajax, przesłać tylko wymagane minimum danych z serwera. Uaktualnianie informacji na stronie jest dynamiczne i nie wymaga przeładowania całego dokumentu. W systemie Joomla! wprowadzono funkcjonalność, która sprzyja implementacji rozwiązań ajaksowych. Stosowanie wymiany informacji w tle prowadzi do dynamicznej i bogatej interakcji ze stroną.
truktura technologii Ajax Wbrew informacjom prasowym na temat narodzin technologii Ajax nie jest to wcale nowość. Jest to raczej sposób łącznego wykorzystania istniejących technologii, który zapewnia bogatszą interakcję z użytkownikiem niż poprzednie rozwiązania. Technologia Ajax to kombinacja technologii związanych ze stronami WWW — HTML-a, kaskadowych arkuszy stylów (CSS), JavaScriptu, obiektowego modelu dokumentu (DOM), XML-a i XSLT 1 . Kod JavaScript,
azujący na XML-u język przekształceń dokumentów XML —przyp. tłum.
184
Joomla!. Profesjonalne tworzenie stron W1NW
uruchamiany w przeglądarce użytkownika, łączy się w tle z serwerem WWW. Informacje mogą być przesyłane w obu kierunkach, a następnie dynamicznie formatowane i wyświetlane w oknie przeglądarki. Bardzo prostym, a jednocześnie coraz popularniejszym zastosowaniem Ajaksa jest „chmurka" pojawiająca się po najechaniu kursorem myszy na daną pozycję. Rozwiązanie tego typu stosowane jest na stronie Netflix (rysunek 7.1). Jeśli użytkownik najedzie kursorem myszy na tytuł lub zdjęcie produktu, zostanie wyświetlona „chmurka" zawierająca powiązane informacje i obrazki. W przypadku strony Netflix jest to często zdjęcie pudełka z filmem, krótkie podsumowanie fabuły, ocena, występujący aktorzy itp. Rysunek 7.1.
Informacje o filmach na stronie Netflix pobierane są dynamicznie, a następnie wyświetlane w postaci „chmurki"
| Spjdf r-Man J — J (2004)1- ; % The heroic arachnid iSk directed by Sam R a i m i \ Chabon. Peter Parker ( 1 » through a major identity cn Spider-Man, he decides td ego, which leaves the city carnage left by the evil Dot meantime, Peter still cant Mary-Jane (Kirsten Dunst) Available Formats: DVD .an
The heroic arachnid is back in this live-action sequel directed by Sam Raimi and written by Michael Chabon Peter Parker (Tobey Maguire) is going through a major identity crisis. Burned outfrom being Spider-Man, he decides to shelve his superhero alter ego, which leaves the city suffering in the wake of carnage left by the evil Doc Ock (Alfred Molina). In the meantime, Peter still cant act on his feelings for Mary-Jane (Kirsten Dunst). SMllintj: Tobey Maguire, Kirsten Dunst Director: Sam Raimi Gerne: Action ^Adventure Rotiny: PG-1 3
The Spectacular Spi (2008) n
if it in this three-episode colle Peter Parker - fresh from roWWt surm
3.9
Member Average
Informacje wyświetlane w „chmurce" nie znajdują w kodzie źródłowym strony. Z serwera pobierana jest strona zawierająca podstawowe informacje i kod, który pobiera i wyświetla dodatkowe informacje, jeśli to konieczne. Dzięki temu czas pobierania strony zostaje skrócony, ponieważ nie są przesyłane niepotrzebne informacje. Jeśli użytkownik najedzie kursorem myszy na którąś z pozycji, zostanie uruchomiony kod JavaScript, który pobierze z serwera nowe informacje, a następnie wyświetli je w postaci „chmurki". Ta „magia" wymaga sprzężenia kilku technologii. Przeglądarka, reagując na dane wydarzenie, musi być w stanie uruchamiać kod JavaScript, który wysyła żądanie do serwera. Następnie serwer musi zwrócić odpowiednio sformatowane informacje, które odpowiadają żądaniu. Kolejny etap to odebranie informacji w przeglądarce, przetworzenie i formatowanie, tak aby można byłoby je wyświetlić, korzystając z DOM. Liczba funkcji może wydawać się zniechęcająca, jednakże większość z tych technologii jest szeroko stosowana. Dwie główne przeglądarki — Internet Explorer (IE) i Mozilla Firefox — od dłuższego czasu (kilka poprzednich wersji) mają niezbędną funkcjonalność. W praktyce oznacza to, że większość istniejących przeglądarek jest w stanie skorzystać z zalet Ajaksa. Niezbędne funkcje strony serwerowej dostępne są za pośrednictwem klasy JDocument, składowej platformy Joomla!. Właściwie sformatowana odpowiedź serwera może być przygotowana przez własny komponent.
Rozdział 7. • JoomlaüAjax
185
rosty komponent aiaksowy System wykorzystujący Ajaksa można bardzo szybko skomplikować. Aplikacja przypomina puzzle, które składają się z bardzo wielu elementów, dlatego nietrudno pogubić się na początku. Z tego powodu na początku przydatna będzie demonstracja podstaw technologii Ajax. Poniższy przykład to nic innego, jak program „Hello World!" przeniesiony w realia technologii Ajax. Posłuży do zademonstrowania, jak należy łączyć poszczególne elementy układanki. Przykładowa aplikacja składa się z pojedynczej strony WWW, która wyświetla obramowany paragraf zawierający tekst „Mój produkt". Po najechaniu kursorem myszy na treść paragrafu zostanie uruchomiony kod JavaScript, który wykonuje żądanie do serwera Joomla!. Komunikatem zwrotnym jest informacja o dostępności danego produktu. Odebrana wiadomość wyświetlana jest w postaci okna dialogowego — co przedstawiono na rysunku 7.2. sunek 7.2.
H k ' !
adomość świetlona oknie ilogowym ;t wynikiem namicznego dania sianego komponentu omia
Ten prymitywny przykład stanowi szkielet rozwiązania ajaksowego, który wkrótce wykorzystasz jako podstawę bardziej przydatnej aplikacji, ponieważ posiada on prawie wszystkie znaczące elementy stosowane w zaawansowanych rozwiązaniach.
rorzenie komponentu Pierwszy element aplikacji stanowi komponent Joomla!. Odpowiada on bezpośrednio na żądania, przy czym nie zawiera żadnych elementów interfejsu, takich jak menu. Dlatego w naszym przypadku musi jedynie wyświetlać pojedynczą linię tekstu, odpowiedź na żądanie ajaksowe. Utwórz najpierw folder \comjproductinfo na dysku twardym. Umieść w nim plik productinfo.php o następującej treści:
//Zablokuj bezpośrednie uruchamianie definecK echo
'_JEXEC' ) or diet
'Brak dostępu' );
'Wybrany produkt jest dostępny!':
186
Joomla!. Profesjonalne tworzenie stron W1NW
Aby zainstalować komponent, niezbędny jest także plik deskryptora XML. Wprowadź następujący kod i zapisz go w pliku o nazwieproductinfo.xml:
encoding="utf-8"?>
version="1.5.0"
type="component">
Informacje o produkcie l.5.0Kornponent wyświetlający informacje o produkcie w odpowiedzi na żądania ajaksowe
component="com_productinfo">productinfo.php
component="com_productinfo">productinfo.php
Utwórz archiwum o nazwie com_productinfo.zip, zawierające oba te pliki, a następnie zainstaluj je w części administracyjnej Joomla!. Możesz przetestować działanie komponentu poprzez ręczne wpisanie adresu URL żądania w oknie przeglądarki: http://localhost/index.php?option=com
_productinfo&format=raw
Jeśli komponent działa poprawnie, w oknie przeglądarki zostanie wyświetlona pojedyncza linia tekstu, co przedstawiono na rysunku 7.3. Jeśli zaglądniesz do źródła dokumentu, zauważysz, że nie ma tam żadnego kodu HTML, tylko zwykły tekst. Ustawienie parametru format na raw (drugi parametr łańcucha żądania) powoduje uruchomienie danego komponentu i zwrócenie wyłącznie jego wydruku. Właśnie taka metoda jest stosowana na stronach korzystających z rozwiązań ajaksowych do wyświetlania informacji. Rysunek 7.3.
Wydruk komponentu stanowi informacja o dostępności danego produktu w postaci zwykłego tekstu
orzenie strony WWW Zadaniem strony WWW będzie wywołanie komponentu w celu pobrania informacji, a następnie wyświetlenie ich w oknie dialogowym. Kod strony jest zdecydowanie bardziej skomplikowany, ponieważ odpowiada za etapy: interakcję z użytkownikiem, żądanie informacji, odbieranie i wyświetlanie informacji. Interakcja z użytkownikiem sprowadza się do reakcji na zdarzenie onMouseOver, czyli wywołanie funkcji JavaScriptu. Funkcja utworzy obiekt komunikacyjny XMLHttpRequest (dane wymieniane są głównie w formacie XML) i wysyła żądanie, korzystając z adresu URL przekazanego jako parametr. Żądanie informacji wiąże się z wywołaniem funkcji di spl ayAjax() i przekazaniem jej jako parametru adresu URL, na który należy wysłać żądanie. Funkcja otworzy połączenie, korzystając z obiektu XMLHttpRequest (dane wymieniane są głównie w formacie XML), i następnie prześle żądanie pod odpowiednim adresem. Funkcja displayAjax() tworzy najpierw obiekt XMLHttpRequest. Podobnie jak w większości przypadków kodu JavaScript, trzeba najpierw wykryć, która przeglądarka wykonuje kod, a następnie zastosować odpowiadającą jej logikę. W przeglądarce Internet Explorer, jako pierwszej, zaimplementowano interfejs obiektu komunikacyjnego XMLHttpRequest (za pośrednictwem obiektu ActiveX), a następnie naruszono standardy, nie wprowadzając przyjętych rozwiązań. Chociaż zostało to poprawione w późniejszych wersjach IE (począwszy od IE7), trzeba wziąć pod uwagę ogromną ilość starszych wersji IE, które nadal są używane. Kolejnym krokiem jest ustawienie funkcji wywoływanej przy odbieraniu wyników, następnym — otwarcie połączenia i wysłanie żądania. Zapisanie wskaźnika do funkcji powoduje jej uruchomienie w przypadku zmiany stanu obiektu komunikacyjnego (czyli głównie w przypadku odebrania danych). Pamiętaj, że pierwsza litera A w skrócie Ajax oznacza asynchroniczny, dlatego pozostałe elementy strony powinny działać niezależnie od wykonywanego żądania bez oczekiwania na jego rezultat. Funkcja displayReturnO sprawdza pobrane informacje. Jeśli żądanie zostało przerwane z powodu przekroczenia limitu czasu lub wystąpi inny błąd, zostanie wyświetlony stosowny komunikat. W przeciwnym wypadku zostaje uruchomione okno dialogowe zawierające otrzymaną wiadomość. Aby zobaczyć technologię Ajax „w akcji", wprowadź poniższy kod w edytorze tekstu, zapisz go pod nazwąAjaxRequestTest.html i otwórz w przeglądarce:
Mój produkt
Rozdział 7. • Joomla! i Ajax
189
Umieść ten plik w głównym katalogu serwera Joomla! i otwórz w przeglądarce. Zwróć uwagę, że adres przekazywany funkcji displayAjaxf) odwołuje się w obecnej postaci do serwera zainstalowanego na komputerze lokalnym (localhost). Zmień go, jeśli uruchamiasz stronę Joomla! na zdalnym serwerze. Po najechaniu kursorem na treść paragrafu zostanie wyświetlona wiadomość w oknie dialogowym. To chyba nie było aż takie trudne, prawda? W przypadku programu Firefox zabezpieczenie przed atakami cross-site scripting zablokuje działanie skryptu, jeśli zostanie uruchomiony z twardego dysku komputera. Pojawi się komunikat „Błąd: nieobsłużony wyjątek: Dostęp do metody XMLHttpRequest.open zabroniony", a przeglądarka zablokuje wyświetlanie strony. Rozwiązaniem jest przeniesienie pliku na serwer WWW i uruchomienie go stamtąd. Teraz, kiedy podstawowa implementacja została ukończona, możemy przejść do bardziej skomplikowanego przykładu. Większość rozwiązań ajaksowych stosowanych na istniejących stronach WWW wymaga połączenia dynamicznego generowania treści z interaktywną komunikacją, właściwą dla technologii Ajax. W ten sposób pobiera się więcej informacji. Następny przykład jest kompletnym systemem ajaksowym opartym na Joomla!.
nrorzenie komponentu Serwer-Żądanie Korzystając z prostej aplikacji jako podstawy, możesz teraz stworzyć praktyczny komponent, który w przyszłości ewentualnie posłuży jako czarna skrzynka (ang. black box) do pobierania danych. Komponent Serwer-Żądanie, który stworzysz w tym podrozdziale, będzie miał funkcjonalność podobną do tej, którą mają „chmurki" na stronie Netflix. Ale zwracane będą artykuły Joomla! zamiast informacji o filmach. Kiedy użytkownik najedzie kursorem myszy na tytuł artykułu wyświetlony przez specjalny komponent, pojawi się „chmurka" zawierająca tytuł artykułu i jego pierwszych 200 znaków. Chociaż poniższa aplikacja nie jest szczególnie użyteczna, zastosowane rozwiązanie można zaadaptować do własnych potrzeb. Stanowi ona demonstrację dynamicznego pobierania danych za pośrednictwem komponentu Joomla!, a następnie wyświetlania ich w postaci „chmurki". Tę funkcję można przenieść na dowolną stronę — czy to sklepu internetowego, gdzie wyświetlane są dodatkowe informacje o produkcie, czy internetowego klienta poczty, co eliminuje konieczność odświeżania całego dokumentu, gdy chce się pobrać nowe wiadomości.
rorzenie komponentu Pierwszym krokiem jest skopiowanie folderu \com_productinfo i nadanie kopii nazwy \com_articleinfo. Następnie zmień nazwy plików productinfo.php i productinfo.xml odpowiednio na articleinfo.php i articleinfo.xml. Zmień kod w pliku articleinfo.php, aby odpowiadał poniższemu:
* @version $Id: com articleinfo.php 5203 2007-07-27 01:45:14Z DanR $ * Komponent wykorzystuje wartość parametru 'articlenum'
190
Joomla!. Profesjonalne tworzenie stron W1NW * w zapytaniu, aby pobrać tytuł i treść artykułu, * które są zwracane w formacie XML *
*/
//Zablokuj bezpośrednie uruchamianie defined(
'_JEXEC' ) or die( 'Brak dostępu' ):
// Odczytaj ID artykułu podany jako parametr żądania SarticleNum = intval(JRequest::getVar(
'articlenum' ));
// Domyślne wartości na wypadek błędu $articleTitle = "Błąd"; SarticleBody = "Błąd":
// Pobierz referencję obiektu bazy danych $db =& JFactory;:getDB0();
// Utwórz zapytanie, aby pobrać wartość pól id. title i text artykułu $query = "SELECT a.id. " FROM # content " WHERE a.id =" . $db->setQuery( Squery,
a.title.a.introtext AS a \n" . SarticleNum . "\n"; 0):
\n" .
// Wykonaj zapytanie if "(Srows = $db->loadObjectList()) {
// Odczytaj pierwszy zwrócony rekord $row = Srows[0];
// Przypisz tytuł i treść artykułu do odpowiednich zmiennych SarticleTitle = Srow->title; SarticleBody = $row->introtext;
// Usuń wszystkie znaczniki z treści artykułu SarticleBody = strip_tags($articleBody):
// Usuń wszystkie znaki niebędące literami, cyframi lub znakami interpunkcji SarticleBody = preg_replace( "/[-ząćęłńóśżżA-ZĄĆĘŁŃÓŚŻŹO-9
.?!S()\'\"]/", "". SarticleBody);
// Jeśli artykuł jest dłuższy niż 200, skróć go if(strlen(SarticleBody) > 200) { SarticleBody = J S t n n g : :substr(SarticleBody. 0. 200):
}
}
// Zwróć tytuł i treść artykułu w formacie XML echo "" SarticleBody
. SarticleTitle
. "" .
. "":
?>
Po wprowadzeniu powyższego kodu zmień odpowiednio plik deskryptora, aby wskazywał nowy plik i nazwę komponentu. Nie zapomnij zmienić atrybutu component znacznika . Jeśli tego nie zrobisz, to przy próbie instalacji zostanie wyświetlony komunikat że rozszerzenie zostało już zarejestrowane w systemie! Utwórz archiwum o nazwie com_articleinfo.zip, zawierające te dwa pliki, a następnie zainstaluj je w systemie Joomla!, korzystając z opcji Rozszerzenia/Instalator. Będąc w interfejsie administratora, przejdź do listy artykułów i zanotuj ID istniejącego artykułu. Wartości pola ID poszczególnych artykułów wyświetlane są w kolumnie ID. Otwórz w przeglądarce poniższy adres: http://localhost/index.php?opüon=com_articleinfo&format=raw&articlemm
Rozdział 7. • Joomla! i Ajax
191
Oczywiście powinieneś zmienić wartość parametru articlenum, aby odpowiadał ID artykułu znajdującego się w bazie danych. W przeglądarce powinno zostać wyświetlonych pierwszych 200 znaków artykułu. Całkiem fajne, nieprawdaż? Teraz, kiedy sprawdziliśmy poprawność kodu, możemy dokładniej przeanalizować jego działanie.
iowiedź na żądanie W pierwszej części kodu umieszczono instrukcje, które przygotowują działanie komponentu, a także pobierają wartość ID artykułu odczytaną z odebranego żądania. Do tego celu posłużono się metodą JRequest::getVar(), która odczytuje wartość parametru z łańcucha żądania. Pobrana wartość została zapisana w postaci zmiennej iarticlenum. Pod wywołaniem getVar() kryje się tak na prawdę kilka funkcji. Głównym zadaniem tej metody jest jednak pobieranie wartości parametrów z różnych źródeł (GET, POST itd.). Jeśli więc w kodzie komponentu potrzebujesz pobrać informacje z łańcucha żądania, formularza lub innego źródła, możesz to zrobić za pomocą tej jednej metody. Warto zwrócić uwagę na fakt, że metoda ta usuwa z przesłanych informacji fragmenty, które mogłyby posłużyć do ataku SQL Injection (zobacz podrozdział „Zagrożenia bezpieczeństwa") lub innych prób włamania. Stanowi ona bardzo ważną warstwę zabezpieczeń, dlatego najlepiej wykorzystywać tę metodę zamiast ręcznego pobierania danych za pomocą instrukcji PHP. Nawet jeśli niepożądane informacje zostaną przepuszczone przez metodę getVar(), zostaną usunięte przez funkcję intval (), która zmienia podany ciąg znaków na bezpieczną i nieszkodliwą liczbę. Po ustawieniu zmiennej iarticlenum zmiennym SarticleTitle i SarticleBody przypisywane są wartości domyślne.
ikonywanie zapytania do bazy MySQL Zapytanie wykonywane jest za pośrednictwem standardowego obiektu bazy danych, którego referencja pobierana jest metodą getDB0(). Konstrukcja zapytania zakłada zwrócenie z bazy danych wyłącznie pól ID, title (tytuł) i introtext (które zawiera skróconą treść artykułu). Zwróć uwagę, że instrukcja FROM wykorzystuje zapis # content zamiast odwołania się do konkretnej tabeli, jak choćby jos_content. Podczas uruchamiania zapytania system Joomla! zastąpi ten zapis (#_) właściwym prefiksem dla tabel Joomla!. Dzięki temu programista nie musi samodzielnie odczytywać konfiguracji Joomla!, aby określić, jaki przedrostek wykorzystywany jest dla tabel w bazie danych. Kolejnym krokiem jest przypisanie i uruchomienie zapytania. Jeśli wynikiem zapytania jest przynajmniej jeden wiersz, zostanie on przetworzony. Zmiennej $row przypisywany jest najpierwszy obiekt w tabeli $rows. Jeśli zwrócono więcej pasujących rekordów, zostaną one po prostu zignorowane. Treść artykułu powinna zostać zwrócona w postaci zwykłego tekstu, dlatego uruchamiana jest funkcja usuwająca znaczniki HTML, a następnie kasowane są wszystkie znaki, które nie są literami, cyframi lub znakami interpunkcji (mogłyby one negatywnie wpłynąć na działanie „chmurki"). Po oczyszczeniu treści artykułu przycinana jest ona maksimum do 200 znaków. Ponieważ założeniem technologii Ajax jest szybkość reakcji, liczbę danych zwracanych do klienta najlepiej utrzymywać na możliwie niskim poziomie.
192
Joomla!. Profesjonalne tworzenie stron W1NW
Zwracanie danych w formacie XML
Ponieważ klient potrzebuje wyłącznie dwóch informacji (tytułu i skróconej treści artykułu), skomplikowany model XML jest zbędny. Za pomocą instrukcji echo tworzone jest proste drzewo XML, którego głównym elementem jest , a elementami potomnymi są i . Jeśli wynikiem zapytania miałoby być kilka rekordów, można by je zapisać w postaci kolejnych elementów .
To by było na tyle! Komponent odczytuje ID artykułu z łańcuchu żądania, przegląda bazę danych w poszukiwaniu odpowiedniego wpisu, przetwarza informacje do postaci zwykłego tekstu i przesyła z powrotem w postaci prostego drzewa XML. Moduł będzie w tym wypadku bardziej skomplikowany, obsługuje trzy etapy: interakcję z użytkownikiem, wysyłanie żądania i wyświetlanie informacji zwrotnych.
Tworzenie modułu ajaksowego
Moduł wyświetlający informacje zwrócone za pośrednictwem Ajaksa będzie składać się w możliwie jak największym stopniu z napisanego wcześniej kodu. Platforma Joomla! jesi pełna procedur i obiektów, które możesz wykorzystać, pisząc własny kod. W tym przypadku, zamiast pisać własny kod odpowiedzialny za wyświetlanie „chmurek", posłużymy się już tym istniejącym w Joomla!.
System Joomla! zawiera świetną funkcję wyświetlającą „chmurki", które w znacznym stopnii można dopasować do własnych potrzeb. Pochodzi ona z biblioteki overLIB, stworzonej prze Erika Bosrupa (www.bosrup.com/web/overlib), który łaskawie pozwolił na dołączenie jej do instalacji Joomla!. Na jego stronie internetowej znajdziesz najnowszą wersję biblioteki którą możesz wykorzystać, jeśli planujesz implementację poza systemem Joomla!. W przypadku platformy Joomla! wystarczy wstawić w kodzie strony jedną linię:
Powyższa instrukcja wskazuje, że kod biblioteki przechowywany jest w katalogu /includes/js Jeśli dysponujesz wolnym czasem, warto przeanalizować jej kod, aby poznać możliwe parametry i dostępną funkcjonalność.
Tworzenie pliku XML i folderu z modułem
Utwórz folder mod_artic1eajax, w którym będzie przechowywany moduł. Następnie otwór; go, wprowadź poniższy kod i zapisz go pod nazwąmod_articl eajax. xml: Ajax i artykułyl.5.0Ten moduł wyświetla odnośniki do 5 aktualnych artykułów. Odnośnik do każdego posiada zdefiniowane zdarzenie onMouseOver, które uruchamia procedurę ajaksową pobierającą informacje o artykule za pomcą komponentu com_articleinfo.
Rozdział 7. • Joomla! i Ajax
193
«filename
module="mod_articleajax">mod_articleajax.php
Powyższy kod to najprostszy plik deskryptora. Możesz go rozszerzyć, jeśli planujesz wstawić dodatkowe pliki i parametry, które rozszerzą tworzoną aplikację.
»orzenie mod_articleajax Utwórz w folderze plik o nazwie mod_articleajax.php i wprowadź poniższy kod:
* @version $ld: mod articleajax.php 5203 2007-07-27 01:45:14Z DanR $ * Ten moduł wyświetla odnośniki do 5 aktualnych artykułów. * Odnośnik do każdego posiada zdefiniowane zdarzenie onMouseOver, które uruchamia * procedurę ajaksową pobierającą informacje o artykule za pomocą komponentu com articleinfo. */
src="inc1udes/js/overlib_mim.js">
Moduł ajaksowy get('id'): //Zdefiniuj odpowiednie daty, aby zagwarantować, że artykuły Snuli Date = $db->getNullDatei): Snow = date('Y-m-d H:i:s'. timet)): // Wyszukuj wyłącznie opublikowanych artykułów Swhere = 'a.state = 1 ' . " AND (a.publish_up = "' . Snuli Date . "' OR a.publish_up <= "' . Snow . "')" . " AND ( a.publish_down = "' . Snuli Date . "' OR a.publishjjown >= "' . Snow . "')";
// Utwórz odnośnik do właściwego artykułu echo "< a href=index.php?optnon=com_content&view=article&id=" . $row->id . "&Itemid=44>" . iartTitle . " \n";
} // Wyświetl komunikat o błędzie, jeśłi pobieranie danych nie powiodło się echo Sdb->getErrorMsg(); ?>
Podobnie jak we wcześniejszym przykładzie, jeśli uruchamiasz stronę na zdalnym serwerze, musisz zmienić adres wykorzystywany przez funkcję di spl ayAjax(). Po ukończeniu tworzenia modułu utwórz archiwum o nazwie mod_artic1eajax.ZTp i zainstaluj je, korzystając z opcji Rozszerzenia. Jeśli pozostawisz moduł na pozycji left, zostanie on wyświetlony na stronie głównej. Otwórz przeglądarkę internetową i otwórz stronę główną. Po najechaniu kursorem na każdy z wyświetlonych odnośników zostanie wyświetlona „chmurka" zawierająca tytuł i pierwszych 200 znaków artykułu, co przedstawiono na rysunku 7.4. Jak możesz zauważyć, dzięki Ajaksowi sporo dodatkowych informacji jest błyskawicznie przedstawianych użytkownikowi. Rysunek 7.4. Tytuł i pierwszych 200 znaków każdego artykułu zostaną wyświetlone w postaci „chmurki"
Ajax i artykuły
Popular
Latest N e w s • Content Layouts MM-' DOI I to Joomlal
..framework and content publishing system designed for quickly eating highly interactiue lultllanguage W e b sites online edia portals blogs and eCommerce appl
i II"! n'• liximl.i Overview i l'."Int. ícense i M u tí .lii'.in Jiinitila: I FAO i Tire News i W e l l Links • News Feeds
o the Frontpage
Joomlal
Joomia! is .1 flee open source i t a m e w o i k and content publishing system designed tot quickly Cio.itiri'j tii.jtitv iiiteiactive multi-language Well sites, online communities. media poitais. tilo'is .mil eC oinmei ce applications. pmered "v
Ją, J o o m l a !
-Joomlal provides an easy-to-use graphical user Interface that simplifies the management and publishing of large volumes of content including HTML, documents, arid rich media. Joomlal is used by organisations of all sizes for Public Web sites, Intranets, and Extrañéis and is supported by a community of thousands of
196
Joomla!. Profesjonalne tworzenie stron W1NW Korzystając z potęgi tego prostego przykładu, będziesz prawdopodobnie chciał tworzyć własne rozwiązania ajaksowe. Kod modułu jest bardziej skomplikowany niż ten komponentu, dlatego trzeba dokładnie go przeanalizować, aby w pełni rozumieć jego działanie.
..Chmurki" Jedną z pierwszych instrukcji w kodzie modułu jest znacznik script, który niezbędny jest do skorzystania z funkcjonalności biblioteki overLIB. Po dołączeniu biblioteki możesz wyświetlić „chmurkę", wywołując funkcję overLIBO. Istnieje możliwość określenia sporej liczby parametrów, które wpływają na wygląd chmurki, np. wysokość, kolor, umiejscowienie czy parametry wyświetlanego tekstu.
Funkcje wywołujące
Poniżej znacznika znajdują się definicje funkcji di spl ayAjax() i di spl ayReturn(). Funkcja di spl ayAjax() jest praktycznie identyczna z tą, która występuje we wcześniejszym przykładzie wyświetlającym informacje o dostępności. Jedyną znaczącą zmianą jest parametr przekazywany funkcji. Zamiast podawania kompletnego adresu URL funkcja wymaga podania ID artykułu, na podstawie którego tworzony jest odpowiedni adres odwołujący się do komponentu com_articleinfo. W przeciwieństwie do displayAjaxO w kodzie funkcji di spl ayReturn() zaszło wiele zmian. Zamiast prostego odbierania tekstu wysłanego przez komponent (za pomocą obiektu reponseText) nowy kod napisano z wykorzystaniem obiektu responseXML, dzięki czemu można odczytywać dane sformatowane w postaci drzewa XML. Najpierw tworzone jest odwołanie do elementu głównego , a następnie pobierane są wartości elementów i , zapisane w polu nodeVal ue. Pobrane wartości znajdują zastosowanie przy wywoływaniu funkcji overLIB(), określana jest treść i nagłówek „chmurki". Te dwie funkcje odpowiadają za część wysyłania i pobierania danych. Elementy odpowiedzialne za interakcję z użytkownikiem są odrobinę bardziej skomplikowane, ponieważ niezbędny jest dostęp do bazy danych Joomla!, dzięki któremu pobiera się odpowiednie informacje o artykułach.
Wynajdywanie artykułów w bazie danych Joomla! Kod odpowiedzialny za wyświetlanie artykułów nie może składać się wyłącznie z prostej instrukcji pobierającej tytuły aktualnych artykułów, a następnie wyświetlającej je w postaci listy. Z powodu bezpośredniego dostępu do danych umieszczonych w tabeli artykułów takie podej ście spowodowałoby pobranie zarówno niepublikowanych artykułów, jak i tych z ograniczonym dostępem. Niezbędne jest wprowadzenie zabezpieczeń uniemożliwiających wyświetlanie niepowołanych treści.
Rozdział 7. • Joomla! i Ajax
197
Dlatego podczas odwoływania do bazy danych wykorzystywane są dane aktualnie zalogowanego użytkownika. Wartość zmiennej inullDate powoduje wyświetlenie artykułów, dla których nie określono daty wygaśnięcia. Zmienna $now usuwa z listy przeszukiwanych artykułów te, które zostaną opublikowane w przyszłości. Instrukcja zapisana w zmiennej $where gwarantuje, że zostaną pobrane wyłącznie obecnie opublikowane artykuły. Klauzula WHERE jest następnie dodawana do zmiennej $query, która zawiera zapytanie pobierające pola ID i title artykułów. W przypadku modułu konieczne jest wyświetlanie wyłącznie prostej listy wpisów, dlatego nie ma powodu, aby pobierać nadmiarowe dane. Ostatecznie zostaje uruchomiona metoda setQuery(), która uruchamia zapytanie i pobiera maksymalnie pięć rekordów. Możliwe byłoby pobranie kompletnej listy artykułów, jednak moduł zająłby wtedy zbyt wiele miejsca w pionie, dlatego lepiej ograniczyć zakres lub rozmiar pobieranych danych. Dla każdego rekordu pobranego jako wynik zapytania tworzony jest element , dla którego zdefiniowano zdarzenie onMouseOver. Analizując kod źródłowy, możesz zauważyć, że do każdej pozycji przypisane jest odpowiednie ID w postaci parametru funkcji di spl ayAjax(). Kod źródłowy wygenerowanej strony zawiera dla każdego zdarzenia onMouseOver odpowiedni ID artykułu. Dodatkowo przy definicji tego zdarzenia umieszczana jest instrukcja, która ukrywa wcześniej wyświetlone „chmurki". Dla każdego elementu tworzony jest także odnośnik do danego artykułu. Jego kliknięcie powoduje uruchomienie komponentu com_content, który wyświetla artykuł, a odpowiednie ID przekazywane jest w postaci parametru. Nazwą odnośnika jest jedno z pól rekordu, tytuł artykułu. Jeśli podczas pobierania danych z bazy wystąpi błąd, na stronie pojawi się stosowny komunikat. Powinieneś mieć już solidne umiejętności związane z implementacją rozwiązań ajaksowych z wykorzystaniem platformy CMS Joomla!. Stworzony szkielet można rozbudowywać w dowolny sposób, aby osiągnąć większą interaktywność.
Wady technologii Ajax Korzystając z ekscytujących możliwości technologii Ajax, programiści mogą łatwo zapomnieć o j e j wadach. Oprócz skomplikowania projektu strony istnieje kilka realnych problemów związanych ze wzmożonym zastosowaniem tej technologii: •
niedostępność treści pobieranych za pomocą Ajaksa dla robotów internetowych;
•
gromadzenie informacji;
•
możliwe zagrożenia bezpieczeństwa.
198
Joomla!. Profesjonalne tworzenie stron W1NW
Niedostępność dla robotów internetowych Wzrost wykorzystania technologii Ajax można przyrównać do szalejącego pożaru, ponieważ zaczęły powstawać strony, na których wszystkie funkcje realizowane są za pomocą technologii Ajax — od wyświetlania menu, po prezentację kluczowych informacji. Chociaż można łatwo ulec zachwytowi nad nową technologią, należy stosować ją tylko tam, gdzie najlepiej pasuje. Jak dotąd najlepszym zastosowaniem są widgety, takie jak te na stronic Nctflix lub Google Maps. Trzeba jednak pamiętać, że wszystkie informacje wyświetlane w widgetach (pobrane z użyciem Ajaksa) są niedostępne dla robotów internetowych, ponieważ nie uruchamiają one np. kodu powiązanego z odnośnikiem. Mimo iż wyświetlanie „chmurek" może być atrakcyjne i zachęcające dla odwiedzających stronę, roboty internetowe całkowicie je zignorują. Upewnij się, że wszystkie informacje dostępne za pośrednictwem Ajaksa dostępne są gdzieś indziej na stronie, w postaci zwykłej strony HTML. Dzięki temu robot internetowy odwiedzający stronę nie natrafi na pustą skorupę. Jeżeli zależy Ci na pozycjonowaniu strony w wyszukiwarkach, nie umieszczaj głównych treści, które normalnie dostępne są dla użytkowników za pomocą Ajaksa w postaci plików HTML, gdzieś w zakamarkach witryny, ponieważ pogorszy to pozycję strony.
Gromadzenie informacji Większość żądań ajaksowych prowadzi do odebrania w przeglądarce sformatowanych danych. Musisz zwrócić szczególną uwagę na zabezpieczenie się przed niepowołanym dostępem, a także atakami hakerów. Większość aplikacji ajaksowych wykonuje żądania, które powodują zwrócenie danych z bazy. Mogą to być informacje na temat ceny/dostępności produktu, a nawet tajne informacje firmy. Ponieważ dane pobierane są w formacie XML, nie trzeba dużo czasu i wysiłku, aby konkurencja stworzyła, nadużywając komponentu ajaksowego, program pobierający dane do momentu, kiedy wszystkie informacje znajdą się w ich bazie. Istnieje kilka sposobów obrony przed takim podstępowaniem. Najprostszym z nich jest zapewnienie, że żądania nie są tworzone według prostego schematu, np. sekwencji liczb. Jeśli produkty są ponumerowane od 1 do 50, spróbuj zastosować inną metodę identyfikowania rekordów, tak aby niemożliwe było stworzenie aplikacji, która pobiera informacje dla kolejnych ID.
Zagrożenia bezpieczeństwa Kolejne niebezpieczeństwo stanowi potencjalny atak SQL Injection. W tym przypadku haker próbuje przesłać zapytanie SQL w postaci parametru. Jeśli dobierający program wstawia odebrane dane bezpośrednio do zapytania, możliwe jest zdradzenie wielu prywatnych informacji.
Rozdział 7. • Joomla! i Ajax
199
Na szczęście Joomla! zawiera funkcje takie jak getVar(), które zapobiegają „przenikaniu" większości szkodliwego kodu. Zawsze pomyśl dwa razy, zanim zdecydujesz się na ominięcie funkcji wbudowanych w Joomla!, ponieważ zawierają wiele sprawdzonych i pewnych zabezpieczeń.
odsumowanie Wykorzystanie technologii Ajax na Twojej stronie może sprawić, że w pełni zasłuży ona na miano witryny Web 2.0. Połączenie i właściwa implementacja niezbędnych technologii (HTML, XML, JavaScript itd.) mogą być frustrujące, jednak trud zostaje wynagrodzony w chwili uruchomieniem strony. W tym rozdziale opisano implementację rozwiązań ajaksowych w Joomla!, a w szczególności: •
opisano powiązania między składowymi technologii Ajax, a także sposoby implementacji w Joomla!;
•
opisano działanie komponentów, pobieranie danych w formacie raw;
•
tworzenie prostej aplikacji ajaksowej, która jest przykładem zastosowania całej platformy;
•
rozszerzanie systemu Joomla! — dodanie wyświetlania „chmurek", co jest demonstracją funkcjonalności technologii Ajax;
•
zalety konserwatywnego punktu widzenia — rozsądnego decydowania o miejscach implementacji rozwiązań ajaksowych, świadomość wad nowej technologii.
Implementacja technologii Ajax może być całkiem skomplikowana. Jeśli stanowi ona cześć większego projektu, kod programu może stać się zupełnie niejasny. Narzędzia programistyczne noszące nazwę wzorców projektowych mogą ułatwić planowanie aplikacji, zredukować liczbę błędów i zwiększyć zysk wiedzy z poprzednich aplikacji. W rozdziale 8. opisano, jak stosować wzorce projektowe w programowaniu Joomla!.
200
Joomla!. Profesjonalne tworzenie stron W1NW
8 Wzorce projektowe a Joomla! Joomla! jest aplikacją napisaną techniką programowania obiektowego. Cała platforma składa się z zestawu klas, których połączenie tworzy funkcjonalność systemu zarządzania treścią (CMS). Efektywne programowanie Joomla! wymaga zapoznania się z kilkoma paradygmatami programowania obiektowego i stosowania ich. Przykładem takich paradygmatów są wzorce projektowe. Wzorce projektowe to w istocie zestaw modeli konceptowych, wytycznych nowego sposoby programowania zorientowanego na obiekty. Modele, odzwierciedlane w postaci wzorców projektowych, były udoskonalane w ramach prac nad wieloma projektami. Właściwe dopasowanie wzorców projektowych do problemu, nad którym pracujesz, może dostarczyć Ci sprawdzonych metod, które ułatwią zadanie. Adaptacja skutecznych wzorców projektowych oznacza w praktyce, że łatwiej dotrzymać terminów, zarządzanie systemem jest tańsze, rozumienie ewolucji systemu prostsze, a nowi programiści szybciej dostosowują się do projektów. Dzięki zastosowaniu wzorców projektowych znika potrzeba wynajdywania koła przy każdym nowym projekcie. Począwszy od wczesnych lat dziewięćdziesiątych, pionierskich prac Ericha Gamma, Richarda Heima, Ralpha Johnsona i Johna Vlissidesa (tzw. Bandy Czterech — ang. Gang ofFour), napisano wiele obszernych pozycji na ten temat. Oryginalna (i prawdopodobnie najważniejsza) książka nosi tytuł Design Patterns: Elements of Reusable Object-Oriented Software1 (Addison-Wesley, Boston 1995), opisano w niej wiele podstawowych wzorców używanych obecnie — łącznie z tymi, które napotkasz w Joomla!. W tym rozdziale przedstawiono podstawy wzorców projektowych, a ponieważ zostały one zastosowane przez programistów Joomla! w konstruowaniu CMS, także przykładowe użycie w kodzie Joomla!. Rozumiejąc założenia projektowe, na których opiera się Joomla!, będziesz w stanie nie tylko tworzyć skuteczniejsze rozszerzenia, ale także lepiej poznasz samą platformę, jej działanie i potencjalne zastosowania.
Wyd. polskie Wzorce projektowe. Elementy oprogramowania Warszawa, 2005, ISBN 83-204-3041-0 —przyp. tłum.
obiektowego wielokrotnego
użytku, WNT,
202
Joomla!. Profesjonalne tworzenie stron W1NW
Wzorce projektowe Wzorce projektowe stanowią wytyczne programowania obiektowego, które odzwierciedlają podstawowe cele w procesie tworzenia aplikacji. Zostały stworzone, aby rozwiązać konkretne, powtarzające się problemy programistyczne w schematyczny sposób (wzorzec). Dokumentacja poszczególnych wzorców zawiera w większości przypadków takie informacje, jak: •
Nazwa oraz klasyfikacja — Nazwa wzorca wraz z ogólną klasyfikacją, która wskazuje na typ wzorca. Zazwyczaj jest to jeden z trzech podstawowych typów: konstrukcyjny, strukturalny lub czynnościowy.
•
Problem — Opis problemu, dla którego stworzono dany wzorzec.
•
Rozwiązanie — Szczegółowy opis rozwiązania problemu, zawierający ogólne modele konceptowe, procesy i obiekty.
•
Hipoteza — Ogólny opis działania wzorca, a także jak jego zastosowanie prowadzi do rozwiązania.
•
Konkretny przykład— problemu.
•
Zastosowanie — Obszary zastosowania danego wzorca, a także jego ograniczenia.
•
Konsekwencje — Kompromisy i zależności, które wymusza zastosowanie wzorca.
•
Wskazówki odnośnie do implementacji — Ogólne sugestie dotyczące stosowania danego wzorca.
Sugestywny przykład zastosowania wzorca do rozwiązania
Pamiętaj, że wzorce projektowe nie są doskonałe ani nie są dogmatem, który trzeba stosować za wszelką cenę. Wzorce projektowe to zbiór wytycznych, a im dokładniej się je stosuje, tym więcej zamierzonych korzyści uzyskuje się. W praktyce trzeba się często zmierzać z ograniczeniami w adaptacji wzorców, np. ze względu na wydajność. Wzorce projektowe mogą być także przytłaczającym ciężarem, jeśli projekt jest bardzo mały. Nie istnieje prosty sposób na określenie wielkości projektu, dla którego implementacja wzorców ma sens. Można z grubsza przyjąć, że jeśli nad projektem pracuje lub będzie pracować w przyszłości co najmniej trzech programistów, wtedy warto ponieść koszty związane z implementacją. W przypadku pojedynczych programistów zastosowanie wzorców nie przekłada się na znaczące korzyści, może jednak służyć wyrobieniu dobrych nawyków. Dzięki temu, jeśli projekt zostanie rozszerzony, jego struktura nie będzie go ograniczać. Powinieneś dokładnie znać zalety zastosowania poszczególnych wzorców, zamiast ślepo stosować je w tworzonych programach. Założeniem wzorców projektowych jest uproszczenie i usprawnienie procesu tworzenia aplikacji, a wprowadzanie ich na silę, kosztem skomplikowania projektu, jest zaprzeczeniem tego założenia.
Rozdział 8. • Wzorce projektowe a Joomla!
203
frzy główne kategorie wzorców Twórcy wzorców projektowych podzielili je na trzy kategorie: •
konstrukcyjne,
•
strukturalne,
•
czynnościowe.
W ramach opisu powyższych kategorii przedstawiono po jednym wzorcu, który można potraktować jako reprezentację pozostałych rozwiązań programistycznych z danej kategorii.
Mzorce konstrukcyjne Wzorce klasyfikowane do kategorii konstrukcyjnych związane są z mechanizmem tworzenia obiektów. Może Ci się wydawać, że tworzenie obiektów jest proste, a większość zadań wykonuje system. Istnieją jednak przypadki, kiedy ręczne zarządzanie tworzeniem obiektów może przekładać się na znaczące korzyści, np. usprawnienie uaktualnień lub lepsze zarządzanie zasobami — szczególnie w większych systemach. W wielu aplikacjach tworzenie nowych obiektów sprowadza się do wywołania, specyficznej dla danego języka programowania, instrukcji tworzenia obiektu. Istnieje jednak wiele zastosowań, dla których zastosowanie dodatkowej warstwy w mechanizmie tworzenia obiektów przynosi korzyści. Przykładowo technologia DAL (Database Abstraction Layer — warstwa abstrakcji bazy danych, np. PEAR DAL, PDO i ADOdb) tworzy warstwę pośrednią między aplikacją a źródłem danych, dzięki czemu programista może pisać kod, który za pośrednictwem DAL pobiera dane z dowolnego systemu baz danych. Zamiast tworzyć obiekt łączący się bezpośrednio z bazą danych, pobierany jest obiekt DAL. Gdy korzysta się z tej metody, możliwe jest zarządzanie pulą połączeń (ang. connection pooling), dzięki czemu dostępne połączenia niewykorzystywane przez procesy macierzyste mogą być przekazane do kolejnych, zmniejszając konieczność tworzenia nowych. Ten wzorzec konstrukcyjny służy oszczędzaniu zasobów serwera, a także, ponieważ DAL obsługuje tworzenie obiektów, może rozwiązać wiele problemów związanych z dostępem do konkretnych źródeł danych. Powyżej został opisany realny przykład wzorca konstrukcyjnego. Do kategorii wzorców konstrukcyjnych należą: fabryka abstrakcyjna, metoda fabrykująca, wzorzec budowniczego, leniwa inicjacja, pula obiektów, prototyp i singleton. Definicje tych wzorców opisują niektóre z procesów wymaganych przez aplikację. Najczęściej stosowanymi w Joomla! wzorcami z tej kategorii są: fabryka abstrakcyjna (przedstawiona niżej jako przykład), singleton i wzorzec budowniczego.
204
Joomla!. Profesjonalne tworzenie stron W1NW
Wzorzec fabryki abstrakcyjnej Jednym z wzorców konstrukcyjnych jest fabryka abstrakcyjnaJej istotą jest utworzenie klasy — „fabryki", która w odpowiedzi na żądania utworzenia obiektów zwraca obiekty danej klasy. Jeśli tworzenie obiektów odbywałoby się bezpośrednio w każdej części systemu, to zmiana jednej z klas wymagałaby poprawienia i ponownego skompilowania całego systemu, aby można było z niej skorzystać. Dobrym przykładem fabryki abstrakcyjnej jest system szyfrowania. Wyobraź sobie klasę o nazwie EncryptionA (Szyfrowani eA), zawierającą metody, które szyfrują dane, zapisywane następnie w bazie danych. Aby zrealizować ten wzorzec, można by skonstruować klasę 0 nazwie EncryptionObiect, która grając rolę fabryki abstrakcyjnej, zwracałaby egzemplarz obiektu EncryptionA. Wyobraź sobie, że po pewnym czasie zostaje odkryta wada w metodzie wykorzystywanej w EncryptionA. Z tego powodu zostaje utworzona klasa o nazwie EncryptionB, która zawiera bezpieczniejszą metodę. Aby wprowadzić zmiany w systemie korzystającym z wzorca fabryki abstrakcyjnej, wystarczy zmienić klasę EncryptionObject, tak aby zwracała obiekty typu EncryptionB. Jeśli obiekt EncryptionA tworzony jest ręcznie w każdym miejscu programu, gdzie wymagane jest szyfrowanie, uaktualnienie systemu wymaga wprowadzenia wielu zmian 1 ponownej kompilacji. W przypadku wprowadzenia klasy EncryptionC brak zastosowania wzorca fabryki abstrakcyjnej wymusza powtórzenie całej złożonej operacji.
Wzorzec singleton Wzorzec konstrukcyjny singleton jest stosowany w Joomla! głównie w przypadku obiektów łączących z bazą danych. W aplikacjach bazodanowych otwieranie i zamykanie połączeń wprowadza spory narzut. Aby zmniejszyć ubytek wydajności, implementowany jest wzorzec singleton, tzn. w programie wykorzystywany jest pojedynczy egzemplarz obiektu, który odpowiada za połączenie z bazą danych. Zamiast tworzyć nowe połączenie przy każdym zapytaniu, komunikacja przebiega za pośrednictwem istniejącego połączenia. W systemie Joomla! zapytanie z wykorzystaniem obiektu bazy danych wygląda tak: $db =& JFactory::getDB0(); $query = "SELECT *" . "\ n FROM josjnessages" . "\n WERE messageMonth = ". intval(icurMonth); $db->setQuery($query); SmyRows = $db->loadObjectList();
Operator przypisania referencji znajdujący się przed wywołaniem metody JFactory: :getDB0() pozwala wykorzystać istniejący już obiekt bazy danych.
Wzorzec budowniczego Wzorzec budowniczego stosowany jest w sytuacji, kiedy niezbędna jest konwersja danych. Budowniczy gra rolę rozszerzenia dla klasy bazowej nazywanej dyrektorem. Dyrektor przetwarza plik lub strumień wejściowy i rozdziela go na poszczególne elementy. Każdy element jest kolejno przesyłany do budowniczego, który tworzy z nich sformatowany wydruk.
Rozdział 8. • Wzorce projektowe a Joomla!
205
Przykładem dyrektora może być klasa przetwarzająca XML. Przesyła ona każdy znacznik i element drzewa XML do klasy budowniczego. Działanie klasy budowniczego zależy od oczekiwanego formatu wydruku. Jeden budowniczy może zwrócić listę elementów oddzielonych przecinkami, inny może z kolei utworzyć kod SQL, który zapisuje otrzymane elementy w bazie danych. Wzorzec budowniczego pozwala na tworzenie budowniczych niezależnie od dyrektora. Przykładem wykorzystania wzorca budowniczego w Joomla! jest obsługa parametrów modułu. Wartości tych parametrów można zmienić w interfejsie administratora za pomocą opcji Moduły. Kod odpowiedzialny za obsługę parametrów poszczególnych typów (text, textarea, radio button, fi lei i st itd.) znajduje się w katalogu element, który można znaleźć w (zakładając, że zaczynamy w głównym katalogu Joomla!): \libraries\joomla\html\parameter\element W folderze jest kilkadziesiąt plików PHP odpowiedzialnych za poszczególne typy parametrów (xvp.filelist.php, imagelist.php, password.php itd.). Realizacja tego zadania w platformie Joomla! wygląda następująco: dyrektor pobiera listę parametrów modułu, a następnie wywołuje budowniczych poszczególnych typów, którzy generują odpowiedni kod HTML wysyłany do przeglądarki.
tfzopce strukturalne Wzorce strukturalne związane są z organizacją klas w ramach platformy, przy założeniu specyficznego dziedziczenia. Celem tych wzorców jest uproszczenie (na ile to możliwe) powiązań między elementami (lub klasami) systemu. Wzorce należące do kategorii strukturalnych to: adapter, agregat, most, kompozyt, pojemnik, dekorator, rozszerzalność lub platforma, fasada, waga piórkowa, pośrednik, rurki i filtry, dane prywatne klasy oraz wrapper. Najpopularniejsze wzorce wykorzystywane w Joomla! to wzorzec adaptera i wzorzec mostu.
Ifzorzec adaptera Wzorzec adaptera wykorzystywany jest do połączenia ze sobą dwóch niekompatybilnych interfejsów. Stosuje się go w kodzie komponentów łączących z takimi technologiami jak np. Simple Machines Forum. Komponent łączący stanowi dwukierunkowy adapter, pozwala na komunikację dwóch niekompatybilnych systemów.
Ifzorzec mostu Wzorzec mostu pozwala na implementację warstwy abstrakcji za pośrednictwem ustandaryzowanego interfejsu. Najczęstszym przykładem wzorca mostu jest system wydruku. System wydruku przesyła informacje za pośrednictwem standardowego interfejsu do dowolnego sterownika drukarki. Ponieważ interfejs wyjściowy jest abstrakcyjny, użytkownik może zmienić sterowniki bez konieczności zmian w implementacji systemu wydruku.
206
Joomla!. Profesjonalne tworzenie stron W1NW Innym przykładem tego wzorca jest ustawianie typu wydruku komponentu Joomla!. Możliwe typy zawierają m.in. HTML (domyślnie), raw i text (tekst). Każdemu typowi odpowiada klasa, która wyświetla dane w odpowiednim formacie.
Wzorce czynnościowe Wzorce czynnościowe związane są z komunikacją między obiektami. Celem tych wzorców jest uproszczenie i zwiększenie elastyczności komunikacji między elementami systemu. Wzorce należące do tej kategorii to łańcuch odpowiedzialności, polecenie, interpretator, iterator, mediator, pamiątka, obserwator, stan, strategia, szablon, wizytator i jego warianty. Najczęściej wykorzystywane w Joomla! są wzorce obserwatora, łańcucha odpowiedzialności i strategii.
Wzorzec obserwatora W przypadku wzorca obsei~watora obiekt nazywany obserwowanym jest punktem łączącym, który służy do powiadamiania innych obiektów o zmianie parametrów. Każdy obserwator jest rejestrowany, a zmiana w obiekcie reprezentowanym przez obserwowany powoduje jego automatyczne powiadomienie. Prostym przykładem realizacji tego wzorca jest system automatycznego odtwarzania dla urządzeń USB. Wyobraź sobie, że został utworzony obiekt (obserwowany), który monitoruje stan urządzeń USB. Jednym z obserwatorów jest program odtwarzający DVD. Zmiana stanu urządzeń USB (np. wsadzenie płyty DVD do napędu) powoduje poinformowanie wszystkich obserwatorów. Obserwator obsługujący odtwarzacz DVD sprawdzi, po otrzymaniu powiadomienia, czy został wsadzony film, jeśli tak, to automatycznie uruchomi odtwarzanie go (o ile został skonfigurowany w ten sposób). Wzorzec obserwatora wykorzystywany jest w Joomla! do obsługi dodatków (wtyczek). Każdy dodatek jest rejestrowany w systemie wraz z informacją o zdarzeniach, które może obsłużyć. W przypadku wystąpienia zdarzenia danego typu obserwowany (Joomla!) powiadamia obserwatora (dodatek) o tym fakcie.
Wzorzec łańcucha odpowiedzialności Dodatki w systemie Joomla! podążają także za wzorcem łańcucha odpowiedzialności. Założeniem tego wzorca jest przekazywanie zdarzenia między kolejnymi obiektami. Jeśli by porównać ten wzorzec ze wzorcem obserwatora, można by je nazwać obserwatorami. Różnica polega na tym, że obserwatory zostają powiadomione o zdarzeniu, a dodatkowe czynności nie są wymagane zarówno ze strony obserwatora, jak i obserwowanego. Łańcuch odpowiedzialności polega na wysyłaniu powiadomienia do kolejnych obiektów. Jeżeli jeden z nich zwróci informację, że obsłuży dane zdarzenie, proces zostaje zatrzymany, a żadne pozostałe obiekty nie zostają powiadomione.
Rozdział 8. • Wzorce projektowe a Joomla!
207
W Joomla! dodatek może poinformować system, że obsłuży dane zdarzenie. W takiej sytuacji przetwarzanie zostaje przekazane dodatkowi, a system Joomla! nie wykonuje żadnych dodatkowych akcji dla tego zdarzenia.
Iłzorzec strategii W przypadku wzorca strategii algorytmy poddaje się hermetyzacji (zostają zapisane w postaci obiektów). W ten sposób można uaktualniać lub wymieniać algorytmy bez wprowadzania zmian w systemie, zmianom podlega wyłącznie kod algorytmu wewnątrz obiektu. Takie rozwiązanie jest często stosowane podczas implementacji algorytmów uwierzytelniania i szyfrowania. Wzorzec strategii stosowany jest często w połączeniu z wzorcem fabryki. W sytuacji zmiany algorytmu wymieniany jest obiekt zwracany przez fabrykę.
Wzorce współbieżności Chociaż nie należą do wzorców opisanych przez Bandę Czterech, wzorce współbieżności coraz bardziej zyskują na znaczeniu. W kręgu specjalistów od baz danych współbieżność stanowi główny problem. W przypadku typowej, dużej organizacji system baz danych musi być w stanie obsłużyć tysiące użytkowników próbujących w tym samym czasie uzyskać dostęp do tych samych danych, a także zmodyfikować je. Typowy sprzedawca biletów na lotnisku musi sprawdzić, czy może sprzedać bilet lub zrobić rezerwację na dany lot w chwili, kiedy zażąda tego stojący przed nim klient. System podczas przeszukiwania musi sprawdzić listę lotów przylatujących, obecne rezerwacje, możliwe połączenia (być może także te należące do innych linii lotniczych), a nawet przewidzieć procent osób, które nic zrealizują rezerwacji. Program musi na podstawie aktualnej wartości sporej liczby zmiennych sprawdzić dostępność i możliwość rezerwacji lotu. Ten przykład jest odległy od większości zastosowań Joomla! (które nie wymagają współbieżnych operacji na dużą skalę), więc wyobraź sobie inną sytuację: dwóch ludzi (redaktor i dziennikarz) wprowadza zmiany w tym samym artykule dokładnie w tym samym momencie. Joomla! jest CMS-em, co w praktyce oznacza, że istnieje spora szansa, że autor artykułu będzie dodawał kolejne informacje w tym samym momencie, kiedy redaktor poprawia artykuł pod kątem poprawności. Dlatego warto zapoznać się z kilkoma wzorcami współbieżności, aby zrozumieć, w jaki sposób rozwiązują konflikty związane ze współbieżnością, co może mieć zastosowanie obecnie i w przyszłości.
Wzorce architekturalne Wzorce architekturalne nie zostały opisane przez Bandę Czterech, chociaż mają zapewne największe znaczenie dla programistów Joomla!. Wzorce tego typu nakreślają ogólną konstrukcję systemu, opisując, jak funkcjonuje kompletny system.
208
Joomla!. Profesjonalne tworzenie stron W1NW Najpopularniejszym wzorcem z tej grupy jest wzorzec klient-serwer. Polega on na tym, że użytkownik uruchamia większość skomplikowanych obliczeń na własnym komputerze (jego komputer jest w tej terminologii nazywany klientem), a z serwerem łączy się, aby pobrać dane z bazy. Większość operacji przetwarzania danych przebiega na komputerze klienta, a większość danych przechowywanych jest na serwerze — zilustrowano to na rysunku 8.1.
Rysunek 8.1. Implementacja wzorca klientserwer oznacza przetwarzanie związane z interfejsem użytkownika po stronie klienta, a koordynacja danych — po stronie serwera
We wczesnych latach istnienia sieci Web powszechnie stosowany był wzorzec serwerowy, a większość przetwarzania miała miejsce na serwerze. Nawet za pomocą prostej przeglądarki można było korzystać z aplikacji internetowych. Wszystkie dane i logika programu znajdowały się na serwerze, przeglądarka służyła wyłącznie jako prosty wyświetlacz. Nowe technologie tworzące Ajaksa, opisane w rozdziale 7., odpowiadają rozwiązaniu pośredniemu między wzorcem klient-serwer a wzorcem serwerowym. Chociaż aplikacja uruchamiana jest w głównej części na serwerze, przeglądarka pobiera pewną część logiki programu (zazwyczaj w postaci kodu JavaScript). Dlatego pewne elementy przetwarzania, np. kontrola poprawności danych, pobieranie dodatkowych danych, są wykonywane na komputerze klienta, chociaż uruchamiany kod przesyłany jest wcześniej z serwera. Choć w przeszłości konstrukcja Joomla! bazowała na wzorcu serwerowym, to wraz ze wzrostem wykorzystania wzorca klient-serwer Joomla! wchodzi w świat Web 2.0.
Wzorzec serwerowy Joomla! jest esencją systemu serwerowego. Klient (przeglądarka) uruchamia bardzo niewiele lub zero kodu. Serwer wykonuje wszystkie zapytania, tworzy warstwę prezentacji i uruchamia większość kodu. Oprócz edycji treści artykułu (np. za pomocą TinyMCE) także całe przetwarzanie odbywa się na serwerze WWW (za pomocą kodu PHP), a sformatowana strona przekazywana jest do przeglądarki. Wzorzec serwerowy ma prawdopodobnie najdłuższą historię zastosowania w informatyce. Jego korzenie sięgają stosowania kart dziurkowanych — wsadzano je do centralnego komputera, który następnie wyświetlał wyniki. Kolejnym krokiem był system UNIX w latach 70. i 80., gdy wykorzystywano terminale do przesyłania procesów na serwer, na którym były wykonywane.
Rozdział 8. • Wzorce projektowe a Joomla!
209
W erze następującej po Uniksach dominującą rolę przyjął wzorzec klient-serwer, ale już aplikacje internetowe spowodowały wzrost ponownego zainteresowania świata komputerów wzorcem serwerowym. W czasie boomu dot-comów w latach 90. wiele firm przewidywało, że wzorzec serwerowy z powrotem przejmie pozycję głównego modelu tworzenia oprogramowania w świecie komputerów. Słaba wydajność, zrywanie połączeń, niewystarczająco szybkie komputery klientów sprawiły, że ta teza stała się nieprawdopodobna. Z powodu rozpowszechnienia szybkich łączy i wydajnych urządzeń klienckich dominującym wzorcem w przyszłości będzie prawdopodobnie wzorzec uruchamiania po stronie klienta.
Wzorzec uruchamiania po stronie klienta Model uruchamiania po stronie klienta implikuje, iż kod pobierany z serwera odpowiada za większość interaktywnych funkcji po stronie klienta. Zamiast sprawdzać poprawność danych po stronie serwera (np. sprawdzać poprawność kodu pocztowego), pobrany kod wykona zapytanie do serwera bez konieczności przeładowania całego dokumentu. Jeśli wprowadzony kod jest niepoprawny, zostanie wyświetlona prośba o usunięcie błędu. Bazy danych zawierające kody pocztowe są z reguły duże, więc pobieranie ich w całości jest niepraktyczne. Jeśli zagwarantujemy, że sprawdzanie poprawności kodu pocztowego nie wymaga ponownego przeładowania strony, aplikacja napisana według modelu uruchamiania po stronie klienta będzie porównywalnie szybka, jak ta implementująca schemat klient-serwer, co zakłada korzystanie z bazy kodów pocztowych zapisanych na dysku lokalnym. Firma Google podjęła próbę przełamania dominacji aplikacji Microsoftu za pomocą pakietu noszącego nazwę Google Apps Premier Edition. W przypadku tego rozwiązania serwer wykorzystywany jest do przechowywania i rozpowszechniania danych, a moc obliczeniowa komputera pozwala na interakcję przypominającą pracę ze zwyczajnym programem.
Wzorzec Model-Widok-Kontroler Trzy najważniejsze wzorce projektowe systemu Joomla! (Obserwator, Kompozyt i Strategia) połączono w postaci wzorca Model-Widok-Kontroler (MVC — Model-View-Controller). Celem zastosowania tego wzorca jest rozdzielenie aplikacji na trzy obszary, które mogą być rozwijane (w miarę możliwości) niezależnie od pozostałych, przy czym zmiany wprowadzane w jednej części mają minimalny wpływ na resztę. Każdy obszar odpowiada konkretnej warstwie aplikacji: •
Model — Logika lub właściwy kod aplikacji.
•
Widok — Warstwa prezentacji, tekst i grafika.
•
Kontroler — Komunikacja z użytkownikiem, przetwarzanie zdarzeń.
Jeśli odniesiesz te trzy pojęcia do realiów związanych z Joomla!, model odpowiada kodowi PHP i zapytaniom do bazy danych wykonywanym na serwerze WWW. Widok odpowiada
210
Joomla!. Profesjonalne tworzenie stron W1NW szablonowi, który określa sposób wyświetlania zawartości. Kontroler z kolei odpowiada za system zdarzeń menu i rozszerzenia, takie jak moduł wyszukiwania, który przekazuje dane od użytkownika do modelu Joomla! w celu dalszego przetwarzania. Szablony Joomla! stanowią oczywistą demonstrację zalet rozdzielenia obszarów aplikacji. Wybór nowego szablonu w interfejsie administratora może całkowicie zmienić wygląd strony WWW. Jeśli kod modelu i kod widoku byłyby połączone (co w przeszłości było popularną praktyką), zmiana wyglądu wymagałaby dużej ilości programowania. Podobnie rozdzielenie interfejsu użytkownika oraz właściwego kodu aplikacji lub kontrolera i modelu umożliwia pracę z aplikacją na wiele sposobów. Prostym przykładem jest kontroler, który pozwala uruchomić daną funkcję, zdefiniowaną w modelu, z rozwijalnego menu lub po naciśnięciu klawisza. Bardziej zaawansowany przykład to podział na interfejs wiersza poleceń i interfejs graficzny (oba dostępne dla MySQL), dzięki czemu użytkownicy mogą wybrać preferowany sposób pracy z systemem. Na stronie internetowej oddzielny kontroler może odpowiadać za wersję tekstową menu, odpowiednie opisy odnośników i obrazków, które umożliwiają nawigację na stronie z dużą ilością grafiki ludziom z upośledzeniem wzroku. Dzięki zapewnieniu ułatwień dostępu strona może być odwiedzana za pomocą przeglądarki tekstowej (a także, w konsekwencji, przeglądarki głosowej), a kod modelu pobierający treść artykułu pozostaje niezmienny. Przez wiele lat czyniono wysiłki, by wprowadzić model MVC w systemach operacyjnych w celu umożliwienia zmiany interfejsu i tym samym dostosowania go do preferencji użytkownika. Jednym z niezbędnych kompromisów MVC jest spadek wydajności. Rozdzielenie poszczególnych części aplikacji oznacza, że każda z nich traktowana jest jak czarna skrzynka, a informacje muszą być w całości przekazywane z jednej warstwy do drugiej, co sprawia, że optymalizacja staje się trudnym zadaniem. Częściowe zastosowanie modelu MVC jest dowodem na to, że poczyniono wiele wysiłku, aby użytkownicy mogli zmienić wygląd lub temat wykorzystywany przez system operacyjny w zależności od preferencji. Brak pełnej implementacji MVC oznacza, że nadal trudno jest sprawić, aby MacOS wyglądał i działał jak Windows Vista i vice versa. Podobnie jak systemy operacyjne, Joomla! nadal nie obsługuje w pełni tego modelu. Szablony zawierają sporą ilość logiki w postaci kodu PHP (model) po to, aby umożliwić poprawne wyświetlanie. Podobnie pewne aspekty modułów (kontrolery) są blisko powiązane z warstwą prezentacji (widokiem). Jak zaznaczono wcześniej, wzorce projektowe stanowią pewien ideal, do którego można dążyć, a nie kaftan, ogranicznik wszystko-albo-nic. Chociaż implementacja modelu MVC w Joomla! nie jest w pełni zgodna z założeniami wzorca, platforma zawiera definicję obiektów dla każdej warstwy: •
JModel — Klasa, która odpowiada funkcjom modelu w platformie Joomla!.
•
JView — Klasa, która odpowiada za warstwę prezentacji w platformie Joomla!.
•
JControl ler — Klasa, która odpowiada funkcjom kontrolera w platformie Joomla!.
Rozdział 8. • Wzorce projektowe a Joomla!
211
Wykorzystanie wzorca MVC w tworzeniu komponentów W pracy z systemem Joomla! programista zaimplementuje wzorzec MVC, najprawdopodobniej pisząc komponent. Rozszerzenia tego typu posiadają wszystkie trzy warstwy wymieniane przez wzorzec, podczas gdy modułom brakuje aspektów kontrolera, a dodatki zawierają głównie logikę związaną z modelem. W tym podrozdziale dowiesz się, jak zastosować wzorzec MVC, aby stworzyć prosty komponent Hello MVC. Implementacja tego komponentu będzie dobrym przykładem zastosowania wzorców projektowych w praktyce programowania Joomla!. Mam nadzieję, że zmotywuje Cię także do poszukiwania i wprowadzania rozwiązań opartych na wzorcach projektowych w przyszłych aplikacjach. Adaptacja wzorca MVC w komponentach Joomla! wprowadza podział kodu na trzy oddzielne pliki. Odpowiadają one poszczególnym warstwom wzorca MVC: •
Model — Plik hellomvc.php zawiera główną logikę komponentu.
•
Widok — Plik view.html.php zawiera logikę związaną z warstwą prezentacji.
•
Kontroler — Plik controller.php obsługuje interakcje z użytkownikiem.
Rozpocznij od utworzenia folderu \com_hellomvc. Wewnątrz tego folderu utwórz trzy podkatalogi, aby uzyskać poniższą strukturę: \com_hellomvc\controllers \com_hellomvc\models \com hellomvc\views
Mik modelu: hellomvc.php Przykładowy kod komponentu zawiera odwołanie do rozszerzenia odpowiedzialnego za kontroler, plik zawierający kod widoku domyślnie ładowany jest automatycznie. Wprowadź poniższy kod i zapisz go jako hellomvc.php w katalogu \com_hellomvc:
* %version * @package
Ze względu na podział MVC kod modelu nie musi zawierać instrukcji związanych z warstwą prezentacji lub interakcji z użytkownikiem strony. Umożliwia to niezależne udoskonalanie głównej logiki przez profesjonalnych programistów bez konieczności tradycyjnej współpracy z grafikami i projektantami stron.
Pliki widoku W przykładowym pliku widoku możesz dostrzec odwołania do części związanych z kontrolerem i interfejsem użytkownika. Wprowadź poniższy kod i zapisz go pod nazwą view.html.php w folderze: \hellomvc\views\helIomvc:
$Id: hellomvc.php hellomvc
/* Zablokuj
bezpośrednie
defined(
'_JEXEC' ) or die( 'Brak dostępu' ):
/* Zaimportuj jimport(
uruchamianie
7122 2007-06-21
klasę widoku
11:52:292
dam $
*/
*/
'joomla.application.component.view'):
class HelloMvcViewHelloMvc extends JView { function display($tpl = null) { /* Wyświetl powitanie
}
*/
echo "Hello MVC!";
} ?>
O ile to możliwe, w widoku powinny być wykorzystywane elementy warstwy prezentacji wspólne dla wszystkich komponentów Joomla!. Są one dostępne w bogatej bibliotece stylów zdefiniowanych w Joomla!, do których można odwołać się za pomocą atrybutów cl ass i i d. Stosując dostępne style, prezentacja widoku będzie automatycznie dopasowywana do reszty strony dla szablonu wybranego przez użytkownika. Metoda d i s p l a y ( ) wywoływana jest automatycznie, w reakcji na żądanie wyświetlenia strony. Zwróć uwagę, że można j ą zmienić bez wpływu na kod modelu lub kontrolera.
Rozdział 8. • Wzorce projektowe a Joomla!
213
ik kontrolera: controller .php Ponieważ w tym przykładzie nie ma żadnej interakcji z użytkownikiem, kontroler musi zawierać wyłącznie metodę d i s p l a y O , która stworzy prezentację. Wywołując metodę J C o n t r o l l e r : : d i s p l a y O , większość zadań związanych z warstwą prezentacji wykonywana jest automatycznie. Zwróć uwagę, że w kodzie poniższego kontrolera zastosowano, przez dziedziczenie klasy J C o n t r o l l e r , wzorzec obserwatora opisany wcześniej. Kod należy zapisać w katalogu komponentu pod nazwą controller.php:
* @version * @package
/* Odziedzicz klasę JController */ class HelloMVCcontroller extends JController {
/* Jeśli otrzymano żądanie wyświetlenia widoku, * wywołaj metodę display rodzica */ function di s p l a y O {
}
parent::di splay();
} ?>
Po dodaniu odpowiedniej pozycji w menu, która uruchamia ten komponent, zauważysz, że warstwa prezentacji nie różni się od tej, która jest właściwa dla braku implementacji wzorca MVC. Różnice dostrzeżesz, dopiero kiedy będziesz chciał rozbudować jego funkcjonalność lub lepiej dopasować prezentację do aktualnie wybranego szablonu. Zalety zastosowania wzorca MVC staną się wtedy oczywiste. Zamiast obciążać główny kod rozszerzenia specjalnym, obsługującym kilka wyjątków, wystarczy wprowadzić zmiany w warstwie prezentacji, co ograniczy implikację potencjalnych błędów. Zmiany wprowadzane w podstawowych algorytmach w części modelu nie będą miały wpływu na wygląd. Prezentacja może zostać dopasowana do wymagań klienta, a programista nie musi się tym przejmować. Jeszcze większą zachętą jest fakt, że interfejs może być dowolnie rozszerzany, bez wpływu na funkcjonowanie aplikacji. Dodanie takich ułatwień, jak kalendarz otwierany w dodatkowym oknie lub interaktywne sprawdzanie pisowni, nie będzie miało wpływu na kluczowe funkcje komponentu.
214
Joomla!. Profesjonalne tworzenie stron W1NW
Plik deskryptora: hellomvc.xml Wprowadź poniższy kod i zapisz go pod nazwą hellomvc.xml w głównym folderze komponentu: <1nstal1 type="component"
version="1.5.0">
Hel1oMVCl.5.0Przykład zastosowania wzorca MVC w stylu Heli o World.hel1omvc.phpi ndex.htmlcontrol1er.phpvi ews/i ndex.htmlvi ews/hel1omvc/index.htmlvi ews/hel1omvc/vi ew.html.phphel1omvc.phpi ndex.html control1er.phpvi ews/i ndex.htmlvi ews/hel1omvc/i ndex.html views/hel1omvc/view.html.php
Teraz stwórz archiwum zawierające komponent pod nazwą com_hellomvc.zip i za pomocą opcji Rozszerzenia/Instalator zainstaluj go w systemie Joomla!. Jeśli przypiszesz do niego odnośnik w menu, a następnie uruchomisz, zostanie wyświetlone powitanie, co przedstawiono na rysunku 8.2. Rysunek 8.2. Komponent wyświetli powitanie w głównej kolumnie strony
Jest to bardzo piymitywny przykład, który pokazuje wyłącznie zarys tego, co można osiągnąć dzięki modelowi MVC. Przykładowo foldery controllers i models zostały utworzone, ale nie umieszczono w nich żadnych plików, ponieważ komponent składał się z pojedynczego modelu i pojedynczego kontrolera. Tylko jeden plik został umieszczony w folderze \views, podczas gdy standardowy komponent zawiera oddzielny plik widoku dla każdego zadania (takiego jak displaylist, edit, newentry itd.). Komponent został ograniczony do minimum, abyś mógł lepiej poznać podstawy tego sposobu programowania.
Rozdział 8. • Wzorce projektowe a Joomla!
215
Jeśli przyjrzysz się uważniej komponentom dołączonym do Joomla! (wszystkie wykorzystują strukturę MVC), będziesz w stanie rozbudować przykładową implementację Hello MVC na potrzeby komponentu dowolnego typu.
»odsumowanie Znaczenie wzorców projektowych wzrasta wraz ze zwiększaniem się stopnia skomplikowania problemów, które napotykają programiści. Biblioteka sprawdzonych, dobrze udokumentowanych wzorców projektowych stwarza możliwość redukcji kosztów i zapobiegania przekroczeniom terminów, tak częstym w przemyśle informatycznym. Stosowanie wzorców projektowych w programowaniu podsystemów, np. rozszerzeń platformy Joomla!, jest teraz wygodniejsze i korzystniejsze niż kiedykolwiek dotychczas. W tym rozdziale opisano stosowanie wzorców projektowych, a w szczególności: •
Opisano projektowanie rozszerzeń, których implementacja opiera się na skuteczności wzorców projektowych.
•
Badanie istniejącego wzorca projektowego pod kątem zastosowania wzorców projektowych, aby zrozumieć działanie nowych technologii, takich jak Ajax.
Za pomocą wzorców projektowych możesz czerpać z najlepszych praktyk programistycznych w pracy nad dowolnymi rozszerzeniami Joomla!. W rozdziale 9. dowiesz się, jak stworzyć dodatek, który przetwarza artykuły w systemie Joomla!, będąc jednocześnie demonstracją kilku wzorców.
216
Joomla!. Profesjonalne tworzenie stron W1NW
9 Ingerencja w fundamenty Joomla!: wtyczki Czytając tę książkę, miałeś już okazję pisać moduły i komponenty, teraz przyszedł czas na najbardziej skomplikowane rozszerzenia Joomla!: na wtyczki'. Głównym zadaniem modułów jest wyświetlanie informacji, a komponenty służą przede wszystkim do interakcji z użytkownikiem. Rolą wtyczki jest ingerencja w podstawy systemu, zmiana funkcjonalności Joomla! na najniższym poziomie. W tym rozdziale dowiesz się, jak stworzyć prostą wtyczkę Hello World!, a następnie rozbudować j ą do poziomu zaawansowanego rozszerzenia — które przechwytuje treść artykułu, po tym, jak zostanie on pobrany z bazy danych — wprowadzając zmiany, zanim wygenerowana strona zostanie wysłana do przeglądarki użytkownika. Po napisaniu i przetestowaniu tej pary wtyczek, biorąc pod uwagę poprzednie bogate doświadczenia związane z programowaniem modułów i komponentów, dołączysz do grupy zaawansowanych programistów rozszerzeń Joomla!. Ostatnim, uzupełniającym elementem Twojej edukacji będzie zapoznanie się ze szczegółami platformy programistycznej Joomla!. Platforma jest właściwym szkieletem, na podstawie którego skonstruowano CMS Joomla!, składa się z klas, których bezpośrednie wykorzystanie, po uprzednim zrozumieniu, daje niekwestionowane korzyści.
Przegląd wtyczek Joomla!
1
W odróżnieniu od modułów, przechowywanych w folderze \modules, i komponentów, zapisywanych w folderze \components, wtyczki grupowane są w podfolderach odpowiadających ich kategoriom. Przykładowo wtyczki oferujące funkcje związane z wyszukiwaniem przechowywane są w folderze \plugins\search, podczas gdy wtyczki należące do kategorii content znajdują się w folderze \plugm\content. Ang. plug-ins, w polskiej wersji językowej Joomla!, a także w pozostałych częściach tej książki nazywane dodatkami — p r z y p . tłum.
218
Joomla!. Profesjonalne tworzenie stron W1NW Na ekranie Dodatki, w interfejsie administratora, informacja o kategorii danej wtyczki wyświetlana jest w dwóch miejscach: jako przedrostek nazwy wtyczki, a także w kolumnie Typ. Jak widać na rysunku 9.1, nazwę każdej wtyczki poprzedza informacja o typie. Na przykład wtyczka LDAP zostaje wyświetlona na liście jako Authentication — LDAP. Typ wtyczki determinuje sposób jej funkcjonowania w systemie.
Rysunek 9.1. Kategoria danej wtyczki wyświetlana jest w kolumnie Typ, a także w postaci przedrostka nazwy
Wtyczka może należeć do jednej z ośmiu kategorii: •
Authentication (Autoryzacja) — Dostarczają dodatkowych metod związanych z autoryzacją. Kilka domyślnie dołączonych wtyczek z tej kategorii to LDAP, OpenID, GMail i Joomla.
•
Content (Zawartość) — Umożliwiają wprowadzanie zmian w treściach artykułów, po tym jak zostaną pobrane z bazy danych i jeszcze nie zostaną przesłane do użytkownika. Umożliwia to zarówno modyfikowanie (np. ukrywanie adresów e-mailowych, aby zapobiec spamowi), jak i dodawanie informacji (np. oceny danej pozycji, komentarzy użytkowników, opcji nawigacyjnych).
•
Editor (Edytor) — Do tej kategorii należą takie edytory, jak TinyMCE czy XStandard Lite.
•
Editor button (Przyciski edytora) — Mają za zadanie rozszerzanie funkcjonalności dostępnych edytorów poprzez dodawanie przycisków, które służą np. do wstawiania obrazków lub podziału strony. We wcześniejszych wersjach Joomla! wtyczki z tej kategorii nosiły nazwę editor-xtd.
•
Search {Wyszukiwanie) — Dodają możliwość wyszukiwania treści danego typu np. artykułów, sekcji, kontaktów, odnośników, kanałów RSS lub kategorii.
•
System — Wtyczki ingerujące w podstawowe funkcje systemu Joomla!, umożliwiają kontrolę i modyfikację podstawowych zadań, takich jak publikowanie, ukrywanie, a nawet instalacja.
Rozdział 9. • Ingerencia w fundamenty Joomla!: wtyczki •
User (Użytkownik) — Służą do synchronizacji bazy użytkowników z innymi systemami, takimi jak Gallery2, Simple Machines Forum itd.
Utworzenie wtyczki wymaga napisania klasy, która dziedziczy po klasie podstawowej JP1 ugi n. W kodzie tej klasy definiuje się metody, których nazwy odpowiadają zdarzeniom Joomla!. Kod tych metod uruchamiany jest w momencie wystąpienia danego zdarzenia. Przykładowo jeśli zdefiniowałeś w klasie metodę onAfterlnitialiseO, będzie ona uruchomiana za każdym razem, kiedy zostanie odebrane żądanie wygenerowania strony, zanim system Joomla! rozpocznie jakiekolwiek przetwarzanie. Pogrupowanie wtyczek w wyżej wymienione kategorie nie służy wyłącznie do organizacji. Definicja typu danej wtyczki implikuje zbiór przechwytywanych zdarzeń. To ograniczenie nie dotyczy niektórych zdarzeń (szczególnie z kategorii System). Dlatego pogrupowano je w cztery ogólne kategorie: •
Content (Zawartość);
•
Editor (Edytor);
•
System and Search (System i wyszukiwanie);
•
User (Użytkownik).
Zdarzenia należące do powyższych kategorii mogą być wykorzystywane wyłącznie we wtyczce odpowiedniego typu, chociaż większość zdarzeń systemowych może być przechwytywana przez wtyczki dowolnego typu.
[darzenia typu Content Wtyczki typu Content mają w założeniu wprowadzać zmiany w treści artykułów, zanim strona zostanie wysłana do przeglądarki. Przykładowo rozszerzenie Email Cloaking wyszukuje adresy e-mailowe, które zostałyby wyświetlone w treści strony (lub w postaci odnośnika), a następnie wstawia w ich miejsce wersję odporną na spam otrzymaną przez wywołanie procedury JHTMLEmail: :cloak(). Wtyczka, którą napiszesz w dalszej części tego rozdziału, w podobny sposób przeszukuje treść artykułu, z tym, że wstawia słowa i zwroty, w miejsce skrótów, inicjałów i akronimów, które im odpowiadają. W przypadku wtyczek typu Content możliwe jest przechwytywanie poniższych sześciu zdarzeń: •
onBeforeDi spl ay — Uruchamiane przed wyświetleniem treści. Platforma została załadowana, a strona zainicjalizowana.
•
onAfterDi spl ay — Następuje po wyświetleniu treści.
•
onPrepareContent — Aktywowane po wyświetleniu treści przez system Joomla!, ale przed przesłaniem jej do przeglądarki. Jest to najczęściej wykorzystywane zdarzenie, jeśli wtyczki wprowadzają zmiany w treści artykułów. Referencja do aktualnej zawartości artykułu przesyłana jest w postaci parametru a r t i c l e w taki sposób, że wprowadzone zmiany będą bezpośrednio odzwierciedlane
220
Joomla!. Profesjonalne tworzenie stron W1NW w treści przesyłanej przeglądarce użytkownika. Parametr params zawiera tablicę parametrów związanych z widokiem, a parametr limitstart zawiera numer „strony", któremu odpowiada przesyłana zawartość. •
onAfterDisplayTitle — Następuje po wygenerowaniu tytułu, ale przed wyświetleniem zawartości. Funkcje przypisane do tego zdarzenia powinny zwracać tablicę łańcuchów znakowych, każdy z nich zostanie dołączony do treści przed artykułem. To zdarzenie przydaje się szczególnie wtedy, kiedy chcesz stworzyć rozszerzenie wyświetlające obecną ocenę artykułu przez użytkowników.
•
onBeforeDi spl ayContent — Aktywowane bezpośrednio przed wyświetleniem zawartości. Funkcje przypisane do tego zdarzenia powinny zwrócić tablicę łańcuchów znakowych, każdy z nich zostanie dołączony do wynikowego łańcucha. Zdarzenie tego typu jest szczególnie przydatne, jeśli chcesz dodać własne definicje stylów dla wyświetlanych treści.
•
onAfterDi spl ayContent — Następuje po wyświetleniu treści artykułu. Funkcje przypisane do tego zdarzenia powinny zwrócić tablicę łańcuchów znakowych, każdy z nich zostanie wstawiony na stronie, tuż pod treścią artykułu. To zdarzenie przydaje się szczególnie, jeśli zamierzasz dodać system komentarzy, który wyświetli komentarze pod danym artykułem.
Dziedzicząc klasę podstawową JPlugin i określając typ wtyczki jako Content, możesz przechwytywać powyższe zdarzenia i wprowadzać zmiany w treści artykułów.
Zdarzenia typu Editor Zdarzenia typu Editor mają zastosowanie głównie dla wtyczek posiadających funkcje edytorów (takich jak TinyMCE lub XStandard Lite). Do zdarzeń typu Editor należą: •
onlnit — Uruchamiane w momencie inicjalizacji wtyczki. Żadne parametry nie są przekazywane tej funkcji.
•
onDi spl ay — Następuje w momencie, kiedy edytor powinien zostać wyświetlony. Przekazywany jest pojedynczy argument zawierający nazwę edytora.
•
onGetContent — Uruchamiane w momencie otrzymania treści. Przekazywany jest pojedynczy argument zawierający nazwę edytora.
•
onSetContent — Następuje tuż przed wprowadzeniem nowej treści. Przekazywany jest pojedynczy argument zawierający nazwę edytora.
•
onSave — Aktywowane tuż przed zapisaniem treści.
•
onCustomEditorButton — Dzięki temu zdarzeniu można skorzystać z dodatkowych przycisków edytora, takich jak Obraz, Podział strony, Czytaj więcej, dołączonych do standardowej instalacji Joomla!.
•
onGetlnsertMethod — Wykorzystywane przez wtyczkę do wstawienia funkcji JavaScriptu JInsertEditorText, która umieszcza deklarację skryptu dla dokumentu wynikowego.
Rozdział 9. • Ingerencia w fundamenty Joomla!: wtyczki
221
Zdarzenia typu System i Search Zdarzenia typu System odnoszą się do sytuacji związanych z funkcjonowaniem całego systemu. Definicje zdarzeń tego typu można umieszczać we wtyczkach dowolnego typu. Poniżej umieszczono siedem zdarzeń należących do tej kategorii: •
onAfterlniti al ise — Uruchamiane jest w momencie wykonania żądania wygenerowania strony, po załadowaniu platformy i uruchomieniu funkcji, initial i ze, ale przed wygenerowaniem jakiejkolwiek części strony. Ta funkcja jest szczególnie przydatna, jeśli chce się przechwycić dane zadanie (typ zdania można odczytać bezpośrednio z łańcucha żądania) i wykonać wstępne przetwarzanie. Przykładowo wtyczka mogłaby przechwytywać zadanie save (zapisz) i robić kopię zapasową istniejącego artykułu, zanim treść nowego zostanie zapisana w bazie danych.
•
onAfterRoute — Uruchamiane jest po otrzymaniu żądania wygenerowania strony, kiedy platforma jest już załadowana i zainicjalizowana, łańcuch żądania został przetworzony, a odpowiednie parametry (w tym żądany komponent) zapisywane są w obiekcie JRequest.
•
onAfterDi spatch — Uruchamiane jest po załadowaniu platformy, wywołaniu funkcji startujących i przekazania treści do bufora. W momencie uruchamiania kodu odpowiedzialnego za to zdarzenie został już przypisany odpowiedni komponent.
•
onAfterRender — Uruchamiane jest w chwili otrzymania żądania wygenerowania strony, kiedy wynik gotowy do przesłania do przeglądarki zapisany jest w obiekcie JResponse.
•
onSearch — Uruchamiane jest w odpowiedzi na żądanie wyszukiwania.
•
onSearchAreas — Uruchamiane jest w odpowiedzi na żądanie wyszukiwania, z dodatkowym określeniem, jakie „obszary" (ang. areas) mają być przeszukiwane.
•
onGetWebServi ces — Umożliwia implementację introspekcji wtyczek. Introspekcja jest techniką programistyczną polegającą na wysłaniu zapytania do obiektu celem pobrania informacji o jego API i funkcjach. W tym przypadku, jeśli wtyczka zawiera metodę odpowiadającą temu zdarzeniu, może zwrócić listę zaimplementowanych funkcji wraz z opisem wtyczki w formacie doc-string, a także sygnaturę zawierającą typy parametrów. Zdarzenie stosowane głównie we wtyczkach XML-RPC.
Zdarzenia typu User Istnieją dwa podzbiory zdarzeń typu User: zdarzenia związane z uwierzytelnianiem i zdarzenia związane z administracją kontami użytkowników. Uwierzytelnianie odbywa się w części frontowej systemu, a zdarzenia administracyjne powiązane są z modyfikacją kont użytkowników z poziomu interfejsu administratora. Poniżej znajduje się lista zdarzeń powiązanych z uwierzytelnianiem, zawiera m.in. zdarzenia logowania i wylogowywania z systemu:
222
Joomla!. Profesjonalne tworzenie stron W1NW •
onLogi nllser — Wykonywane po sprawdzeniu nazwy użytkownika i hasła względem tabeli użytkowników Joomla!. Jeśli funkcja przypisana do tego zdarzenia zwróci wartość False, autoryzacja użytkownika w systemie Joomla! zostanie zakończona niepowodzeniem.
•
onLogoutUser — Aktywowane przy próbie wylogowania z systemu. Jeśli funkcja przypisana do tego zdarzenia zwróci wartość Fal se, wylogowywanie nie powiedzie się.
•
onAuthenti cate — Uruchamiane po poprawnej autoryzacji, zatwierdzonej przez wszystkie wtyczki, dane logowania przekazywane są w postaci obiektu JAuthenticateResponse, który zawiera również wyniki zwrócone przez wtyczki.
•
onAuthenti cateFai 1 ture — Uruchamiane za każdym razem, kiedy żądanie autoryzacji zostało odrzucone przez kod jednej z wtyczek.
Następujące zdarzenia występują w odpowiedzi na akcje związane z zarządzaniem kontami użytkowników z poziomu interfejsu administratora: •
onBeforeStoreUser — Uruchamiane zanim zmiany konta użytkownika zostaną zapisane w tabeli jos_users.
•
onAfterStoretlser — Aktywowane po zapisaniu zmian w tabeli jos_users.
•
onBeforeDel etellser — Uruchamiane zanim rekord konta użytkownika zostanie usunięty z tabeli jos_users.
•
onAfterDel eteUser — Uruchamiane tuż po usunięciu rekordu konta użytkownika z tabeli jos_users.
Wtyczka Hello World! Ciężko zrozumieć koncepcję zdarzeń, dopóki nie zobaczy się ich obsługi w prawdziwej wtyczce. Biorąc to pod uwagę, stworzymy prostą wtyczkę Hello World!. Rozszerzenie będzie przechwytywać zdarzenie onAfterDisplayTitle. Funkcje obsługujące to zdarzenie wywoływane są po wyświetleniu tytułu i mogą wstawiać dodatkowe informacje, zanim pojawi się treść artykułu. Przykładowe rozszerzenie Hello World! będzie wstawiać pod tytułem każdego artykułu powitanie, co zilustrowano na rysunku 9.2. W odpowiedzi na zdarzenie onAfterDisplayTitle funkcja zwraca tekst w formacie HTML, który wyświetlany jest bezpośrednio pod tytułem2. W przypadku tej wtyczki jest to po prostu łańcuch znaków zawierający powitanie.
2
Dla tego konkretnego zdarzenia zwracany tekst zostanie wyświetlony wyłącznie, jeśli Tekst danego artykułu został wyłączony — przyp. tłum.
wprowadzający
Rozdział 9. • Ingerencia w fundamenty Joomla!: wtyczki • Hie News > Welt Links
ysunek 9.2. Vtyczka Hello Vorld! wstawia owitanie między /tulem a treścią rtykułu
* N<;ws feeds
223
Joomla! Overview Hello W o i Id!
If you're new to Web publishing systems, you'll find that Joomla! delivers sophistii robust enterprise-level Web site, empowered by endless extensibility'for your foes system of choice for small business or home users who want a professional loo conten t right So what's the catch? How much does this system cost? Well, there's good news ... and more good news! Joomla! 1.5 is free, it is release Public License v 2.0. Had you invested in a mainstream, commercial alternative add new functionality would probably mean taking out a second mortgage each ti
Podobnie jak przy tworzeniu modułów i komponentów, musisz stworzyć plik deskryptora w formacie XML, który zawiera informacje dla instalatora dotyczące szczegółów wtyczki, a także plik zawierający uruchamiany kod PHP.
worzenie pliku deskryptora Tworzenie wtyczki warto rozpocząć od stworzenia pliku deskryptora, korzystając z edytora tekstowego lub za pomocą IDE. Wprowadź poniższy kod i zapisz go pod nazwą plg ^•HelloWorld.xml: Content - Hello WorldDan RahmelJuly 2007admin@joomlajumpstart.com www. jooml a jumpstart. com1.0Wstawia powitanie "Hello World!" pod tytułem każdego artykułu.plgHel1oWorld.php
Plik XML przypomina w sporym stopniu dotychczasowe deskryptory, tworzone dla pozostałych rozszerzeń. Zawiera on jednak grupę parametrów specyficznych dla definicji wtyczki. Zwróć uwagę, że znacznik zawiera dwa atrybuty, które wskazują, że dane rozszerzenie jest wtyczką: type i group. Wartość atrybutu type nie wymaga wyjaśnień. Atrybut group wskazuje na kategorię wtyczki, jedną z wyszczególnionych wcześniej (content, user, search, authentication itd.). Pliki należące do wtyczki zostaną zapisane w folderze odpowiadającym danej grupie. Kolejnym elementem, na który musisz zwrócić szczególną uwagę, jest atrybut plugin znacznika . Wprowadzona nazwa powinna dokładnie odpowiadać nazwie pliku z kodem PHP — bez rozszerzenia. W przypadku wystąpienia zdarzenia ładowany jest plik PHP odpowiadający nazwą wartości tego atrybutu, która (w momencie instalacji) zapisywana jest w polu element, tabeli jos_plugins. Jeśli wyszukiwanie pliku zakończy się niepowodzeniem, kod odpowiedzialny za obsługę zdarzenia nie zostanie uruchomiony.
224
Joomla!. Profesjonalne tworzenie stron W1NW
Tworzenie kodu wtyczki
Po zapisaniu pliku deskryptora utwórz kolejny plik i zapisz go pod nazwą pl gHel 1 oWorl d. ph Umieść w nim następujący kod:
* @version * @package
// Konstruktor kompatybilny z PHP4 function plgContentHelloWorld( & $subject ) { parent:: construct( Ssubject ):
}
// Nazwa funkcji odpowiada nazwie zdarzenia function onAfterDisplayTitle(& iarticle. & iparams, $1imitstart=0) { $myOutput = "
Hello World!
": return SmyOutput:
}
}
// Zainicjuj wtyczkę, podając jako parametr egzemplarz dyspozytora zdarzeń $myPlugin =& new plgContentHelloWorld(JDispatcher::getlnstance() ?>
):
Analizując powyższy kod, powinieneś zauważyć, że nowa klasa o nazwie plgContentHell o EWorld dziedziczy klasę abstrakcyjną JPlugin. Pierwsza zdefiniowana metoda nosi nazwę pokrywającą się z nazwą klasy, i z tego powodu gra rolę konstruktora. W tym przypadku, dla zachowania kompatybilności z PHP4, uruchamia ona jedynie konstruktor klasy rodzica.
Poniżej znajduje się definicja funkcji obsługującej zdarzenie onAfterDisplayTitle. Wystąpienie tego zdarzenia skutkuje przekazaniem trzech parametrów umożliwiających odczytanie (ale nie zmianę) zawartości artykułu, dla którego zostało wygenerowane zdarzenie. Ponieważ tworzymy prosty program wyświetlający powitanie, możesz spokojnie zignorować te parametry. Kod funkcji zawiera definicję łańcucha znaków "Hel lo World!", który następnie zwracany jest do funkcji wywołującej za pośrednictwem instrukcji return. To by było na tyle. Utwórz archiwum zawierające plik XML i PHP (może być w formacie ZIP lub Tarball). Za pomocą opcji Rozszerzenia/Instalator zainstaluj plik w systemie. Domyślnie nowe wtyczki nie są aktywne. Przejdź do ekranu Dodatki, aby opublikować dane rozszerzenie (znajdziesz je pod nazwą Content— Hello World!), co spowoduje jego aktywację. Jeśli otworzysz teraz stronę Joomla!, zauważysz, że między tytułem a treścią każdego artykułu zostało wstawione powitanie. Nie było to wcale trudne, prawda? Kolejna wtyczka będzie odrobinę bardziej skomplikowana, tak jak jej zadanie. Przejdź teraz do opcji Dodatki i wyłącz wtyczkę Hello World!, aby nie zaśmiecała i nie spowalniała systemu.
Rozdział 9. • Ingerencia w fundamenty Joomla!: wtyczki
225
Jeśli aktywowałeś wtyczkę, a mimo to nie pojawiło się żadne powitanie przed treścią artykułów, istnieją dwa prawdopodobne scenariusze. Możliwe, że przeglądasz skróty artykułów, które znajdują się na stronie głównej, ale dla których nie jest uruchamiane zdarzenie onAfterDisplayTi tle. Kliknij odnośnik Czytaj więcej... lub tytuł artykułu, aby przejść do danego artykułu, a powitanie powinno zostać wyświetlone we właściwym miejscu. Druga ewentualność to wyłączona opcja Tekst wprowadzający dla jednego lub wszystkich artykułów. Przejdź do opcji Artykuły w interfejsie administratora, a następnie kliknij przycisk Preferencje. Przestaw opcję Tekst wprowadzający na Pokaż. Możesz także zmienić ustawienia dla danego artykułu, znajduje się ono w grupie Parametry: rozszerzone.
Wtyczka Automatyczne Skróty Najwięcej wtyczek spośród wszystkich tworzonych zalicza się do grupy tych, które zmieniają treść istniejących artykułów, zanim zostaną one przesłane do przeglądarki użytkownika. Wtyczka może cenzurować tekst, ukrywać adresy e-mailowe, aby zapobiec spamowi, dodawać reklamy do słów kluczowych w stylu Google AdSense, przycinać treść artykułów dla niezarejestrowanych użytkowników i tak dalej. Dlatego najwięcej pożytku przyniesie Ci stworzenie rozszerzenia, które zmienia treść artykułu. Wtyczka Automatyczne Skróty, którą stworzysz, będzie przeszukiwać tekst pod kątem fraz dających się zapisać w postaci skrótów. Przykładowo dodający mógłby wstawić w treści artykułu skrót „NBP", który odpowiada prawdopodobnie nazwie Narodowy Bank Polski. Wtyczka przechwyci treść artykułu pobraną z bazy danych i rozwinie skróty, zanim artykuł zostanie przesłany do przeglądarki. Ponieważ żadne zmiany nie są zapisywane w bazie, właściwy artykuł pozostaje nietknięty. Chociaż nasza wtyczka nie służy do rozwiązania poważnego problemu, demonstruje wszystkie kluczowe punkty implementacji, a także ułatwia zrozumienie systemu wtyczek Joomla! oraz stanowi doskonałą podstawę do tworzenia podobnych rozszerzeń. Tak naprawdę większość popularnych wtyczek typu Content (cenzura, ukrywanie adresów e-mailowych itd.) daje się odtworzyć przez wprowadzenie wyłącznie kilku zmian w kodzie rozszerzenia Automatyczne Skróty. Zanim stworzysz rozszerzanie, napisz nowy artykuł za pomocą opcji Artykuły. Przykładowy artykuł wykorzystany na potrzeby tej wtyczki może brzmieć tak: Analizując ww. dane, warto zwrócić uwagę na poziom wynagrodzenia, tj. przychód netto dla danych zawodów, np. nauczyciel stażysta zarabia 800 zł netto. Problem niskich plac dot. głównie zawodów finansowanych z budżetu, a dotychczasowy projekt nie przewiduje poprawy tego stanu rzeczy. Powyższy fragment zawiera nie tylko kilka skrótów, ale także demonstruje zdolność odróżniania skrótów — pasujące litery nie są zamieniane na pełną formę, jeśli stanowią one fragment jakiegoś słowa. Przykładowo słowo dotychczasowy zawiera znaki odpowiadające skrótowi „dot.". Jeśli wtyczka opierałaby się na prostej operacji znajdź i zmień, fragmenty słów mogłyby zostać potraktowane jako skróty, a ich rozwinięcie zniekształciłoby tekst. Kod wtyczki powinien zawierać instrukcje, które zapobiegną takim sytuacjom.
226
Joomla!. Profesjonalne tworzenie stron W1NW Po wyświetleniu artykułu w niezmienionej formie na stronie głównej odpowiada on dokładnie wprowadzonemu tekstowi (zobacz rysunek 9.3). Artykut próbny
The News Weit Links News Fee*ls
Rysunek 9.3. Ponieważ wtyczka Automatyczne Skróty nie została jeszcze zainstalowana i aktywowana, tekst artykułu zawiera wiele skrótów
Analizując ww. dane warto zwrócić uwagę na poziom wynagrodzenia, ii zarabia 800 zł netto. Problem niskich płac dot. głownie zawodów tinans poprawy tego stanu rzeczy.
Po utworzeniu i aktywacji wtyczki skróty zostaną zastąpione odpowiednimi wyrażeniami, a lektura tekstu będzie prostsza (zobacz rysunek 9.4). • lite News • Weh Links
Rysunek 9.4.
Artykuł próbny
• News Feetls
Po uruchomieniu wtyczki skróty zostaną rozwinięte, a pełny tekst przesłany do przeglądarki
Analizując wyżej y^miemone dane warto zwrócić uwagę na poziom wynagrodzenia, to zawodów, na przykład nauczyciel stażysta zarabia 800 zł netto Problem niskich płac dt finansowanych z budżetu, a dotychczasowy projekt nie przewiduje poprawy tego stanu
IM.C i . ""MMMIIffliWBailw r i I • Extension«
Aby zrealizować założenia tego rozszerzenia, konieczne będzie zdefiniowanie metod obsługujących zdarzenia typu Content. Sposób wprowadzania zmian w treści artykułów będzie odpowiadać innym zdarzeniom tego typu.
Kod deskryptora XML Rozpocznij od utworzenia pliku deskryptora. Wprowadź poniższy kod do edytora tekstu lub IDE i zapisz go pod nazwą replaceabbr.xml:
encoding="utf-8"?>
version="1.5" type="plugin"
Content - Automatyczne Dan
group="content">
Skróty
Rahmel
July 2007admin@joomlajumpstart.comwww. joomla jumpstart. com1.0Zastępuje skróty odpowiadającymi
wyrażeniami,
replaceabbr.php
Znacznikowi można przypisać dowolną wartość, jednak konwencja Joomla! przyjmuje nazewnictwo z przedrostkiem wskazującym typ wtyczki (w tym przypadku „Content -"). Rozszerzenie będzie działać nawet, jeśli zignorujesz tę konwencję, jednak zastosowanie się do niej ułatwia określenie typu wtyczki wyświetlanej na liście w interfejsie administratora.
Rozdział 9. • Ingerencia w fundamenty Joomla!: wtyczki
227
Nazwa wtyczki systemu Joomla! przekazywana jest w postaci atrybutu plugin znacznika . W przypadku tej wtyczki atrybut plugin ma jeszcze większe znaczenie niż dla rozszerzenia Hello World!. Odpowiednie ustawienie jest niezbędne do późniejszego pobrania parametrów. Ta wtyczka ma jeden parametr— repl ace_l imit (limit zmian). Jego użyteczność w przypadku wtyczki Automatyczne Skróty jest wątpliwa, ale jednak to pełnoprawna demonstracja stosowania parametrów.
(od wtyczki Po zapisaniu pliku deskryptora na dysku twardym utwórz plik o nazwie w tym samym katalogu, a następnie wprowadź poniższy kod:
replaceabbr.php
$ld: replaceabbr.php ReplaceAbbr
6138 2007-07-02
03:44:18Z
danr $
bezpośrednie uruchamianie '_JEXEC' ) or die( 'Brak dostępu' ):
class plgContentReplaceabbr extends JPlugin { // Konstruktor kompatybilny z PHP4 function plgContentReplaceabbr( & isubject ) { parent:: constructi isubject );
}
// Nazwa funkcji odpowiada
nazwie
zdarzenia
function onPrepareContentt&iarticle. &$params, $1imitstart=0) { //Pobierz wartość parametrów, na wypadek gdyby były potrzebne później iplugin =& JPluginHelper::getPlugin('content'. 'replaceabbr'): ipluginParams - new JParameter( $plugin->params ): $num =1; if (!$pluginParams->get('replace_limit', 1)) { $num = $pluginParams->get('replacejimit'. 1):
}
if ( !JString::strpos( $article->text. $article->text = str_replace(
Joomla!. Profesjonalne tworzenie stron W1NW // Utwórz tablicą zawierającą rozwinięcia skrótów // Umieszczane są po dwa rozwinięcia w jednej linii, // co ułatwia dopasowanie do powyższej listy. $actual=array("dotyczy". "doktor". "magister", "na przykład", "według", "wyżej wymienione", "to jest", "to znaczy"
); // Dodaj znaki tworzące wyrażenie regularne ze skrótów, // abv dopasowywane byty wyłącznie poprawne skróty, //dodatkowo ignoruj wielkość liter for($i=0:$i < sizeof(iabbr);$i++) { $abbr[$i] = " A \ b " . str_replace('. 1 ,
}
",
$abbr[$i]) . "\\b\.?/i":
// Zastąji skróty za pomocą wyrażeń regularnych $myStr = preg_replace ( $abbr, Sactual. $myStr. $num):
// Zwróć zmieniony ciąg
}
}
return SmyStr;
imyPlugin =& new plgContentReplaceabbr(JDispatcher::getlnstance()
);
Kod powyższego rozszerzenia jest odrobinę bardziej skomplikowany niż wcześniejsza wtyczka Hello World!. Rozpoczyna się od definicji klasy dziedziczącej JPlugin, pod nazwą plgContent "-»-Replaceabbr.
Wtyczka zawiera metodę obsługującą zdarzenie onPrepareContent. To zdarzenie uruchamiane jest w momencie, kiedy treść artykułu jest gotowa do wysłania do przeglądarki. Jak mogłeś zauważyć, funkcja ma trzy parametry: iarticle, iparams i $1 imitstart. Pierwsze dwa przekazywane są za pomocą referencji, co umożliwia modyfikację wartości tych zmiennych — z czego zresztą skorzystamy. Parametr $1 imitstart zawiera numer aktualnej „strony", co nie ma znaczenia dla tego przykładu. Wtyczka Automatyczne Skróty ma parametr (o nazwie replace_l i mit), którego wartość musi zostać pobrana. Referencję wtyczki otrzymuje się za pomocą funkcji JPluginHelper:: ^getPlugin. Następnie odczytywane są wartości parametrów, a stan parametru replacej i mit zapisywany jest w postaci zmiennej $num. Przed rozpoczęciem przetwarzania następuje sprawdzenie, czy w treści artykułu znajduje się znacznik wskazujący, że dany artykuł powinien zostać zignorowany przez wtyczkę. Instrukcję {replaceabbr=off} należy wpisać w treść artykułu. Nie jest to ani dyrektywa patTemplate, ani żadna formalna deklaracja — j e s t to znacznik wymyślony na potrzeby tego rozszerzenia, aby umożliwić wyłączanie przetwarzania danych artykułów bez dezaktywowania wtyczki. W przypadku wystąpienia znacznika jest on usuwany z treści artykułu, a dalsze zmiany zostają zblokowane za pomocą instrukcji return. Jeśli odpowiedni znacznik nie zostanie zlokalizowany, wartość $article~>text (przechowuje aktualny artykuł) przekazywana jest funkcji replaceAbbrStrO w celu rozwinięcia skrótów. Następie nadpisywana jest oryginalna treść zmiennej $article->text danymi zwróconymi przez funkcję. Instrukcja powrotu kończy funkcję i przekazuje sterowanie systemowi.
Rozdział 9. • Ingerencia w fundamenty Joomla!: wtyczki
229
Funkcja repl aceAbbrStr() jest zwyczajną funkcją PHP, która wykorzystuje dwie tablice, w jednej umieszczane są wyrażenia regularne, a następnie uruchamia preg_repl ace(), aby zamienić pasujące wystąpienia na odpowiedniki, które zamieszczono w drugiej tablicy. Pierwszy argument funkcji preg_replace() zawiera listę skrótów, które powinny zostać rozwinięte. Deklaracja tablicy zawiera po dwa wpisy w jednej linii, co ułatwia programiście odczytywanie i łączenie z odpowiednimi rozwinięciami zapisanymi w drugiej tablicy. Zanim zostanie wywołana funkcja preg replaceO, niezbędna jest zmiana formatu skrótów, aby tworzyły one wyrażenia regularne. Wyrażenie regularne rozpoczyna się znakiem ukośnika (/), który jest rodzajem ogranicznika dla danego wyrażenia. Ciąg \\b odpowiada komendzie \b, zapis z dwoma lewymi ukośnikami jest konieczny, aby nie został potraktowany jako sekwencja specjalna. Wstawienie \b na początku i na końcu danego skrótu oznacza, że musi on stanowić samodzielne „słowo" (tzn. być z jednej i z drugiej strony ograniczony znakiem interpunkcyjnym lub znakami odstępu). Poprzez wywołanie funkcji str_repl ace() usuwane są kropki (które są elementem wyrażeń regularnych). Wyrażenie kończone jest kolejnym ukośnikiem (/), po nim występuje dyrektywa i, która informuje kod przetwarzający wyrażenia regularne, żeby ignorować wielkość liter przy wyszukiwaniu. Jeśli nie zapoznałeś sięjeszcze z przetwarzaniem tekstu za pomocą wyrażeń regularnych, powinieneś uzupełnić braki w edukacji. Wyrażenia regularnie to potężne narzędzie przetwarzania tekstu, a ich użycie może oszczędzić ogromnie dużo czasu i energii. Doskonałe przewodniki znajdziesz na stronie www.regular-expressions.info/php.html. Funkcja preg_replace() wywoływana jest z czterema parametrami, pierwszy zawiera tablicę skrótów ($abbr), drugi odpowiadające rozwinięcia (Sactual), trzeci przeszukiwany tekst (SmyStr), a czwarty maksymalną liczbę zmian każdego skrótu ($num). Jeśli ostatniemu parametrowi przypisano wartość -1 (wartość domyślna), nie zostaną wprowadzone ograniczenia liczby zmian. Wynik zapisywany jest w zmiennej SmyStr i zwracany do funkcji wywołującej. Jestem pewien, że dzięki tej prostej, przykładowej wtyczce zrozumiałeś potęgę tkwiącą w systemie rozszerzeń. Prawdopodobnie wiesz już, w jaki sposób wtyczki ingerują w podstawy platformy Joomla! i wpływają na podstawowe aspekty działania systemu.
ludowa platformy Joomla! Teraz, kiedy posiadasz już umiejętność programowania rozszerzeń wszystkich trzech typów (moduły, komponenty i wtyczki), Twoja praca programistyczna będzie wymagać ścisłej integracji tworzonych rozszerzeń z systemem Joomla!. Przekłada się to na konieczność zrozumienia działania tego systemu na najniższych poziomach, a także na wywoływanie funkcji składających się na platformę. Platforma Joomla! została podzielona na kilkanaście pakietów, większość z nich ma własny katalog, który zawiera pliki źródłowe:
230
Joomla!. Profesjonalne tworzenie stron W1NW •
Pakiet Application — JAppl i cation i powiązane biblioteki zaimplementowano z wykorzystaniem wzorca fabryki (w rozdziale 8. znajduje się więcej informacji na temat wzorców projektowych). Cztery klasy, które dziedziczą ten pakiet (JInstal 1 ation, JModel, JSite, JAdministrator) t w o r z ą C M S Joomla!. Pakiet
zawiera także biblioteki DAO (Data Access Object — Obiekt dostępu do danych), tzn. a b s t r a k c y j n ą klasę JModel, a także klasy JModel Category, JModel Component, JModelMenu, JModelModule, JModel PI ugins, JModel Section. JModelSession
i JModel User. Całość znajduje się w katalogu •
\libraries\joomla.
Pakiet Cache — Implementacja bibliotek obsługujących pamięć podręczną; abstrakcyjna klasa dziedziczona jest w postaci klas obsługujących pamięć podręczną, z a w i e r a a d a p t e r y JCacheCal 1 back, JCacheView, JCacheOutput i JCachePage.
•
Pakiet Base — Podstawowy pakiet składający się z klas takich jak JObject, który służy za podstawę obiektów JObservable i JTree. Zapisany w katalogu \libraries\joomla\base.
•
Pakiet Client — Zawiera biblioteki klienckie dla np. FTP (klasa JFTP) lub LDAP (klasa JLDAP). Pliki znajdują się w katalogu \libraries\joomla\client.
•
Pakiet Database — JDatabase i powiązane biblioteki tworzą warstwę łączącą z funkcjonalnością baz danych. Klasy obsługujące dostęp do baz danych dziedziczą po JDatabase. Obecnie dostępne są wyłącznie klasy JDatabaseMySQL i JDatabaseMySQLi, ale planowane jest stworzenie odpowiedników dla Oracle i Microsoft SQL Server. Klasa JSimpleRecordSet wykorzystywana jest w interakcji z bazą danych. Pakiet znajduje się w katalogu \libraries\joomla\database.
•
Pakiet Document — Biblioteki zawierające funkcje do generowania stron takich jak abstrakcyjna klasa JDocument. Klasa JDocumentHTML, która tworzy strony HTML stanowi rozszerzenie klasy JDocument. Pakiet znajduje się w katalogu \libraries\joomla\document.
•
Pakiet Environment — Klasy obsługujące interakcje z użytkownikiem, np. JReponse, JRequest, JBrowser i JURI (ta ostatnia przetwarza adresy URI). Pakiet znajduje się w katalogu \libraries\joomla\environment.
•
Pakiet Event — Obsługuje system zdarzeń w Joomla!, zawiera klasę JDi spatcher, która dziedziczy JObservable (znajduje się w pakiecie Base); JPluginHelper; JEvent, która dziedziczy JObserver; i JP1 ugi n, która dziedziczy JEvent. Pakiet znajduje się w katalogu \libraries\joomla\event.
•
Pakiet Filesystem — Biblioteki związane z obsługą systemu plików. Zawiera klasy JArchive, JFile, JFolder i JPath. Procedury zarządzania plikami wykorzystywane są głównie dla wysyłanych plików, tj. multimediów, rozszerzeń i pakietów językowych. Pakiet znajduje się w katalogu \libraries\joomla\filesystem.
•
Pakiet Filter — Biblioteki filtrujące dane wejściowe i wyjściowe z dowolnego źródła celem zapobiegnięcia atakom. Zawiera klasy JInputFi Iter i JOutputFi Iter. Pakiet znajduje się w katalogu \libraries\joomla\fdter.
•
Pakiet il8n — Biblioteki obsługujące ustawienia regionalne i języki, zawiera klasy JLanguage (implementacja wzorca singleton), JText i JHelp. Pakiet znajduje się w katalogu \libraries\joomla\il8n.
Rozdział 9. • Ingerencia w fundamenty Joomla!: wtyczki •
231
Pakiet Installer — Biblioteki związane z instalacją rozszerzeń. Zawiera abstrakcyjną klasę JInstal ler, na podstawie której stworzone zostały klasy JInstal!erComponent, JInstallerLanguage, JInstal lerModule, JInstallerPlugin i JInstallerTemplate.
Pakiet znajduje się w katalogu • •
\libraries\joomla\installer.
Pakiet Parameter — Biblioteki służące do manipulowania i wyświetlania parametrów. Pakiet znajduje się w katalogu \libraries\joomla\parameter. Pakiet Registry — Biblioteki powiązane z konfiguracją systemu. Zawiera klasy JRegistry, JRegistryFormat, JRegistryFormatlNI, JRegistryFormatXML,
JRegistryFormatPHP. Pakiet znajduje się w katalogu •
\libraries\joomla\registry.
Pakiet Session — Biblioteka do obsługi sesji Joomla! za pomocą klas JSessionStorage i JSession. Pakiet znajduje się w katalogu \libraries\joomla\session.
m Pakiet Template — Biblioteki obsługi szablonów patTempl ate. Ponieważ twórcy Joomla! odchodzą od wykorzystania patTempl ate, nie zaleca się wykorzystywania funkcji i klas z tego pakietu — w przyszłości mogą wystąpić problemy z kompatybilnością. Pakiet znajduje się w katalogu \libraries\joomla\template. •
Pakiet User — Biblioteki służące do aktywacji, autoryzacji i uwierzytelniania użytkowników. Zawiera klasy JAuthorization; JUserHelper; JAuthentication, która dziedziczy JObservable; i JUser. Pakiet znajduje się w katalogu \libraries\ joomla\user.
m Pakiet Utilities— Różne biblioteki, tn.in. JError, JMail, JMai 1 Hel per, JProfiler i JPagination. Klasa JUti lity z a w i e r a m e t o d y sendMai 1 0 , sendAdminMai 1 0 , getHashO, getTokenO, parseAttributesO i isWinOSO. Inne f u n k c j e n a r z ę d z i o w e
ułatwiają obsługę tablic, buforów, dat, błędów, funkcji, dzienników, poczty, • profilowania, simplexml i ciągów znaków. Pakiet znajduje się w katalogu \libraries\joomla\utilities. Biblioteki związane z pocztą elektroniczną, włączając w to klasę JMai 1, która dziedziczy klasę PHPMai 1 er. Klasa JMai 1 Hel per posiada kilka funkcji związanych z listami elektronicznymi, np. cleanLine(), cleanText(), cleanBodyO, cleanSubjectO, cleanAddress() i isEmailAddressO.
Jak wspomniano w poprzednich rozdziałach, CMS Joomla! jest właściwie aplikacją zbudowaną na podstawie platformy Joomla!. Możliwe jest stworzenie innych aplikacji za pomocą tej platformy, ale informacje na ten temat wykraczają poza ramy tej książki. Bezpośrednie programowanie platformy wymaga dokładniejszej analizy i lepszego zrozumienia kodu źródłowego Joomla!. U podstaw platformy Joomla! leżą dwie klasy: JFactory i JVersion. JFactory to implementacja wzorca fabryki, służy do zwracania różnych obiektów, a JVersion przechowuje informacje dotyczące wersji aktualnej instalacji. Prawdopodobnie nie będziesz korzystał z nich bezpośrednio, jednak są one podstawą, znajdują się na najniższym poziomie platformy, dlatego może warto rozpocząć dokładne badania Joomla! właśnie od nich.
232
Joomla!. Profesjonalne tworzenie stron W1NW
Struktura CMS Joomla! (JApplication) CMS Joomla! składa się z trzech aspektów: •
Instalator — Część instalacyjna obsługuje czynności związane z instalacją i wstępną konfiguracją systemu Joomla!. Następnie wykonuje pierwsze uruchomienie systemu i nie jest wykorzystywana nigdy więcej.
•
Część frontowa — Widziana jest przez użytkowników strony. W większości przypadków jest to dostęp tylko do odczytu. Dane odczytywane są z bazy danych MySQL i wyświetlane w przeglądarce w postaci sformatowanej strony WWW. Wyjątkami od tej reguły mogą być funkcje interaktywne (np. głosowanie w sondzie).
•
Część administracyjna — Wykorzystywana jest praktycznie wyłącznie w celu dodawania i wprowadzania zmian w zawartości strony. Nawet redaktorzy spędzają niewiele czasu, przeglądając artykuły w części administracyjnej. Ruch w tej części (zarówno odczyt, jak i zapis) jest zdecydowanie mniejszy niż w części frontowej.
CMS Joomla! został podzielony na trzy różne „aplikacje", które uruchamiane w różnych momentach, wypełniają wymienione wyżej zadania: •
JSite — część frontowa aplikacji;
•
JAdmi ni strator — cześć administracyjna;
•
Jlnstallation — interfejs instalacji.
Wszystkie powyższe klasy dziedziczą abstrakcyjną klasę JApplication. Ponieważ praktycznie wszystkie rozszerzania pisane są z myślą o współdziałaniu z klasą JSite, klasy JAdmi ni strati on i Jlnstallation zostanąjedynie pobieżnie opisane.
Aplikacja Jlnstallation Aplikacja instalująca, której odpowiada klasa JInstal 1 at i on, jest uruchamia zazwyczaj wyłącznie jeden raz — w momencie instalowania systemu. Pliki źródłowe można znaleźć w katalogu 1 installation. Większość podstawowej logiki znajduje się w katalogu \installation\ includes. Zawiera on poniższe pliki: •
application.php — Inicjalizuje i uruchamia aplikację instalującą, tworzy sesję.
•
defines.php — Tworzy globalne zmienne, zawierające ścieżki wykorzystywane podczas instalacji.
•
framework.php — Importuje biblioteki platformy Joomla!, wykorzystywane przez instalator.
•
xajax.php — Zawiera kod ajaksowy stosowany przy asynchronicznej analizie składniowej plików XML, obsługuje instalację przykładowych danych, sprawdzania poprawności połączenia FTP, uzupełniania informacji wykorzystywanych przy sortowaniu danych w bazie.
Rozdział 9. • Ingerencia w fundamenty Joomla!: wtyczki
233
Katalog \installation\installer zawiera następujące pliki: •
controller.php — Zawiera definicję klasy JInstal 1 ationControl 1 er, główny kod instalatora. Obsługuje wyświetlanie ekranów instalacji, tj. wybór języka, wstępne sprawdzanie, wyświetlanie warunków licencji GPL, konfigurację bazy danych i FTP oraz ekran końcowy. Zawiera także logikę do utworzenia bazy danych.
•
html.php — Zawiera logikę do obsługi warstwy prezentacji, wyświetlania ekranów wygenerowanych przez JInstal 1 ationControl 1 er.
jajax.php — Obsługuje zadania ajaksowe, procedury w pliku xajax.php.
Chociaż rzadko będziesz wykorzystywać procedury instalatora, jednak warto zapoznać się z jego kodem źródłowym, ponieważ podczas instalacji mogą wystąpić problemy. Komunikaty o błędach i inne problemy, które nie zostaną wyjaśnione na ekranie, mogą mieć wyjaśnienie w kodzie źródłowym. Nie powinieneś zakładać, że aplikacja instalująca będzie znajdować się na normalnej stronie Joomla!. Katalog I installation musi zostać usunięty po zainstalowaniu Joomla! na serwerze. Dlatego nie jest możliwy dostęp do niego, i to niezależnie od motywów, którymi się kierujemy.
iplikacja frontowa JSite Najważniejszym etapem podczas analizy kodu platformy Joomla! będzie JSite. Aplikacja JSite zawiera kod odpowiedzialny za pobieranie informacji z bazy danych MySQL, łączenie z wybranym szablonem i przesyłanie wyniku do przeglądarki użytkownika. Obsługuje również funkcje związane z logowaniem i interakcją z użytkownikiem. Podobnie jak przy innych aplikacjach opartych na platformie Joomla!, uruchamianie aplikacji rozpoczyna się od załadowania pliku index.php w głównym katalogu. Następnie ładowane są trzy najważniejsze pliki: defines.php, framework.php i application.php. Plik zawierający główną definicję klasy JSite (application.php) znajduje się w katalogu 1 includes. Kod w pliku index.php tworzy egzemplarz klasy JSite i po wstępnym przygotowaniu środowiska (rozpoczęciu sesji i zaimportowaniu wtyczki system) uruchamia aplikację. Zawiera następujące kluczowe funkcje: •
initial ize — Ładuje ustawienia językowe i ustawienia użytkownika.
•
di spatch — Obsługuje wyświetlanie HTML-a najwyższego rzędu, wstawianie tytułu, opisu, metadanych, odwołań do plików JavaScript. Wywołuje metodę JComponentHelper::renderComponent().
•
render — Wyświetla główną część strony ze sprawdzaniem formatu (HTML lub kanał RSS), a następnie wywołuje metodę generującą klasy JDocument. Po wyświetleniu treści wywołuje metodę setBody obiektu JResponse, przekazując wygenerowane dane.
•
1 ogi n — Sprawdza autoryzację podanej nazwy użytkownika i hasła.
•
1 ogout — Wywołuje metodę logout klasy JAppl i cati on, aby zakończyć sesję.
234
Joomla!. Profesjonalne tworzenie stron W1NW •
getPageParameters — Pobiera parametry komponentu i menu, zwraca je w postaci tablicy o nazwie iparams.
•
1 oadConfi gurati on — Wykorzystuje stałą JPATH_SITE, aby zlokalizować plik ustawień configuration.php, a następnie ładuje konfigurację. Przy włączonym trybie spuścizny sprawdza ustawienia strony także w pliku mosConfig.
•
getTempl ate — Zwraca nazwę szablonu wybranego do wyświetlenia strony. Jeśli zostało przypisanych kilka szablonów do aktualnego menuid, pobiera z tabeli jos_templ atesjnenu pierwszy pasujący rekord.
•
setTempl ate — Wykorzystywana do wymuszania innego szablonu strony niż wybrany.
•
createPathway — Tworzy ścieżkę URL dla różnych obiektów na stronie, takich jak elementy menu.
Metody zapisane w pliku tworzą serce CMS-a. Zwróć uwagę, że kilka procedur zawiera większość logiki dostępnej w ramach platformy Joomla!.
Aplikacja administracyjna JAdministrator Aplikacja JAdministrator znajduje się w katalogu \administrator. Jej uruchamianie jest praktycznie identyczne jak w przypadku strony JSite, z tym że w miejsce klasy JSite ładowana jest klasa JAdministrator. Oprócz administracyjnych wersji trzech głównych plików (defines.php,framework.php i application.php) ładowany jest także plik toolbar.php, który dodaje pasek menu w interfejsie administratora. Jeśli zbadasz zawartość katalogu 1 administrator, zauważysz, że w przeciwieństwie do modułów i komponentów nie zawiera on oddzielnego podkatalogu dla wtyczek. JAdministrator działa inaczej niż aplikacja JSite, która wykorzystuje pojedynczą metodę do wyświetlania wszystkich treści. Struktura części administracyjnej przypomina raczej zestaw małych aplikacji uruchamianych dla poszczególnych elementów. Oznacza to, że nie istnieje standardowa struktura zdarzeń, którą można by wykorzystać przy tworzeniu wtyczek.
Ścieżki Joomla! Istnieje spora liczba stałych w kodzie Joomla!, które zawierają odnośniki do różnych katalogów. Do tych stałych należą: •
JPATH_R00T — Przechowuje ścieżkę do głównego katalogu platformy Joomla!.
•
JPATH_SITE — Zawiera ścieżkę do głównego katalogu aplikacji JSite.
•
JPATH_ADMINISTRATOR — Przechowuje ścieżkę do głównego katalogu aplikacji JAdministrator.
•
JPATH_INSTALLATION — Zawiera ścieżkę do głównego katalogu aplikacji Jlnstallation.
m JPATH_BASE — Przechowuje ścieżkę aktualnie uruchamianej aplikacji. Z tego powodu, jeśli uruchamiana jest aplikacja JSite, wartość tej stałej jest identyczna z JPATH SITE. Analogicznie dzieje się w przypadku interfejsu administratora, stała pokrywa się zJPATH ADMINISTRATOR.
Rozdział 9. • Ingerencia w fundamenty Joomla!: wtyczki
235
Wymienione stałe tworzą grupę nielicznych zmiennych globalnych, które na pewno będą dostępne w przyszłych wersjach Joomla!. Większość globalnych zmiennych oraz stałych została porzucona i w kolejnych wydaniach będą one usunięte.
Wskazówki przydatne podczas pracy z kodem Joomla! Wiesz już, jak stworzyć rozszerzenia programistyczne Joomla! każdego typu (moduły, komponenty i wtyczki), a Twoje zdolności rozszerzania systemu Joomla! ograniczone są wyłącznie poziomem Twoim umiejętności jako programisty i znajomością tego systemu. W czasie tworzenia rozszerzeń wiele razy znajdziesz się w sytuacji, kiedy nie będziesz rozumiał, jak dokładnie zachowuje się system Joomla! dla szczególnych danych lub akcji użytkownika. W takich wypadkach analiza kodu źródłowego to doskonały sposób rozwiązania problemu. Ponieważ Joomla! jest oprogramowaniem o otwartym kodzie źródłowym, cały kod jest w pełni dostępny w każdej instalacji systemu. Zaglądając do plików źródłowych, można uzyskać odpowiedź prawie na każde pytanie. Zapoznanie się z kodem źródłowym jest wysoce zalecane, jeśli planujesz zaawansowane programowanie Joomla!. Może się to wydawać z początku lekko przytłaczające, prawdopodobnie jednak szybko zrozumiesz sposób, w jaki kod został zorganizowany. Kolejne podrozdziały zawierają kilka wytycznych, które powinny być pomocne w pracy z kodem źródłowym. Nie ma jednak lepszego sposobu, niż otworzyć kod w edytorze tekstu, a następnie dzięki wnikliwej analizie poznawać jego działanie.
Wykorzystywanie funkcji przeszukiwania katalogów Istnieje spora szansa, że na pytanie dotyczące funkcjonowania Joomla! można odpowiedzieć, wykonując proste wyszukiwanie w plikach tekstowych. Wobec postawionego zadania należy przyjąć postawę detektywa — szukać wskazówek, które doprowadzą w końcu do rozwiązania. Przykładowo wyobraź sobie, że chcesz rozszerzyć listę typów parametrów dla modułów. Jeśli otworzysz ekran edycji dowolnego modułu, możesz zauważyć, że parametry wyświetlane są w panelu Parametry modułu, jak to przedstawiono na rysunku 9.5. Rysunek 9.5. Lista parametrów modułu znajduje się w panelu o nazwie „Parametry modułu"
Piefeiiiiiuje P.n.tiHPtty
lulu
prsytostefc klasy modułu
236
Joomla!. Profesjonalne tworzenie stron W1NW Korzystając z aplikacji zawierającej funkcję przeszukiwania katalogów, np. jEdit, możesz przeszukać system Joomla! pod kątem tego tekstu 3 . W rezultacie otrzymasz listę plików, w których występuje dany tekst — co widać na rysunku 9.6. Po zapoznaniu się z wynikami wyszukiwania stanie się jasne, że za wyświetlanie parametrów odpowiada kod w pliku admin. modules.html.php, który znajduje się w katalogu comjnodules interfejsu administratora.
Rysunek 9.6. Wynikiem wyszukiwania w programie jEdit jest lista plików, które zawierają szukaną frazę
\
d
t Module Parameters (2 occurrences in 2 files) f €:\xampp!MdQCSjoomlaadministrator lcomponents«omjiiodules>admin.modules.litml4)hp (1 occurrence) 441 echo $parie->startPanel(JText:: „('Module Parameters), "param-page"); f C:\xat1lpp^ltdocs#omla^dministrator'danguase«n-GBWr^GBxom_modules.iiti (1 occurrence) 35: MODULE PARAMETERS=Module Parameters
Kilka linijek poniżej wyszukiwanego tekstu znajduje się poniższy kod: $p->render('params')
Kolejne wyszukiwanie, tym razem słów „function render", powinno doprowadzić do pliku, w którym zdefiniowano funkcję do generowania wydruku parametrów modułu. Funkcję render() można znaleźć w 35 plikach, ale jedna pozycja znacząco się wyróżnia: \libraries\joomla\html\parameter.php Powyższy plik zawiera wywołanie funkcji getParams(), która pobiera parametry. Możesz podążać dalej tym tropem, aż trafisz na poszukiwany kod. Inną metodą byłoby wybranie z pliku deskryptora, z sekcji parametrów takiego typu, którego nazwa jest unikatowa (np. radio), a następnie przeprowadzenie wyszukiwania. Pliki odpowiedzialne za wyświetlanie tego elementu można znaleźć (bingo!) w katalogu: \libraries\joomla\htmI\parameter\element W tym katalogu znajdziesz kod wyświetlający parametry wszystkich typów, np. odstępy, sekcje, redaktorzy, kategorie, lista plików itd. Podążając dalej, napotkasz kod, który uruchamia tworzenie wydruku. Możesz teraz zdefiniować własny! Większość programistów Joomla! będzie badać i modyfikować interfejs systemu, dlatego najlepiej zacząć od folderu \libraries\joomla. Pomocne w zrozumieniu funkcji poszczególnych plików będą opisy pakietów umieszczone wcześniej w tym rozdziale.
3
Musimy pamiętać, że Joomla! w oryginale występuje po angielsku, teksty w języku polskim będąjedynie w plikach z tłumaczeniami, dlatego w tym wypadku powinniśmy wyszukiwać „Module Parameters"
—przyp. tłum.
Rozdział 9. • Ingerencia w fundamenty Joomla!: wtyczki
237
Badanie com_content Wyświetlanie treści nie jest integralną częścią platformy Joomla! — odbywa się za pośrednictwem komponentu comcontent. Na serwerze testowym znajdziesz go w katalogu o ścieżce przypominającej poniższą: C:\Program FiIes\Apache Software comcontent
Foundation\Apache2\htdocs\components\
Podczas implementacji tego komponentu zastosowano wzorzec MVC (Model-Widok-Kontroler), opisany w rozdziale 8. Dzięki analizie poszczególnych plików (w szczególności content.php) możesz poznać sposób formatowania treści. Ostateczne generowanie kodu HTML dla komponentu obsługuje kod klasy ContentViewArticle. Znajdziesz ją w pliku view.html.php w poniższym folderze: \components\com_content\views\article\view.html.php
SVN Joomla!: najnowsze osiągnięcia Jeśli tworzysz rozszerzenia systemu Joomla! (moduły, komponenty i wtyczki), powinieneś wykorzystać system kontroli wersji. System taki zawiera repozytorium, które przechowuje aktualną wersję plików danego programu. Członkowie grupy pracującej nad daną aplikacją mogą pobrać z repozytorium jej najnowszą wersję. Użytkownicy mogą także pobierać pliki, a następnie rozwijać je. Wprowadzone zmiany, po wysłaniu do systemu, są integrowane z resztą projektu. Stara wersja pliku trafia do archiwum, skąd można ją, w razie potrzeby, pobrać lub przywrócić. Grupa deweloperów Joomla! wykorzystuje system kontroli wersji Subversion (SVN) do zarządzania kodem źródłowym. Repozytorium Joomla! jest publicznie dostępne w trybie do odczytu. Jeśli chcesz, możesz pobrać z repozytorium SVN najnowszą wersję aplikacji Joomla!. Pierwszym krokiem będzie instalacja SVN. W rozdziale 6. znajdują się informacje na temat dostępności aplikacji SVN i ich instalacji. Po zainstalowaniu SVN musisz utworzyć folder, który będzie zawierał pobrane pliki. W moim przypadku na serwerze testowym jest to katalog JoomlaSVN, znajdujący się w głównym katalogu serwera WWW. Dlatego ścieżka dostępu wygląda tak: c:\Program Files\Apache Software
Foundation\Apache2.2\htdocs\Joom!aSVN
Po utworzeniu folderu musisz dokonać niezbędnych ustawień, aby pobrać do niego pliki z repozytorium. Jeśli korzystasz z programu TortoiseSVN na platformie Windows, kliknij prawym przyciskiem folder i wybierz opcję SVN Checkout. Zostanie wyświetlone okno Checkout, jak to przedstawiono na rysunku 9.7. W pole opisane URL of the repository wprowadź http://joom1acode.org/svn/joomla/developrnent/trunk i kliknij przycisk OK. Pojawi się okno z zapytaniem o nazwę użytkownika i hasło. Wprowadź nazwę anonymous (anonimowy) i pozostaw pole hasła puste. Klient systemu SVN połączy się z repozytorium i pobierze wszystkie pliki źródłowe Joomla! do wybranego katalogu. Może to trochę potrwać, ponieważ konieczne jest przesłanie ponad 3000 plików. Po zakończeniu tego procesu możesz korzystać z pobranej wersji Joomla! jak z każdej innej.
238
Joomla!. Profesjonalne tworzenie stron W1NW
Rysunek 9.7.
M^fffHBWW^
W oknie programu TortoiseSVN możesz wprowadzić dane repozytorium Joomla!
Repository
j
URL of repository:
Checkout directory: C:\JoomlaSVN
|7j
Checkout Depth
V
Fully recursive f i Omit externals Revision (?) HEAD revision ( „ ) Revision
Show log
1
OK 1
j
Cancel
] [
Help
J
Aby w przyszłości uaktualnić pobrane pliki, wystarczy z menu kontekstowego dla wybranego folderu wybrać opcję SVN Update. Aplikacja połączy się z repozytorium i pobierze pliki, które zostały zmienione od momentu ostatniego dostępu. Zostanie wyświetlone okno zawierające informacje o postępie pobierania uaktualnionych plików (zobacz rysunek 9.8). Po ukończeniu przesyłania pod listą plików zostanie wyświetlony komunikat o liczbie przesłanych bajtów, plików połączonych, dodanych, usuniętych lub uaktualnionych. Rysunek 9.8. Informacje o przebiegu uaktualniania plików pobranych z repozytorium SVN wyświetlane są w specjalnym oknie
66 kBytes transferred in 0 minute(s) and 15 second(s) Added: 16 Updated:26 Show log.,
Uaktualnianie nie spowoduje usunięcia innych plików, które zapisałeś w folderze, nie naruszy także bazy danych Joomla!. Jeśli zainstalowałeś Joomla!, dodałeś rozszerzenia, dostosowałeś konfigurację lub wprowadziłeś inne zmiany, które bezpośrednio nie dotyczą plików źródłowych, uaktualnianie będzie transparentne. Zostaną nadpisane wyłącznie te pliki, których nowsze wersje znajdują się w repozytorium. Pobranie na dysk aplikacji Joomla! z repozytorium SVN spowoduje utworzenie w każdym katalogu folderu ,svn. Katalogi zawierają dużą liczbę plików kontrolnych, które służą do śledzenia wersji projektu. Nie usuwaj tych folderów, jeśli planujesz uaktualniać pliki w przyszłości. Ich obecność jest niezbędna, aby klient SVN odczytał, które pliki wymagają uaktualnienia, a które są w najnowszej wersji. Pliki znajdujące się w folderach ,svn są małe, ale ich liczba jest znacząca. Jeśli zamierzasz przesłać taką wersję za pośrednictwem protokołu FTP, cały proces może potrwać nawet 10 razy dłużej niż zazwyczaj. Dlatego zanim rozpoczniesz wysyłanie, wykorzystaj opcję eksportu
Rozdział 9. • Ingerencia w fundamenty Joomla!: wtyczki
239
plików do innego folderu. Zostaną skopiowane wyłącznie właściwe pliki, z pominięciem plików kontrolnych. Jeśli korzystasz z programu TortoiseSVN, kliknij prawym przyciskiem folder z projektem i wybierz opcję TortoiseSVN/Export. Ponieważ opcja uaktualniania dostępna w SVN nie dotyczy w żaden sposób bazy danych Joomla!, wszelkie zmiany wprowadzone przez programistów w bazie danych (lub dowolnym kodzie, który się z nią łączy) mogą spowodować błędy w Twoim systemie. Mogą zacząć się pojawiać błędy związane z bazą danych przy próbie dostępu do bazy o zmienionej strukturze. Najprostszym sposobem przywrócenia prawidłowego działania systemu jest usunięcie lub zmiana nazwy pliku configuration.php, który znajduje się w głównym katalogu, a następnie ponowne uruchomienie procesu instalacji. W czasie instalacji zostanie utworzona kopia zapasowa istniejących tabel, z której możesz skorzystać, aby ręcznie przywrócić artykuły lub ustawienia rozszerzeń. Repozytorium kodu Joomla! dla wersji 1.0.x można znaleźć pod adresem: http://joomlacode. org/svn/joomla/development/releases/l.
0
Repozytorium modułów Joomla l.x (które zawiera wersje archiwalne i eksperymentalne) można znaleźć pod adresem: http://joomlacode.org/svn/joomla/development Procedura logowania i dostępu dla powyższych zasobów jest identyczna jak w przypadku głównego repozytorium Joomla!.
Podsumowanie Wtyczki Joomla! zawierają kod obsługi zdarzeń systemowych, które stanowią serce aplikacji Joomla!. Rozszerzenia tego typu mają rozległe możliwości — od przechwytywania i modyfikacji treści, po wstawianie dodatkowych formularzy uwierzytelniania użytkowników. Dzięki zapoznaniu się z procesem tworzenia wtyczek potrafisz już programować rozszerzenia wszystkich trzech typów, ponieważ wcześniej nauczyłeś się tworzyć moduły i komponenty. Wiedzę tę oraz gruntowną znajomość platformy Joomla! możesz wykorzystać w praktyce — do stworzenia dowolnego systemu, jaki sobie tylko wyobrazisz. W rozdziale opisano proces tworzenia wtyczek Joomla!, budowę platformy, a w szczególności: •
Wprowadzono podział na osiem typów wtyczek wykorzystywanych przez system Joomla!.
•
Wyjaśniono cztery kategorie zdarzeń systemowych, które może obsługiwać kod wtyczek.
•
Stworzono wtyczkę Hello World! aktywowaną przy zdarzeniu onAfterDi spl ay "-»•Title(), co powodowało dodanie powitania Hello World! między tytułem a treścią artykułu.
240
Joomla!. Profesjonalne tworzenie stron W1NW •
Zaprogramowano rozszerzenie Automatyczne Skróty, które przechwytuje treść artykułu, wyszukuje popularne skróty i wstawia w ich miejsce odpowiednie rozwinięcia.
•
Opisano poszczególne pakiety składające się na platformę Joomla!, aby zwiększyć znajomość systemu i ułatwić lepsze wykorzystanie dostępnych możliwości.
•
Przedstawiono wskazówki przydatne podczas samodzielnego badania i poznawania kodu źródłowego Joomla!.
Po zapoznaniu się z funkcjonowaniem systemu z punktu widzenia programisty warto wrócić do aspektów związanych z prowadzeniem strony WWW, które nadają sens programowaniu Joomla!. W rozdziale 10. dowiesz się, jak zaimplementować istniejące rozszerzenia, aby dodać na stronie funkcje serwisu społecznościowego.
10 Budowanie społeczności w Joomla! Światem Web 2.0 rządzą dwa słowa: interaktywność i społeczność. Wiele organizacji zdało sobie sprawę, że stworzenie wirtualnej społeczności (tzn. internetowej społeczności), chociaż trudne, jest kluczowe, gdy chce się dobrze prosperować na nowym rynku. Dodanie na stronie odpowiednich technologii jest zachętą dla odwiedzających do wzbogacania zawartości witryny, a także komunikowania się z innymi. Komunikacja przebiega za pośrednictwem różnych funkcji, np. czatów, forów, stron z informacjami osobistymi, ksiąg gości, sond, systemów komentarzy, sieci społecznych, kalendarzy wydarzeń i systemów wiki. Niezależnie od tego, czy wirtualna społeczność stanowi luźne zgromadzenie członków (np. konsumenci umieszczający komentarze na temat produktów na danej stronie), czy ukierunkowana jest raczej na codzienne wizyty, jak np. MySpace, korzyści z jej istnienia są znaczące — wzrost popularności i pozycji strony. Historia Joomla! jest przykładem sukcesu w budowaniu i rozwijaniu społeczności internetowej. Wraz z Joomla! zostało stworzone dobrze prosperujące forum (forum.joomla.org), katalog rozszerzeń wzbogacany przez użytkowników, z możliwością komentowania (extensions.joomla.org), a także katalog stron 0 dużej skali, do którego pozycje dodawane są przez użytkowników (www.joomla.org/content/ blogcategory/35/69). Rozwój Joomla! nie byłby tak dynamiczny, gdyby nie skuteczne zastosowanie technologii społecznościowych. Rozwijanie internetowej społeczności lub sieci społecznej wymaga rozwagi w czasie instalowania systemu i łączenia poszczególnych technologii. W przeciwieństwie do tradycyjnych, statycznych stron internetowych witryny społecznościowe kładą nacisk na dynamiczne treści dodawane przez użytkowników. Taka zmiana przekłada się na ogrom nowych wyzwań — od właściwej konfiguracji źródeł danych, co umożliwia zapisywanie danych przesyłanych przez użytkowników, po dodatkowe zadania administracyjne (zarówno automatyczne, jak 1 nadzorowane), co pomaga kontrolować nowe treści. Na szczęście dla Joomla! istnieją technologie, które ułatwiają budowanie skutecznych społeczności, a ich implementacja nie nastręcza większych trudności. W tym rozdziale dowiesz się, jak stworzyć wirtualną społeczność, korzystając z dostępnych, darmowych rozszerzeń Joomla!.
242
Joomla!. Profesjonalne tworzenie stron W1NW W czasie, kiedy pisałem tę książkę, część z wykorzystanych rozszerzeń nie została jeszcze przystosowana do pracy z Joomla! w wersji 1.5. Mam nadzieję, że do momentu, kiedy sięgniesz po tę książkę, dla wszystkich wymienionych rozszerzeń będą dostępne uaktualnione wydania, zgodne z wersją 1.5. Jeśli rozszerzenie, które chciałbyś wykorzystać, nie zostało uaktualnione, spróbuj znaleźć zamiennik w katalogu rozszerzeń Joomla fextensions.joomla.org). Istnieje spora szansa, że uda Ci się znaleźć rozszerzenie, które ma te same wymagane funkcje. Ponieważ zarządzanie wirtualną społecznością wymaga dużo czasu, warto podczas przygotowywania systemu przyjąć postawę konserwatywną. Rozszerzalność systemu Joomla! czyni go idealnym materiałem do rozbudowywania krok po kroku. W większości przypadków możesz dodać rozszerzenie, które oferuje określoną funkcję w mniej niż 10 minut. Jeśli nie zdobędzie ona popularności lub nie jesteś zadowolony z dostępnych opcji, możesz w kilka sekund usunąć lub dezaktywować dane rozszerzenie. Większość stron internetowych, które nie opierają się na Joomla!, wymagałaby dużej liczby dodatkowego programowania do wstawienia lub usunięcia dodatkowych funkcji. Część z rozszerzeń służących do budowania społeczności internetowych została już opisana w rozdziale 4., dlatego w tym rozdziale zostanie jedynie krótko przedstawiona ich rola w tworzeniu społeczności. Opisanych zostanie wiele innych rozszerzeń posiadających funkcje różnego typu, którymi można wzbogacić system Joomla!. Wszystkie wymienione rozszerzenia dostępne są za darmo. Jeśli jednak istnieje szczególnie znane rozszerzenie komercyjne, które charakteryzuje się specyficzną funkcjonalnością, pojawi się informacja na jego temat. Przy każdym demonstrowanym rozszerzeniu pojawia się adres internetowy, pod którym można było je znaleźć w czasie, kiedy pisałem tę książkę. Często jednak projekty przenoszone są w inne miejsca. Wszystkie rozszerzenia wymienione w tym przeglądzie można znaleźć w katalogu rozszerzeń Joomla!. Dlatego, jeśli zanotowany adres strony internetowej jest nieaktualny, to za pomocą katalogu zdołasz odnaleźć stronę, na której można pobrać rozszerzenie.
Planowanie wirtualnej społeczności Tworzenie wirtualnej społeczności w wielu aspektach przypomina kręcenie filmu. Przed nakręceniem pierwszego ujęcia należy przejść cały proces przygotowań, upewnić się, czy aktorzy zostali odpowiednio dobrani, czy rekwizyty zostały wypożyczone i czy działają poprawnie, czy scenariusz jest na swoim miejscu, czy producenci wiedzą, w jaki film inwestują. Jeśli którykolwiek z wymienionych elementów zostanie zaniedbany, to przełoży się to na liczne potknięcia podczas kręcenia, a ogrom czasu i energii zostanie po prostu zmarnowany. Podobnie jest w przypadku wirtualnych społeczności. Potrzeba wiele czasu, aby przyciągnąć odwiedzających i dodających, a kiepskie planowanie może sprawić, że nawet obiecujący początek może zmienić się w rozczarowanie. Chociaż dzięki Joomla! dodawanie funkcji społecznościowych jest proste, właściwe planowanie jest niezbędne, gdy chce się osiągnąć sukces nawet, jeśli strona rozbudowywana jest krok po kroku. Dzięki zachowaniu rozsądku w fazie planowania i konstrukcji nowej strony społecznościowej zmniejszysz ryzyko frustracji u ciężko zdobytych użytkowników, których częste i niejasne zmiany mogłyby skłonić do opuszczenia Twojej strony na zawsze. Budowanie wirtualnej społeczności można podzielić na trzy główne etapy.
Rozdział 10. • Budowanie społeczności w Joomla!
243
•zy stadia wirtualnej społeczności Wirtualne społeczności różnią się od tradycyjnych stron WWW (takich jak strony statyczne lub sklepy internetowe) tym, że czerpią głównie z komunikacji między członkami dużej grupy użytkowników witryny. Niezależnie od okoliczności, zebranie dużej liczby użytkowników może zająć trochę czasu. Tworzenie wirtualnej społeczności odbywa się zazwyczaj stopniowo, a nagły przypływ użytkowników nie daje takich korzyści jak na tradycyjnych stronach. Jeśli Twoja strona zostanie nagle, w przeciągu nocy, „zalana" nowych milionem użytkowników, nie ma większych szans, aby udało się utrzymać ich na dłuższy czas. Co więcej, pierwszym wrażeniem nowych odwiedzających będzie brak treści i kiepska wydajność. Wzrost wirtualnych społeczności to praca organiczna, ponieważ społeczność powoli odkrywa, co grupa ma do zaoferowania. Biorąc pod uwagę unikatową naturę tworzenia i rozszerzania wirtualnych społeczności, warto zerknąć na „mapę" rozwoju, aby zachować obrany na początku kierunek i przetrwać frustrujące momenty. Cały proces można podzielić na trzy etapy: •
programowanie i testy;
•
uruchamianie i przyciąganie użytkowników;
•
przedefiniowanie i dojrzałość.
Praktycznie wszystkie udane społeczności internetowe podążają podobnym szlakiem, dlatego można wyróżnić pewne punkty odniesienia.
ap 1. Programowanie i testy Po zapoznaniu się z pomysłem stworzenia wirtualnej społeczności powinieneś wykształcić wstępne wyobrażenie na temat tego, jaki typ społeczności chcesz zbudować. Joomla! pozwala na lokalne uruchomianie strony i eksperymentowanie z różnymi funkcjami. W ten sposób możesz zdecydować, jakiego typu stronę chcesz stworzyć. Odpowiedzi na poniższe pytania poparte eksperymentami dadzą Ci jasne wyobrażenie na temat przyszłej strony: •
Czy będzie to społeczność komercyjna, czy hobbystyczna? — Robi to dużo większą różnicę, niż myślisz, ponieważ odpowiedź na to pytanie określa poszukiwaną grupę ludzi. Przykładowo komercyjna społeczność skupiona wokół produktu A nie będzie raczej zdobywać członków spośród fanów produktów B i C. Z drugiej strony, społeczność hobbystów może zrzeszać fanów wszystkich produktów danej kategorii i nie musi służyć promowaniu produktu A. Dodatkowo strony hobbystyczne mają dużo luźniejsze standardy, jeśli chodzi o poziom wulgarności i dyskusje nie na temat, ponieważ nie muszą odpowiadać przed sponsorami lub reklamodawcami.
•
Czy istnieje jakiś porządek omawianych tematów? — Wielu nieudanym wirtualnym społecznościom brakowało szkieletu, który można było rozbudowywać, dodając treści. Podobnie jak trejaż, który umożliwia roślinom dogodny wzrost i rozkwitanie, „sadzenie" społeczności warto rozpocząć od zdefiniowania listy tematów. Taka agenda ułatwia odwiedzającym odnalezienie interesujących miejsc na stronie.
244
Joomla!. Profesjonalne tworzenie stron W1NW •
Czy wirtualna społeczność ma być dodatkiem do strony internetowej, czy jej główną atrakcją? — Ponieważ funkcje społecznościowe wymagają poświęcenia dużej ilości czasu, zwłaszcza w zakresie zarządzania, na wielu stronach traktowane są jako mało znaczące dodatki, a nie fundamentalne elementy strony. Cechą takiej strategii jest zaleta stopniowej adaptacji nowych technologii, które czerpią z istniejącej bazy użytkowników. W takim wypadku raczej nie jest możliwe zrealizowanie scenariusza w stylu MySpace, witryny, której powodem istnienia jest społeczność.
Po nakreśleniu ogólnych koncepcji można przejść do fazy konstrukcji. Większość wirtualnych społeczności wykorzystuje istniejące oprogramowanie (takie jak rozszerzenia opisane w tym rozdziale), dlatego programowaniu i wdrażaniu poświęcany jest jedynie ułamek czasu przeznaczonego na projekt. Po zainstalowaniu i skonfigurowaniu oprogramowania można uruchomić platformę realizującą zaplanowane cele. Konfiguracja może oznaczać utworzenie kategorii, dodanie podstawowych artykułów i warunków korzystania ze strony oraz zastosowanie zabezpieczeń w postaci logowania. Przed uruchomieniem strony powinny zostać przeprowadzone testy za pomocą narzędzi badających wydajność pod obciążeniem, aby określić granice obecnej instalacji. Odpowiednie informacje na ten temat znajdziesz w rozdziale 11. Wykorzystanie tych narzędzi, chociaż ważne w przypadku normalnej strony Joomla!, ma krytyczne znaczenie dla strony społecznościowej, ponieważ pozwala ustalić górne granice społeczności dla aktualnej konfiguracji serwera. Na dalszym etapie dobrym pomysłem może być samodzielne rekrutowanie użytkowników, którzy reprezentują docelową grupę, i zachęcanie ich, aby przeprowadzili nieformalny test. Za pomocą opcji dostępu Joomla! możesz ograniczyć funkcje społecznościowe do grupy osób, które pomagają w przygotowywaniu strony. Jeśli strona ma być skierowana do nastolatków, znajdź kogoś, kto j ą sprawdzi i podzieli się wrażeniami. W przypadku strony skupiającej specjalistów z branży high-tech, warto zapytać także o inne, polecane przez nich społeczności. Tym sposobem dowiesz się, jaki typ stron przyciąga użytkowników tego typu.
Etap 2. Uruchomienie i przyciąganie użytkowników Moment uruchomienia wirtualnej społeczności Joomla! jest ekscytujący, jednak często okazuje się także zniechęcający. Zazwyczaj pojawia się dużo mniej odwiedzających, niż się spodziewałeś, a Ci, którzy wchodzą na stronę, chcą się raczej porozglądać lub „podpatrywać", zamiast dodać coś od siebie lub wziąć udział w dyskusji. Chociaż mały ruch na stronie może wydawać się niekorzystny, w przypadku większości stron to wielka zaleta. W większości dziedzin 10 procent ludzi wykonuje 90 procent pracy. Uruchomienie strony pozwoli Ci zlokalizować ludzi, który chcą współtworzyć stronę, a następnie przekazać im część odpowiedzialności. Możesz sprawić, by poczuli się niesamowicie ważni dla właściciela strony (kimkolwiek on jest), aby mieli wrażenie uczestnictwa w zakładaniu społeczności. Na początku musisz dotrzeć do tych, którzy wnoszą nawet najmniejszy wkład. Osoba dodająca pierwszy komentarz lub pierwszą wiadomość na forum zasługuje co najmniej na osobisty e-mail od ludzi prowadzących stronę. Poświęć czas pierwszym dodającym, aby poczuli się
Rozdział 10. • Budowanie społeczności w Joomla!
245
docenieni, ponieważ nagrodzą Cię, dodając kolejne treści na stronie. Możesz ich nawet nagradzać upominkami, dodatkowymi przywilejami na stronie lub specjalnym dopiskiem (takim jak tester strony, zaawansowany użytkownik, główny współpracownik itd.). Wielu zwolenników wirtualnych społeczności przyrównuje je do opieki nad ogrodem. Należy zasiewać nowe nasiona, przycinać drzewa i usuwać chwasty. Właśnie w fazie dojrzewania wysiłki ogrodnika są najpotrzebniejsze, choć najbardziej męczące. Powiedzenie „Nawet najpiękniejsza róża kiedyś więdnie", doskonale oddaje fakt, że to, co na początku było ekscytujące i nowe, zmienia się później w rutynę i nudę. Na etapie dojrzewania wirtualna społeczność podejmuje decyzję, czym chce zostać w przyszłości.
ap 3. Przedefilowanie i dojrzałość Wraz ze wzrostem siły wirtualnej społeczności webmaster powinien zbadać, czy niezbędne jest przedefiniowanie strony. Przykładowo jeśli założeniem strony miało być zrzeszanie miłośników joggingu, którzy wymienialiby się informacjami na temat butów do biegania, a większość odwiedzających wymienia informacje na temat najbardziej malowniczych tras, wtedy przedefiniowanie witryny ma sens. Możesz nawet chcieć zmienić wygląd strony, aby lepiej odpowiadała ona zamieszczonym treściom, co w przypadku Joomla! nie jest wyzwaniem, biorąc pod uwagę łatwość zmiany szablonów. Być może temat strony, który dotychczas sugerował surowy profesjonalizm, należy ocieplić, aby zwrócić uwagę na przyjazy ton komunikacji między członkami społeczności — lub vice versa. Zmiana wiodącego tematu strony nie musi oznaczać porzucenia pierwotnego założenia (chociaż może). Częściej oznacza to jednak zmianę priorytetów i poświęcenie zasobów tym obszarom, które odpowiadają zainteresowaniom odwiedzających. Kierując się przykładem strony o butach do biegania, przedefiniowanie oznaczałoby dodanie galerii, która umożliwiałaby użytkownikom dzielenie się zdjęciami najbardziej malowniczych ścieżek. Dodatkowo można by wprowadzić podział na kategorie odpowiadające różnym miejscom, aby odwiedzający mogli wstawiać ścieżki w swojej okolicy. Nie ma prostej reguły, aby sprawdzić, czy strona wymaga przedefiniowania, ale istnieją pewne specyficzne wskazówki, które sugerują, kiedy należy dokonać przedefiniowana. Przykładowo wybierz datę lub inne ramowe ograniczenie, a następnie przeanalizuj dokładnie dziennik i inne źródła, aby zbadać, co najbardziej interesuje użytkowników. Przeznacz na analizę wystarczająco dużo czasu, ponieważ jest ona kluczowa dla wyznaczenia kierunku dalszego rozwoju strony. Po przeprowadzeniu przedefiniowania, kiedy masz już stabilną społeczność, regularnych użytkowników dodających treści, przyszedł czas, aby zastanowić się, jak lepiej możesz służyć swojej społeczności. W tym momencie wiesz już, kto odwiedza Twoją stronę, na których dodających możesz polegać. Na tej podstawie możesz określić, w jaki sposób wzbogacić ich doświadczenia, a jeśli strona stanowi przedsięwzięcie komercyjne, jak zarobić na jej popularności. Aby podjąć odpowiednie działania, należy ocenić poniższe elementy: •
Powiązane tematy lub produkty — Czy Twoja strona poświęcona butom do biegania może służyć także jako szczerze źródło informacji na temat fitenssu? Czy może mógłbyś umieszczać ogólne informacje na temat dostatniego stylu życia? Nie zapominaj, że nowe funkcje powinny być dodatkami. Wirtualna społeczność
246
Joomla!. Profesjonalne tworzenie stron W1NW może łatwo ulec samozniszczeniu, jeśli stanie się zbyt ogólna lub jeśli znikną powody, które przyciągnęły do niej ludzi. Udana strona skierowana do ludzi profesjonalnie uprawiających jogging nie jest miejscem dla początkujących, którzy nie odróżniają półmaratonu od maratonu. •
Specjalne działania i oferty grupowe — Każda współpracująca grupa ludzi dysponuje sporą siłą. Taką siłę można wykorzystać na wiele sposób, np. organizując konferencję, akcję zbierania datków, zakupów zbiorowych ze zniżkami lub uruchamiając kampanię pisania listów popierających regionalnego polityka. Powinieneś myśleć w kategoriach zarówno tego, co przyniesie korzyść członkom danej grupy (np. zakup dużej ilości jakiegoś produktu), jak i tego, co będzie miało pozytywny wpływ na całą społeczność (np. zbieranie funduszy na szybszy serwer). Korzystając z rozszerzeń Joomla!, takich jak forum czy księga gości, możesz określić, czy użytkownicy byliby zainteresowani takim programem.
•
Ukierunkowana reklama— Większość stron zawiera jakiś typ reklam, np. bannery, programy partnerskie lub odnośniki do produktów sprzedawanych przez internet. Dzięki komponentowi Banner zarządzanie kampanią reklamową nie jest wyzwaniem, a wiele stron przytłacza odwiedzających reklamami. Na każdej witrynie dostępna jest tylko ograniczona ilość miejsca na reklamy, jej przekroczenie sprawia, że stają się one nieatrakcyjne i zaczynają odstraszać użytkowników. Oceń reklamy pojawiające się na stronie pod kątem atrakcyjności i generowanych zysków. Jeśli banner prowadzi do spowolnienia ładowania strony i praktycznie nie przekłada się na zysk, to czy strona nie zyska na usunięciu tej reklamy? Jeśli mała reklama powoduje duże przychody, może warto przenieść j ą w bardziej widoczne miejsce. Oprócz oceniania obecnych partnerów mądre byłoby także rozejrzenie się w poszukiwaniu nowych dostawców i nowych możliwości, które bardziej odpowiadałyby celom Twojej strony.
Znaczenie stabilności i regularności W przypadku każdej tradycyjnej strony WWW ważna jest stabilność. Dla wirtualnych społeczności jest ona krytyczna. Jeśli witryna spełnia swój cel, staje się miejscem, gdzie odwiedzający komunikują się i łączą z innymi. Brak dostępu do strony spowoduje frustrację użytkowników, którzy mogą poczuć się odcięci od innych. Jeśli dostęp do strony jest często zakłócany, wielu użytkowników może stwierdzić, że nie chce już z niej korzystać. Prawie tak ważne, jak utrzymywanie użytkowników szczęśliwymi, jest dotrzymywanie obiecanych terminów. Jeśli na stronie jest informacja, że nowe artykuły pojawiają się w każdy wtorek, to nowe artykuły muszą być dodawane co wtorek. Internet jest pełen opuszczonych stron lub „stron widm" zawierających komunikat, że strona zostanie uaktualniona w przyszłym tygodniu — z datą sugerującą, że wiadomość opublikowano kilka lat temu. Jeśli istnieje ryzyko, że uaktualnienia na stronie będą pojawiać się nieregularnie, nie obiecuj żadnych terminów, aby nie podważać swojej wiarygodności. Joomla! zawiera fantastyczną funkcję, która pomaga zapobiegać niedotrzymywaniu terminów: datę rozpoczęcia publikacji. Dla każdego artykułu możesz określić datę, kiedy zostanie on opublikowany (a także datę, kiedy jego publikacja powinna zostać zakończona). Jeśli nie jesteś pewien, czy dotrzymasz term inów, ułatw sobie życie
Rozdział 10. • Budowanie społeczności w Joomla!
247
i dodaj kilka artykułów, zanim ogłosisz, że strona zawiera funkcje takie jak newsłetter czy regularnie uaktualniany dział. Możesz wstawić wszystkie przygotowane artykuły za jednym zamachem, a ich datę publikacji ustawić w przyszłości. Nie tylko będziesz do przodu (zapobiegając w ten sposób przekroczeniom terminów), ale także zabezpieczysz się na wypadek nagłych sytuacji, aby nie wpływały negatywnie na odbiór strony.
laczego warto stworzyć wirtualną społeczność Biorąc pod uwagę wszystkie trudności związane z prowadzeniem wirtualnej społeczności (głównie w zakresie poświęcanego czasu i pracy), sensowność przedsięwzięcia może się wydawać wątpliwa. Tak nie jest, nie próbuję zniechęcić Cię do budowania wirtualnych społeczności, staram się tylko uświadomić Ci, jakie wyzwania napotkasz, jeśli zdecydujesz się na zrealizowanie takiego przedsięwzięcia. Im większa jest Twoja wiedza na temat przyszłych wyzwań przez podjęciem próby stworzenia wirtualnej społeczności, tym większa szansa na to, że będziesz gotów zmierzyć się z trudnościami i pokonasz je. Prawdopodobieństwo fiaska przy źle przeprowadzonym budowaniu wirtualnej społeczności jest dużo większe niż przy implementacji kiepskiej strony WWW. Odwiedzający stronę WWW nadal będą na nią wchodzić w poszukiwaniu informacji, które zawiera, podczas gdy nieudana społeczność internetowa będzie przypominać „miasto duchów" odwiedzane przez niewielu turystów. Budowanie społeczności ma pewne wady, ale także i zalety — ich lista jest znacząca: •
Stworzenie rosnącej grupy odbiorców — Wszystko wskazuje na to, że w przyszłości wirtualna społeczność będzie się rozrastać. Jeśli społeczność osiągnie pęd przypominający MySpace.com lub YouTttbe.com, będzie to oznaczało, dosłownie, miliony odwiedzających, dodających nowe treści. Twoja społeczności nie musi jednak sięgać gwiazd, aby zdobyć sukces. Po przekroczeniu pewnego punktu zaobserwujesz wzrost wykładniczy.
•
Długie wizyty na stronie — W przeciwieństwie do charakteru „krótkich przystanków", typowego dla większości wizyt na stronach WWW, członkowie wirtualnych społeczności spędzają na stronach wiele godzin. Jest to okazja do zdobycia lojalności użytkowników i jednocześnie lepszego dopasowania reklam. W handlu istnieje stara zasada — klient musi napotkać produkt siedem razy, zanim zapozna się z nim na tyle, aby go kupić. Długie wizyty na stronie sprzyjają zapoznawaniu się z promowanymi produktami.
•
Możliwości marketingu grupowego — Ponieważ użytkownicy samodzielnie nakreślą swoje zainteresowania przez treści, które dodają na stronie, istnieje wiele okazji, żeby oferty dobrać dokładnie do nich. Ma to szczególne znaczenie, jeśli chodzi o sprzedaż produktu lub usługi, które są bezpośrednio związane z tematyką witryny. Działania takie mogą wzmocnić wizerunek strony jako witryny bezpośrednio związanej z danym obszarem zainteresowań.
•
Bezpośrednifeedback— W przeciwieństwie do tradycyjnej strony WWW, gdzie dane na temat aktywności odwiedzających można czerpać wyłącznie z dzienników, wirtualne społeczności mają funkcję natychmiastowego komunikatu zwrotnego od użytkowników zainteresowanych daną częścią strony.
248
Joomla!. Profesjonalne tworzenie stron W1NW
•
Skupienie na określonych treściach — Większość wirtualnych społeczności dysponuje specjalistycznymi informacjami na wysokim poziomie. Tworzący ją ludzie są często profesjonalistami (lub pretendują do tego miana), dlatego zamieszczane informacje stanowią kopalnię wiedzy na dany temat.
•
Lojalność odwiedzających — Tradycyjna strona WWW ma słabą siłę przyciągania. Jeśli webmaster przestanie dodawać atrakcyjne informacje, strona szybko upadnie, a ludzie przestaną ją odwiedzać. Wirtualne społeczności funkcjonują przez długi czas, nawet jeśli zostaną pozostawione same sobie.
•
Pożytek społeczny — Niezależnie od elementu spajającego społeczność — jest ona w znaczącej części „dobra". Większość społeczności łączy ludzi o podobnych zainteresowaniach i ułatwia im wymianę informacji.
Technologie wirtualnych społeczności Strona społecznościowa nie działa w oparciu o pojedynczą technologię. Prawdę mówiąc dostępna jest ogromna liczba różnych rozszerzeń Joomla!, które umożliwiają dynamiczną komunikację użytkowników na stronie, np.: •
księga gości,
•
czat,
•
forum,
•
sonda,
•
komentarze,
•
sieci społeczne,
•
kalendarz wydarzeń,
•
systemy wiki.
Powyższe technologie można łączyć i mieszać, aby uzyskać możliwie najlepszy efekt. Joomla' to doskonała podstawa dla tych funkcji, ponieważ jest spoiwem w obszarze administracji i wspólnej bazy użytkowników. Rozszerzenia szczególnie obciążające bazę danych (np. forum) należy dokładnie monitorować, aby dostosować konfigurację serwera baz danych w celu uzyskania najwyższej wydajności. Wirtualna społeczność zawsze będzie znajdować się w fazie „prace w trakcie", dlatego nie boj się dodawania nowych funkcji, które mógłbyś później usunąć, ponieważ są nieużywane Jeśli wystarczająca liczba użytkowników będzie zgłaszać pretensje z powodu wyłączenia funkcji, która wydawała Ci się mało popularna, możesz ponownie wprowadzić ją na etapie przedefimowama, aby dać odwiedzającym to, czego szukają. Kolejne podrozdziały zawierają opis jednego lub więcej rozszerzeń dla każdej funkcji charakterystycznej dla witryny społecznościowej: księgi gości, czatu, forum, sondy, komentarzy sieci społecznych, kalendarza wydarzeń i systemów wiki. Na moim serwerze testowym nic
Rozdział 10. • Budowanie społeczności w Joomla!
249
stwierdzono konfliktów między rozszerzeniami, tzn. instalacja jednego nie kolidowała z innymi. Dlatego możesz dowolnie mieszać i d o p a s o w y w a ć przedstawione aplikacje.
sięga gości Księga gości to jedna z najstarszych form komunikacji na stronach internetowych. Umożliwia ona odwiedzającym umieszczanie komentarzy i komplementów odnośnie do treści na stronie. (Samodzielnie utworzyłeś m a ł ą aplikację o b s ł u g u j ą c ą księgę gości w rozdziale 6.). Koszt czasu i energii niezbędny do implementacji księgi gości jest niewielki, i taki też jest j e j efekt w p o b u d z a n i u społeczności. Dlatego księga lepiej s p r a w d z a się w charakterze dodatku d o tradycyjnej strony W W W niż j a k o element witryny społecznościowej. Dwa najpopularniejsze rozszerzenia księgi gości dla Joomla! to Easybook i Jambook. Ponieważ zarówno idea, jak i implementacja księgi gości jest całkiem prosta, oba rozszerzenia o f e r u j ą podobną funkcjonalność. Twój wybór będzie prawdopodobnie zależeć głównie od tego, które rozszerzenie wizualnie lepiej pasuje do reszty strony.
asybook Pokazany na rysunku 10.1 Easybook to doskonały, prosty k o m p o n e n t księgi gości. J e d n ą z najlepszych f u n k c j i jest r o z b u d o w a n a o c h r o n a przed s p a m e m , z a s t o s o w a n i e o b r a z k ó w C A P T C H A i potwierdzenia wysyłanego pod adresem e-mailowym oraz filtr słów. Listę zabronionych słów można zdefiniować w interfejsie administratora, możliwe jest także powiadamianie administratora o próbie wysłania wiadomości zawierającej zabronione słowa. Easybook można również tak skonfigurować, aby po dodaniu wiadomości został w y s ł a n y list z żądaniem potwierdzenia pod p o d a n y m adresem e - m a i l o w y m , w przypadku braku potwierdzenia wiadomość zostanie zignorowana. ysunek 10.1. Vpis w aplikacji 7.asybook może awierać kilka np. imię nazwisko Mającego) ub całkiem sporo iól (np. e-mail, lumer ICQ, adres trony WWW), v zależności id decyzji administratora
Moja Księga Gości • • • • • • • • •
Heine Joomki! uveiview Joomla' License Moie .iboiił Joomla* FAO The News Web Links News Feetls fyloj.i Księga Gości
Easybook zawiera obsługę z n a c z n i k ó w B B C o d e , które u m o ż l i w i a j ą f o r m a t o w a n i e tekstu (pogrubianie, pochylanie itd.). Dodawanie wpisów można ograniczyć, pozwalając na to w y łącznie zarejestrowanym u ż y t k o w n i k o m , lub udostępnić a n o n i m o w e wpisy. W zależności od ustawień w e wpisach m o g ą się pojawiać także emotikony i inne obrazki. Easybook pozwala na wysyłanie e-maili z podziękowaniem do u ż y t k o w n i k ó w dodających wpisy.
250
Joomla!. Profesjonalne tworzenie stron W1NW Bogate opcje konfiguracyjne w interfejsie administratora pozwalają wstawiać dodatkowe pola do formularza (np. adres strony W W W , numer I C Q itd.), a także d a j ą kompletną kontrolę nad tym, które z dodatkowych informacji będą wyświetlane na liście wpisów (zobacz rysunek 10.2). Opcja powiadamiania administratorów powoduje wysyłanie wiadomości informujących o n o w y c h w p i s a c h , które m o g ą b y ć z m i e n i a n e , p u b l i k o w a n e , k o m e n t o w a n e , u s u w a n e lub w s t r z y m y w a n e , a w s z y s t k i e te o p c j e m o ż n a u r u c h o m i ć , klikając odnośniki w otrzymanej w i a d o m o ś c i . Istnieje także f u n k c j a importu a r c h i w u m księgi gości utworzonej za p o m o c ą komponentu AkoBook.
Rysunek 10.2. Interfejs administratora Easybook zawiera bogate opcje kontroli wyświetlania i zapobiegania spamowi
Backend
Frontend
Guestbook offline:
ecurity
Fielete ®
i Tools
Nie O Tak
Switch the guestbook frontend offline.
Offline message:
Das Gostebuch befindet sich im Wartungsmodus. Bitte versuchen Sie es spoter wieder.
Komponent Easybook jest kompatybilny z komponentem łączącym Joomla! z Simple Machines F o r u m ( S M F ; z o b a c z p o d p u n k t „ S i m p l e M a c h i n e s F o r u m ( S M F ) " , aby z d o b y ć więcej informacji na temat tego rozszerzenia). Dostępny jest także w wielu językach, np. niemieckim, niderlandzkim, chińskim uproszczonym, włoskim, rosyjskim, greckim, hiszpańskim, francuskim, n o r w e s k i m i duńskim 1 . M o ż e s z zainstalować rozszerzenie Easybook, pobierając z poniższej strony archiwum ZIP: http://joomlacode.org/gf/project/easyjooinla/frs/ Po pobraniu w y p a k u j plik readme z a r c h i w u m . D o m y ś l n i e k o m p o n e n t wyświetlany jest w j ę z y k u n i e m i e c k i m , aby z m i e n i ć go na angielski, musisz skorzystać z angielskiego deskryptora X M L i stworzyć archiwum komponentu na nowo. Aby to zrobić, wypakuj wszystkie pliki z archiwum, następnie zmień nazwę z easybook.xml na easybook.xmlde, a easybook. xmlen zmień na easybook.xml. Teraz utwórz archiwum zawierające wszystkie pliki komponentu 2 .
1
W najnowszej wersji rozszerzenia jest to tylko sześć języków (niemiecki, angielski, hiszpański, węgierski, holenderski i rosyjski). W internecie można znaleźć polskie tłumaczenie Easybook 1.2 — p r z y p . tłum. Te informacje odnoszą się wyłącznie do komponentu Easybook dla Joomla! w wersji 1.0. W nowszej wersji poprawiono tę niedogodność — przvp. tłum.
Rozdział 10. • Budowanie społeczności w Joomla!
251
Po zainstalowaniu k o m p o n e n t u m u s i s z d o d a ć p o z y c j ę m e n u p r o w a d z ą c ą d o księgi gości. N o w e wpisy można dodawać za pośrednictwem części f r o n t o w e j lub administracyjnej. Jeśli klikniesz odpowiedni odnośnik, zostanie wyświetlony formularz dodawania wpisu (zobacz rysunek 10.3). Jedynymi w y m a g a n y m i polami są Name ( T w o j e imię i nazwisko) i E-mail (Twój adres e - m a i l o w y ) . Na rysunku w i d a ć także, że n o t o w a n y jest adres 1P k o m p u t e r a , z którego dodawany jest wpis. sunek 10.3. rmularz ^dawania
Moja Księga Gości - Sign guestbook Home Joi>inl.ć overview i i i . m i l . i! L i c e n s e M o i e atłoirt J o o m l a ! FAO The N e w s Wtłti Links N e w s Feeds M o j . i Ksie
IP addressName
Jan Kowalski
E-mail
kowal@o2.pl
Show e-mail
public
U
Homepage Lot ation !CQ number AIM nickname MSN m e s s e n g e r Yahoo m e s s e n g e r Skype nickname Website rating
Chociaż Easybook jest bardzo popularnym rozszerzeniem, którego instalacja i konfiguracja nie nastręczają trudności, niektóre strony w y m a g a j ą większej kontroli wyglądu księgi gości. Rozszerzenie Jambook umożliwia t a k ą kontrolę dzięki zastosowaniu systemu szablonów.
imbook Jambook (zobacz rysunek 10.4) należy do najpopularniejszych k o m p o n e n t ó w dodających f u n k c j ę księgi gości ze względu na nacisk na ochronę przed s p a m e m , możliwość importu wpisów AkoBook, a także zaawansowany interfejs administratora. Potężny system szablonów pozwala wpływać na każdy aspekt warstwy prezentacji części f r o n t o w e j . Szablony m o ż n a edytować z poziomu interfejsu administratora, co umożliwia d o p a s o w a n i e w y g l ą d u komponentu do szablonu strony. Poniżej wymieniono niektóre zabezpieczenia z ich długiej listy: •
generowanie obrazków C A P T C H A ;
•
blokowanie adresów IP — ma zapobiec nadużyciom księgi gości;
•
integracja z systemem logowania Joomla!;
252
Joomla!. Profesjonalne tworzenie stron W1NW
Rysunek 10.4. Część frontowa komponentu Jambook umożliwia wyświetlanie i wyszukiwanie wpisów
Księga Gość Lista wpisów SZU kAJ WPISU
DODAJ WPIS Ogółem w p i s ó w w księdze I
•
p o w i a d a m i a n i e administratora e-mailem o nowych wpisach;
•
konfiguracja usuwania znaczników H T M L z wiadomości;
•
ukrywanie adresów e - m a i l o w y c h ;
•
ochrona przed m a s o w y m d o d a w a n i e m wiadomości;
•
m o d y f i k o w a l n a lista znaczników H T M L , które można wykorzystać w e wpisach.
Jeśli korzystałeś wcześniej z rozszerzenia Easybook, J a m b o o k m o ż e zaimportować wpisy utworzone w tamtej aplikacji. Nowe wiadomości m o g ą być wprowadzane za pomocą aktualnie ustawionego edytora W Y S I W Y G lub w formie zwykłego tekstu, ale formatowanie tekstu nie jest wtedy dostępne. Przycisk Podgląd umożliwia sprawdzenie, jak wiadomość będzie się prezentować na stronie, przed ostatecznym dodaniem j e j do bazy. Zarejestrowani użytk o w n i c y s y s t e m u J o o m l a ! m o g ą p r z e z o g r a n i c z o n y czas, ustalony przez administratora, zmieniać treść swoich wypowiedzi. K o m p o n e n t zawiera także f u n k c j ę chroniącą przed nieu m y ś l n y m p o d w ó j n y m d o d a w a n i e m tej s a m e j w i a d o m o ś c i — co j e s t częsty p r o b l e m e m w przypadku niewprawionych użytkowników księgi gości. Jambook dostępny jest w wielu językach, m.in. angielskim, niemieckim, francuskim, portugalskim, serbskim (łaciński zestaw znaków), norweskim i polskim. Ma także funkcję wyszukiwania w p i s ó w pod kątem w p r o w a d z o n e g o tekstu. Rozszerzenie Jambook można pobrać na stronie: www.jxdevelopment.com/jambook Jak pokazano na rysunku 10.5, część administracyjna rozszerzenia Jambook jest zaskakująco rozbudowana, j a k na tak prostą aplikację. Możliwa jest nie tylko edycja i usuwanie wpisów, ale także m o d y f i k a c j a szablonów H T M L . D o m y ś l n a instalacja zawiera poniższe szablony, których zmiana w p ł y w a na wygląd komponentu: •
Show — Wyświetla pojedynczy wpis Jambook.
•
List — Określa sposób wyświetlania listy wpisów.
•
List empty — W y g l ą d listy wpisów, w przypadku gdy żadne nie zostały dodane.
•
List item — Logika odpowiedzialna za generowanie wydruku poszczególnych wpisów.
•
Edit item — W y g l ą d formularza edycji wpisu.
Rozdział 10. • Budowanie społeczności w Joomla! ¡unek 10.5. nel kontrolny vbook posiada •budowane cje ministracyjne
JX< fSi8P$ W
253
J a m b o o k Conti ol P a n e l Wpisy
Wspieraj Jambook
Wyświetl wszystkie wpisy z opcjami publikacji, edycji oraz dodawania nowych pozycji.
Aby umożliwić dalszy rozwój komponentu, pros wspierać autora dobrowolnymi datkami finansowymi klikają w poniższy guzik.
Menedżer szablonów
Mak® A Dijmtian
Edytuj szablony dla wszystkich stron i e-maili.
^
śpi Importuj wpisy • B P Importuj wpisy księgi z zewnętrznego źródła. Informacje o Jambook
S . o «i u '
Przeczytaj dokumentację, listę rzeczy do zrobienia, listę zmian oraz licencję.
Konfiguracja Jambook ZmieVj0144 opcje dla: przegl\u0105dania właściwości, ustawienia e-mail, wysyłania wiadomości, spamu. Kliknięcie na lo
U
Thankyou
— Ekran wyświetlany p o u d a n y m dodaniu wpisu.
•
Search — Określa sposób wyświetlania strony wyszukiwania.
•
Preview — Podgląd n o w e g o wpisu.
Dokumentacja komponentu (wraz ze wskazówkami dotyczącymi edycji szablonów) dostępna jest z poziomu interfejsu administratora. Jambook wykorzystuje do generowania obrazków CAPTCHA funkcje TrueType biblioteki GD2. Dlatego obsługa TrueType musi być dostępna w systemie PHP, aby umożliwić dodawanie wiadomości. W przeciwieństwie do PHP5 zawiera wbudowaną obsługę TrueType, w PHP4 trzeba zainstalować dodatkowy moduł.
:at Pojęcie czatu internetowego obejmuje wszystkie formy komunikacji, począwszy od p o k o j ó w czatowych, przez nowoczesne implementacje Shoutbox, p o f u n k c j e związane z k o m u n i k a torami internetowymi. W ostatnich latach czaty dorobiły się wątpliwej reputacji z p o w o d u częstych nadużyć związanych z wykorzystaniem nieletnich. Nie ma tygodnia bez wiadomości o przestępcy, który wykorzystywał p o k o j e czatowe do złych celów. Chociaż większość czatów nie jest siedliskiem zła, problem jest na tyle znaczący, że warto p o w a ż n i e się z a s t a n o w i ć przed d o d a n i e m takiej f u n k c j o n a l n o ś c i na stronie. B e z p o ś r e d n i a komunikacja, typowa dla czatów, stwarza większe p r a w d o p o d o b i e ń s t w o nadużycia niż inne technologie, gdzie komunikacja nie jest ciągła, a wiadomości są widoczne dla całego świata. Powinieneś b y ć ś w i a d o m p r a w n y c h k o n s e k w e n c j i , jeśli j a k a ś „ z ł a " osoba, w y k o r z y s t u j ą c T w o j ą stronę, dopuści się przestępstwa. Dokładniejsze informacje na temat tego zagadnienia znajdziesz w podrozdziale „Odpowiedzialność prawna".
254
Joomla!. Profesjonalne tworzenie stron W1NW
BlastChat R o z s z e r z e n i e BlastChat ( z o b a c z rysunek 10.6) to k o m p o n e n t oparty na technologii Ajax, który za pośrednictwem zdalnego serwera (serwera BlueChat) udostępnia opcję czatu. Ponieważ Twój serwer wykorzystywany jest wyłącznie do zainicjowania połączenia, komponent nie obciąża zasobów i łącza. N a stronie BlastChatu z n a j d u j e się informacja, że j u ż ponad 14 tysięcy stron wykorzystuje tę technologię. Oprócz komponentu, który odpowiada za działanie czatu, do pakietu dołączony jest moduł, który wyświetla listę dostępnych użytkowników z odnośnikami do ich profili.
ÖO
Rysunek 10.6. BlastChat, dzięki technologii Ajax, uaktualnia listę wpisów na czacie bez przeładowywania całej strony
/£News3i P o k o j e ] [C h a t t e r s ][ W e b s i t e s ] i -
Home Joomla! wervtey* Joomla! License Moie about J o ¡oni.i! FAO The News Welt Links News Feeds
Joomla!
localhost/bombla [Chatters]
Mojo Ki.lfM
Odśwież adasmiauczynskfOOrn]
Gości Mój Blast ii.it
Odśwież i: i priv: Wiadomość: •
..V I I
• Y o i i i Details • Liojoilt
I
i,ii •
•
¡i fti JS>
i
U
S »
/;,•
Wyślij
<5
-
" CO
S
~
i."
OT
"ł
Dźwięk n
Wszyscy
P o w e r e d by BlastC hat
Pakiet BlastChat m o ż e s z pobrać z poniższej strony: www. blastchat.
com
Instalacja k o i n p o n e n t u i m o d u ł ó w nie odbiega od s t a n d a r d o w e j p r o c e d u r y , o d b y w a się za p o m o c ą opcji Rozszerzenia/Instalator. Po zainstalowaniu k o m p o n e n t u BlastChat możesz z poziomu interfejsu administratora dodać konto usługi BlastChat. Otwórz ekran konfiguracji rozszerzenia w interfejsie administratora Joomla!, wybierając opcję Komponenty/BlastChat. A b y uruchomić czat na stronie, musisz najpierw utworzyć konto na serwerze, z którego korzysta rozszerzenie BlastChat. Ekran konfiguracji komponentu umożliwia przeprowadzanie d a r m o w e j rejestracji. Po zarejestrowaniu się na serwerze BlastChata musisz się zalogować i ustawić serwer pod k ą t e m obsługi T w o j e j strony, jak pokazano to na rysunku 10.7. Procedura rejestracji nowej strony umożliwia dodanie j e j do centralnego katalogu BlastChata, co m o ż e się przełożyć na wzrost popularności.
Rozdział 10. • Budowanie społeczności w Joomla! unek 10.7. ifiguracja wera stChat wpływa wygląd czatu
255
Wehsite Details Name: Abbreviation: URL:
localhostJjoomla
Intra id:
"b?cd64610a977afd60cfcde96edfbd9b"
Private key:
"0?eSf4Q1 S5e768bd8ca59d7de1 a70c5d" (Do not share this value! It is used for security purposes)
BlastChat korzysta z Ajaksa do pobierania w i a d o m o ś c i na czacie. W rezultacie wyświetla zmieniony tekst w oknie czatu bez uaktualniania całej strony. Ekran konfiguracji rozszerzania pozwala określić rozmiary okna czatu (Width — szerokość, Height — w y s o k o ś ć ) , a także w y m i a r y s a m o d z i e l n e g o okna (Detached Width i Detached Height), o b r a m o w a n i e (Frame Border), szerokość i wysokość marginesów (Margin Width i Margin Height). Warstwa prezentacji opiera się na stylach zdefiniowanych w Joomla!, dlatego wygląd czatu powinien dobrze pasować do reszty strony. Administrator czatu ma nad nim k o m p l e t n ą kontrolę, może: •
wysyłać wiadomości publiczne (do poszczególnych użytkowników i pokoi);
•
usuwać użytkowników z danego pokoju;
•
blokować dostęp użytkownikom do j e d n e g o pokoju lub kilku;
•
ustawić długość bana;
•
zablokować dostęp z danego adresu 1P;
•
nadawać innym użytkownikom uprawnienia moderatora.
Interfejs B l a s t C h a t a został n a p i s a n y w j ę z y k u J a v a S c r i p t , a j e g o d z i a ł a n i e s p r a w d z o n o w przeglądarce Mozilla Firefox (wersje 1 i 2), Internet Explorer (wersje 6 i 7), Opera (wersje 8 i 9), a także Netscape (8.1). Komponent BlastChat jest kompatybilny z JoomFish, dlatego obsługuje wszystkie języki wspierane przez to rozszerzenie, włączając w to tekst pisany od prawej do lewej strony.
¡hat Komponent utChat, przedstawiony na rysunku 10.8, jest rozszerzeniem zbudowanym w oparciu o skrypt PhpFreeChat, d o s t o s o w a n y do u r u c h a m i a n i a w ś r o d o w i s k u J o o m l a ! . T e c h n o l o g i a Ajax wykorzystywania jest do odświeżania okna czatu bez konieczności przeładowania całej strony. utChat jest prostą i m p l e m e n t a c j ą czatu, dostępną w wielu j ę z y k a c h , a na dodatek nie zużywa wiele z zasobów serwera. Możesz pobrać rozszerzenie utChat z poniższej strony: http://video.joomlapl.com/tag/utchal/
256
Joomla!. Profesjonalne tworzenie stron W1NW
Rysunek 10.8. Komponent utChat wykorzystuje skrypt PhpFreeChat, aby dodać do Joomla! obsługę czatów
Po z a i n s t a l o w a n i u k o m p o n e n t u u t C h a t z p o z i o m u interfejsu administratora musisz dodać pozycję menu łączącą z częścią frontową rozszerzenia. Komponent utChat nie korzysta z bazy danych Joomla! do zapisywania wiadomości i nicków, tylko przechowuje wszystkie wiadomości w postaci prostego archiwum. PhpFreeChat (a także, w konsekwencji, utChat) zawiera następujące f u n k c j e : •
Możliwość p r o w a d z e n i a kilku pokoi.
•
Prywatne wiadomości między uczestnikami.
•
Funkcje dla moderatorów (m.in. możliwość usuwania i blokowania użytkowników).
•
M o d y f i k a c j e za p o m o c ą arkuszy stylów (CSS).
•
Obsługa d o w o l n e g o języka, który można zapisywać i wyświetlać w postaci kodowania UTF-8.
•
Wsparcie f o r m a t o w a n i a tekstu i e m o t i k o n ó w za p o m o c ą BBCode.
•
W ł a s n y system wtyczek, który pozwala na zmianę miejsca przechowywania danych (przykładowo można dodać zapisywanie wiadomości w bazie danych).
Domyślna konfiguracja nie określa domyślnie wykorzystywanego języka. Po zainstalowaniu komponentu wybierz w interfejsie administratora opcję utChat z menu Komponenty. Zostanie wyświetlony edytor, który umożliwia m o d y f i k a c j ę parametrów, jak przedstawiono to na rysunku 10.9. Ustawienia zapisywane są w postaci kodu PHP, który jest bezpośrednio uruchamiany przez rozszerzenie.
Rozdział 10. • Budowanie społeczności w Joomla! sunek 10.9. i nfigu racja zszerzenia 3hat zapisywana ;t w postaci du PHP 'jchamianego zez system
S u t p a r a m s [ 1 f r o z e n n i.cckk ' ]] - TRUE; Jutparams('channeirs'] = i : r a y ( ' P o k o j l ' , 'Pokoj f u r p a r a m s I 1 t h e m e ' ] = 'msn i u t p a r a m s [ ' l a n g u a g e ' 1 = 1'(en__US 1 . $utparams [ 1 admins 1 ] = aarrr ar ;y ( ' admin 1 =>- • ' ) ;
2'J;
Dodaj poniższą linię, aby ustawić język na a m e r y k a ń s k ą o d m i a n ę angielskiego: $urparams['language'1 = 'en_US':
K o m p l e t n ą dokumentację rozszerzania utChat (a raczej skryptu phpFreeChat) znajdziesz na stronie: www.phpFreeChat.
net
irum dyskusyjne Forum to ogromnie popularna metoda świadczenia p o m o c y technicznej z a r ó w n o dla produktów komercyjnych, j a k i open source. Społeczność Joomla! rozwija się właśnie dzięki forum (forum.joomla.org), które zrzesza programistów i webmasterów Joomla!. Forum Joomla! wykorzystuje do działania aplikację Simple Machines Forum (SMF). Źródeł forów dyskusyjnych należy upatrywać w poprzedzających strony W W W systemach BBS. Wraz z rozrostem internetu dyskusje zostały przeniesione na grupy dyskusyjne. Obecnie forum w postaci strony internetowej można łatwo dodać d o istniejącej witryny lub systemu Joomla!.
mple Machines Forum (SMF) Simple Machines F o r u m jest aplikacją (zobacz rysunek 10.10) w y k o r z y s t y w a n ą na g ł ó w n e j stronie Joomla! (www.joomla.org) do prowadzenia forum. Fakt ten świadczy o j e j w y d a j n y m działaniu pod dużym obciążeniem. Program dostępny jest w ponad 20 językach: angielskim, albańskim, arabskim, szwedzkim, katalońskim, perskim, chińskim, fińskim, greckim, japońskim, tureckim, portugalskim, francuskim, niderlandzkim, hiszpańskim, niemieckim, węgierskim, hebrajskim, bułgarskim, włoskim, tajskim, polskim, rosyjskim, norweskim i mmuńskim. S M F nie jest rozszerzeniem Joomla!, to oddzielna aplikacja spełniająca założenia f o r u m , wykorzystywana na wielu witrynach, w tym na forum.joomla.org. Istnieje jednak możliwość połączenia programu SMF z systemem Joomla! za pomocą specjalnego komponentu. Ponieważ
258
Joomla!. Profesjonalne tworzenie stron W1NW
Rysunek 10.10. Chociaż część frontowa SMF uruchamiana jest w ramach interfejsu Joomla!, to zawiera własny zestaw tematów, które określają jej wygląd
General Discussion Feel free to talk a b o u t a n y t h i n g a n d e v e r y t h i n g in this b o a r d .
1 Posts 1 Topics
Last post by Simple Machines in W«lcom« to SMF! on Today at 12:17:05 PM
Forum Stats A
1 Posts in 1 Topics by 1 Members. L a t e s t Member: t e s t L a t e s t Post: " W e l l unit- to * , M n " ( Today at 1 2 : 1 7 : 0 5 PM ) View the most recent posts o i the forum. : [More Stats]
S M F z a w i e r a w ł a s n y s y s t e m wtyczek, dostępnych jest wiele rozszerzeń, np. galerie, filtry antyspamowe, funkcje ułatwiające pozycjonowanie (SEO), Shoutbox, zarządzanie reklamami i wiele innych. S M F należy zainstalować oddzielnie od Joomla!, pakiet można pobrać na poniższej stronie: www.simplemachines.org A b y u m o ż l i w i ć i n t e g r a c j ę ze s t r o n ą J o o m l a ! , S M F n a l e ż y u m i e ś c i ć w e w n ą t r z struktury k a t a l o g ó w J o o m l a ! . J e d n y m ze s k u t e c z n y c h s p o s o b ó w j e s t u t w o r z e n i e f o l d e r u 1forum w g ł ó w n y m katalogu Joomla! i zainstalowanie tam oprogramowania forum. Instalacja SMF p r z y p o m i n a w instalację J o o m l a ! , u r u c h a m i a n a j e s t przez w p r o w a d z e n i e w przeglądarce o d p o w i e d n i e g o adresu, następnie kreator przeprowadzi Cię przez proces instalacji. Po zainstalowaniu S M F należy dodać komponent łączący, aby umożliwić uruchamianie forum w r a m a c h interfejsu witryny Joomla!. K o m p o n e n t łączący ( S M F Bridge) możesz pobrać ze strony: www.simplemachines.org/download/?
brie/ges3.
Z w r ó ć uwagę, że istnieje sporo innych rozszerzeń, które p o z w a l a j ą połączyć S M F i Joomla!. Każde z nich m a swoje w a d y i zalety. Powinieneś j e d n a k korzystać z komponentu SMF Bridge, p o n i e w a ż jest to oficjalne rozszerzenie, stworzone przez programistów S M F — co zapewnia tym s a m y m n a j l e p s z ą kompatybilność. Po zainstalowaniu k o m p o n e n t u łączącego m u s i s z s k o n f i g u r o w a ć go za p o m o c ą interfejsu administratora, aby w s k a z y w a ł miejsce instalacji SMF. Wybierz odpowiednią opcję z menu komponenty, żeby wyświetlić ekran konfiguracji zilustrowany na rysunku 10.11. Największe z n a c z e n i e ma parametr Palh to SMF (ścieżka dostępu do S M F ) , p o n i e w a ż j e g o poprawne ustawienie jest w a r u n k i e m działania połączenia. W pole należy w p r o w a d z i ć odpowiednią ścieżkę absolutną.
Fireboard W przeciwieństwie do SMF, która jest odrębną aplikacją, Fireboard (połączony z rozszerzeniem J o o m l a b o a r d ) f u n k c j o n u j e j a k o uzupełnienie systemu Joomla!. Rozszerzenie przedstawione na rysunku 10.12 zostało napisane z m y ś l ą o wykorzystaniu w systemie Joomla!, 3
Oficjalne rozszerzenie SMF Joomla Bridge nie jest już rozwijane ani dostępne na stronie SMF. Powodem przerwania prac była niekompatybilność licencji. Więcej infonnacji na http://www.simplemachines.org/ community/index.php?topic=184557 — przyp. tłum.
Rozdział 10. • Budowanie społeczności w Joomla! sunek 10.11. ) ekranie nfigu racji części 1ministracyjnej AF Bridge ajduje się opcja 'ath to SMF"
Configuration
Synch
i
259
Upgrade
Path to SMF (absolut):
C :V:amppV-itdo sljoomlaVorum
SMF Forum intergration:
Wrapped V
Use SMF CSS in other pages?:
Yes V
Synchronize Language from Mambo/Joomla to SMF?:
No
Create path automatically
&
v
dlatego nie w y m a g a żadnych łączników. Integracja z systemem jest znacząca — zwłaszcza w zakresie wyglądu i uprawnień użytkowników. Fireboard bezpośrednio wykorzystuje listwy kontroli dostępu ( A C L ) Joomla! do zarządzania uprawnieniami u ż y t k o w n i k ó w . sunek 10.12. •ęść frontowa omlaboard 'korzystuje :tuainy ablon strony ) stworzenia idobnej ezentacji
-Joomlaboard-Forum :atriie posty ; ! R e g u l a m i n i i Pomoc
szukaj w forum
Forum '' . - i go ty Tenuity
Fol tlili Forum 1 Sample Forum 1
Odpowiedzi
Ost.Ttłli |)OST
1
Pobierz nagłówki ostatnich p o s t ó w
Pobieiz n a g l o w n ostatnich postów.
Joomlaboard Forum Component i i i Stable T'JJO Shoes M - F a o t o r y Wersja PL Zwiastun .«otispam integration b y JoorniaPi.oom T e a m
Fireboard posiada następujące f u n k c j e f o r u m dyskusyjnego: •
nieograniczona możliwość definiowania kategorii i podkategorii;
•
obsługa wielu j ę z y k ó w ;
•
system szablonów p o r ó w n y w a l n y z S M F ;
•
umieszczanie d o d a t k o w y c h funkcji w panelach: n a j n o w s z e wiadomości, najnowsze wątki, przyklejone tematy i inne;
•
opcja wybierania własnych ulubionych w ą t k ó w przez u ż y t k o w n i k ó w ;
•
import danych Joomlaboard;
•
własna architektura wtyczek, która pozwala na integrację z Joomap, tworzenie map stron Google, obsługę Joom!Fish, systemów komentarzy i innych;
•
generowanie kanałów R S S i d o k u m e n t ó w w formacie P D F ;
•
integracja z systemem profili u ż y t k o w n i k ó w C o m m u n i t y Buildera;
•
obsługa systemów prywatnych wiadomości, takich jak ClexusPM i Uddeim.
Możesz pobrać komponent Fireboard i p o w i ą z a n e moduły z poniższej strony: www. bestofjoomla.
org
260
Joomla!. Profesjonalne tworzenie stron W1NW Po pobraniu komponentu możesz zainstalować go w tradycyjny sposób, za p o m o c ą opcji Rozszerzenia/Instalator. Następnie d o d a j w Menadżerze Menu pozycję łączącą z komponentem Fireboard. M o ż l i w e jest także dodanie m o d u ł ó w oferujących takie funkcje, jak wybór t e m a t ó w , pobieranie i w y ś w i e t l a n i e n a j n o w s z y c h t e m a t ó w za p o m o c ą Ajaksa, ikona szybkiego uruchomienia interfejsu administratora Fireboard, wyświetlanie najlepszego i ostatnio zarejestrowanego użytkownika, statystyki f o r u m i inne. Kolejnym krokiem po zainstalowaniu komponentu jest dodanie kategorii i forów, które umożliwią u ż y t k o w n i k o m dostęp. Panel kontrolny Fireboard, przedstawiony na rysunku 10.13, pozwala na dostęp d o wszystkich funkcji rozszerzenia. Kliknięcie przycisku Forum Administration s p o w o d u j e wyświetlenie ekranu, gdzie możesz d o d a w a ć n o w e kategorie.
Rysunek 10.13. Panel kontrolny rozszerzenia Fireboard pozwala na dostęp do konfiguracji, zarządzania użytkownikami i wystanymi plikami oraz do administracji forum
Fireboard - Panel kontrolny W i t a j m i f o r u m Fii e B o a i d Dziękujemy za w/bór FireBoard jako T w ó j 3go Forum. N a te stronie możesz prz egiądać statystyki forum, ł ą za po lewej stronie umożliwią C i administrację wszystkimi as pektami forum. N i każdej stronie zn< jdziesz pomoc kontekstowi objaśniającą, lak korzystać z dostępnych narzędzi.
\ . . ifiguracja
- O Blokowanie Forum
_ M
1
Kategorie i fora
Łf^yi Synchronizacja użytkowników
<% ipJL 3 Użytkownicy
O Strona domowa Fireboard
css 18-
J
Przeglądarka plik ów
| Wczytaj przyktedc w e dane
/
sśkm Przeglądarka grafik
W
Edytor pliku CSS
¥
Usuń przykładowe dane
Uśmieszki
(**) Przelicz statystyki kategorii
Rangi
Po kliknięciu przycisku New zostaniesz przeniesiony do ekranu tworzenia kategorii. Pozostaw u s t a w i e n i e Item Level na Top Level ( P o z i o m n a d r z ę d n y ) , a n a s t ę p n i e w p r o w a d ź nazwę, np. Inwestowanie w nieruchomości. Zapisz kategorię i przejdź do tworzenia kolejnej. Tym r a z e m w y b i e r z z listy Item Level k a t e g o r i ę , k t ó r ą p r z e d c h w i l ą u t w o r z y ł e ś , a następnie wprowadź tytuł forum. Użytkownicy będą mogli teraz dodawać wiadomości na utworzonym forum.
Sondy Sondy m o g ą być doskonałym dodatkiem, jeśli wirtualna społeczność została uruchomiona. Niektórzy spośród o d w i e d z a j ą c y c h z a g ł o s u j ą tylko p o to, aby zobaczyć wyniki sondy. Jeśli j e d n a k wirtualna s p o ł e c z n o ś ć j e s t j u ż silna, s o n d y m o g ą b y ć d o s k o n a ł ą m e t o d ą poznania opinii użytkowników. M o g ą służyć także za źródło informacji i opinii społeczności na różne tematy — także na temat strony.
Rozdział 10. • Budowanie społeczności w Joomla!
261
System o b s ł u g i sond j e s t , o c z y w i ś c i e , d o m y ś l n i e d o ł ą c z o n y d o J o o m l a ! . R y s u n e k zawiera fragment strony, na której z n a j d u j e się sonda.
Joomla! is a free open source fi amewoik and content publishing system designed toi quickly ci eating highly interactive multi-language Web sites, online communities, media paitáis, hloys and eCo applications. Joomla! provides an easy-to-use graphical user interface that verstóíi 1.5 simplifies the management and publishing of large volumes of content including HTML, Powered by
0
Community Sites
O
Public Brand Sites
0
eCommerce
0
Blogs
0
Intranets
Q
Photo and Media Sites
O
All of the Above!
G ł o s u j J I Wyniki
M Joomla!
Who's
Online
Możesz skorzystać także z innych rozszerzeń, które m a j ą więcej funkcji i o f e r u j ą w i ę k s z ą elastyczność. Moduł sondy dołączony jest także do pakietu S M F , który miałeś o k a z j ę zainstalować wcześniej. Aby dodać sondę w aplikacji SMF, kliknij przycisk Add Poll z panelu administratora S M F . Zostanie wyświetlony ekran tworzenia sondy (co przedstawiono na rysunku 10.15). M o ż e s z dodać dowolną liczbę odpowiedzi, skonfigurować czas trwania sondy, a także wstawić k o m u nikat opisujący p o w o d y j e j uruchomienia. ysunek 10.15. )odanie sondy ' programie SMF ?st tak proste jak wysłanie nowej wiadomości a forum
Post n e w poll S u b j e c t : ;Miejsce spotkania Message icon: Question:
Standard
v,
••.;>'
Gdzie najlepiej SIĘ spotkać? O p t i o n 1: Kawiarnia O p t i o n 2: Park miejski Option 3: Góra św. Jerzego O p t i o n 4: O p t i o n 5:
Po11
„ .. Options:
j ( Add Option)
.1 ..Maximum votes per user. Run the poll for
days, (leave blank for no limit)
Eli Allow user to change vote, Show the poll's results to anyone.
W panelu a d m i n i s t r a t o r a S M F m o ż l i w e j e s t u s t a w i e n i e w i e l u d o d a t k o w y c h p a r a m e t r ó w i funkcji sond. Jedną z zalet uruchamiania sond w S M F jest ich bliskie powiązanie z tematem forum dyskusyjnego. Skoro próbujesz zgromadzić na swojej stronie z a a n g a ż o w a n ą społeczność, to czy istnieje lepszy sposób pozyskania opinii u ż y t k o w n i k ó w niż umieszczenie sondy w miejscu, gdzie dyskutowane są sporne tematy. Sondy utworzone w programie S M F pojawiają się na liście tematów (zobacz rysunek 10.16) w dziale, w którym zostały umieszczone. Po kliknięciu odnośnika p r o w a d z ą c e g o d o sondy wyświetlany jest formularz umożliwiający oddanie głosu zamiast wprowadzenia wiadomości. Do p o p r a w n e g o działania sond niezbędne jest włączenie obsługi ciasteczek w przeglądarce, ponieważ moduł sondy wykorzystuje je, aby zapobiec wielokrotnemu głosowaniu przez tego samego użytkownika w j e d n e j sondzie.
262
Joomla!. Profesjonalne tworzenie stron W1NW
Rysunek 10.16. Sonda wyświetlona w interfejsie forum SMF
Poll Question: Gdzie najlepiej się s p o t k a ć ? O Kawiarnia • 0
Komentarze Komentarze to szczególnie e f e k t y w n a metoda b u d o w a n i a społeczności. Nie w y m a g a j ą dod a w a n i a t e m a t ó w na f o r u m , które nie d a j ą p e w n o ś c i , czy d o c z e k a m y się odpowiedzi, ale j e d n o c z e ś n i e u m o ż l i w i a j ą wysyłanie opinii i dzielenie się wrażeniami na temat określonych treści umieszczonych na stronie. Przeogromna liczba udanych stron zawiera funkcję komentowania. Niektóre witryny (np. epinions.com) nie zawierają wielu artykułów — główną treść stanowią opinie użytkowników. Komentarze stają się coraz popularniejszą funkcją na wszystkich wielkich stronach. Niektóre z nich to Onet.pl, Wp.pl, Gazeta.pl. Implementacja rozszerzenia A k o C o m m e n t lub ¡JoomlaComment umożliwi odwiedzającym dodawanie komentarzy pod k a ż d y m artykułem. Włączenie funkcji k o m e n t o w a n i a oznacza nie tylko udostępnienie platformy dla konstruktywnej krytyki, pozwala także o d w i e d z a j ą c y m na uzupełnianie treści artykułu d o d a t k o w y m i i n f o r m a c j a m i i odnośnikami.
AkoComment Tweaked Special Edition 1.4.6 J e d n y m z najpopularniejszych s y s t e m ó w komentarzy jest rozszerzenie A k o C o m m e n t . Warstwę prezentacji s t w o r z o n o , k o r z y s t a j ą c z arkuszy stylów, co p o z w a l a w e b m a s t e r o w i na d o w o l n e d o p a s o w y w a n i e w y g l ą d u komentarzy. Rozszerzenie A k o C o m m e n t zawiera następ u j ą c e funkcje: •
d o d a w a n i e komentarzy z f o r m a t o w a n y m tekstem;
•
tworzenie kanałów R S S zawierających n a j n o w s z e komentarze;
•
p o w i a d a m i a n i e administratora o n o w y c h komentarzach;
•
obsługa szablonów, co przekłada się na bogate możliwości dopasowywania wyglądu;
•
ograniczanie liczby komentarzy pod k a ż d y m artykułem;
Rozdział 10. • Budowanie społeczności w Joomla!
•
263
definiowanie minimalnego czasu między komentarzami d o d a w a n y m i przez tego samego użytkownika;
•
opcjonalne powiadamianie użytkownika o kolejnych komentarzach;
•
generowanie obrazków C A P T C H A , które z a p o b i e g n ą spamowi;
•
integracja z profilem użytkownika w systemie C o m m u n i t y Builder.
Aplikacja dostępna jest w wielu językach: angielskim, brazylijskim, portugalskim, chińskim, czeskim, fińskim, francuskim, niemieckim, greckim, węgierskim, indonezyjskim, włoskim, norweskim, polskim, rosyjskim, słowackim, hiszpańskim i tureckim. Podczas dodawania komentarza można w p r o w a d z i ć d o d a t k o w o adres e-mailowy i adres strony d o m o w e j użytk o w n i k a ( z o b a c z r y s u n e k 10.17), a a d m i n i s t r a t o r m o ż e z a d e c y d o w a ć , czy te d o d a t k o w e informacje b ę d ą wyświetlane obok komentarzy. suneK 10.17. ygląd
Write Comment «
p l e a s e k e e p the topic of m e s s a g e s relevant to the subject of t h e
article.
• P e r s o n a l v e r b a l a t t a c k s will b e d e l e t e d , • P l e a s e d o n ' t u s e c o m m e n t s t o p l u g y o u r w e b s i t e , S u c h m a t e r i a l will b e r e m o v e d . • J u s t e n s u r e t o * R e f r e s h * y o u r browser for a new security c o d e t o b e d i s p l a y e d prior to •
clicking
on the 'Send' button. K e e p i n m i n d t h a t t h e a b o v e p r o c e s s o n l y a p p l i e s if y o u s i m p l y e n t e r e d t h e w r o n g s e c u r i t y
Name:
code,
Jan Kowalski
—
E-mail Homepage Title: BBCode: Comment:
» s u m ( ¡ a E l i a is e s Wspaniała strona, pozdrawiam jej autorów
# w é c* a è #
Code:* i
1 i wish t o b e c o n t a c t e d by e m a i l r e g a r d i n g a d d i t i o n a l
Send
coir m e n t »
1
Formatowanie tekstu możliwe jest dzięki zastosowaniu znaczników BBCode, prostego języka, podobnego do HTML. Znaczniki umieszcza się w nawiasach kwadratowych: [b] o d p o w i a d a pogrubieniu (ang. bold), [i] pochyleniu tekstu (ang. italić), a [u] podkreśleniu (ang. underline). Dodatkowo obsługiwane są wypunktowane listy, emotikony i wprowadzanie tekstu w dowolnym języku obsługiwanym przez Joomla!. A k o C o m m e n t możesz pobrać na: www.visualclinic.fi" Pakiet A k o C o m m e n t składa się z wtyczki (bot_akocomment_SE.zip), k o m p o n e n t u (com_ akocomment_SE.zip) i dwóch modułów (mod_ac_lastcomments.zip i mod_ac_mostfavowed. zip). Wtyczka p o w o d u j e wyświetlanie odnośnika Komentarzy (x) pod k a ż d y m artykułem, przy czym litera x odpowiada liczbie dodanych komentarzy. Kliknięcie tego odnośnika powoduje uruchomienie komponentu.
264
Joomla!. Profesjonalne tworzenie stron W1NW Interfejs administratora, z i l u s t r o w a n y na rysunku 10.18, u m o ż l i w i a d o k ł a d n e ustawienie opcji związanych z układem strony i d o d a w a n i e m nowych wiadomości. Obecna jest także f u n k c j a zgłaszania, dzięki czemu użytkownicy m o g ą i n f o r m o w a ć administratora Joomla! o obraźliwych lub spornych komentarzach.
Rysunek 10.18. Interfejs administratora AkoComment umożliwia konfigurację procesu dodawania i wyświetlania komentarzy
/
General
TUJEflKED SPECIAL EDITION
Layout
Postinq
Notification
Reports ; Favoured
Template
Main O p e i atiiuj M o d e :
HI Sections available :
About Joomla!
With individual botcommand {moscomment} you can choose we not for every content item individually. Using the second option comments on/off for complete sections. If you use second operating mode, you can choose here which comment system. Multiple selections are possible.
fiSMHH
Aiito|>til>lish C o m m e n t s :
O Nie ® Tak
Automatically publish new comments?
Anonymous Comments:
O
Allow unregistered users to post comments?
Foi l e g i s t e i e d u s e i s : s h o w n a ni e oi useiname ?
Nie
0
Tak
|^p»«fii||||||||| Username Choose where to open the comments.
Comment Window :
Open in new window S h o w c o m m e n t s o n Ai chives :
Praktycznie wszystkie elementy systemu komentarzy można ustawić, dopasowując dostępne parametry lub m o d y f i k u j ą c szablon. Do parametrów wyświetlania należą Autolimit num of comments to display (Automatycznie ograniczaj liczbę wyświetlanych komentarzy), Num of comments per page (Liczba komentarzy na stronie), Show favoured link (Wyświetlaj prom o w a n y odnośnik), Show quote this article in website link (Pokazuj odnośnik do cytowania treści artykułu), Show hits/view (Wyświetlaj liczbę odsłon), Show print link (Pokazuj odnośnik uruchamiający drukowanie), Show send Email link (Wyświetlaj odnośnik do powiadamiania znajomych przez e-mail), Show read more link (Pokazuj odnośnik „Czytaj więcej"). Dostępna j e s t o p c j a w y ś w i e t l a n i a listy k o m e n t a r z y w oparciu o arkusze stylów lub w postaci tabeli HTML.
¡JoomlaComment K o m p o n e n t !JoomlaComment, przedstawiony na rysunku 10.19, dodaje na stronie funkcje komentowania z wykorzystaniem technologii Ajax. Umożliwia także importowanie komentarzy rozszerzenia AkoComment. Rozszerzenie ¡ J o o m l a C o m m e n t zawiera następujące funkcje: •
interfejs systemu komentarzy opiera się na technologii Ajax, dlatego nie jest w y m a g a n e p r z e ł a d o w y w a n i e całej strony;
•
obsługa obrazków;
•
awatar użytkownika;
•
cytowanie innych komentarzy;
Rozdział 10. • Budowanie społeczności w Joomla! sunek 10.19. •ęść frontowa lomlaComment ;t bardzo zejrzysta
formatowanie tekstu i emotikony, obsługa B B C o d e ;
•
integracja z profilami i awatarami w systemie C o m m u n i t y Builder;
•
dostępność w wielu językach: angielskim, słowackim, czeskim, włoskim, niemieckim, norweskim, hiszpańskim, tureckim, greckim, węgierskim, perskim, bułgarskim, macedońskim, niderlandzkim, brazylijskim i portugalskim.
Podobnie jak w większości z a a w a n s o w a n y c h k o m p o n e n t ó w p o z w a l a j ą c y c h na d o d a w a n i e treści przez użytkowników, także w I J o o m l a C o m m e n t w b u d o w a n o f u n k c j e chroniące przed spamem: •
generowanie obrazków C A P T C H A ;
•
blokowanie u ż y t k o w n i k ó w ;
•
lista cenzurowanych słów;
•
ograniczenia długości wpisu.
U o o m l a C o m m e n t możesz pobrać na poniższej stronie: http://joomlacode.org/gf/project/joomagecomment/frs/ Podobnie jak większości komponentów, instalacja UoomlaComment odbywa się za p o m o c ą opcji Rozszerzenia/Instalator. Co różni ten k o m p o n e n t od pozostałych? — fakt, że w t y c z k a dodająca odnośnik do komentarzy pod k a ż d y m artykułem instalowana jest automatycznie. Interfejs administratora, zilustrowany trów p o g r u p o w a n y c h w trzy zakładki: (Zabezpieczenia). W zakładce General komentowanie w wybranych sekcjach
na rysunku 10.20, umożliwia konfigurację parameGeneral (Ogólne), Layout (Układ strony) i Security m o ż n a włączyć obsługę technologii A j a x , wyłączyć i kategoriach, ustawić obsługę B B C o d e , format daty
266
Joomla!. Profesjonalne tworzenie stron W1NW i różne opcje powiadamiania. Zakładka Layout udostępnia w y b ó r kilku różnych szablonów, w ł ą c z e n i e z a g n i e ż d ż a n i a k o m e n t a r z y , d o p u s z c z a l n ą długość w p i s ó w , a także aktywację funkcji „Read o n " (Czytaj dalej). Zakładka Security pozwala skonfigurować wymienione wcześniej m e c h a n i z m y ( C A P T C H A , zapisywanie adresów IP itd.). Bardzo użyteczna jest możliwość zdefiniowania listy słów i ich substytutów, którymi zostaną automatycznie zastąpione (lista zawiera w większości wulgaryzmy).
Rysunek 10.20. Interfejs administratora IJoomlaComment pozwala na konfigurację wyglądu stron dodawania i wyświetlania komentarzy
General
Security
Postmy
Layout
B « i < Settings Uninsuli complete mode:
M a m h o t content f u n c t i o n :
®
Nie O
For expert only 1 ou can change here the joscomment mamtaoi fund h a c k e d the corserit html (tor example: to display the read only fundi
on FVepare Content
Fi o u t e w l l a n g u a g e :
autodetect
Bsckend lanytiage:
autodetect
Local chaise*: if y o u «we
Delete also tables when uninstall! Do not active except if you would i ijoomlacomment ar
Tak
V V
if auto: W i l l i e « e mosContiijlanguage parameters it auto will use the mosConfigtanguage parameters Php iconv library i input t h e chat se 1: of y o u t joonila installation it it is different ti C l i c HERE t o c h e k if it is s u p p o r t e d h y t h e inconv tit» , t i y ' els joomlacommert support,
ff INCLUDE, this W' i! allow comments for »ems which are IN selected sections Oft IN s& eeted categories. If EXCLUDE, this v 'ill not allow comments for items which are IN sele selected .--ections OR IN s elected categories ¡eld to exclude/include items Ids Format: list of Ids
fssclude I n c l u d e i t e m s i d s :
Exclude Include sections:
include
Static Content About Joomla!
Clic to Exclude-lnc ude sections-. Use CTRL, or SHIP key to select unselect lines.
Sieci spolecznościowe Chociaż najpopularniejszym przykładem sieci społecznościowej jest MySpace.com, strony tego typu m o g ą zawierać dosłownie wszystko — od listy „moich ulubionych filmów", po listę przepisów kulinarnych. Sieci społecznościowe stanowią platformę, której sercem jest k l a s y f i k o w a n i e list z a k ł a d e k i d z i e l e n i e się nimi — a w k o n s e k w e n c j i listą stron, które wskazują. Proces ten odbywa się poprzez przesyłanie odnośników lub wiadomości e-mailem. Założeniem sieci społecznościowych jest tworzenie przez u ż y t k o w n i k ó w list zakładek (odsyłaczy do stron W W W ) , które u w a ż a j ą za interesujące. Listy są następnie przypisywane do odpowiednich kategorii i znaczników, aby można było j e wyszukiwać i przeglądać w katalogu. U ż y t k o w n i c y m a j ą dostęp do list umieszczonych przez innych, m o g ą oceniać poszczególne odnośniki lub całe listy. Często listy zakładek publikowane są w formie kanałów RSS, co pozwala zainteresowanym na śledzenie n a j n o w s z y c h zakładek z danej listy. Struktura a r t y k u ł ó w J o o m l a ! j e s t ś w i e t n y m ź r ó d ł e m materiałów, które m o ż n a sugerować innym. Dostępnych jest kilka rozszerzeń, które w s p ó ł p r a c u j ą z różnymi serwisami społcczn o ś c i o w y m i , u ż y t k o w n i k musi w y ł ą c z n i e kliknąć o d p o w i e d n i ą ikonę, aby dodać artykuł umieszczony na T w o j e j stronie do listy zakładek. J e d n y m z najpopularniejszych rozszerzeń tego typu jest SocialBookmarkerBot.
Rozdział 10. • Budowanie społeczności w Joomla!
267
jcialBookmarkerBot vl.3.2 Aby zachęcić użytkowników do dodawania zakładek wskazujących artykuły na Twojej stronie, możesz zainstalować rozszerzenie Social BookmarkerBot, które wstawia rząd przycisków na dole wybranych podstron (zazwyczaj są to podstrony zawierające artykuły), przedstawiono to na rysunku 10.21. Przyciski pozwalają na szybkie dodanie zakładek na stronach: BlinkBits, Blinklist, Blogmarks, BlogMemes, Del.icio.us, Digg, Facebook, Fark, FeeMeLinks, Furl, Google Bookmarks, Ma.gnolia, Netscape, Netvouz, Newsline, P l u g ł M , RawSugar, Reddit, Shadows, Simpy, Slashdot, Spurl, Squidoo, StumbleUpon, T a i l r a n k i l i n k a G o G o , Technorati, W i n d o w s Live, Witsts i Yahoo! Bookmarks. (sunek 10.21. ozszerzenie Social ookmarker wyświetla listę rzycisków, które pozwalają a dzielenie się zakładami innymi użytkownikami
Add this page to your favorite Social Bookmarking websites
fi
y
«:
*l
A
ui
4i> m
r
•>* KS
-4
U*
Dostępna jest także opcja wyświetlania „sprytnych" przycisków dla stron Digg, Del.icio.us i Reddit w p r a w y m lub lewym g ó r n y m rogu każdego artykułu. Ich pojawianie m o ż n a ograniczyć do podstron zawierających skróconą wersję artykułu lub do tych zawierających całe artykuły. Panel może być wyświetlany na górze, na dole lub zarówno na górze, jak i na dole; może zawierać wszystkie lub wybrane przyciski. Rozszerzenie usuwa także wszystkie dodatkowe informacje z łańcucha żądania, takie jak ID użytkownika, generowane są absolutne adresy U R L (to znaczy, że działają niezależnie od miejsca, w którym zostaną umieszczone). Przycisk dla witryny Digg, wyświetlany po prawej stronie artykułu, działa poprawnie tylko wtedy, gdy włączona jest opcja Proste adresy na ekranie Konfiguracji Globalnej w interfejsie administratora. W przeciwnym wypadku występuje błąd generowany przez kod JavaScript, pobrany z serwera Digg.com. Wtyczkę SocialBookmarkerBot można znaleźć pod poniższym adresem: http://joomladigger.com/joomla-extensions/plugins/more-traffic-for-yourjoomla-website. html Instalacja odbywa się standardowo za p o m o c ą opcji Rozszerzenia/Instalator, wtyczkę należy opublikować po zainstalowaniu. Domyślnie panel z przyciskami wyświetlany jest pod wszystkimi artykułami na stronie. K o r z y s t a j ą c z interfejsu administratora, m o ż n a ustawić opcje wyświetlania przycisków.
alendarz wydarzeń Kalendarz wydarzeń to doskonały sposób na skupienie w j e d n y m miejscu ludzi zainteresowanych wydarzeniami danego typu, zachęca także społeczność do spotkań na żywo. Rozszerzenia oferujące funkcjonalność kalendarza wydarzeń dostępne dla Joomla! są j e d nocześnie proste i dobrze skonstruowane. Rozszerzenie Event Calendar (JEvents) jest bardzo elastyczne w zakresie prezentacji i organizacji zdarzeń w kategoriach. JCalPro zawiera więcej funkcji związanych z regularnymi wydarzeniami i planowaniem.
268
Joomla!. Profesjonalne tworzenie stron W1NW Jeśli nie chcesz zarządzać kalendarzem zdarzeń na stronie WWW, możesz skorzystać z darmowej usługi Google Calendar fwww.google.com/calendar>. Następnie, za pomocą odpowiedniego modułu, możesz wstawić ją na swoją stronę. Usługa Google Calendar zawiera opcje automatycznego wysyłania przypomnień (za pomocą poczty elektronicznej lub SMS-ów) zapisanym użytkownikom.
Rozszerzenie Events Calendar (JEvents) R o z s z e r z e n i e E v e n t s Calendar, p r z e d s t a w i o n e na rysunku 10.22 (znane także pod n a z w ą JEvents), pozwala na łatwe zarządzanie wydarzeniami. Nie tylko możliwe jest dodawanie praktycznie nieograniczonej liczby wydarzeń, ale także określanie powtarzalności (codziennie, co miesiąc, co rok). Zdarzenia można umieszczać w kategoriach definiowanych przez użytkowników. Rysunek 10.22. Interfejs rozszerzenia Events Calendar (JEvents) jest bardzo prosty
Start X.
•
[December 01 200«
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
X
2
3
Pakiet Eevents Calendar (JEvents) składa się z kilku k o m p o n e n t ó w , m o d u ł ó w i wtyczek: •
Komponent
Events Calendar
— G ł ó w n y komponent wyświetlający kalendarz.
•
Komponent
administracyjny
•
Moduł kalendarza dla Events Calendar — Mały kalendarz z zaznaczonymi wydarzeniami, który można wstawić np. na stronie głównej.
•
Moduł listy nadchodzących z n a j d u j ą c y c h się w bazie.
— Umożliwia konfigurację systemu.
wydarzeń
— Lista nadchodzących wydarzeń
Rozdział 10. • Budowanie społeczności w Joomla!
•
Moduł legenda wydarzeń
269
— Przedstawia legendę symboli p o j a w i a j ą c y c h się
w kalendarzu. •
Wtyczka wyszukiwania
— Umożliwia w y s z u k i w a n i e wydarzeń w p r o w a d z o n y c h
w kalendarzu. •
Wtyczka tworzenia raportów z wydarzeń — A u t o m a t y c z n e d o d a w a n i e odnośnika pod wydarzeniami, który przenosi na stronę, gdzie m o ż n a dodać zdjęcia i relacje z minionych wydarzeń.
Przed wprowadzeniem wydarzeń do kalendarza musisz najpierw utworzyć kategorię za p o m o c ą opcji Add Category w części a d m i n i s t r a c y j n e j k o m p o n e n t u J E v e n t s ( p r z e d s t a w i o n o to na rysunku 10.23). Po zapisaniu kategorii musisz j ą j e s z c z e opublikować, ponieważ domyślnie nowe kategorie nie są aktywne. Po utworzeniu kategorii możesz zacząć dodawać wydarzenia. irsunek 10.23. 'rzed /prowadzeniem ikichkolwiek tydarzeń należy definiować o najmniej jedną ategońę
Add Category Kolor
XX XX Color Picker
Category Title
Wakacje
Category Name
Wakaqe
Image
articles jpg
Image Position
Left
Ordering Access XXXXDescription
V
V
V;
Public U
V /
U ABC
:= i = i —
- ¿ H i
w m mm
W
- Styles -- v d,
*! i n
>t
-- Format •f —
v
-- Font family
u ' * a - »
s
r
A
Wprowadzanie wydarzeń (zobacz rysunek 10.24) odbywa się w części frontowej rozszerzenia JEvents. Dla nowego wydarzenia można wpisać tytuł, wybrać kategorię i wprowadzić k o m pletny opis. Opcjonalnie m o ż n a ustawić informacje o miejscu, dane kontaktowe i inne niezbędne informacje dla danego wydarzenia. Wprowadzone dane wykorzystywane są podczas wyszukiwania, dlatego dodając wydarzenia, staraj się umieszczać słowa kluczowe, aby użytkownicy zainteresowani wydarzeniami danego typu mogli j e odnaleźć. Jeśli przejdziesz do ekranu konfiguracji w interfejsie administratora (zilustrowanym na rysunku 10.25), z n a j d z i e s z o p c j e p o z w a l a j ą c e na k o n t r o l o w a n i e w y g l ą d u , a także dostępu i uprawnień użytkowników. Możliwe jest także ustawienie pliku C S S w y k o r z y s t y w a n e g o na stronach z wydarzeniami. Arkusz stylów m o ż n a zmieniać, aby odpowiednio d o p a s o w a ć wygląd kalendarza do aktualnego szablonu strony. Rozszerzenie Events Calendar możesz pobrać na stronie: joomlacode.org/gf/projects/jevents Instalacja odbywa się za pomocą opcji Rozszerzenia/Instalator i nie różni się od postępowania w przypadku innych k o m p o n e n t ó w . A b y w s t a w i ć kalendarz E v e n t s C a l e n d a r na stronie, dodaj pozycję m e n u łączącą z k o m p o n e n t e m .
270
Joomla!. Profesjonalne tworzenie stron W1NW
Rysunek 10.24. Ekran dodawania nowych wydarzeń został podzielony na kilka zakładek
Common
Calendar
images:
Extra
Temat:
Ferie zimowe
Kategorie:
Wakacje
Help i
About
"V
Poziom dostępu
Public
V
Aktywność B
I
B
S=
—
JL
u
ák
m
m
m
W 1 i l l
X,
m
--styles--
i xa I n
4>
- s
ZŁ
-- Format --
v
J » » j a '
a
C2f!
!
-- Font family ~
v J
-
ii
," |
1
v u
A
-
!3
B a w sią z nami!|
Grafika «
Rysunek 10.25. Część administracyjna zawiera opcje konfiguracji i tworzenia relacji
Pagebreak
Readmore
JEvents Component
«
'
•: .--4,
J Events C onf i g (vi 4.2 check to,, e w e r version ] CSS
I Tooltip
About
These settings aie only foi the compone Admin Mail
JCalPro Jednym z najatrakcyjniejszych kalendarzy jest rozszerzenie JCalPro, przedstawione na rysunku 10.26. Zastosowanie różnych stylów pozwala dopasować kalendarz do prezentacji reszty strony. Wygląd wszystkich elementów może być modyfikowany przez zmianę plików CSS. Dodawanie wydarzeń odbywa się z wykorzystaniem edytora ustawionego w Joomla!, co pozwala na w p r o w a d z a n i e f o r m a t o w a n e g o tekstu. Rozszerzenie jest ściśle związane z systemem zabezpieczeń Joomla!, dzięki czemu możliwa jest kontrola dostępu prywatnych kategorii, a także zarządzanie wprowadzaniem wydarzeń. Dostępne są także moduły wyświetlające wersję minikalendarza, a także nadchodzące wydarzenia.
Rozdział 10. • Budowanie społeczności w Joomla! itsunek 10.26. 'ozszerzenie CalPro ma 'spaniały iterfejs części •ontowej, tóry dodatkowo wżna lodyfikować 1zięki systemowi zablonów
fiSJ
Si=j
Weekly view 0
271
%
ŚźB
Sunday, Hovember 30, /«*8
Monthly View
Beceniber >«08 t
Nowe rofeei 008
4 October 208«
<> football 2
7
6
4
3
O Football Game
«»Business Maeting
u
14
13
<> Football Game
Oeuiiness : Meeting
17
It
20
i«
<> Football
OSuiines? Westing
n
25
-M
m
27
-M O Business
;
<» Football Gam*
OfWonthSy | Work
i Sports
1
Today •• S e a r c h C a l e n d a r
¡ T y p e m ome k e y w o r d s . . ,
!j Go .
JCalPro zawiera następujące funkcje: •
Widok zdarzeń z danego dnia, tygodnia, miesiąca, a także z danej kategorii.
•
Integracja z kategoriami Joomla!, w tym kontrola uprawnień.
•
G e n e r o w a n y kalendarz jest zgodny ze standardami X H T M L i CSS.
•
W p r o w a d z o n e zdarzenia m o ż n a w y s z u k i w a ć za p o m o c ą standardowej wyszukiwarki Joomla!.
•
Zastosowanie edytora W Y S I W Y G ustawionego w Joomla!, co pozwala na formatowanie tekstu.
•
Możliwość m i n u t o w e g o planowania zdarzeń.
•
Funkcja importowania zdarzeń i kategorii systemu Extcalendar.
•
Moduł wyświetlający nadchodzące wydarzenia.
•
Obsługa wielu j ę z y k ó w za pośrednictwem funkcji systemu Joomla!.
•
Powiadamianie administratora o n o w o d o d a n y c h wydarzeniach.
•
Obsługa wydarzeń okresowych, cało- i kilkudniowych.
•
Powiadamianie użytkownika o wydarzeniach przez e-mail.
JCalPro m o ż n a znaleźć na stronie: http://dev. any thing-digital.
com
;
272
Joomla!. Profesjonalne tworzenie stron W1NW Instalacja o d b y w a się za p o m o c ą opcji Rozszerzenia/Instalator i nie różni się od postępowania w przypadku innych k o m p o n e n t ó w . Aby wstawić kalendarz JCalPro na stronę, dodaj p o z y c j ę m e n u łączącą z komponentem.
Systemy Wiki Jedną z najbardziej interesujących interaktywnych technologii (i prawdopodobnie najszybciej z y s k u j ą c ą na popularności) jest system wiki. W systemie tym artykuły pisane są przez użytk o w n i k ó w . Kolejni o d w i e d z a j ą c y m o g ą edytować lub rozszerzać istniejące artykuły. Najpopularniejszym p r z y k ł a d e m takiego systemu jest Wikipedia, encyklopedia tworzona przez użytkowników. Chociaż zasada działania Joomla! (system C M S ) pozwala na dodawanie treści przez użytk o w n i k ó w , rozwiązanie to nie zostało stworzone z m y ś l ą o umożliwieniu dużej grupie ludzi wprowadzania małych zmian w artykułach — funkcji leżącej u podstaw systemów wiki. Dla Joomla! stworzono kilka dobrych rozszerzeń, uzupełniających system o funkcjonalność wiki. D o takich rozszerzeń z a l i c z a j ą się OpenWiki i WikiBot.
OpenWiki O p e n W i k i 4 (zobacz rysunek 10.27) jest k o m p o n e n t e m łączącym system Joomla! z aplikacją P H P D o k u W i k i . Zawiera p e ł n ą implementację A C L w oparciu o grupy Joomla!, takie jak Główny Administrator, Administrator, Operator, Autor, Redaktor itp. Możliwe jest określenie uprawnień tworzenia, edycji, odczytywania, usuwania artykułów i wysyłania plików. O p e n W i k i zawiera wiele użytecznych funkcji:
4
•
Prosta składnia do f o r m a t o w a n i a artykułów w stylu wiki.
•
Nieograniczona liczba wersji danej strony z funkcji diff, podświetlającej różnice między wersjami.
•
Obsługa f o r m a t o w a n i a tekstu i dołączania obrazów.
•
O p c j o n a l n y system n a z w CamelCase.
•
A u t o m a t y c z n e generowanie indeksu pod k ą t e m przeszukiwania całego tekstu.
•
Przyciski szybkiego dostępu w celu przyspieszenia edycji.
•
N a w i g a c j a okruszkowa ułatwiająca przeglądanie.
•
Czarna lista (blokowanie spamu).
•
Oznaczanie stron j a k o tylko do odczytu.
•
Obsługa p o n a d 30 j ę z y k ó w .
Rozszerzenie OpenWiki działa poprawnie wyłącznie z Joomla! w wersji 1.0.x — p r z y p . tłum.
Rozdział 10. • Budowanie społeczności w Joomla! sunek 10.27. lenWiki to
273
Open W i k i
[ [ s t a r t ] ] i Edit this page j [ O l d
P r o j e c t s
O f
Table of Contents
J oo m P roso lu tio n . c o m
DokuWiki for Joomla!
^
is a standards compliant, simple to use u , mainly aimed at creating documentation of any kind. It is targeted at developer teams, workgroups and small companies. It has a simple but powerful which makes sure the datafiles remain readable outside the Wiki and eases the creation of structured texts. All data is stored in plain text files - no database is required.
Joomla! is a Content Management System (CMS) created by the same award-winning team that brought the Mambo CMS to its current state of stardomjoomla' is the ideal tool for developing small to large dynamic community websites, intra company portals, corporate portals, weblogs and much more. The OpenWiki component is a integration of DokuWiki, aiming at a light, flexible and powerful documentation tool for Joomla I users. The component would be following original DokuWiki's steps except some experiments on Database storage.
JOOMLA! Knowledge Base • DokuWiki for Joomal! is a Joomla! component based on DokuWiki, using and Joomla! group permissions • DokuWiki for Joomla! is currently using plain text file for data storage. Database storage would be interesting to Joomla! users, which is also our target
•
System szablonów umożliwiający d o p a s o w y w a n i e wyglądu.
•
Własna architektura wtyczek (dostępnych jest ponad 100).
•
Generowanie kanałów RSS.
Rozszerzenie OpenWiki m o ż n a pobrać na stronie: http://wwwjoomla.sk/rozsirema/stiahnutie/Joomlal_rozsirenia/Sprava_suborov_a_ dokumentacie/Open Wiki_with_Slimbox_l. 1.0/ Instalacja o d b y w a się za p o m o c ą opcji Rozszerzenia/Instalator i nie różni się od postępowania w przypadku innych komponentów. W p i s w m e n u na stronie głównej odsyłający do OpenWiki d o d a w a n y jest automatycznie. O b s ł u g a systemu D o k u W i k i (część użytkownika i administratora) o d b y w a się z poziomu strony głównej Joomla!. K o n f i g u r a c j ę k o m p o n e n t u łączącego OpenWiki m o ż n a przeprowadzić w części administracyjnej. Aplikacja DokuWiki, na której opiera się OpenWiki, nie zapisuje artykułów w bazie danych. Są one przechowywane w postaci plików. Dlatego do poprawnego działania OpenWiki niezbędne są uprawnienia zapisu w odpowiednich katalogach. Rozszerzenie opiera się w głównej części na funkcjach PHP fwriteO i fopenO, dlatego upewnij się, że nie zostały one wyłączone na serwerze, na którym chcesz zainstalować OpenWiki.
W interfejsie administratora Joomla! możesz uzyskać dostęp do ekranu konfiguracji O p e n W i k i (OpenWiki Configuration Settings — zobacz rysunek 10.28), wybierając pozycję O p e n W i k i z m e n u K o m p o n e n t y . M o ż l i w e j e s t u s t a w i e n i e u p r a w n i e ń i p a r a m e t r ó w dla t w o r z o n y c h artykułów.
WikiBot WikiBot łączy stronę Joomla! z w o l n ą encyklopedią Wikipedia. Rozszerzenie pozwala na oznaczenie słów w treści artykułów, aby prowadziły do odpowiednich stron w encyklopedii. Dzięki w y k o r z y s t a n i u tego narzędzia p o ł ą c z e n i e strony J o o m l a ! z o g r o m n ą b a z ą danych Wikipedii jest bardzo proste. Rozszerzenie W i k i B o t m o ż n a znaleźć na stronie: www. theinevitabledossier.
com/wikibot.html
Instalacja wtyczki o d b y w a się s t a n d a r d o w o , za p o m o c ą opcji Rozszerzenia/Instalator. instalacji rozszerzenie musi zostać opublikowane, aby przetwarzać treść artykułów.
Po
Rozszerzenie WikiBot działa w tle systemu Joomla!. Wystarczy dodać niezbędne znaczniki w treści zwykłego artykułu. Słowa należy oznaczać w sposób identyczny jak na Wikipedii, u m i e s z c z a j ą c j e w p o d w ó j n y c h n a w i a s a c h k w a d r a t o w y c h , np. [[te słowa]]. WikiBot zawiera obsługę znaczników w wielu językach. Odnośniki można także zapisywać w postaci [[artykuł |nazwa odnośnika]]. Tekst umieszczony wewnątrz znaczników zostanie automatycznie zmieniony w odnośnik d o Wikipedii podczas otwierania strony. Słowa oznaczone podwójnymi po wybraniu opcji podglądu. po zapisaniu artykułu.
nawiasami nie są wyświetlane w postaci Zmiana widoczna jest wyłącznie w części
odnośnika frontowej,
Uruchamianie wirtualnej społeczności Jeśli wcześniej opracowałeś dokładny plan, uruchomienie wirtualnej społeczności nie powinno być p r o b l e m e m . T e c h n o l o g i e d o s t ę p n e za p o ś r e d n i c t w e m r o z s z e r z e ń J o o m l a ! z n a c z ą c o upraszczają fazę implementacji. Powinieneś wziąć pod uwagę także odpowiedzialność związ a n ą z zarządzaniem społecznością, w tym odpowiedzialność prawną. Spore znaczenie ma też dobór odpowiednich moderatorów.
Dobór moderatorów W i r t u a l n e s p o ł e c z n o ś c i w y m a g a j ą d u ż o p r a c y , d l a t e g o z a n i m się s p o s t r z e ż e s z , będziesz potrzebował wsparcia w prowadzeniu społeczności. Społeczności często korzystają z wolontariatu moderatorów, wybranych spośród użytkowników wykazujących duże zaangażowanie
Rozdział 10. • Budowanie społeczności w Joomla!
275
w działalność strony. Często dobór moderatorów wymaga wyłącznie przeanalizowania dziennika. Potencjalni moderatorzy spędzają sporo czasu na stronie i zazwyczaj dobrowolnie służą innym p o m o c ą i informacjami. Dlaczego ktoś mógłby chcieć poświęcać swój czas j a k o wolontariusz, dostając niewiele lub w ogóle nie otrzymując za to pieniędzy? Powodów jest kilka — najprostszym i najważniejszym jest pasja, której przedmiot związany jest z tematyką strony. Wielu ludzi odczuwa w e w n ę t r z n ą potrzebę dodawania czegoś od siebie, nawet jeśli jest to odrobina czasu poświęcona wirtualnej społeczności. Kolejnym powodem, dlaczego ktoś chciałby zostać moderatorem, jest namiastka władzy. Jest to jednocześnie największy problem, z j a k i m musi sobie radzić webmaster. Z a z w y c z a j moderator, który nadużywa swoich uprawnień, robi to w taki sposób, że ofiara m a małe szanse, aby się obronić lub zgłosić nieuczciwe traktowanie. Z a b l o k o w a n i e użytkownika ogranicza możliwość zgłoszenia nadużyć. D o b r y m pomysłem jest umieszczenie na stronie e-mailowego adresu administratora. Skargi w y s y ł a n e pod tym a d r e s e m nie b ę d ą w żaden s p o s ó b cenzurowane. Pamiętaj, aby podchodzić do nadsyłanych skarg odrobinę nieufnie. Znane są przypadki osób w y s y ł a j ą c y c h na f o r u m dla dzieci o b r z y d l i w e w i a d o m o ś c i p e ł n e s e k s u a l n y c h o d n i e s i e ń i przekleństw. Po zablokowaniu możliwości w y p o w i e d z i osoby te zaczęły wysyłać skargi, że padły o f i a r ą niesprawiedliwości, a ich p r a w o wolności w y p o w i e d z i zostało n a r u s z o n e . Dlatego przeglądając skargi od użytkowników, rozpatruj j e oddzielnie, w sposób obiektywny i logiczny.
rowadzenie społeczności Prowadzenie społeczności przypomina kierowanie samochodem, w którym kilkanaście osób ściska się na miejscu pasażera — a każda z nich trzyma rękę na kierownicy. Podobnie społeczność porusza się „ z y g z a k i e m " , często n o t u j ą c z a s k a k u j ą c y rozrost, a p o t e m stagnację. Ciągłym zagrożeniem jej istnienia są inne społeczności, które m a j ą dokładniejsze informacje lub lepszy interfejs użytkownika. Poniżej zamieszczono kilka wskazówek, które pomogą zachować zdrowy rozsądek i zapewnić stały wzrost liczby odwiedzających i członków: •
Zamieść na stronie w widocznym miejscu listę reguł— Nie m o ż e s z winić użytkowników za naruszanie regulaminu strony, jeśli nie mogli się z nim zapoznać. Umieść na stronie zasady w w i d o c z n y m miejscu, aby o d w i e d z a j ą c y mogli j e przeczytać i aby nie pojawiały się wątpliwości. W przypadku f o r u m oznacza to z a z w y c z a j umieszczenie regulaminu w postaci tematu na forum, a następnie „przyklejenie" go w d a n y m dziale, żeby zawsze pojawiał się j a k o pierwszy na liście.
•
Pilnuj, aby strona pozostawała czysta — Podobnie j a k graffiti w sąsiedztwie, obecność spamu na stronie p o w o d u j e wrażenie, że jest ona opuszczona lub nieużywana. Webmaster, który zasnął, prowadząc wirtualną społeczność, bez wątpienia uderzy w drzewo.
276
Joomla!. Profesjonalne tworzenie stron W1NW •
Nie uruchamiaj strony, zanim nie powstaną podstawowe artykuły — Stare przysłowie „Nigdy nie dostajesz drugiej szansy, aby zrobić pierwsze wrażenie" 5 nie traci na ważności, kiedy uruchamiasz wirtualną społeczność. Ze względu na ilość pieniędzy inwestowanych przez firmy w strony W W W , m u s z ą one wyglądać profesjonalnie i zyskać szeroką popularność. Jeśli odwiedzający trafi na pustą stronę, jest mało p r a w d o p o d o b n e , że na nią wróci i na p e w n o będzie unikał o d n o ś n i k ó w p r o w a d z ą c y c h do niej. Począwszy od pierwszego dnia, kiedy strona zostaje upubliczniona, powinna zawierać wystarczająco dużo treści i aktywności, aby skłonić o d w i e d z a j ą c y c h do powrotu.
Podsumowanie Budowanie efektywnej społeczności wirtualnej jest j e d n ą z najtrudniejszych (a jednocześnie najbardziej satysfakcjonujących i najbardziej opłacalnych) czynności w procesie rozwijania stron internetowych. P o n i e w a ż skuteczna wirtualna społeczność w y m a g a współpracy wielu odwiedzających, zarządzanie nią m o ż e kosztować wiele wysiłku. Na szczęście, narzędzia gotowe do wykorzystania w systemie Joomla! ułatwiają z a r ó w n o początkowe uruchomienie strony, jak i dalsze zarządzanie nią. W tym rozdziale opisano etapy i narzędzia związane z tworzeniem wirtualnych społeczności w oparciu o Joomla!, a w szczególności: •
w a d y i zalety wirtualnych społeczności;
•
metody p o p r a w y interakcji na stronic W W W ;
•
sposoby przedefiniowania strony na dalszym etapie istnienia;
•
konstruowanie złożonej strony przez sprzężenie ze sobą kilku technologii;
•
adaptację różnych rozszerzeń dodających interaktywne funkcje;
•
p o p r a w n ą instalację rozszerzeń, aby zapewnić m a k s y m a l n e wykorzystanie i minimum problemów.
Im popularniejsza jest Twoja strona, tym większe znaczenie ma dostrojenie ustawień pod kątem maksymalnej wydajności. Można łatwo stracić wielu członków wirtualnej społeczności, jeśli strona będzie s z w a n k o w a ć lub działać powoli. W rozdziale 11. opisano różnorodne techniki i k o n f i g u r a c j e , które p o m a g a j ą w d o s t r o j e n i u s e r w e r a J o o m l a ! p o d k ą t e m m a k s y m a l n e j wydajności.
5
Ang. You never get a second chance to make a first
impression.
11 Prowadzenie profesjonalnej strony Przeprowadzenie podstawowej instalacji Joomla! nie nastręcza trudności, dlatego w krótkim czasie można uzyskać w pełni działającą stronę. W pełni profesjonalna instalacja wymaga jednak dużo większego wysiłku, zwłaszcza w zakresie zarządzania i administracji. Chociaż Joomla! zawiera wiele funkcji przeznaczonych dla początkujących użytkowników, także eksperci odnajdą możliwości niezbędne do prowadzenia profesjonalnej strony. Dodatkowym atutem jest bogaty zasób narzędzi dostępnych dla serwerów składowych systemu. Ponieważ „niedostrojony" system nigdy nie osiągnie wydajności tego, który został dokładnie skonfigurowany, warto zainwestować czas w dostosowanie ustawień wszystkich aplikacji. Zmiana ustawień pod kątem potrzeb danej strony Joomla! pozwoli uzyskać lepszą wydajność bez zmiany sprzętu. Poszczególne techniki przedstawione w tym rozdziale można skategoryzować następująco: programowanie i testy, administracja Joomla!, obsługa Joomla! i ostateczne dostrajanie strony. Oczywiście zakres wyszczególnionych kategorii pokrywa się w niektórych punktach, ponieważ wszystkie związane są z zarządzaniem serwerem Joomla! i jego konfiguracją.
rogramowanie i testy Profesjonalne programowanie Joomla! nie sprowadza się wyłącznie do wyboru właściwego IDE. Równie ważna jest znajomość tych jego funkcji, które w s p o m a g a j ą diagnozowanie problemów, stosowanie dostępnych narzędzi PHP, a także implementacja zautomatyzowanych procedur testujących. Wszystkie wspomniane zagadnienia odgrywają znaczącą rolę w procesie tworzenia solidnego systemu. Poznane dotychczas aspekty pracy z Joomla! związane były głównie z samym systemem. Profesjonalna instalacja wykracza jednak poza tę platformę, o b e j m u j e także zastosowanie zewnętrznych narzędzi i konfigurację innych serwerów. Aktywacja wbudowanych procedur diagnozujących Joomla! znacząco ułatwia programowanie, ponieważ jest źródłem dodatkowych komunikatów.
278
Joomla!. Profesjonalne tworzenie stron W1NW
Ustawienia diagnostyczne W panelu administratora z n a j d u j ą się opcje pozwalające a k t y w o w a ć kilka procedur diagnostycznych, które u ł a t w i a j ą p r o g r a m o w a n i e na serwerze testowym. Włączenie tych funkcji p o w o d u j e wyświetlanie informacji dotyczących działania systemu. Na ekranie Konfiguracja globalna, w panelu Diagnostyka (zobacz rysunek 11.1) znajdziesz ustawienia trybu diagnostycznego Joomla!. Rysunek 11.1. Włączenie ustawień diagnostycznych ułatwia programowanie na serwerze testowym
Konfiguracja globalna
¡i' . ;•'.! ¡)4bWUllsjKeMpVbdq •''
cAProgram FilesV>pache Si
D w a d o s t ę p n e u s t a w i e n i a to Analiza systemu i Analiza języka. W ł ą c z e n i e k a ż d e j z nich p o w o d u j e d o ł ą c z e n i e w d o l n e j części strony d o d a t k o w y c h k o m u n i k a t ó w s y s t e m o w y c h . Zwróć uwagę, że informacje generowane są przez system Joomla! i różnią się od tych, które w y ś w i e t l a j ą się po włączeniu opcji P H P di spl ay errors. Po a k t y w o w a n i u opcji d i a g n o s t y c z n y c h na stronie p o j a w i ą się d o d a t k o w e k o m u n i k a t y , p o d o b n e d o tych z i l u s t r o w a n y c h na r y s u n k u 11.2. I n f o r m a c j e podzielono na pięć sekcji: Informacje o wydajności, Zużycie pamięci, Zapytania do bazy danych, Wczytane pliki języka, Frazy nieprzetlumaczone. W a r u n k i e m w y ś w i e t l e n i a k o m u n i k a t ó w d i a g n o s t y c z n y c h jest odpowiednie odwołanie w kodzie szablonu. Jednak większość szablonów zawiera wymaganą instrukcję: . Rysunek 11.2. Komunikaty diagnostyczne na stronie po włączeniu odpowiedniej opcji
•liiftłi ubicie o wydajności*
•Zużycie pamięci*
Rozdział 11. • Prowadzenie profesjonalnej strony
279
W pierwszej sekcji wyświetlany jest czas uruchamiania w y k o n y w a n i a funkcji dla poszczególnych zdarzeń. Druga sekcja odzwierciedla zużycie pamięci przez serwer Joomla!. Kolejne grupy z a w i e r a j ą i n f o r m a c j e szczególnie p r z y d a t n e w procesie tworzenia rozszerzeń i diagnozowania błędów systemu. Poniżej, w kolejnej grupie, z n a j d u j e się lista zapytań S Q L w y k o n a n y c h w czasie g e n e r o w a nia strony — zilustrowano to na rysunku 11.3. Często służy ona za d o s k o n a ł ą w s k a z ó w k ę podczas szukaniu źródła błędów, jednocześnie umożliwia wgląd w funkcjonowanie systemu Joomla!. Rysunek 11.3. W odpowiedniej sekcji wyświetlane są wszystkie wykonanie zapytania SQL
•Informacje o wydajności*
•Zużycie pamięci*
Zapytań
WHERE FKOM
WHERE SELECT
1
.1
FKOM
WHERE WWFTTF.
Opcja Analiza języka spowoduje wyświetlenie wszystkich tekstów, które pojawiły się na stronie i dla których nie znaleziono tłumaczeń (przedstawiono to na rysunku 11.4). Jeśli pracujesz nad pakietem j ę z y k o w y m lub bierzesz udział w poprawianiu tłumaczenia Joomla!, to ta opcja pozwoli Ci określić, co zostało jeszcze do zrobienia. Rysunek 11.4. Opcja Analiza języka spowoduje wyświetlenie na stronie tekstów, dla których nie znaleziono tłumaczeń
•Wczytane pliki języka*
•Frazy niepi zet luinac zone*
280
Joomla!. Profesjonalne tworzenie stron W1NW Pamiętaj, aby nigdy nie włączać tych ustawień na serwerze produkcyjnym, ponieważ możesz tym s a m y m z d r a d z i ć i n f o r m a c j e p r z y d a t n e h a k e r o m , k t ó r z y chcieliby w ł a m a ć się na T w o j ą stronę.
Interfejs wiersza poleceń PHP P r o g r a m u j ą c rozszerzenia Joomla!, piszesz kod w PHP, więc narzędzia, które w s p o m a g a j ą i ułatwiają programowanie PHP, m o g ą Ci pomóc. Zamiast uruchamiać kod z poziomu systemu Joomla!, często lepiej bezpośrednio sprawdzać małe fragmenty kodu. W P H P taka możliwość istnieje dzięki interfejsowi wiersza poleceń PHP (CLI — Command Line Interface). M o ż e s z uruchamiać kod P H P bezpośrednio, w y w o ł u j ą c aplikację z pakietu PHP, dołączoną w każdej standardowej instalacji. Otwórz okno wiersza poleceń i przejdź do katalogu zawierającego P H P (często jest to główny katalog serwera Apache). W systemie Windows powinieneś znaleźć plik php.exe, który odpowiada za CLI. N a j p r o s t s z y m p r z y k ł a d e m w y k o r z y s t a n i a C L I j e s t u r u c h o m i e n i e p o j e d y n c z e j linii kodu za p o m o c ą przełącznika - r : php -r "echo 'Hello World! 1 : "
Powyższa komenda spowoduje wyświetlenie komunikatu na ekranie wraz z podsumowaniem działania skryptu. Możesz także uruchomić kod P H P w pliku i zapisać wydruk w innym pliku. Jeśli chcesz uruchomić plik test.php, a j e g o wydruk (bez nagłówków HTTP) zapisać w pliku test.html, p o w i n i e n e ś zastosować poniższą komendę: php -q test.php > test.html
Lista przełączników zawiera m.in.: •
-h lub -? — Wyświetla listę wszystkich przełączników wraz z krótkim opisem.
•
-r—
W y k o n u j e p o j e d y n c z ą linię kodu podanego j a k o parametr.
•
-v —
Wyświetla zainstalowaną wersję P H P .
•
-d — D e f i n i u j e wartość danej dyrektywy. Przykładowo poniższy kod ustawi m a k s y m a l n y czas uruchamiania skryptu:
•
php -d m a x execution time=20
•
-m — Wyświetla listę aktualnie z a ł a d o w a n y c h m o d u ł ó w P H P i Zend.
•
- i — P o w o d u j e w y g e n e r o w a n i e informacji identycznych z dostarczanymi przez f u n k c j ę phpi nfo( ).
•
-q — Wyłącza umieszczanie n a g ł ó w k ó w H T T P w g e n e r o w a n y m wydruku.
•
-S — Wyświetla podany plik z podświetlonymi elementami kodu źródłowego. Ten sam rezultat m o ż n a uzyskać z poziomu PHP, w y w o ł u j ą c funkcję highl ight_fi le( ).
• •
c — Określa katalog, w k t ó i y m z n a j d u j e się plik
php.ini.
-a — Przełącza P H P w tryb interaktywny, w którym w p r o w a d z a n e komendy są natychmiast u r u c h a m i a n e (tryb niedostępny na platformie Windows).
Rozdział 11. • Prowadzenie profesjonalnej strony
281
Bezpośrednie uruchamianie kodu PHP może być dobrym sposobem na sprawdzanie działania prostych rozszerzeń. Jeśli korzystasz z systemu opartego na Uniksie, możesz także skorzystać z zalet trybu interaktywnego (przełącznik -a), który jest p r a w d o p o d o b n i e najbardziej użytecznym narzędziem do testowania f r a g m e n t ó w kodu PHP.
automatyzowane testy P o s z c z e g ó l n e e t a p y p r a c y na s e r w e r z e t e s t o w y m o b e j m u j ą w y s z u k i w a n i e p r o b l e m ó w , sprawdzanie współdziałania elementów systemu i testy j e d n o s t k o w e . Faza testów to w a ż n y e l e m e n t w p r o c e s i e k o n s t r u k c j i o p r o g r a m o w a n i a . N i e s t e t y , c z ę s t o nie p o ś w i ę c a mu się d o s t a t e c z n e j u w a g i , c h c ą c sprostać t e r m i n o w i w y d a n i a a p l i k a c j i . W r a z z p o p u l a r y z a c j ą p r o f e s j o n a l n e g o p r o g r a m o w a n i a w z r a s t a liczba aplikacji p r z e p r o w a d z a j ą c y c h z a u t o m a t y zowane testy, a spada wysiłek niezbędny do przeprowadzania skutecznej analizy kodu.
prawdzanie poprawności strony Istnieje kilka elementów strony Joomla!, które należy sprawdzić, zanim zostanie ona przeniesiona do środowiska produkcyjnego, np. p o p r a w n o ś ć kodu H T M L i X H T M L , odnośników, skryptów i dostosowania do potrzeb osób niepełnosprawnych. W internecie można znaleźć kilka narzędzi, które analizują treść strony W W W oraz g e n e r u j ą raporty, wyszczególniając problemy i wskazówki, j a k j e rozwiązać. W i ę k s z o ś ć narzędzi d o t w o r z e n i a stron W W W , np. A d o b e D r e a m w e a v e r lub M i c r o s o f t Expression Web, sprawdza poprawność strony, jednak znaczna część programistów Joomla! korzysta raczej ze środowisk tzpu Eclipse. W e b Page Valet ( h t t p : / / v a l e t . w e b t h i n g . c o m / p a g e ) jest aplikacją internetową, która sprawdza stronę pod kątem błędów kodu H T M L . Raport, wyświetlany w dolnej części strony, zawiera informacje o błędach oraz numery linii, w których wystąpiły. Kod X H T M L sprawdzić można za p o m o c ą narzędzia W 3 C M a r k u p Validation, które znajdziesz pod adresem http://validator.w3.org. Sprawdzanie poprawności odnośników można przeprowadzić za p o m o c ą aplikacji Link Valet (http://valet.webthing.com/link). M o ż n a to zrobić także za p o m o c ą takich narzędzi j a k Jenu (http://soitrceforge.net/projects/jemt), które zostało n a p i s a n e w Javie. Z a w i e r a ono o p c j ę graficznej prezentacji odnośników, a sprawdzanie przeprowadzane jest w i e l o w ą t k o w o . Ostatecznie możesz skorzystać z Accessibility Valet (http://valet.webthing.com/access/ url.html). Narzędzie to przydatne jest głównie w przypadku konieczności dostosowania stron do potrzeb osób niepełnosprawnych (choć warto przyjąć za punkt honoru, żeby każda strona, którą prowadzisz, była dostępna dla niepełnosprawnych).
esty jednostkowe P r o g r a m i ś c i s k o m p l i k o w a n y c h aplikacji c z ę s t o s t o s u j ą strategię testów jednostkowych (ang. unit testing), aby upewnić się, że o p r o g r a m o w a n i e spełnia założenia projektu i działa poprawnie. Testy j e d n o s t k o w e p o l e g a j ą na stworzeniu serii testów, dla których z n a n e s ą poprawne rezultaty, następnie uruchamia się j e w systemie.
282
Joomla!. Profesjonalne tworzenie stron W1NW Przykładowo dany test m o ż e w y w o ł y w a ć f u n k c j ę dodaj (a, b), o której wiadomo, że sumuje dwie liczby. Test polega na wywołaniu funkcji dodaj z dwiema liczbami (np. 2 i 2) i odczytaniu z w r ó c o n e j wartości. Jeśli w y n i k zgadza się z o c z e k i w a n y m (4 w tym przypadku), wtedy f u n k c j a pozytywnie przeszła test j e d n o s t k o w y . Jeśli zostanie zwrócony odmienny rezultat, test zakończy się wynikiem negatywnym, co zostanie z a n o t o w a n e w raporcie. Komplet testów pozwala sprawdzać program po wprowadzeniu znaczących zmian, co umożliwia zidentyfikowanie miejsc, w których modyfikacja spowodowała nieoczekiwane rezultaty (to oznacza p r a w d o p o d o b n i e błędnie działającą funkcję). Testy jednostkowe okazały się j e d n ą z kluczowych technologii dla programowania grupowego, p o n i e w a ż dzięki nim wielu p r o g r a m i s t ó w m o ż e w p r o w a d z a ć z m i a n y w dowolnych miejscach kodu. Z a u t o m a t y z o w a n e testy p o z w a l a j ą natychmiast odkryć problemy występujące w poszczególnych częściach systemu, spowodowane przez wprowadzenie zmian. Co więcej, p r o j e k t a n c i s ą w stanie nakreślić zarysy funkcji (ang. stubs), t w o r z ą c o d p o w i e d n i e testy (na p o c z ą t k u w s z y s t k i e k o ń c z ą się n i e p o w o d z e n i e m ) , j e s z c z e przed r o z p o c z ę c i e m prog r a m o w a n i a . Projektant może przypisywać poszczególnym programistom fragmenty aplikacji. Jeśli przejdą one testy j e d n o s t k o w e , z o s t a j ą oznaczone j a k o gotowe do zintegrowania z resztą systemu. Powinieneś tworzyć testy jednostkowe i przeprowadzać automatyczne testowanie dla wszystkich t w o r z o n y c h rozszerzeń, z w y ł ą c z e n i e m tych najprostszych. Z a u t o m a t y z o w a n e testy u ł a t w i ą Ci u a k t u a l n i a n i e kodu, p o n i e w a ż j e s t to szybka m e t o d a określenia, czy nowy kod nie w p ł y w a negatywnie na wcześniej działające funkcje. Do testów j e d n o s t k o w y c h w PHP możesz wykorzystać narzędzie SimpleTest. Dostępne jest za d a r m o na stronie: www. lastcraft. com/simple
test.php
Możesz zastosować także aplikację Selenium, która umożliwia zautomatyzowane testowanie stron W W W . Z n a j d z i e s z j ą na stronie: h ttp ://selenium. selen iumhą. org
Uruchamianie strony Po u k o ń c z e n i u f a z y t e s t ó w p r z y c h o d z i pora na p r z e n i e s i e n i e strony na s e r w e r ó w p r o d u k c y j n y c h . Jest to j e d n o z n a j b a r d z i e j p r o b l e m a t y c z n y c h s y s t e m J o o m l a ! nie z a w i e r a w b u d o w a n y c h narzędzi w s p o m a g a j ą c y c h Dlatego, aby s t w o r z y ć kopię z a p a s o w ą , trzeba przenieść z a r ó w n o dane danych, jak i pliki, z których składa się system Joomla!.
j e d e n lub więcej zadań, ponieważ p r o c e s migracji. zapisane w bazie
Przenoszenie strony na serwer produkcyjny P r o c e d u r a p r z e n i e s i e n i a strony J o o m l a ! na s e r w e r p r o d u k c y j n y składa się z serii zadań, które należy przeprowadzić. Nie istnieje z a u t o m a t y z o w a n a metoda pozwalająca na transfer kluczowych aspektów systemu testowego (takich jak wybrane r o z s z e r z e n i a ) z p o m i n i ę c i e m
Rozdział 11. • Prowadzenie profesjonalnej strony
283
pozostałych e l e m e n t ó w , np. k o m p o n e n t ó w i niskiego p o z i o m u z a b e z p i e c z e ń , w ł a ś c i w e g o dla środowiska testowego. Ponieważ migracja między serwerami jest w głównej mierze przeprowadzana ręcznie, warto mieć listę k l u c z o w y c h e t a p ó w , aby nie p r z e o c z y ć któregoś z nich. P o d s t a w o w a lista elementów, które należy przenieść: •
Rozszerzenia — Wszystkie zainstalowane moduły, komponenty i dodatki wykorzystywane na serwerze testowym muszą zostać zainstalowane i skonfigurowane na serwerze produkcyjnym. Ręczne kopiowanie plików rozszerzeń nie jest z a z w y c z a j d o b r y m p o m y s ł e m , p o n i e w a ż t w o r z ą o n e często w ł a s n e tabele, z m i e n i a j ą k o n f i g u r a c j ę , a często instalują także komponenty interfejsu administratora systemu Joomla!.
•
Dyrektywy PHP.ini — Plik PHP.ini z n a j d u j ą c y się na serwerze testowym zawiera prawdopodobnie zmiany ułatwiające programowanie. Pamiętaj, że wiele dyrektyw powinno mieć różne ustawienia w środowisku testowym i p r o d u k c y j n y m , g ł ó w n e ze w z g l ę d ó w b e z p i e c z e ń s t w a . W większości p r z y p a d k ó w n i e z b ę d n e s ą z m i a n y wartości dyrektyw związanych z rozszerzeniami PHP, np. w ł ą c z a j ą c e bibliotekę gd2, niezbędną do p o p r a w n e g o uruchamiania aplikacji Joomla!.
•
Dyrektywy Apache w httpd.conf— Podobnie j a k w przypadku PHP, większość zmian konfiguracji serwera Apache związana jest z a k t y w a c j ą modułów, co ma zapewnić tę s a m ą f u n k c j o n a l n o ś ć w obu środowiskach.
•
Plik configuration.php Joomla! — Powinieneś z a w s z e tworzyć kopię z a p a s o w ą pliku c o n f i g u r a t i o n . p h p na s e r w e r z e p r o d u k c y j n y m , z a n i m p r z y s t ą p i s z do przenoszenia strony na serwer produkcyjny — uchroni Cię to przed utratą ustawień właściwych dla serwera produkcyjnego. Pamiętaj, aby d o p a s o w a ć wartość odpowiednich parametrów w pliku p o zakończeniu migracji, tak aby odpowiadały środowisku p r o d u k c y j n e m u . K l u c z o w ą z m i a n ą przy przenoszeniu pliku configuration.php z serwera testowego na p r o d u k c y j n y j e s t d o p a s o w a n i e ustawień połączenia z b a z ą danych.
opia zapasowa Joomla! Serwer testowy zawiera p r a w d o p o d o b n i e sporo danych, które chciałbyś przenieść na serwer produkcyjny. Ponieważ wszystkie dane systemu przechowywane są w bazie danych M y S Q L , m o ż e s z dokładnie w y b r a ć , które z nich s k o p i u j e s z , j e d n a k w t e d y transfer musi się o d b y ć za p o m o c ą M y S Q L . Liczba plików, które należy zarchiwizować, zależy od zmian w p r o w a d z a n y c h w systemie. Przykładowo jeśli tworzysz kopię z a p a s o w ą prostej strony — która od d o m y ś l n e j instalacji różni się wyłącznie dodanymi sekcjami, kategoriami i artykułami, a zmiany przeprowadzano z panelu administratora — wystarczy skopiować zawartość bazy danych i pojedynczy plik (configuration.php), a w przyszłości będzie m o ż n a szybko odtworzyć stronę z kopii. Rzadko jednak zdarzają się konfiguracje w swojej prostocie przypominające powyższy opis. Zazwyczaj pierwszą rzeczą wstawianą na stronę Joomla! jest nowe logo lub banner. Kolejnym krokiem są zmiany w szablonie i p o z o s t a ł y c h plikach. Dlatego w większości p r z y p a d k ó w stworzenie kopii zapasowej w y m a g a także skopiowania wszystkich plików.
284
Joomla!. Profesjonalne tworzenie stron W1NW
Pamiętaj, aby tworzyć kopię zapasową plików znajdujących się na serwerze produkcyjnym — nie wykorzystuj serwera testowego jako podstawy kopii. Chociaż środowisko testowe jest ważnym etapem, właściwa strona, z której korzystają użytkownicy, znajduje się na serwerze produkcyjnym. Jeśli ona zawiedzie, będzie Ci zależeć na przywróceniu jej w możliwie krótkim czasie. Serwer testowy odpowiada zazwyczaj pewnej fazie prac programistycznych i nie nadaje się do bezpośredniego przeniesienia na serwer produkcyjny.
A p l i k a c j a M y S Q L A d m i n i s t r a t o r p o z w a l a na o k r e s o w e t w o r z e n i e kopii z a p a s o w e j bazy danych. Kliknij ikonę Backup w lewej części głównego okna programu, a następnie, po tym, j a k zmieni się prawy panel, kliknij przycisk N e w Project. System kopii zapasowych zwiera wiele opcji (zobacz rysunek 11.5), które p o z w a l a j ą m.in. tworzyć kopię z a p a s o w ą struktury i danych (włączając w to tworzenie i u s u w a n i e tabel). Rysunek 11.5. Rozbudowane ustawienia planowanych kopii zapasowych w programie MySQL Administrator
Backup Project
Advanced Options
Schedule
• A d v a n c e d Options * if* Specify detailed settings of how your backup should be performed Backup E
;ution Method
• InnoDE Online Backup
The backup will be executed in a single transaction This option is necessary ti a consistent snapshot of your InnoDB tables
Lock all tables
All tables are locked with FLUSH READ LOCKS. This option is necessary to cr consistent snapshot of your MylSAM tables
Online with binlog pos
This backup method is the same as InnoDB Online Backup but also logs the c position of the binlog if the option is activated for the server
Normal backup
Each table will be backed up independently. This may lead to inconsistent bac and should be avoided if possible
Complete backup
Backup all tables. Use this option if tables are added to schémas frequently Nr backup content table selection will be ignored.
Output File Options Backup Type: •
| SQL Files
•
No C R E A T E S
Type of generated backup file.
* Complete INSERTS
Nn F X T F N D F n I N S F R T S
j Compatibility mod«
s s/\ Pnmmenl i
L...
New Project
' A N S I Quotes S a v e Project
Konfiguracja wirtualnych serwerów Apache Pojedynczy serwer Apache m o ż e obsługiwać wiele strony W W W . Przykładowo pojedynczy s e r w e r m ó g ł b y t e o r e t y c z n i e o b s ł u g i w a ć z a r ó w n o www.disney.com, jak i www.cnn.com. W i r t u a l n e s e r w e r y s ą d o s k o n a ł y m r o z w i ą z a n i e m w sytuacji, kiedy p o t r z e b u j e s z j e d n ą w e r s j ę strony dla k l i e n t ó w ( w w w . p r z y k l a d . c o m ) , a d r u g ą dla d o s t a w c ó w ( w w w . d o s t a w c y przyklad.com). F u n k c j a obsługi wielu stron A p a c h e p o z w a l a przypisać n a z w y d o m e n do poszczególnych adresów IP. Żądania przesyłane na dany adres IP p o w o d u j ą uruchomienie strony właściwej dla d a n e j d o m e n y . Jeśli p r o w a d z i s z kilka stron J o o m l a ! na j e d n y m serwerze, w y s t a r c z y zainstalować j e w oddzielnych katalogach i przypisać im oddzielne bazy danych 1 . 1
Alternatywnym rozwiązaniem jest wykorzystanie jednej bazy danych z różnymi przedrostkami tabel poszczególnych instalacji Joomla! — p r z y p . tłum.
Rozdział 11. • Prowadzenie profesjonalnej strony
285
Przykładowy fragment konfiguracji A p a c h e dla kilku stron m ó g ł b y wyglądać tak: ServerAlias przyklad.com ServerAlias *.przyklad.com ServerAlias innastrona.com ServerAlias *.innyadres.com ServerAl1 as http://www.i nnyadres.com/ ServerAlias innyadres2.com ServerAlias *. innyadres2.com ServerAli as http://www.i nnyadres2.com/ ServerAdmi n webmaster@przyklad.com DocumentRoot /home/przyklad/public_html BytesLog domlogs/przyklad.com-bytesjog ServerName http://www.przyklad.com/ php_admin_value open_basedir "/home/przyklad:/usr/lib/php :/usr/1ocal/I ib/php:/tmp" php_adm1n_value open_basedir "/home/przyklad:/usr/1 i b/php :/usr/1ocal/11b/php:/tmp" User przykład Group przykład CustomLog /usr/1ocal/apache/domlogs/przykl ad.com combined ScriptAlias /cgi-bin/ /home/przyklad/publicjitml/cgi-bin/
W p o w y ż s z y m f r a g m e n c i e wirtualne serwery z a k ł a d a n e s ą na podstawie adresów IP, tzn. adresy IP przypisywane są wirtualnym serwerom działającym na j e d n e j maszynie. Alternatywnym rozwiązaniem są wirtualne serwery na podstawie domeny, które pozwalają obsługiwać kilka stron w r ó ż n y c h d o m e n a c h na m a s z y n i e d y s p o n u j ą c e j j e d n y m a d r e s e m IP. S e r w e r uruchamia o d p o w i e d n i ą stronę na podstawie parametru hostname dostarczonego w żądaniu H T T P . Więcej informacji na temat wirtualnych serwerów korzystających z przekierowania na podstawie d o m e n y znajdziesz na stronie serwera Apache (http://httpd.apache.org/docs/ 1.3/vhosts/name-based.html).
ontrola serwera Apache z wiersza poleceń Większość zadań administracyjnych serwera Apache przeprowadzanych jest z poziomu wiersza poleceń. Serwer m o ż e s z w s t r z y m a ć , u r u c h o m i ć , u r u c h o m i ć p o n o w n i e , a także z a t r z y m a ć , w p i s u j ą c o d p o w i e d n i e k o m e n d y . P r z y k ł a d o w o aby u r u c h o m i ć p o n o w n i e s e r w e r , n a l e ż y wprowadzić k o m e n d ę p o d o b n ą do poniższej: C:\Program Files\Apache\Apache2.2\bin\httpd.exe
-w -n "Apache2.2" -k restart
arządzanie wieloma serwerami Prawdopodobnie napotkasz w swojej pracy sytuację, kiedy będziesz prowadzić kilka stron opartych na Joomla!, zainstalowanych na różnych serwerach. W momencie pisania tej książki nie istniało n a r z ę d z i e , które p o z w a l a ł o z a r z ą d z a ć w i e l o m a s t r o n a m i J o o m l a ! z p o z i o m u
286
Joomla!. Profesjonalne tworzenie stron W1NW p o j e d y n c z e g o i n t e r f e j s u . O b e c n i e d o s t ę p n e s ą r o z w i ą z a n i a , które u ł a t w i a j ą zarządzanie p o z o s t a ł y m i s e r w e r a m i . P r z y k ł a d o w o dla M y S Q L m o ż e s z s k o r z y s t a ć z p r o g r a m u , który pozwala zarządzać wieloma serwerami, w ten sposób uzyskujesz dostęp z j e d n e g o miejsca do kilku baz danych Joomla!.
MySQL Instance Manager M y S Q L Instance M a n a g e r jest n a r z ę d z i e m o b s ł u g i w a n y m z wiersza poleceń, dostępnym w wersji dla systemów uniksowych i Windows. Pozwala sprawdzić stan dowolnego z zestawu s e r w e r ó w , u r u c h o m i ć go, zatrzymać, a także u r u c h o m i ć p o n o w n i e . M o ż e s z także wybrać chroniony (ang. guarded) serwer, który z o s t a n i e a u t o m a t y c z n i e u r u c h o m i o n y p o n o w n i e przez narzędzie M y S Q L Instance Manager w przypadku wystąpienia błędu. Program ma funkcję ujednoliconej konfiguracji, która umożliwia wprowadzenie identycznych ustawień na wszystkich serwerach. Kontrolowane serwery nie muszą znajdować się w jednej sieci lokalnej, kontrolować m o ż n a też serwery zdalne.
PhpMyAdmin Jeśli do zarządzania serwerem M y S Q L wykorzystujesz narzędzie phpMyAdmin, możesz tak j e skonfigurować, aby działało z w i e l o m a serwerami M y S Q L . Niezbędna zmiana w konfiguracji sprowadza się do ustawienia zmiennej $cfg['Servers' ], np. pole $cfg[ 'Servers'] '-»•[Si][ 'host' ]2 p o w i n n o zawierać n a z w ę danego serwera.
Testy obciążeniowe Przed p r z e n i e s i e n i e m strony do ś r o d o w i s k a p r o d u k c y j n e g o w a r t o poddać system testowi obciążeniowemu (ang. load testing). Test tego typu polega na wytworzeniu sztucznego obciążenia serwera W W W (np. wysyłanie setki żądań w bardzo krótkim czasie) i monitorowaniu rezultatu. Szczególnie użyteczne jest sprawdzanie systemu przy obciążeniu, które wykracza poza normalne warunki, dzięki czemu można w y z n a c z y ć granicę poprawnego działania. Test obciążeniowy można przeprowadzić za p o m o c ą narzędzia open source o nazwie Dieseltest Load Testing Software, które przedstawiono na rysunku 11.6. Za p o m o c ą programu można symulować różne scenariusze, obciążenie generowane przez setki lub tysiące użytkowników. M o ż l i w e j e s t z a p i s y w a n i e i o d t w a r z a n i e s c e n a r i u s z y , k t ó r y c h rezultaty w y ś w i e t l a n e są na bieżąco. Pakiet zawiera także narzędzia, które p o z w a l a j ą na analizę dzienników, dzięki czemu można zebrać dodatkowe statystyki. Program Dieseltest m o ż n a znaleźć na stronie: http://sourceforge.net/projects/dieseltest
W miejsce $1 należy wstawić 0 dla pierwszego serwera, 1 dla drugiego itd. — p r z y p . liitm.
Rozdział 11. • Prowadzenie profesjonalnej strony sunek 11.6. ilikacja Dieseltest muluje działania •ytkowników ) przeprowadzenia stu )ciążeniowego irwera
287
NewTesll.tst
Current Test: Victual Users
Timeout (sec)
¡60
Run time (min:sec)
Use recorded think time
(¡7
User ramp-up time (sec)
[Î
Use recorded host
Create New Script...
(Double-click a script below to edit). Scripts not in this test
Scripts in this test
Testy pod o b c i ą ż e n i e m dla serwera M y S Q L m o ż n a p r z e p r o w a d z i ć , stosując aplikację D B Monster, którą znajdziesz na stronie: http://sourceforge.net/projects/dbmonster Narzędzie D B M o n s t e r tworzy n a j p i e r w l o s o w e dane, które z o s t a n ą u m i e s z c z o n e w bazie danych. Po wstawieniu danych możesz wykorzystać program do analizy zapytań, aby określić, na ile zostały one zoptymalizowane i jak skutecznie działają w przypadku dużej ilości danych. Aby sprawdzić konfigurację M y S Q L i ogólną wydajność serwera, możesz wykorzystać pakiet Database Opensource Test Suite for Linux Test Project, dostępny na stronie: http.V/ltp.sourcefbrge.
net
Każda z w y m i e n i o n y c h aplikacji p o z w a l a stworzyć profil obciążenia, tzn. określić, j a k i e operacje będą przeprowadzane na serwerze w czasie testów. Stworzenie skutecznego profilu obciążenia ma w sobie elementy sztuki i nauki. Wiele informacji, w s k a z ó w e k i zagadnień, które warto r o z w a ż y ć , tworząc profil obciążenia, z n a j d z i e s z w artykule autorstwa S t e v e ' a Splaine'a „Modeling the Real World for Load Testing W e b Sites" (www.stickyminds.com/ s.asp ?F=S3116_A R T_2).
równoważenie obciążenia Bliźniaczym zagadnieniem dla testów pod obciążeniem jest r ó w n o w a ż e n i e obciążenia. Jeśli strona zyska o g r o m n ą p o p u l a r n o ś ć , p r a w d o p o d o b n i e b ę d z i e d z i a ł a ć na kilku s e r w e r a c h , z których część m o ż e służyć j a k o z a b e z p i e c z e n i e (nawet jeśli j e d n a z m a s z y n z a w i e d z i e , strona nadal będzie dostępna), a reszta m o ż e obsługiwać p r z e k a z y w a n e żądania (rozsyłane między identyczne serwery, aby zapewnić lepszą w y d a j n o ś ć całej witryny). W środowisku testowym możliwości równoważenia obciążenia są z reguły niewielkie. Serwer testowy dysponuje ograniczonymi zasobami, działa zazwyczaj w sieci lokalnej ( L A N ) i w y k o n u j e wszystkie usługi ( W W W , PHP i bazę danych). Po przeniesieniu do środowiska
288
Joomla!. Profesjonalne tworzenie stron W1NW p r o d u k c y j n e g o w i ę k s z o ś ć s y s t e m ó w J o o m l a ! b ę d z i e d o s t ę p n a w internecie, na j e d n y m lub kilku serwerach, a każdy z nich będzie dysponował znaczącą ilością pamięci i miejscem na dysku twardym. P o d s t a w o w e techniki r ó w n o w a ż e n i a obciążenia można zastosować na serwerze testowym, aby określić j e g o słabe punkty. Z a a w a n s o w a n e r ó w n o w a ż e n i e obciążenia w y m a g a jednak w a r u n k ó w o d p o w i a d a j ą c y c h środowisku p r o d u k c y j n e m u . Narzędzie do r ó w n o w a ż e n i a obciążenia o nazwie phpLoadBalancer znajdziesz na stronie: http://sourceforge.net/projects/phploadbalancer W przypadku większych systemów warto rozważyć aplikację X L B HTTP Load Balancer (XLB) (http://sourceforge.net/projects/xlb) lub Linux Virtual Server (www.linuxvirtualserver.org). Wymienione programy umożliwiają równoważenie obciążenia na poziomie serwera, co skutk u j e lepszą skalowalnością rozwiązań.
Umiędzynaradawianie Podczas tworzenia wersji 1.5 aplikacja Joomla! została napisana od podstaw, głównie pod kątem obsługi stron w j ę z y k a c h innych niż angielski. J e d n y m z największych w y z w a ń tego procesu było wprowadzenie kodowania tekstu w standardzie UTF-8, co pozwala na skuteczną Obsługę wielu j ę z y k ó w . S c h e m a t k o d o w a n i a z n a k ó w U T F - 8 z a k ł a d a z a p i s y w a n i e ich w postaci c i ą g ó w o różnej długości. Jeden znak (np. litera z łacińskiego alfabetu) m o ż e z a j m o w a ć j e d e n bajt, podczas gdy inny (rzadki chiński p i k t o g r a m ) n a w e t trzy b a j t y . N a p r a w d ę rzadkie znaki w y m a g a j ą zużycia czterech bajtów. Powyższy schemat ma sporą przewagę nad standardem Unicode, który polega na zapisywaniu k a ż d e g o z n a k u w postaci d w ó c h b a j t ó w . K o d o w a n i e U T F - 8 p o z w a l a na bogatszy zestaw z n a k ó w , a r o z m i a r w i ę k s z o ś c i t e k s t ó w nie w z r a s t a z n a c z ą c o . P o n i e w a ż litery łacińskie k o d o w a n e są w postaci j e d n e g o bajta, teksty w j ę z y k a c h z a c h o d n i o e u r o p e j s k i c h (a także niektórych ś r o d k o w o e u r o p e j s k i c h , np. p o l s k i m ) m a j ą rozmiar p o r ó w n y w a l n y z tekstami zakodowanymi systemami j e d n o b a j t o w y m i \ przy czym tekst zapisany w ten sposób nie jest ograniczony do j e d n e g o j ę z y k a . Wszystkie n o w e w y d a n i a Joomla! z a w i e r a j ą pełną obsługę wielu j ę z y k ó w , a także tekstów pisanych od p r a w e j d o lewej. Jeśli p l a n u j e s z obsługę z n a k ó w spoza alfabetu łacińskiego, sprawdź czy Joomla! i serwer M y S Q L zostały odpowiednio skonfigurowane, aby korzystać z kodowania UTF-8.
Np. ISO 8859-2 i CP1250, dwoma popularnymi systemami kodowania znaków na polskich stronach internetowych przed rozpowszechnieniem UTF-8 — przyp. tłum.
Rozdział 11. • Prowadzenie profesjonalnej strony
289
utomatyczne cenzurowanie treści Jeśli strona pozwala na publikowanie treści napisanych przez użytkowników, warto zastosować narzędzia, które u s u w a j ą c w u l g a r y z m y i inne n i e p o ż ą d a n e treści, z a p o b i e g n ą u r a ż e n i u pozostałych odwiedzających. Wiele z narzędzi opisanych w rozdziale 10. (w tym księgi gości) m a w b u d o w a n e f u n k c j e automatycznej cenzury niepożądanych słów. Warto zainteresować się także r o z s z e r z e n i e m Foul Filter, które u k r y w a w s z y s t k i e słowa z listy określanej przez administratora. U k r y w a n i e m o ż e o d b y w a ć się dla tekstów użytkowników z danych grup lub dla wszystkich. W y b r a n e słowa z o s t a n ą zastąpione g w i a z d k ą (*). Wtyczka nie zmienia treści a r t y k u ł ó w , tylko p r z e c h w y t u j e i z m i e n i a tekst, z a n i m zostanie p r z e s ł a n y d o p r z e g l ą d a r k i . T a k i e r o z w i ą z a n i e p o z w a l a na p o z o s t a w i e n i e o r y g i n a l n y c h materiałów w stanie n i e n a r u s z o n y m , a także na z m i a n ę zasad (np. d o d a n i e n o w y c h słów do listy cenzurowanych lub rehabilitacja dotychczasowych). Zmiany b ę d ą widoczne natychmiast po wprowadzeniu. Rozszerzenie Foul Filter można znaleźć na stronie: www.girlsgonedumb.com/component/option, funcjileinfo/id, 1
comremos
i
torv/ltemid,41/
lostrajanie wydajności MySQL Chociaż o d p o w i e d n i e ustawienia m o g ą z n a c z ą c o p r z y s p i e s z y ć działanie P H P , p r a w d z i w y potencjał drzemie w konfiguracji serwera M y S Q L . Ponieważ wszystkie materiały Joomla! pobierane są z bazy danych M y S Q L , dostrojenie w y d a j n o ś c i M y S Q L m o ż e przynieść znaczącą poprawę szybkości działania strony W W W — zwłaszcza jeśli działa ona pod d u ż y m obciążeniem. Dostrajanie wydajności MySQL wykracza poza zmianę konfiguracji. Jeśli korzystasz z rozszerzeń, które wykonują zapytania do bazy danych, równie znaczący, co optymalna konfiguracja, jest format tabel, sposób pracy z bazą danych i ogólna konstrukcja zapytań. Dlatego optymalizacja M y S Q L p o w i n n a p r z e b i e g a ć d w u t o r o w o : z j e d n e j strony n a l e ż y o d p o w i e d n i o dobrać ustawienia serwera, a z drugiej zoptymalizować aplikację i strukturę bazy danych.
istawianie dysku przechowującego dane Serwer M y S Q L pozwala określić miejsce przechowywania danych. Jeśli korzystasz z serwera na platformie W i n d o w s , m o ż e s z zwiększyć w y d a j n o ś ć , p r z e c h o w u j ą c dane na innym dysku niż system operacyjny. Odbieranie i zapisywanie informacji p o w i n n o przebiegać szybciej.
290
Joomla!. Profesjonalne tworzenie stron W1NW
Wybór typu serwera A p l i k a c j a M y S Q L p o z w a l a a u t o m a t y c z n i e dobrać ustawienia, aby uzyskać maksymalną wydajność dla danego zastosowania. R a z e m z serwerem instalowane jest narzędzie o nazwie M y S Q L Server Instance Configuration Wizard. Pozwala ono zmienić konfigurację, by dopasować j ą do roli systemu. Uruchom program i wybierz opcję Reconfigure Instance, a następnie Detailed Configuration. Ekran Server Type, przedstawiony na rysunku 11.7, umożliwia wybór jednego ze standardowych zadań, które m a spełniać serwer M y S Q L . Oczywistym wyborem na serwerze testowym jest Developer Machine. Ustawienie Server Machine dostosuje MySQL do warunków serwera, na k t ó r y m u r u c h o m i o n o kilka usług. O p c j ę Dedicated MySQL Server Machine stosuje się w przypadku m a s z y n obsługujących wyłącznie serwer baz danych. Rysunek 11.7. Wybór typu serwera dopasuje ustawienia pamięci, wykorzystanie dysku twardego i pamięci podręcznej pod kątem środowiska
MySQL Server Instance Configuration Wizard MySQL Server Instance Configuration Choose the configuration for the server instance. Please select a server type. This will influence memory, disk and CPU usage. • Developer Machine: | gggâgf f
This is a development machine, and many other applications will be run on it. MySQL Server should only use a minimal amount of memory.
Server Machine s J|
Several server applications will be running on this machine, Choose this option for web/application servers. MySQL will have medium memory usage.
Dedicated MySQL Server Machine (
\ J! •
This machine is dedicated to run the MySQL Database Server, No other servers, such as a web or mail server, will be run, MySQL will utilize up to all available memory.
U s t a w i e n i a w y k o r z y s t a n i a s e r w e r a baz d a n y c h , z i l u s t r o w a n e na r y s u n k u 11.8, powinny w s k a z y w a ć w p r z y p a d k u większości s y s t e m ó w Joomla! d o m y ś l n ą o p c j ę Multifunctional Database. Jeśli j e d n a k p r o w a d z i s z stronę, która nie musi o b s ł u g i w a ć d u ż e j ilości danych w p r o w a d z a n y c h przez u ż y t k o w n i k ó w lub sklep internetowy, który w y m a g a zachowania spójności transakcji, opcja Non-Transactional Database Only zwiększy w y d a j n o ś ć serwera. Jeśli prowadzisz stronę e-commerce, dla której spójność transakcji ma najwyższe znaczenie, najlepszym w y b o r e m będzie p r a w d o p o d o b n i e Transactional Database Only. Ekran ustawień połączeń, p r z e d s t a w i o n y na r y s u n k u 11.9, pozwala określić oczekiwaną liczbę jednoczesnych połączeń. Dla większości instalacji Joomla! ustawienie Decision Support (DSS)/OLAP będzie dobrym wyborem. Wybór opcji Online Transaction Processing (OLTP) spowoduje zużycie większej części zasobów, ponieważ zostaną zarezerwowane na wypadek w y ż s z e g o obciążenia. Kolejne ekrany p o z w a l a j ą dostawać opcje związane z protokołem sieciowym, trybem strict i innymi. Nie zmieniaj domyślnych ustawień, chyba że ze względu na zaporę sieciową musisz z m i e n i ć n u m e r portu M y S Q L . N i e p o w i n i e n e ś w p r o w a d z a ć z m i a n na ekranie wyboru domyślnego zestawu znaków (zobacz rysunek 11.10), chyba że planujesz ponowną instalację Joomla!. Zestaw z n a k ó w bazy danych powinien zostać ustawiony przed instalacją Joomla!, aby instalator odpowiednio dopasował procedury składowania w bazie danych.
sunek 11.8. ożna ograniczyć py baz danych -) wielofunkcyjnyc baz danych, sz wyłącznie Usługujących ansakcje i baz ez obsługi ansakcji
ysunek 11.10. Vybierz opcję lest Support for Aultilingualism UTF8), jeśli ilanujesz obsługę nnych języków liż angielski
Rozdział 11. • Prowadzenie profesjonalnej strony 291
MySQL Server Instance Configuration Choose the configuration for the server instance, Please select the database usage. C Multifunctional Database General purpose databases. This will optimize the server for the use of the fast transactional InnoDB storage engine and the high speed MylSAM storage engine. Transactional Database Only Optimized for application servers and transactional web applications, This will make InnoDB the main storage engine. Note that the My 15AM engine can still be used. * fSon-Transactional Database Only! Suited for simple web applications, monitoring or logging applications as well as analysis programs. Only the non-transactional MylSAM storage engine will be activated.
MySQL Server Instance Configuration Wizard MySQL Server Instance Configuration Choose the configuration for the server instance. Please set the approximate number of concurrent connections to the server, Decis;ionSupport(DSS)/OLAP: a jjk m$r
Select this option for database applications that will not require a high number of concurrent connections. A number of 20 connections will be assumed.
Online Transaction Processing (OLTP) j* /
jk
Choose this option for highly concurrent applications that may have at any one time up to 500 active connections such as heavily loaded web servers.
Manual Setting "îr'i
Please enter the approximate number of concurrent connections.
d
Concurrent connections:
MySQL Server instance Configuration W i z a r d MySQL Server Instance Configuration Choose the configuration for the server instance. Please select the default character set. Standard Character Set fHeio!) Makes Latin 1 the default charset. This character set is suited for M k t , . E n g l i s h and other West European languages.
• Best Support For Multilingualismi M a ke
UTF8 the default character set, This is the recommended character set for storing text in many different languages. Manual Selected Default Character Set / Collation 4T ? j
Please specify the character set to use. Character Set:
utf8
< Back
j I
Next >
|
Cancel
292
Joomla!. Profesjonalne tworzenie stron W1NW P o z o s t a ł e u s t a w i e n i a to k w e s t i a o s o b i s t y c h p r e f e r e n c j i , nie m a j ą o n e d u ż e g o znaczenia dla konfiguracji Joomla!. Jeśli jednak zmienisz hasło dostępu do serwera baz danych, musisz o d p o w i e d n i o z m i e n i ć plik configuration.php, aby a p l i k a c j a m o g ł a p o p r a w n i e łączyć się z serwerem baz danych.
Źródło problemów Baza danych Joomla! została zaprojektowana pod kątem ogólnego wykorzystania, dlatego istnieją sposoby, aby poprzez zmianę j e j struktury uzyskać w y ż s z ą wydajność. Na dodatek tabele, które tworzysz na potrzeby własnych rozszerzeń, także m o ż n a zoptymalizować.
Optymalizacja indeksów Jednym z głównych obszarów odpowiedzialnych za problemy z wydajnością są indeksy tabel w y k o r z y s t y w a n e p r z e z s e r w e r b a z d a n y c h ( w ł a ś n i e m a n i p u l a c j a indeksami jest źródłem n a j w i ę k s z y c h z y s k ó w w y d a j n o ś c i ) . D a n e w b a z i e d a n y c h p r z e c h o w y w a n e są w luźnym p o r z ą d k u (są n i e p o s o r t o w a n e ) . N a przykład dla tabeli p r z e c h o w u j ą c e j dane o kontaktach rekord dla nazwiska „Zieliński" m o ż e zostać zapisany j a k o pierwszy, a rekord dla nazwiska „ A d a m c z y k " na s a m y m końcu. U t w o r z e n i e p o s o r t o w a n e j listy wszystkich nazwisk, które zaczynają się na literę „B", wymagałoby poświęcenia dużej części zasobów i czasu procesora. A b y p r z y s p i e s z y ć f u n k c j e w y s z u k i w a n i a i s o r t o w a n i a , s e r w e r baz d a n y c h w y k o r z y s t u j e i n d e k s y , tj. listę o d w o ł a ń d o r e k o r d ó w p o s o r t o w a n ą w p e w i e n s p o s ó b . W r a z z danymi na serwerze zapisywany jest także indeks. W naszym przykładzie zapytanie spowodowałoby odwołanie się do indeksu dla pola nazwisko. Indeks w bazie danych gra taką rolę jak skorowidz w książce — p o z w a l a s z y b k o o d n a l e ź ć o d p o w i e d n i ą stroną (lub rekordy — w przypadku bazy danych). Indeksy należy utworzyć dla wszystkich pól (lub ich kombinacji) często wykorzystywanych w z a p y t a n i a c h . N a r y s u n k u 11.11 z i l u s t r o w a n o f u n k c j ę p r o g r a m u M y S Q L Administrator, która p r z e d s t a w i a listę i n d e k s ó w bazy danych J o o m l a ! . P r z y k ł a d o w o tabela jos content posiada siedem powiązanych indeksów, co umożliwia szybkie sortowanie danych po wartości pól, takich j a k access, catid, section itd. Kiepski dobór indeksów jest jednym z głównych powodów problemów z wydajnością. Indeksy r z a d k o u ż y w a n e (lub n i g d y n i e u ż y w a n e ) nie p r z e ł o ż ą się na znaczący wzrost wydajności. Wręcz przeciwnie — m o g ą spowolnić pracę serwera, ponieważ w y m a g a j ą zapisywania d o d a t k o w y c h danych przy wstawianiu n o w y c h lub m o d y f i k o w a n i u istniejących rekordów.
Zastosowanie indeksów kompozytowych P r o s t e i n d e k s y o d w o ł u j ą się w y ł ą c z n i e d o j e d n e g o p o l a — np. n a z w i s k a . Istnieją także indeksy, które o d w o ł u j ą się d o kilku pól, np. n a z w i s k a i imienia. Indeksy tego typu noszą n a z w ę indeksów kompozytowych. P r z y k ł a d o w o i n d e k s o n a z w i e nazwisko_imie m ó g ł b y w s k a z y w a ć na d w a pola — nazwiska i imienia.
Rozdział 11. • Prowadzenie profesjonalnej strony ysunek 11.11. ista indeksów 'tworzonych IIa bazy danych oomla! / programie /lySQL idministrator
Schema Tables
Schema Indices
Views
Sloied procedures
¡ODiiila15 All loomlal 5 indices
*
Index Name
Table Name jos_contact_details
> 3 csl«f • j catid *
łi catid
ios_fb_messages ~ ~ jos_newsfeeds
Type
Unique
Not Nu«
BTREE
NOT NULL
BTREE
NOT NULL NOT NULL
BTREE
» Ü
catid
jos_sb_categories
> 3
catid
~ ï | jos_sb_messages
BTREE
NOT NULL
> 3
catid
~
jos_sb_moderation
BTREE
NOT NULL
jos_weblinks
BTREE
NOT NULL
~J| jos_sb_categories
BTREE
Fin! ¡os_categories
BTREE
NOT NULL
•
^ catid
•
catpaient
• M ca,-idx • ¿ y components
BTREE
UNIQUE
NOT NULL
¡osjnenu
BTREE
NOT NULL
• " 3 com_contentid
jos_comment
BTREE
NOT NULL
• 3
jos_users
BTREE
NOT NULL
• j j gid_block
jos_users
BTREE
• ¿¡J groupJd
i° s _'h_users
BTREE
•
293
email
3 group_id_aro_id_groups_ar ~ y jos_core_acl_gtoups_aro_r « BTREE
• " 3 hold time
<
~ 3 jos_fb_messages jos_sb_messages
NOT NULL UNIQUE
NOT NULL
BTREE
NOT NULL
BTREE
NOT NULL
>
Jednym i najczęstszych z błędów, które niweczą zysk wydajności, jest porządek pól tworzonego indeksu. Podczas tworzenia indeksu odwołania sortowane są w e d ł u g kolejnych pól, tzn. dla indeksu nazwisko_imie wpisy sortowane są najpierw w e d ł u g nazwiska, a następnie w e d ł u g imienia. Z tego p o w o d u w y s z u k i w a n i e rekordów w e d ł u g nazwiska będzie korzystać z tego indeksu, natomiast zapytanie o d w o ł u j ą c e się wyłącznie do pola imienia nie zyska na zastosowaniu indeksu, ponieważ nieoczekiwany wynik zapytania nie p o k r y w a się z założeniami indeksu w bazie danych.
nlkatowe wartości indeksowanego pola M o ż e się w y d a w a ć , że zastosowanie indeksów zawsze przynosi wzrost wydajności. Nie jest to prawdą, p o n i e w a ż serwer baz d a n y c h p r z e p r o w a d z a a u t o m a t y c z n i e w i e l e operacji, aby zoptymalizować w y k o n y w a n e zapytanie. J e d n y m z etapów procesu optymalizacji jest określenie, czy zapytanie zostanie przetworzone z w y k o r z y s t a n i e m indeksów, czy nie. Jedną z metod określenia, czy zastosować indeks, jest sprawdzenie, czy więcej niż 30 procent i n d e k s o w a n y c h pól m a u n i k a t o w e wartości. P r z y k ł a d o w o baza k o n t a k t ó w m o ż e z a w i e r a ć pole wojewodztwo. Jeśli 90 procent osób wprowadzonych w bazie danych mieszka w Zachodniopomorskiem, zastosowanie indeksu podczas wykonywania zapytania wywołałoby skutek odwrotny do zamierzonego. Serwer baz danych musiałby w tym przypadku sprawdzić indeks, wybrać pasujące rekordy, wczytać j e i w końcu pobrać w ł a ś c i w e dane. Jeśli j e d n a k indeks zostałby z i g n o r o w a n y , w y s t a r c z y ł o b y p o b r a ć rekord, sprawdzić, czy w a r t o ś ć pola wojewodztwo jest odpowiednia, i zwrócić dane j a k o wynik. Dlatego indeksy pól lub kolumn, których unikatowość rekordów wynosi mniej niż 30 procent, są automatycznie ignorowane, a serwer o p e r u j e b e z p o ś r e d n i o na d a n y c h z b a z y . W takiej sytuacji zastosowanie indeksu kompozytowego (np. wojewodztwo_nazwisko) mogłoby spowodować znaczący wzrost wydajności zapytań w y m a g a j ą c y c h obu tych informacji.
294
Joomla!. Profesjonalne tworzenie stron W1NW Ponieważ dla większości baz danych charakterystyka zawartości zmienia się wraz z rozwojem bazy, strategie indeksowania pól należy regularnie rewidować i sprawdzać, czy wcześniejsze założenia nadal m a j ą pokrycie w praktyce.
Usuwanie nadmiarowych indeksów Każdy dodatkowy indeks wydłuża czas potrzebny na zapisanie rekordu w tabeli. Po dodaniu nowych lub zmodyfikowaniu istniejących rekordów trzeba przebudować wszystkie indeksy, aby ich posortowanie odpowiadało porządkowi danych. Dlatego nadmiarowe indeksy przyc z y n i a j ą się d o spowolnienia systemu. Chociaż nie musi to być p r o b l e m e m dla tradycyjnej strony J o o m l a ! , strona e - c o m m e r c e z d u ż ą l i c z b ą transakcji lub p o p u l a r n e f o r u m może w y m a g a ć usunięcia niepotrzebnych opóźnień. Pierwszym krokiem podczas usuwania nadmiarowości jest sprawdzenie, czy proste indeksy nie p o k r y w a j ą się z indeksami k o m p o z y t o w y m i . Jeśli przykładowo dla tabeli utworzono indeks nazwiskojmie, indeks nazwisko jest całkowicie zbędny, ponieważ M y S Q L wykorzysta indeks kompozytowy podczas wyszukiwania danego pola. Podobnie indeks nazwisko_imie_drugieimie wyklucza konieczność stosowania indeksu nazwiskojmie. Zwłaszcza podczas pracy g r u p o w e j m o ż e zdarzyć się sytuacja, że zostaną dodane indeksy, k t ó r y c h f u n k c j e się p o k r y w a j ą . D l a t e g o z a w s z e s p r a w d z a j , czy b a z a d a n y c h nie zawiera nadmiarowych indeksów. Eliminacja ich m o ż e poprawić w y d a j n o ś ć .
Wykorzystuj najmniejszy możliwy typ danych Konstruując tabele dla rozszerzenia, nad którym pracujesz, powinieneś zwrócić szczególną u w a g ę na d o b ó r w ł a ś c i w y c h t y p ó w d a n y c h dla pól lub k o l u m n . Projektanci baz danych często u l e g a j ą pokusie przeprojektowywania tabel, szczególnie po doświadczeniach związ a n y c h z z a p i s e m roku 2 0 0 0 (rok p r z e c h o w y w a n y był w bazach d a n y c h w postaci dwóch cyfr, co mogło stanowić szczególny problem przy przejściu do nowego tysiąclecia). Pomijając to, w a r t o p a m i ę t a ć , że o g r a n i c z e n i e r o z m i a r u d a n y c h m a z a z w y c z a j p o z y t y w n y w p ł y w na wydajność, poza tym nie warto także przejmować się bliżej nieokreślonymi trudnościami, które m o g ł y b y wystąpić w przyszłości. Przykładowo jeśli masz zamiar zapisywać n u m e r dnia w danym roku, zastosuj typ SMALLINT ( k t ó r e g o z a k r e s sięga o k o ł o 32 0 0 0 ) z a m i a s t s t a n d a r d o w e g o INT ( k t ó r e g o z a k r e s sięga 2 miliardów, ale którego zapis z a j m u j e dwa razy tyle miejsca). Chociaż taka oszczędność może w y d a w a ć się z n i k o m a , j e j pożytek staje się j a s n y w w i ę k s z e j skali. W y o b r a ź sobie stratę 2 b a j t ó w na polu, pomóż to przez 8 pól, pomnóż to przez 30 u ż y t k o w n i k ó w podczas jednej sesji, pomnóż to przez 2 0 0 0 odwiedzających w ciągu godziny i zobacz, ile niepotrzebn y c h d a n y c h z o s t a ł o p r z e t w o r z o n y c h w bazie d a n y c h . A to p r z e c i e ż strata tylko dwóch b a j t ó w dla j e d n e g o pola. Wyobraź sobie teraz najgorszy możliwy scenariusz, tabela zawiera pole typu CHAR o określonej długości 200, zamiast pola typu VARCHAR. Ilość zmarnowanego miejsca i przesyłanych danych będzie stale wzrastać, znacząco ograniczając wydajność systemu. W tabeli 11.1 umieszczono listę typów danych, które można wykorzystać w M y S Q L , wraz z ograniczeniami, jakie nakładają, a także informacjami o miejscu z a j m o w a n y m w bazie danych. Zawartość tabeli powinna być p o m o c n a w określaniu n a j m n i e j s z e g o typu danych, który odpowiada danej sytuacji.
Rozdział 11. • Prowadzenie profesjonalnej strony
295
bela 11.1. Tabela Typy danych MySQL yp danych
Opis
Liczba bajtów
INYINT
Liczba całkowita z zakresu - / + 127
i
MALL I NT
Liczba całkowita z zakresu - / + 32.767
2
EDIUMINT
Liczba całkowita z zakresu - / + 8.388.607
3
NT
Liczba całkowita z zakresu - / + 2.147.483.647
4
IGINT
Liczba całkowita z zakresu - / + 9.223.372.036.854.775.807
8
LOAT
Liczba zmiennoprzecinkowa o pojedynczej precyzji
4
DOUBLE
Liczba zmiennoprzecinkowa o podwójnej precyzji
8
DECIMAL
Liczba zmiennoprzecinkowa o dokładności określanej przez użytkownika
Zmienna
;HAR
Ciąg znaków o określonej długości
Określona długość, do 255
/ARCHAR
Ciąg znaków o zmiennej długości z narzuconym limitem
Zmienna (do 65.535)
rEXT
Tekst o zmiennej długości
Zmienna (do 65.535)
•1EDIUMTEXT
Tekst o zmiennej długości
Zmienna (do 16.777.216)
_0NGTEXT
Tekst o zmiennej długości
Zmienna (do 4.294.967.295)
3L0B
Dane binarne
Zmienna (do 65.535)
1EDIUMBL0B
Dane binarne
Zmienna (do 16.777.216) '
_0NGBL0B
Dane binarne
Zmienna (do 4.294.967.295) 4
3
DATE
Data zapisana zgodnie ze standardem ISO 8601
TIME
Czas zapisany zgodnie ze standardem ISO 8601 3
3
1ATETIME
Łączony zapis daty i czasu w formacie yyyy-ddmmhh:mm:ss
8
TIMESTAMP
Łączony zapis daty i czasu w postaci liczby sekund od 1 stycznia 1970 roku
4
YEAR
Rok w formacie YYYY
1
ENUM
Lista predefiniowanych wartości, z której można wybrać jedną
1 lub 2
SET
Lista predefiniowanych wartości, z której można wybrać zero, jedną lub więcej
od 1 do 8
Opisywanym także jako yyyy-mm-dd, np. zapis 2008-12-11 odpowiada zapisowi 11 grudnia 2008 roku — przyp. tłum. Oznaczanym także jako hh:mm:ss, np. 23:59:59 — p r z y p . tłum.
296
Joomla!. Profesjonalne tworzenie stron W1NW P a m i ę t a j , że kiedy t w o r z y s z indeks, p r z e c h o w y w a n e s ą nie tylko o d w o ł a n i a do wybran y c h k o l u m n — z a p i s y w a n e są t a k ż e a k t u a l n e d a n e tych k o l u m n . D l a t e g o utworzenie i n d e k s u k o l u m n y , k t ó r e j typ u s t a w i o n o na char(200), o z n a c z a , że k a ż d y indeks będzie zawierał d o d a t k o w o 200 b a j t ó w dla każdego rekordu. A b y oszczędzać miejsce i ograniczać p r z e t w a r z a n i e i n d e k s ó w , staraj się u n i k a ć i n d e k s o w a n i a k o l u m n z a w i e r a j ą c y c h większe porcje danych.
Pobieraj wyłącznie to, czego potrzebujesz Wielu początkujących programistów wykorzystuje zapytania p o d o b n e do poniższych: SELECT * FROM joc_contact_details
Dzięki d o k ł a d n e m u określeniu, które pola w y m a g a n e są przez aplikacje, czas przesyłania danych zostanie znacząco ograniczony: SELECT name, telephone FROM jos_contact_details
P o d c z a s k o n s t r u o w a n i a z a p y t a ń p o b i e r a j t y l k o n i e z b ę d n e d a n e . N i e z a p o m i n a j , że pola w y k o r z y s t y w a n e w klauzuli WHERE nie m u s z ą b y ć d o ł ą c z a n e d o z w r a c a n y c h w y n i k ó w . O z n a c z a to, że m o ż e s z zoptymalizować zapytanie j e s z c z e bardziej: SELECT name, telephone FROM jos_contact_details WHERE postcode = '92107'
Stosowanie komendy EXPLAIN Jednym z najefektywniejszych sposobów optymalizacji zapytania jest analiza wyniku instrukcji EXPLAIN. Umieszczenie komendy EXPLAIN przed właściwym zapytaniem spowoduje zwrócenie informacji o zapytaniu zamiast właściwych danych: EXPLAIN SELECT * FROM jos_contact_detan1s
Poniżej umieszczono listę k o l u m n zwracanych po w y k o n a n i u instrukcji EXPLAIN: •
Kolumna select type — Określa typ w y k o n a n e g o zapytania. W a r t o ś ć simple o z n a c z a , że z a p y t a n i e nie z a w i e r a ł o p o d z a p y t a ń ani o p e r a t o r a UNION. Primary oznacza główne zapytanie (jeśli zastosowano podzapytania). Union, Dependent Urn on i Union Result o d w o ł u j ą się d o z a p y t a ń z o p e r a t o r e m UNION. Subquery, Dependent Subquery, Uncacheable Subquery i Derived w s k a z u j e podzapytanie.
•
Kolumna type — Opisuje, w jaki sposób wykonywane są zapytania łączone. Wartości system i const odpowiadają wyszukiwaniu najwyżej po jednym kluczu. Inne możliwe wartości to eq_ref, ref, ref_or_nul1, index_merge, unique_subquery, index_subquery, range i index. Wartość all oznacza, że podczas wykonywania zapytania dane z tabeli w y k o r z y s t a n o bezpośrednio, z pominięciem indeksów.
•
Kolumna possi bl e_keys — Lista p o t e n c j a l n y c h i n d e k s ó w , które m o g ł y b y zostać w y k o r z y s t a n e podczas uruchamiania zapytania.
•
Kolumna key — W s k a z u j e n a z w ę indeksu M y S Q L , który został wykorzystany podczas uruchamiania zapytania.
Rozdział 11. • Prowadzenie profesjonalnej strony
297
Szczególnie polecam zapoznanie się z sekcją „ Optimizing Queries with EXPLAIN" w podręczniku MySQL (frttp://dev.mysql.com/doc/refman/5.0/en). Komenda E X P L A I N to najpotężniejsze i najużyteczniejsze narzędzie do optymalizacji zapytań. Zwróć szczególną uwagę na kolumnę type, ponieważ jej wartość najczęściej podpowiada, jakie działania należy podjąć.
ptymalizacia istniejącego systemu Po uruchomieniu strony Joomla! nie kończy się praca związana z j e j optymalizacją. W r ę c z o d w r o t n i e , d o s t r a j a n i e na p o d s t a w i e o b s e r w a c j i p r a w d z i w e g o s y s t e m u d a j e d u ż o lepsze rezultaty niż optymalizacja oparta na założeniach. W systemie M y S Q L badanie w y d a j n o ś c i i określanie słabych punktów jest szczególnie proste. Profilowanie jest j e d n ą z metod diagnozowania działającego systemu i określania jego słabych p u n k t ó w . J e d n y m z d o s k o n a ł y c h n a r z ę d z i d o t e g o celu j e s t dziennik powolnych zapytań (ang. slow queries log). D z i e n n i k ten p r z e c h o w u j e w s z y s t k i e z a p y t a n i a S Q L , k t ó r y c h uruchamianie trwało dłużej niż wartość parametru long_query_tlme. Domyślnie wartość tej zmiennej ustawiona jest na 10 sekund. Funkcję rejestrowania powolnych zapytań można uaktualnić dzięki opcji Startup Variables aplikacji M y S Q L Administrator. W zakładce Log files w ł ą c z o p c j ę Slow Queries Log, j a k przedstawiono to na rysunku 11.12, a w pole tekstowe obok w p r o w a d ź nazwę pliku. Jeśli nie wprowadzisz żadnej nazwy, dziennik zostanie zapisany w pliku host_name-slow.log. Aby nowe ustawienia zaczęły obowiązywać, musisz ponownie uruchomić serwer M y S Q L . ysunek 11.12. Vlącz opcję Slow Queries Log, i w pole tekstowe vprowadz nazwę Iziennika
Performance
InnoDB Parameter Security
Advanced
langes will have no effect until you restait the server.
• • • 0
Slow Queries Log:
:
>•< . " J w u l " , l
Enter a name for (he slow query log Otherwise a default name will be used.
•
• •
• Option File:
c:\xampp\mysql\bin\my.cnf
Apply changes
j j
Discard changes
[
R e j e s t r o w a n i e z a p y t a ń m o ż n a w ł ą c z y ć także z p o z i o m u w i e r s z a p o l e c e ń , u r u c h a m i a j ą c M y S Q L komendą: mysqld - -1og-siow-querles=joomlaSlowQLog
298
Joomla!. Profesjonalne tworzenie stron W1NW Po zarejestrowaniu zapytań w dzienniku możesz wygenerować podsumowanie, uruchamiając z wiersza poleceń instrukcję: mysql dumpsl ow <ści eżka-do-pli ków-dzienni ka-MySQL>/joomlaSlowQLog
Przełącznik - help wyświetli listę parametrów k o m e n d y dump. Dane na temat wydajności zapytań MySQL możesz uzyskać, także stosując moduł myshow. Nie jest to łatwe narządzie, zarówno w zakresie konfiguracji, jak i uruchamiania. Dlatego najpierw warto zapoznać się z informacjami na stronie domowej programu (http://jfontain.free.fr/myshow/myshow.htm), aby określić, czy spełnia ono Twoje potrzeby.
Powinieneś nie tylko o b s e r w o w a ć w y d a j n o ś ć zapytań M y S Q L , ale także analizować ogólną wydajność systemu. Narzędzie MyTop (http://jeremy.zawodny.com/mysql/mytop) przypomina funkcjonalnością program Top w systemie Linux, jednak odnosi się do monitorowania wątków i o g ó l n e j w y d a j n o ś c i serwera M y S Q L . M o ż l i w e j e s t o b s e r w o w a n i e lokalnych i zdalnych serwerów. Program dostępny jest dla systemów W i n d o w s , Linux i MacOS.
Administracja Dzięki J o o m l a ! a d m i n i s t r a c j a stała się b a r d z o prosta. J e d n a k ż e w r a z z r o z r o s t e m strony z a r z ą d z a n i e materiałami i u w i e r z y t e l n i a n i e m u ż y t k o w n i k ó w oraz p o r z ą d k o w a n i e systemu w celu usunięcia nieaktualnych danych staje się uciążliwym zadaniem. Ale istnieją metody radzenia sobie z tymi problemami, w głównej mierze dzięki zastosowaniu otwartych standard ó w w systemie Joomla! i kompatybilności z wieloma technologiami. P r z y k ł a d o w o uwierzytelnianie m o ż n a u s p r a w n i ć dzięki z a s t o s o w a n i u LDAP (Lightwieght Directory Access Protocol), co pozwala globalnie zarządzać kontami użytkowników. Zarządzać menu, u ż y t k o w n i k a m i i starymi materiałami m o ż n a z a r ó w n o z poziomu interfejsu administratora, jak i poprzez bezpośrednią manipulację bazy danych Joomla! za p o m o c ą narzędzi M y S Q L . W i ę k s z o ś ć zadań z w i ą z a n y c h z z a r z ą d z a n i e m , n a w e t w p r z y p a d k u dużych stron Joomla!, m o ż n a w y k o n a ć bez drogich i złożonych narzędzi.
Uwierzytelnianie LDAP L D A P jest standardem, który określa sposoby scentralizowanej autoryzacji dostępu. Zamiast oddzielnego konta w k a ż d y m systemie, z którego korzysta użytkownik, można zastosować centralną autoryzację za p o m o c ą katalogu L D A P , który umożliwia uwierzytelnianie użytk o w n i k a w d o w o l n y m systemie. P r z y k ł a d o w o s e r w e r L D A P m ó g ł b y zawierać informacje o uwierzytelnianiu niezbędne dla serwera W W W , FTP, CMS, poczty itd. Oznacza to, że pojedyncze konto użytkownika przechowywane na centralnym serwerze LDAP pozwala na dostęp do wszystkich pozostałych serwerów.
Rozdział 11. • Prowadzenie profesjonalnej strony
299
Na szczęście do Joomla! dołączona jest wtyczka, która obsługuje uwierzytelnianie L D A P . C h o c i a ż nie da się z a p i s a ć p r z y n a l e ż n o ś c i d o g r u p y (np. R e d a k t o r , A d m i n i s t r a t o r itd.) na serwerze L D A P , można p r z e c h o w y w a ć tam n a z w ę użytkownika i hasło.
odateK LDAP A b y włączyć f u n k c j o n a l n o ś ć L D A P w systemie Joomla!, u r u c h o m o p c j ę Dodatki z m e n u Rozszerzenia w panelu administratora. W ł a ś c i w e rozszerzenie nosi n a z w ę Authentication — LDAP. Kliknij jego nazwę, aby wyświetlić listę parametrów, jak przedstawiono to na rysunk u 11.13. U s t a w wartość parametru Opublikowany na Tak, p o n i e w a ż d o m y ś l n i e dodatek jest wyłączony. ysunek 11.13. 'aramei/y iodatku LDAP imożliwiają iokłaćłną (onfigurację iostępu 1o serwera LDAP
Jeśli dany serwer L D A P obsługuje opcję s z y f r o w a n y c h połączeń, ustaw wartość parametru Negocjacja TSL na Tak. To spowoduje szyfrowanie połączenia z serwerem LDAP, co chroni przesyłane dane przed przechwyceniem. W pole oznaczone Podstawowa DN wprowadź nazwę wyróżniającą serwer L D A P (powinna być n i e p o w t a r z a l n a ) . P a r a m e t r o w i Szukaj wyrażenia n a l e ż y p r z y p i s a ć ciąg s t o s o w a n y przy w y s z u k i w a n i u n a z w y u ż y t k o w n i k a . P r z y k ł a d o w o w a r t o ś ć uid=[search] s p o w o d u j e w y s z u k a n i e n a z w y u ż y t k o w n i k a w k o l u m n i e uid. Pole DN użytkownika wykorzystywane jest w y ł ą c z n i e przy b e z p o ś r e d n i c h p o w i ą z a n i a c h , j e g o u s t a w i e n i e s k u t k u j e w y s ł a n i e m d o d a t k o w y c h danych podczas logowania, lista powinna zostać rozdzielona średnikami ( : ) , np. uid=[username];dc=mojafi rma:dc=com. Pola Użytkownik połączenia i Hasło połączenia powinny pozostać puste, o ile dostęp do serwera jest a n o n i m o w y . Parametry m a j ą c e w n a z w i e w y r a z M a p u j p o z w a l a j ą określić, które pola na serwerze L D A P b ę d ą zawierać dane niezbędna dla systemu logowania Joomla!.
300
Joomla!. Profesjonalne tworzenie stron W1NW
OpenLDAP Jeśli chcesz u r u c h o m i ć w ł a s n y serwer L D A P , m o ż e s z w y k o r z y s t a ć aplikację O p e n L D A P , darmową implementację standardu LDAP. Program dostępny jest dla systemów Linux, UNIX, M a c O S i BeOS, m o ż n a go pobrać ze strony d o m o w e j ( w w w . o p e n l d a p . o r g ) . Jeśli korzystasz z systemu Windows, aplikację możesz pobrać ze strony ILEX (http://download.bergmans.us/ openldap). Zwróć uwagę, że większość sieci opartych na platformie Windows wykorzystuje usługę Active Directory, która wspiera standard L D A P . W celu przetestowania serwera LDAP możesz zastosować dowolną, nowoczesną przeglądarkę. W y s t a r c z y w p r o w a d z i ć prefix / d a p w m i e j s c e t r a d y c y j n e g o http, w p i s u j ą c adres podobny d o poniższego: ldap://ldap.
itd. umich. edit
Jeśli wykonujesz wiele czynności związanych z L D A P , warto rozważyć instalację programu Luma, który jest narzędziem do przeglądania i testowania LDAP. Możesz pobrać go za darmo na stronie d o m o w e j (http://luma.sourceforge.net). Konfiguracja serwera LDAP nie należy do zadań prostych. Dlatego jeżeli nie masz doświadczenia z LDAP. to powinieneś zapoznać się z jedną z wielu doskonałych publikacji opisujących tę technologię. Wiele cennych informacji znajdziesz w książce Marka Wilcoksa Implementing LDAP.
Obsługa Obsługa strony jest równie ważna, jak właściwa instalacja. C M S w wielu aspektach przypomina o g r ó d , p o n i e w a ż n a l e ż y w y r y w a ć c h w a s t y , e k s t e r m i n o w a ć s z k o d n i k i i p r z y c i n a ć nawet najwspanialsze kwiaty. Dzięki utrzymywaniu systemu w dobrym stanie zachowasz dobrą wydajność. Dopuszczenie d o tego, aby n i e p u b l i k o w a n e artykuły przytłaczały system lub konta nieaktywnych użytk o w n i k ó w zachęcały hakerów, m o ż e zniweczyć wysiłki podczas instalacji systemu.
Czyszczenie systemu Baza danych Joomla! m o ż e z czasem ulec zaśmieceniu z p o w o d u ilości niepublikowanych artykułów, nieużywanych menu, nieaktywnych kont użytkownika itd. Czyszczenie systemu można rozpocząć w interfejsie administratora Joomla!. Sporo zadań związanych z czyszczeniem s y s t e m u z a j m u j e z b y t w i e l e c z a s u , jeśli j e s t p r z e p r o w a d z a n y c h z panelu administratora. C z ę ś ć z nich można w y k o n a ć szybko, bezpośrednio manipulując b a z ą M y S Q L . Zanim zabierzesz się do ręcznego czyszczenia systemu, sprawdź koniecznie, czy w katalogu rozszerzeń Joomla! ('extensions.joomla.org) istnieje rozszerzenie, które wykonuje dane zadanie. Rozszerzenia pozwalają obejść wiele ograniczeń
Rozdział 11. • Prowadzenie profesjonalnej strony
301
systemu. Na przykład Joomla! uniemożliwia usunięcie kategorii, dopóki wszystkie przypisane do niej artykuły nie zostaną usunięte. Zamiast ręcznie usuwać wszystkie artykuły, a następnie kategorię, możesz posłużyć się rozszerzeniem, które wykona to automatycznie.
Wykorzystywanie opcji Artykuły do znalezienia niepublikowanych artykułów O ile to możliwe, p o w i n i e n e ś w p r o w a d z a ć wszelkie z m i a n y lub u s u w a ć treści w y ł ą c z n i e z poziomu interfejsu administratora Joomla!. Dzięki temu w p r o w a d z o n e zmiany b ę d ą miały wpływ na sieć odnośników wewnątrz strony. Zostaniesz także powiadomiony o problemach, które m o g ą w y s t ą p i ć w s k u t e k danej akcji, np. wskutek s p a d k u w y d a j n o ś c i , jeśli w ł ą c z y s z rejestrowanie zapytań wyszukiwania. W opcji Artykuły w panelu administratora znajduje się lista wyboru, która pozwala ograniczyć wyświetlane artykuły do niepublikowanych pozycji. Badanie listy niepublikowanych artykułów p o w i n n o być p r z e p r o w a d z a n e regularnie (np. raz na sześć miesięcy), w t e d y m o ż n a mieć pewność, że baza danych nie jest zaśmiecona niepotrzebnymi treściami. Aby wygenerować listę, wybierz pozycję Niepublikowany, jak przedstawiono to na rysunku 11.14. Na ekranie pozostaną wyłącznie te artykuły, które nie zostały opublikowane. Rysunek 11.14. Wybierz pozycję Niepublikowany z rozwijalnej listy po prawej stronie ekranu
Bezpośredni dostęp do MySQL Ponieważ wszystkie dane p r z e c h o w y w a n e są w bazie M y S Q L , m o ż e s z także bezpośrednio m a n i p u l o w a ć materiałami. M o ż l i w e jest także (chociaż nie j e s t to zalecana opcja) ręczne w y c z y s z c z e n i e b a z y d a n y c h . N i e k t ó r e z a d a n i a ( s z c z e g ó l n i e te z w i ą z a n e z u s u w a n i e m rozszerzeń, które w y m a g a j ą u s u n i ę c i a p l i k ó w ) p o w i n n y b y ć p r z e p r o w a d z a n e w y ł ą c z n i e z poziomu interfejsu administratora. Inne zmiany, zwłaszcza te dotyczące dużej liczby wpisów lub usunięcia poszczególnych tabel, można przeprowadzić wyłącznie za p o m o c ą M y S Q L . Bezpośrednie modyfikowanie bazy danych Joomla! może być bardzo niebezpieczne, jeśli nie rozumiesz w pełni wprowadzanych zmian. Jeśli masz wątpliwości związane z daną modyfikacją — nie przeprowadzaj jej. Pamiętaj, aby przed wprowadzeniem dowolnych zmian zrobić kopię zapasową całej bazy. W przypadku katastrofalnej pomyłki będziesz w stanie przywrócić bazę i ponownie uruchomić stronę.
302
Joomla!. Profesjonalne tworzenie stron W1NW
Wyszukiwanie starych materiałów Lista artykułów posortowana według dat ostatnich modyfikacji pozwala zlokalizować artykuły, które d a w n o nie były uaktualniane. Dzięki temu m o ż e s z w p r o w a d z i ć zmiany w ich treści albo usunąć j e ze strony. M o ż e s z w y s z u k a ć stare artykuły, u r u c h a m i a j ą c poniższe zapytanie S Q L i zmieniając datę w klauzuli WHERE: SELECT * FROM jos_content WHERE modified <
'2007-01-01'
Wyszukiwanie nieaktywnych użytkowników W systemie Joomla! p r z e c h o w y w a n a jest data ostatniego logowania wszystkich zarejestrowanych użytkowników. Odpowiednie zapytanie względem tabeli użytkowników wygeneruje listę u ż y t k o w n i k ó w , którzy od p e w n e g o czasu nie odwiedzali strony. Jednym z najlepszych sposobów zagospodarowania tej listy jest wysłanie e-maili w celu przypomnienia im o stronie i zaproszenia do powrotu na nią. Listę nieaktywnych u ż y t k o w n i k ó w możesz w y g e n e r o w a ć , uruchamiając poniższe zapytanie S Q L i zmieniając datę w klauzuli WHERE: SELECT * FROM jos_users WHERE lastvisitDate <
'2007-01-01'
Wyszukiwanie pustych metadanych J e d n y m z istotnych e l e m e n t ó w w p ł y w a j ą c y c h na p o z y c j ę T w o j e j strony w r a n k i n g a c h w y s z u k i w a r e k i n t e r n e t o w y c h s ą pola z a w i e r a j ą c e m e t a d a n e . D w a z nich (opis artykułu i słowa k l u c z o w e ) s ą n a j w a ż n i e j s z e dla r o b o t ó w internetowych. Proste zapytanie M y S Q L pozwoli Ci stworzyć listę artykułów, dla których nie ustawiono metadanych, po to, by naprawić problem. Aby wygenerować listę artykułów, dla których nie ustawiono metadanych, uruchom poniższe zapytanie SQL: SELECT * FROM jos_content WHERE metakey = "
or metadesc = ''
Wyszukiwanie niepublikowanych artykułów i menu Śledzenie niepublikowanych elementów może stanowić spore wyzwanie na dużej, popularnej i d o j r z a ł e j stronie Joomla!. Często artykuły u s t a w i a n e są j a k o niepublikowane, ponieważ nie w i a d o m o , czy nie b ę d ą p o t r z e b n e w przyszłości. Po u p ł y w i e p e w n e g o czasu element (czy to menu, czy artykuł) prawdopodobnie nie będzie już wykorzystywany. W tym momencie najlepiej usunąć go z bazy danych, aby zwiększyć wydajność. M o ż e s z znaleźć niepublikowane elementy, uruchamiając poniższe zapytania SQL: SELECT * FROM jos_content WHERE state = 0 SELECT * FROM josjnenu WHERE published = 0 SELECT * FROM jos_plugins WHERE published = 0
Rozdział 11. • Prowadzenie profesjonalnej strony
303
SELECT * FROM jos_components WHERE enabled = O SELECT * FROM jos_modules WHERE published = 0
Wyszukiwanie najnowszych głosów w sondzie Istnieje grupa zapytań, którą możesz wykorzystać, aby określić niedawną działalność użytkowników na stronie. Przykładowo możesz chcieć zobaczyć głosy nadesłane w ciągu ostatnich 10 dni, aby stwierdzić, czy n a j n o w s z a sonda jest popularna. W y k o n a n i e tego zapytania w MySQL nie jest trudne. Najpierw musisz znaleźć interesujący rekord w tabeli pol Is i zanotować jego id: SELECT * FROM jos_polls
Poniższe zapytanie spowoduje wyświetlenie głosów wysłanych w ciągu ostatnich 10 dni: SELECT * FROM jos_poll_date WHERE DATE_SUB(CURDATE().
INTERVAL 10 DAY) <= date:
Wyszukiwanie pustych sekcji i kategorii Badając organizację strony, dobrze jest określić, które sekcje i kategorie są niewykorzystywane. Następnie można j e usunąć lub połączyć z innymi, aby poprawić organizację strony. Możesz znaleźć nieużywane sekcje, uruchamiając poniższe zapytanie SQL: SELECT * FROM jos_sections LEFT JOIN jos_content ON jos_content.sectionid = jos_sections.id WHERE jos_content.sectionid IS NULL and jos_sections.published=l
Aby znaleźć puste kategorie, uruchom: SELECT * FROM jos_categories LEFT JOIN jos_content ON jos_content.catid = jos_category.id WHERE jos_content.catid IS NULL and jos_categories.published=l
Podsumowanie Zarządzając profesjonalną stroną Joomla!, musisz pamiętać, że T w o j e działania powinny odpowiadać założeniom przedsięwzięcia. W tym rozdziale opisano sposoby konfiguracji i instalacji Joomla!, a w szczególności: •
Testowanie fragmentów kodu za pomocą interfejsu tekstowego PHP.
•
Podstawy tworzenia i przywracania kopii zapasowych systemu Joomla!.
•
Tworzenie wirtualnych serwerów w aplikacji Apache.
•
Dostrajanie MySQL w celu najlepszej wydajności, w zależności od typu instalacji Joomla!.
304
Joomla!. Profesjonalne tworzenie stron W1NW •
Stosowanie uwierzytelniania LDAP dla łącznego zarządzania kontem użytkownika dla różnych usług (np. poczta).
•
Uruchamianie zapytań M y S Q L w celu wygenerowania listy niepublikowanych artykułów, nieaktywnych użytkowników, starych materiałów, nieustawionych metadanych itd.
Głównym punktem tego rozdziału było zarządzanie materiałami na stronie. Joomla! zawiera jednak także funkcje łączące z zewnętrznymi zasobami. W rozdziale 12. opisano sposoby łączenia i pozyskiwania treści zewnętrznych — od kanałów RSS, po screen scraping.
12 Łączenie z zasobami zewnętrznymi Ż a d n a strona W W W nie p o w i n n a być s a m o t n ą w y s p ą . Dzięki J o o m l a ! szczególnie łatwo możesz połączyć witrynę z zewnętrznymi zasobami, np. kanałami RSS, transakcjami e C o m merce, za pośrednictwem technologii EDI (Electronic Data Interchange) czy bazami danych, pobierając dane w formacie X M L . Stworzono dosłownie dziesiątki rozszerzeń, które służą do wykorzystania zewnętrznych zasobów. Jeśli nie możesz znaleźć rozszerzenia, które m a wymagane możliwości komunikacyjne, lub musisz skorzystać z niestandardowego protokołu, platforma programistyczna Joomla! ułatwia stworzenie własnej aplikacji. W tym rozdziale dowiesz się, jak skonfigurować stronę Joomla!, aby pobierać treści zewnętrzne, a także j a k u t w o r z y ć w ł a s n y k a n a ł R S S . D o w i e s z się, j a k u z u p e ł n i ć J o o m l a ! , dzięki zastosowaniu rozszerzeń, o programy partnerskie. W końcu, wykorzystując nabyte umiejętności programistyczne, stworzysz własne rozszerzenia, które wykorzystują dostępne API (implementacja Google Maps) lub interfejs oparty na formacie X M L (usługa wyszukiwania k o d ó w zip USPS), a także napiszesz prosty program typu screen scraper, którego zadaniem będzie pobranie danych umieszczonych na innej stronie w formacie H T M L .
Pobieranie zewnętrznych materiałów Możesz wzbogacić treść własnych artykułów na stronie Joomla!, łącząc j e z zewnętrznymi materiałami i k a n a ł a m i R S S na i n n y c h s t r o n a c h . I n f o r m a c j e p o j a w i a j ą c e się w k a n a ł a c h automatycznie uzupełniają artykuły na T w o j e j stronie.
Kanały RSS J e d n ą z technologii, która w n a j w i ę k s z y m s t o p n i u w p ł y n ę ł a na a u t o m a t y z a c j ę w y m i a n y i n f o r m a c j i , są kanały RSS. U ż y t k o w n i k o d w i e d z a j ą c y d a n ą stronę (np. www.CNN.com) m o ż e p r z e g l ą d a ć d o s t ę p n e m a t e r i a ł y , o ile j e s t p o d ł ą c z o n y d o internetu. Jeśli na stronie dostępny jest kanał RSS, o d w i e d z a j ą c y m o ż e s u b s k r y b o w a ć go, co s p o w o d u j e p o b i e r a n i e podobnych treści.
306
Joomla!. Profesjonalne tworzenie stron W1NW Po kliknięciu o d p o w i e d n i e g o o d n o ś n i k a ( c z ę s t o o p i s a n y j a k o „ R S S F e e d " , „ R S S X M L " lub „Atom Feed") zostaje uruchomiona aplikacja na komputerze użytkownika, która nosi nazwę agregator. P r o g r a m o w i p r z e k a z y w a n y j e s t adres w s k a z u j ą c y na plik w f o r m a c i e X M L , który gra rolę spisu artykułów umieszczonych na stronie. Oprócz nagłówków mogą znajdować się w n i m f r a g m e n t y lub całe a r t y k u ł y . W z a l e ż n o ś c i od u s t a w i e ń agregatora m o ż e on a u t o m a t y c z n i e pobierać n o w e materiały. Treść kanału jest z a p i s y w a n a na dysku twardym komputera, dlatego można przejrzeć j ą później. Jak przedstawiono na rysunku 12.1, klient poczty Mozilla Thunderbird ma funkcje agregatora, kanały RSS wyświetlane są w podobny sposób jak konta e-mailowe. Aby dodać nowy kanał R S S , w y b i e r z Plik/Nowy/Konto, a p o u r u c h o m i e n i u Kreatora Kont z a z n a c z o p c j ę RSS: Aktualności i błogi. Z o s t a n i e d o d a n y n o w y f o l d e r , n o s z ą c y n a z w ę Aktualności i błogi, d o k t ó r e g o m o ż e s z d o d a w a ć k a n a ł y R S S . P r o g r a m m a kilka p a r a m e t r ó w w p ł y w a j ą c y c h na obsługę kanałów (częstotliwość uaktualnień, sposób prezentacji itd.).
Rysunek 12.1. Klient poczty Thunderbird wyświetla kanały RSS iv formie przypominającej przeglądanie listów elektronicznych
4* Gazeia.pl Plik
Edycja
4
Pobierz
artykuły Widok
. /
Napisz
Wiadomość
H H K 3 3 D Narzędzia
Pomoc
L
.
Adresy
Wszystkie foldery +
Thunderbird
Przejdź
•
«
Poczta A k t u a l n o ś c i i błogi
y
Temat
U
X
Usuń
¿S Nadawca
Data
F r a n c j a p o t ę p i a d e c y z j ę Iz...
Gazeta.pl - a r t y k u ł y
03:27
; P r e z y d e n c j a UE: O p e r a c j a I...
Gazeta.pl - a r t y k u ł y
03:27
Gazeta.pl - a r t y k u ł y
03:27
Gazeta.pl - a r t y k u ł y
03:27
I z r a e l s k i e w o j s k a w Strefie...
f | Kosz + fi^y L o k a l n e f o l d e r y
t'
Putin i Miedwiediew poszli...
.
' S t r o n a z p o r n o g r a f i ą zami... T r u d n e w a r u n k i na drogac...
Gazeta.pl a r t y k u ł y
03:27
Gazeta.pl
03:27
artykuły
te
Witamy
w
-
R
fev-
•śpm
Thunderbirdz
Program p o c z t o w y Mozilla Thunderbird ma więcej możliwości niż kiedykolwiek wcześniej. Teraz jeszcze łatwiej jest zarządzać
x B
f
2¡
MB
p r
wiadomościami w w y g o d n y i bezpieczny sposób.
Nieprzeczytane: 8
Razem: 8
SL8TR [IDLE]
T a k ż e przeglądarka Mozilla Firefox zawiera p e w n e e l e m e n t y agregatora. Jeśli na stronie, którą odwiedzasz, dostępny jest kanał RSS, na pasku adresu zostanie wyświetlona symbolizująca to ikona (co zilustrowano na rysunku 12.2). W tej sytuacji wystarczy kliknąć ikonę i w y b r a ć opcję subskrypcji za p o m o c ą dynamicznych zakładek, a nowe wpisy b ę d ą pobierane automatycznie.
Format kanałów RSS Istnieją dwa popularne standardy kanałów na stronach W W W : RSS (Really Simple Syndication) i A t o m . O b a f o r m a t y o p a r t e s ą na X M L - u , k a n a ł y A t o m m a j ą rozszerzenie ,xml (np. atom.xml), a kanały RSS m o g ą mieć rozszerzenie .xml lub .rss. Przez długi czas popularność obu formatów była porównywalna. Ostatecznie jednak okazało się, że kanały R S S stały się d o m i n u j ą c y m r o z w i ą z a n i e m , a wiele stron obsługujących oba f o r m a t y porzuciło kanały Atom.
Rozdział 12. • Łączenie z zasobami zewnętrznymi Rysunek 12.2. Jeśli na stronie dostępny jest kanał RSS, na pasku adresu w przeglądarce Firefox zostanie wyświetlona ikona, której kliknięcie uruchamia opcję subskrypcji
Plik
Edycja
Widok -
Historia
¿ê?
- ',"'!
Zakładki $
Narzędzia
307
Pomot
> -
http://ioomiajumpstart.com/
¡¡g-;
»iySQl :; SeiectaMinor
Joomla Tutorial - Extensions Part 2: Installing Components
MAIN MENU
» i . w h y do ! need Joomla? • 2. How is Joomla!
\
organised?
In F a r t l . y o u installed a m o d u l e to the Joornla s y s t e m . Part 2 will t a k e y o u ...through the q u i c k a n d simple process of installation a n d c o n f i g u r a t i o n o f a
i ^ j ^ ^ j ^ c o m p o n e n t . Components a r e the d o m i n a n t t y p e of extension a n d form the
. 3- Joomla!
backbone of m u c h of t h e extensible f u n c t i o n a l i t y a v a i l a b l e to t h e Joomla CMS.
Poniżej umieszczono przykładowy adres kanału R S S dla w i a d o m o ś c i w portalu Gazeta.pl: http://rss.gazeta.pl/pub/rss/wiaclomosci.xml Nagłówek i kilka przykładowych wpisów kanału RSS w y g l ą d a j ą tak: Gazeta.pl
version="2.0">
- artykuły
<1 i nk>http: //serwi sy.gazeta.pl /rss/0.54825,3686466.html Najnowsze artykuły z Gazeta.pl <1anguage>pl
reserved]]>
pl
reserved]]>
Gazeta.plhttp://www.gazeta.pl/i mg/w/l/gazeta.gi f <11nk>http://www.gazeta.pl <1 i nk>http://wiadomosci.gazeta.pl /Wi adomosci/1.80277.6063047.Bi esi adowali_w_ekskluzy wnej_restauracji_i_ni e_zapl aci 1 i.html?skad=rss N, 14 gru 2008 20:46:00 GMThttp://wi adomosci.gazeta.pl /Wiadomosci/1.80277.6063047.Bi esi adowali _w_ekskluzy wnej_restauracji_i_nie_zaplaci1 i.html
Joomla!. Profesjonalne tworzenie stron W1NW <1 i nk>http ://wi adomosci. gazeta. pl /Wi adomosci /1.80277,6063045. Francja_obfi te_opady_ dwi e_ofi ary_smi ertel n e _ d o m y . html ?skad=rss1 i nk> N. 14 gru 2008 20:45:00 GMThttp: //wi adomosci. gazeta. pl /Wi adomosci /1.80277.6063045. Francja_obfite_opady_ dwi e_of i ary_smi ertel n e _ d o m y . html
Na początku pliku z n a j d u j ą się informacje n a g ł ó w k o w e dotyczące kanału RSS. Poniżej jest sekcja zawierająca banner reprezentujący kanał RSS. Ostatecznie wewnątrz elementu s ą informacje o artykułach, które wyświetlane są w agregatorze. Kanały RSS stają się coraz bardziej zaawansowane. Podcasty (kanały RSS dla plików audio) i vodcasty (kanały RSS dla plików wideo) wykorzystują praktycznie identyczne pliki jak standardowe kanały. Popularne agregatory multimedialne (np. ¡Times firmy Apple) wykonują dokładnie te same operacje (np. sprawdzanie kanału pod kątem nowych treści, pobieranie nowych materiałów), które wykonują standardowe czytniki kanałów RSS.
Moduł subskrypcji kanałów RSS w Joomla! M o d u ł Feed u m o ż l i w i a wstawienie zawartości kanału RSS bezpośrednio na T w o j e j stronie J o o m l a ! . R y s u n e k 12.3 przedstawia m o d u ł z a t y t u ł o w a n y N a j n o w s z e w i a d o m o ś c i . Moduł wyświetla listę n a j n o w s z y c h wiadomości opublikowanych na portalu Gazeta.pl, na stronie głównej witryny Joomla!. Z a każdym razem, kiedy użytkownik wchodzi na stronę zawierającą m o d u ł Feed, z e w n ę t r z n y plik k a n a ł u R S S j e s t p o b i e r a n y , p r z e t w a r z a n y , a następnie w y ś w i e t l a n y w o d p o w i e d n i m miejscu. Rysunek 12.3. Wstawienie na stronie modułu Feed powoduje automatyczne wyświetlanie nowych pozycji natychmiast po dodaniu ich do kanału RSS
Joomla! makes it easy to launch a Web site of any kind. Whether you want a brochure site or you are building a large online community, Joomla! allows you to deploy a new site tn minutes and add extra functionality as you need it The hundreds of available Extensions will help to expand your site and allow you to deliver n e w services that extend your reach into the Internet A b o u t Jooml.i:
Featuie:
ll«M$
The Community
Najnowsze wiadomości • Horn«
* Sondaż: 52 proc cila K ' i wzrost poparcia dia SL.D Gdyby wybory odbyty się dziś, PO zdobyłaby 52 proc. głosów - wynika z sondażu TNS OBOP dla programu Forum w TYP Info F;ośnie też poparcie dla SLD, który mógłby liczyć na 12-procentowe poparcie. • Bus zderzył «¡ę 7 ,1'Rh -k"j!->a o--.ot-a zętinęłA. .^t ranni Bus, którym jechały cztery osoby w tym dziecko, zderzył się z samochodem osobowym w woj. pomorskim. Jedna osoba zginęła, osiem zostało rannych.
• Joomla? L i t e » • M o i e about Jooml.i! • FAO • The Hews • Web Link« • Hews Feeds
i I 1
• J o o m l a Home • Joomla! Forums * J o o m U : Heiß
» Wyprosili muzułmanów z samolotu Tylko rozmawiał;.
Muzułmańska r odzina została wyproszona z samolotu po tym jak współpasażerowie usłyszeli ich rozmowę o najbezpieczniejszym miejscu na pokładzie - informuje CNN. Linie lotnicze odmówiły rodzinie przebukowania biletów mimo że agenci FBI uznali sprawę za nieporozumienie. I I i
Welcome to the Frontpage
Popular
Rozdział 12. • Łączenie z zasobami zewnętrznymi
309
Aby aktywować moduł Feed, otwórz panel administratora i wybierz opcję Moduły. Z n a j d ź pozycję oznaczoną Feed Display i kliknij ją. Zostaną wyświetlone aktualne ustawienia m o d u ł u — przedstawiono to na rysunku 12.4. lysunek 12.4. Jstawienia riodułu określają, ctóry kanał RSS iraz w jaki iposób będzie wyświetlany
M Podgląd
Modul:
V*1 Zapitz
[Zmień]
' O
V Zastosuj
Q
Zamknij
Pi efei erwje Typ. modułu: mod_Feecł
Pokaż tytuł Wazony
O Nie (?) Q ^
P.«
T.*tuł Najnowsi
0
.,(..; > ar:V'; http /Ass gazeta pl/pub/rssA«jiac K«.mt I
Konfigurację modułu należy rozpocząć od ustawienia tytułu modułu, który będzie pojawiać się nad listą w p i s ó w . W t y m p r z y k ł a d z i e u s t a w i o n y został tytuł Najnowsze wiadomości. Z m i e ń p o z y c j ę m o d u ł u , aby nie p o j a w i a ł się w l e w e j k o l u m n i e , p o d i n n y m i m o d u ł a m i . Możesz wybrać pozycję right, aby wpisy pojawiały się w prawej kolumnie. W tym przykładzie została ustawiona pozycja userl, aby nagłówki były wyświetlane w górnej ś r o d k o w e j części strony. D o d a t k o w e u s t a w i e n i a , u m i e s z c z o n e w p a n e l u Parametry modułu, p o z w a l a j ą w p ł y w a ć na wyświetlanie kanału. O p c j o n a l n y p a r a m e t r Przyrostek klasy modułu p o z w a l a ustawić przyrostek dla stylów CSS (dodawanych np. do t a b l e . m o d u ł e t a b l e ) , w ten sposób m o ż e s z wpłynąć na wygląd modułu niezależnie od reszty strony. Kolejny parametr pozwala wprowadzić adres kanału RSS. W pole oznaczone Adres kanału w p r o w a d ź dowolny, p o p r a w n y adres URL, który w s k a z u j e kanał w formacie R S S lub Atom. Odnośniki do różnych kanałów m o ż e s z z n a l e ź ć w k a t a l o g u RSS. Listę n a j p o p u l a r n i e j s z y c h k a t a l o g ó w z n a j d z i e s z na stronie R S S Specifications (www.rss-specijications.com/rss-directory.htm). Ponieważ p r z y k ł a d o w y w ą t e k z a w i e r a w p i s y w j ę z y k u p o l s k i m , nie m a p o t r z e b y w ł ą c z a n i a opcji Kanał RTL (right-to-left — od prawej do lewej), która jest przydatna dla kanałów w językach takich jak mandaryński. Wyłącz opcje Tytuł i Wprowadzenie. Odpowiadają one za wyświetlanie informacji dołączonych przez publikującego kanał, przez co nie masz nad nimi kontroli. W przypadku kanału dużego portalu, jakim jest Gazeta.pl, nie powinieneś martwić się, że na stronie pojawią się niepożądane treści, jednak w przypadku niewielkich, niekomercyjnych kanałów RSS (pomimo ciekawych materiałów) ryzykujesz pojawienie się na stronie obraźliwych komunikatów. Z w r ó ć uwagę, że opcja Tytuł nie w p ł y w a na wyświetlanie tytułu modułu (na którego treść m a s z wpływ).
310
Joomla!. Profesjonalne tworzenie stron W1NW M o ż e s z także wybrać, czy chcesz, aby na stronie pojawiał się obrazek symbolizujący kanał. W większości przypadków opcja Grafika pozostanie wyłączona, ponieważ często powoduje wyświetlenie logo autora kanału, co m o ż e wzbudzić wątpliwości u niektórych odwiedzających T w o j ą stronę. Poza tym niektóre kanały RSS obsługiwane są przez powolne serwery, co wydłuża czas wyświetlania Twojej strony. Dlatego jeśli chcesz skrócić czas wyświetlania modułu Feed, wyłącz to ustawienie. Parametr ilość wiadomości pozwala określić liczbę wyświetlanych pozycji. W tym wypadku, p o n i e w a ż lista m a być wyświetlana w centralnej części strony głównej, liczbę ograniczono do trzech. Opcja Wstępy pozwala określić, czy wyświetlane b ę d ą wyłącznie nagłówki, czy także krótki opis (np. skrócona treść artykułu). Ustawienie Ilość słów pozwala ograniczyć wyświetlaną liczbę słów ze wstępu. Domyślne ustawienie (0 — zero) oznacza, że cały wstęp zostanie umieszczony pod nagłówkiem. Aby jedynym modułem wyświetlanym w centralnej części strony byl moduł wiadomości, należało ukryć moduł Lastest News, ponieważ jest on domyślnie do pozycji userl, i z tego powodu zajmuje cenne miejsce na stronie.
Najnowsze przypisany
T o by było na tyle! Z a każdym razem, kiedy użytkownik otworzy stronę główną, na stronie pojawią się najnowsze wpisy z ustawionego kanału RSS wraz z odnośnikami do właściwych artykułów (w zależności od ustawień m o g ą pojawić się też wstępy). Funkcjonalność związana z kanałami RSS w Joomla! nie jest ograniczona wyłącznie do odczytywania kanałów. Z a p o m o c ą Joomla! możesz udostępnić własny kanał.
Moduł publikacji kanałów RSS System Joomla! zawiera łlinkcję, która pozwala Ci udostępnić własny kanał RSS. W ten sposób u ż y t k o w n i c y m o g ą być powiadamiani o dodaniu nowych materiałów. Po uruchomieniu opcji Moduły wybierz pozycję opisaną Syndication, aby wyświetlić aktualne ustawienia. U p e w n i j się, że m o d u ł został o p u b l i k o w a n y i przypisany do lewej kolumny. W p a n e l u p a r a m e t r ó w w p r o w a d ź w p o l e Tekst krótki opis, który p o j a w i się przy ikonie k a n a ł u R S S — p r z e d s t a w i o n o to na r y s u n k u 12.5. M o ż e s z także w y b r a ć f o r m a t kanału, c h o c i a ż zalecane jest p o z o s t a w i e n i e d o m y ś l n e g o ustawienia RSS 2.0. Zapisz ustawienia modułu. O d tego m o m e n t u T w o j a strona zawiera kanał RSS! Jeśli przejdziesz teraz na stronę główną, zauważysz, że pojawiła się na niej ikona symbolizująca kanał RSS wraz z odnośnikiem. Jak pokazano na rysunku 12.6, w przeglądarce Firefox i n f o r m a c j a o tym, że strona zawiera kanał R S S , w y ś w i e t l a n a jest także na pasku adresu. Kanał RSS ma odnośniki do artykułów przypisanych do strony głównej, uporządkowanych w e d ł u g daty ( n a j n o w s z e wpisy p o j a w i a j ą się j a k o pierwsze). Pamiętaj, aby po umieszczeniu kanału RSS na stronie zarejestrować go przynajmniej w j e d n y m katalogu (lista na http://www.rss-specifications.com/rss-directory.htm). W przeciwieństwie do wyszukiwarek takich jak Google, które w y s z u k u j ą nowe treści pojawiające się na stronie, katalogi kanałów RSS w y ś w i e t l a j ą n o w e informacje dla tych stron, które wcześniej zostały
Rozdział 12. • Łączenie z zasobami zewnętrznymi lysunek 12.5. parametry modułu Syndication wpływają na kanał RSS
311
TiliriilllHMiaiÜiiMi 3*8 Podgląd
*
Modul: [Zmień]
0 ii
V
Q
»referencje
> Parametry ntodt ilu
Typ modułu. mod_syndicate Ty!ul r--.:-i:aj twtoi
Kanal RSS {*} Nie O
Włączony Q
Nje
®
Tak
Tak
36 Wyświetla graficzne odnośniki do generatorów kanału informacyjnego RSS Twojej witryny. Umożliwia pobieranie i wyświetlanie na innych stronach nagłówków wiadomości z Twojej uuitryny. Pi zypisAiiie m e n u menu'
Rysunek 12.6. Ikona symbolizująca kanał RSS wyświetlana jest przez moduł Syndication, pojawia się także na pasku adresu
O
(*) Wszystkie { ) B.ak Wszystl
Zaznaczone
Wełcome lo the Frontpage - Mozilla Firefox
i plik £dycja Widok yistoria Zakładki Narzędzia Pomoc .
m
http://localhost/joomla2/
¿4 Jo0mla!
With a library of hundreds of free Exteoiflorrs, you can add what you need » site grows Don"! wait, look throughittle Joomla! Extensions library today.
About Joomla!
The Community
Najnowsze wiadomości » Sondaż: 52 proc- da PO i wzrósł popaicia dla SLD Gdyby wybory odbyt/ się dziś, PO zdobyłaby 52 proc. głosów - wynika z sondażu TNS OBOP dla programu Forum w TVP Info. Rośnie też poparcie dla SLD, który mógłby liczyć na 12-procentowe poparcie • Bus zderzył -;ię z auch Jedna o-:-oba zginęła, są ranni Bus, którym jechały cztery osoby w tym dziecko, zderzył się z samochodem osobowym w yyoi. ponflHffdm. ^tedna osoba zgjnpjp. yflpnych, .,
Popular
0
#
zarejestrowane. Zanim jednak umieścisz stronę w katalogu, upewnij się, że kanał zawiera przyzwoitą ilość materiałów, które są regularnie uaktualniane. Większość katalogów pozwala użytkownikom oceniać kanały RSS, dlatego jeśli Twój kanał będzie kiepski, inni użytkownicy szybko się o tym dowiedzą.
Rozszerzenie Auto Articles 3000 Kwestię sporną stanowi pytanie, czy strona zyskuje na pozycji w rankingach wyszukiwarek dzięki umieszczeniu treści pochodzących z kanałów RSS. Wielu ekspertów od SEO (search engine optimizatiori) twierdzi, że roboty internetowe rozpoznają treści pobierane z kanałów RSS i ignorują je. Jeśli jest to prawda, to wpisy pochodzące z kanałów RSS nie są traktowane jako część strony, a w konsekwencji nie są indeksowane przez roboty internetowe.
312
Joomla!. Profesjonalne tworzenie stron W1NW Jednym ze sposobów uzupełnienia treści strony (i zdobycia lepszej pozycji w rankingach wyszukiwarek) jest zastosowanie rozszerzenia o nazwie Auto Article 3000, którego działanie zilustrowano na rysunku 12.7. Rozszerzenie to pobiera artykuły na dane tematy z archiwum artykułów ezine (electonic magctzine — elektroniczny magazyn), a następnie umieszcza je w Twojej bazie danych Joomla!. W przeciwieństwie do wątku, który dynamicznie pobiera zewnętrzne materiały, artykuły pobrane za pomocą Auto Article 3000 zapisywane są na Twoim serwerze, a także uaktualniane, jeśli zostanie znaleziona nowsza wersja.
Rysunek 12.7. Rozszerzenie Auto Articles 3000 wyświetla pobrane artykuły, przechowywane w bazie danych Joomla!
C o m p u t e r s and T h e Internet
L e g a l Mattel s
more. Public Relations and the Internet CCMP / BSCI Exam Tutorial: IP Version 6 Zero Compression Cisco CCNACCMP Home Lab Tutorial: Cabli g Your Access Server Site P r o m o t i o n
more. Calling a Lawyer Should Be a Private Home Sellers First Move The Lemon Law In Florida - Stating The Law As It Affects Consumers The Motion Picture Association Of America And Copyrights Wei) Development
more. SEO 1 ,2,3 for Dummies Using Your Rotator Site as an Online Secrets ry increase Your Traffic For Free
more Dedicated Server Is Better Than Shared Server Finally, Someone Made The Web Design Process Easy To Understand The Power of Effective Brochures
W i iting
more. Building A Rock Solid Query Letter Publishers Are Standing In Line To Publish Yc u What Is In An Article That Makes It Good Powered by : Free Eïine Aticles Search::
| s e a r c h now... j
Auto Articles 3000 to pakiet komponentów (jeden dla części frontowej, drugi dla panelu administratora) oferowany jako darmowa usługa firmy Elerion, Ltd. Podstawowa instalacja powoduje wprowadzenie 230 artykułów do bazy danych Joomla!. Nowe są automatycznie pobierane w regularnych odstępach czasu (domyślnie jest to 30 minut). Rozszerzenie Auto Articles 3000 możesz pobrać na stronie: www. articles3000.
com
Możesz określić tematykę pobieranych artykułów, korzystając z odpowiedniej opcji w panelu administratora, jak to przedstawiono na rysunku 12.8. Niestety, artykuły pobrane za pomocą komponentu nie są przechowywane w ten sam sposób, jak zwykłe artykuły, w tabeli jos_content. Oznacza to, że nowe materiały są niedostępne dla większości funkcji Joomla! (np. wyszukiwania), a także innych rozszerzeń (np. tych odpowiedzialnych za tworzenie mapy strony). Rozszerzenie przechowuje pobrane artykuły w tabeli jos_a3000_articles, w bazie danych Joomla!. Pamiętaj jednak, że j e d n ą z cudownych cech open source jest jego otwartość! Masz pełny dostęp do kodu źródłowego i danych większości rozszerzeń. W tym przypadku oznacza to, że możesz ręcznie skopiować artykuły pobrane przez komponent Auto Articles 3000 do tabeli jos_content zawierającej normalne artykuły Joomla!. Musisz tylko pamiętać, żeby odpowiednio dopasować wartość niektórych pól, takich jak ID sekcji i kategorii (odpowiednio sectionid i catid), aby artykuły zostały odpowiednio zapisane. Kopiowanie artykułów można wykonać, stosując instrukcję MySQL INSERT INTO. Informacje, jak skonstruować odpowiednie zapytanie, znajdziesz na stronie: http: //dev. mysql. com/doc/refman/5.0/en/insert-select,
html
Rozdział 12. • Łączenie z zasobami zewnętrznymi lysunek 12.8. N części administracyjnej •ozszerzenia vożna wybrać "ematykę pobieranych artykułów
313
Categories manager Current Status
j Category A u t o and Trucks
O
Business and Finance
Q
J R e q u i r e d status •
: Computers and T h e Ir
Fùod and Drink
Q 0 O
Gadgets and Oremos
9
Health
Q Q
Education Family
Leg3i Matte
U
Marketing
Q
• 0 •
• • • • • • 0 •
•
Kolejnym sposobem ingerencji w funkcjonalność rozszerzenia jest zmiana częstotliwości pobierania artykułów. Możesz tak j ą ustawić, aby artykuły były pobierane częściej niż co 30 minut. Nie jest to możliwe z poziomu interfejsu administratora. Zmiana tego typu wymaga ingerencji w kod źródłowy. Otwórz plik zawierający kod komponentu w edytorze tekstu, możesz go znaleźć (względem głównego katalogu Joomla!) w: 1 components
\com_a3000\a3000.php
Poszukaj w pliku linii, która przypomina poniższą: if ( t i m e O
- $last_checked > 1800) {
Wartość parametru time zwracana jest w sekundach, więc wartość 1800 odpowiada 30 minutom. Zmień tę liczbę według upodobań.
Urządzanie programami partnerskimi Programy partnerskie to najpopularniejszy sposób zarabiania na prowadzeniu strony W W W . Webmaster podpisuje umowę z daną firmą, np. Google lub Amazon, przez co zgadza się na wyświetlanie reklam na swojej stronie. Za każdym razem, kiedy odwiedzający kliknie reklamę lub kupi jakiś przedmiot, webmaster otrzymuje wynagrodzenie. Programy tego typu są na tyle dochodowe, że duże strony zarabiają dosłownie tysiące dolarów miesięcznie wyłącznie z programów partnerskich. Joomla! może obsługiwać większość popularnych programów partnerskich za p o m o c ą rozszerzeń, które wstawiają niezbędny kod (HTML, często także JavaScript) w treści strony. Aby uruchomić na stronie dany program partnerski, wystarczy zainstalować odpowiednie rozszerzenie, ustawić jego parametry, aby odpowiadały usłudze, a na końcu wybrać miejsce na stronie, gdzie powinny pojawiać się reklamy.
314
Joomla!. Profesjonalne tworzenie stron W1NW
Program partnerski Google AdSense Jednym z najpopularniejszych programów partnerskich w internecie jest AdSense firmy Google. Usługa polega na umieszczeniu na stronie kodu, który wyświetla reklamy powiązane z treścią strony. Za każdym razem, kiedy użytkownik kliknie którąś reklamę, właściciel strony dostaje pewną kwotę. Łącznie może uzbierać się z tego spora suma, jeśli strona jest wyjątkowo popularna lub reklamy związane z tematyką strony są szczególnie drogie. Aby skorzystać z reklam AdSense, musisz się najpierw zarejestro www.google,
com/adsense
Po pierwszym uruchomieniu konta Google będą wyświetlane wyłącznie społeczne ogłoszenia (zobacz rysunek 12.9), dopóki pracownik Google nie zbada Twojej strony. Po potwierdzeniu zgodności z warunkami umowy (brak pornografii, nielegalnych materiałów itd.) zostaną wyświetlone płatne reklamy. Rysunek 12.9. Zanim treść strony zostanie zweryfikowana przez pracowników Google, będą wyświetlane wyłącznie ogłoszenia społeczne
» m Today Help Rebuild Lives & Communities in Hurricated States
Have you heard about the Nuts and Bolts Filmmaking book from Focal Press? This book opens the world of professional moviemaking to guerilla filmmakers everywhere. Not only Is the book full of Hollywood techniques, most of the equipment shown in the book can be constructed for under $30. Click on the above link
Program AdSense można także konfigurować, np. łączyć materiały w oddzielne „kanały", co pozwala monitorować reklamy w różnych częściach strony. Zarządzanie kontem odbywa się z poziomu strony W W W , co zilustrowano na rysunku 12.10. Rysunek 12.10. Ekran administracyjny Google AdSense przedstawia podsumowanie wyświetleń, przychodów i innych danych
Today's Earnings: $4527.50 View payment history View 1 Today
>j Page im ressions
A d S e n s e for C o n t e n t
;.iick$
Page Cid
Page eCPM f?j
Earnings 54325.25
• top channels
A d S e n s e for S e a r c h
C Sicks Referrals
• top products
CTR
Sign-tips
Conversions [21
Earnings S200 50
A d S e n s e for M o b i l e C o n t e n t - G e t started
Total Earnings
$4527.50
Rozdział 12. • Łączenie z zasobami zewnętrznymi
315
W panelu administratora AdSense możesz wygenerować kod, który powinieneś wstawić na stronę. Jest to fragment napisany w języku JavaScript, który przypomina poniższy:
Aby wstawić kod wyświetlający reklamy AdSense na stronie Joomla!, możesz wykorzystać rozszerzenie o nazwie Mod HTML (http://fijiwebdesign.com). Jest to nieskomplikowany moduł, który pozwala wyświetlić dowolny kod HTML lub JavaScript na stronie Joomla!. Domyślnie, po zainstalowaniu modułu, tworzony jest jeden egzemplarz o nazwie Htm! Module. Możesz zmienić jego ustawienia, korzystając z opcji Rozszerzenia/Moduły w panelu administratora — pokazano to na rysunku 12.11. ysunek 12.11. kran edycji arametrów lodułu Mod ITML pozwala /prowadzić 'owolny kod ITML, który ostanie /yświetlony a stronie
Ustaw tytuł modułu, aby odpowiadał treści (np. GoogleOl, ponieważ jest to pierwszy moduł zawierający reklamy google). Wyłącz wyświetlanie tytułu, włącz pokazywanie modułu na stronie i wybierz pozycję. Właściwy kod wprowadź w pole HTML box. Wreszcie kliknij przycisk Zapisz (w prawej górnej części ekranu), a reklamy Google automatycznie pojawią się w wybranym miejscu. Aby utworzyć kolejny egzemplarz modułu wyświetlającego reklamy Google, kliknij przycisk Nowy na stronie Moduły. Zaznacz HTML Module jako typ modułu (zobacz rysunek 12.12), kliknij przycisk Dalej. Od tego momentu konfiguracja przebiega identycznie jak we wcześniejszym przykładzie.
316
Joomla!. Profesjonalne tworzenie stron W1NW
Rysunek 12.12. Tworząc nowy egzemplarz modułu, wybierz typ HTML Module
/ c w u t l . „. m hi,„ m
^
Ścieżka pokotu O Wyswi etl ¿j
^
Moduty O Reklama Owtasnykod HTML
^ ^ ^
O Stopka ONajnowsze wiadomości o,.,
OL,,..,«. O NjjjEęściej tzsrłana
OMU,*.
O Ankieta
OoiaOu
Ol-«,,*..
OtaMI
O 3*4.
O Statystyki
Ota,„
ÖwhoVs Online
O Wpirijtz
Program partnerski firmy Amazon Podobnie jak Google, Amazon również udostępnia program partnerski (,http://affiliateprogram.amazon.com/gp/associates/join). W przeciwieństwie do Google Amazon płaci wyłącznie za te kliknięcia odnośników, które zakończyły się sprzedażą. Nie ma znaczenia tutaj, czy kupiony zostanie akurat reklamowany przedmiot, liczy się, czy użytkownik przychodzący z danej strony dokona dowolnego zakupu. Amazon umożliwia wstawienie reklam różnego typu na stronie — od listy konkretnych produktów, po reklamy kontekstowe. Na rysunku 12.13 przedstawiono kilka z nich, których kod można wygenerować w panelu programu partnerskiego. Kliknij przycisk Add obok interesującego typu reklam, a zostanie wygenerowany mały fragment kodu JavaScript, który następnie powinieneś wstawić na swoją stronę. Rysunek 12.13. Program Amazona pozwala wybrać z kilku typów reklam
Link to a specific product on A m a z o n . c a and show some information about t h a t p r o d u c t . T h e Product Links tool lets y o u build customised T e x t Links, T e x t and Image links, a n d Image only links to A m a z o n p r o d u c t s . • Y o u r links will include your A s s o c i a t e tag and y o u will be paid for qualifying revenues coming through this link. • Use Product Previews t o e n h a n c e y o u r Product Links. • A d d Product Links n o w
t Link to A m a z o n product c a t e g o r i e s and promotions using our stylish graphical banners.
amaxonmp3
JÊ&M f amazonconi
• Many standard banner sizes and shapes available. • S h o w special graphics for special A m a z o n . c a promotions s u c h as Back to School or Mothers Day. • Easy t o add, • Earn referrals o f up t o 15% o f sales. • A d d Banners N o w
W panelu programu partnerskiego (zobacz rysunek 12.14) możesz znaleźć informacje na temat skuteczności reklam, tzn. ile kliknięć zakończyło się sprzedażą. Warto zwrócić szczególną uwagę na listę produktów, aby określić, które z nich trafiają w zainteresowania odwiedzających, a które nigdy nie są wybierane.
Rozdział 12. • Łączenie z zasobami zewnętrznymi ysunek 12.14. V panelu arządzania najdują się iformacje •a temat lopularności skuteczności eklam
317
Jul! report ;
Earnings S u m m a r y T o t a l items s h i p p e d
0
Referral R a t e ( I n c r e a s e this t o
6.00%
b y referring
7 more items)
4.00%
Referral F e e s
$0.00
Gift C e r t i f i c a t e / C a r d Earnings
$0.00
Kindle S u b s c r i p t i o n E a r n i n g s
$0.00
Prime S u b s c r i p t i o n Earnings
$0.00
Glossary
Click here to view the referral rate tier chart,
fait repoit j O r d e r e d items
0
Clicks
0
Conversion
N/A
Glossary
'Jä&zs&äj
I Link T y p e R e p o r t Link Tvce (Glossary 1
Conversion
P r o d u c t Links E n h a n c e d Display A.iilH m m »
0.00%
Do zarządzania reklamami Amazona możesz wykorzystać jedno z dostępnych rozszerzeń Joomla!. Możesz zdecydować się na Mod HTML, który zademonstrowano w ramach opisu programu Google AdSense, lub wybrać rozszerzenie stworzone specjalnie dla programu partnerskiego Amazona.
Dzszerzenie Amazon Associates Rozszerzenie Amazon Associates jest dodatkiem, który umożliwia wstawienie reklam z programu partnerskiego bezpośrednio w treści artykułu. Dodatek współpracuje poprawnie z większością wariantów językowych programu, np. Amazon.com, Amazon.co.uk, Amazon.de i Amazon.fr. Rozszerzenie możesz pobrać z: http://extensions.joomlaspan.com/view-document-details/159-amcizon-associates.html Po zakończeniu instalacji musisz wprowadzić numer ID programu partnerskiego w ustawieniach dodatku (zobacz rysunek 12.15). Parametr Amazon ID jest kluczowy, ponieważ na jego podstawie naliczane są zyski Twojej strony. Inne z ustawień wpływają na wygląd prezentowanych reklam. Musisz znać ID produktów, które zamierzasz umieścić na stronie. ID produktu można odczytać z jego adresu na stronie Amazona, dlatego musisz najpierw znaleźć wybrany przedmiot. Adres przedmiotu będzie przypominać poniższy (ID produktu zostało wyróżnione): http://www.amazon.co.uk/Sandisk-Player-Sansa-feature-incliided/dp/B000W3QTBE/ ref=sr_l _1 ? ie=UTF8&s—electronics&qid=1229625364&sr=8-1 Aby wstawić odnośnik do danego przedmiotu i określić, w jaki sposób będzie opływany przez tekst (opcjonalne, możliwe ustawienia to L E F T i RIGHT), wprowadź w treść artykułu następujący tekst: {amazon id='B000W3QTBE' align='LEFT'}
Use {amazon \i='itm#itiHtr aligns***'} where the id is the amaze id of the product. You can find the id by searching amazon.com for a product and looking at the uil.
The ui will look something like this: http:/Awi*Ai.amazon.com /gp/produ ctf B00005RIY5 /ief= p d_ka r_giAj_1 /002-5997680-7114400?%5 Fencoding=UT F8&v= g I a n ce&n= 130 < b r br /> The highligi
000000 0000FF
iwMi' jest «wolnym oprogramowaniem dostępnym na licenoji i l l U OPL
Możesz wstawić dowolną liczbę odwołań, ale pamiętaj, że każda reklama jest oddzielnie pobierana z serwerów Amazona. W praktyce oznacza to, że działanie Twojej strony może zostać spowolnione, jeśli pracuje ona na łączu o niskiej przepustowości lub serwer Amazona * jest przeciążony. Jeśli produkt nie jest poprawnie wyświetlany, spróbuj wyłączyć na chwilą edytor WYSIWYG, a następnie ponownie wprowadź kod odpowiedzialny za reklamy w treść artykułu. Niektóre edytory WYSIWYG niepoprawnie odczytują kod reklam, co doprowadza do błędów zapisu.
Amazon Products Feed Brigde Dużo potężniejszy, od przedstawionego wcześniej rozszerzenia, jest pakiet Amazon Products Feed (APF). Jest to aplikacja open source, stworzona z zastosowaniem biblioteki PERL, połączona z API usług sieciowych Amazona. Umożliwia wyświetlanie aktualnych produktów Amazona na Twojej stronie. Za p o m o c ą rozszerzenia APF Brigde możesz połączyć system APF z Joomla!. Amazon Products Feed Bridge to pakiet modułów, komponentów, a także dodatek, który pozwala Ci stworzyć wirtualny sklep Amazona na Twojej stronie. Na rysunku 12.16 przedstawiono przykładową stronę Joomla! zawierającą funkcję wyszukiwania produktów i wyświetlającą książkę wraz z opisem, ceną, zdjęciem okładki i innymi informacjami. Aplikację APF możesz pobrać na stronie: www. mrrat. com/aws Pakiet APF Bridge dla Joomla! dostępny jest na stronie: www. deanmarshałł. co. uk/demo/apf
bridge
Rozdział 12. • Łączenie z zasobami zewnętrznymi ysunek 12.16. mazon Products eed Brigde łączy tronę Joomla! ezpośrednio e sklepem mazon
319
Message from Dean - May 8th 2007 ! a m currently testing out a new version of the APF Bridge Component - If you notice any errors within this demo store please drop me a line
Books > Subjects > Science Fiction & Fantasy Ciment Store: US World Stole
U K Store I Canadian Store I French Store I German Store
Books : Categories Only within this Category v
P i eakitKi D a w n tTtm 1 witttttit Saua. Book 41
Search
List Pt ice:
by. Steahenie Meyer
Atn.tzori.coin's Pi ice: 112.64
August 02, 2008
V o n S a w : $10.35 (45%) Pricsi subject to change.
1
Buy from Amazon.com
Pakiet APF Brigde składa się z kilku rozszerzeń, które odpowiadają za różne funkcje. Poszczególne rozszerzenia to: •
Komponent APF Bridge — Łączy bibliotekę APF Perl z Joomla!.
•
Dodatek mosAPF_05.b3 — We współpracy z komponentem przeszukuje treść artykułu i wstawia w miejsce znaczników APF informacje ze sklepu Amazon.
•
Dodatek mosAPF_button — Dodaje przycisk do edytora WYSIWYG Joomla!, który pozwala wstawić poszczególne znaczniki APF Brigde. Stosowanie tego rozszerzenia oszczędza czas i zmniejsza ryzyko błędów spowodowanych niepoprawnym wprowadzeniem.
•
Moduł modapfsearch — Wyświetla pole wyszukiwania, które umożliwia przeszukiwanie sklepu Amazon w danym kraju.
System APF napisano w Perlu w oparciu o biblioteką cURL, którą zastosowano do przesyłania plików. Jeśli na Twoim serwerze nie zainstalowano biblioteki cURL, nie będziesz mógł uruchomić APF.
[omunikacja biznesowa z zastosowaniem EDI Rozrost e-commerce w ciągu ostatniej dekady jest zaskakujący. Transakcje warte miliardy dolarów przeprowadzane są za pośrednictwem sieci Web i związanych z nią technologii. W rozdziale 4. wspomniano, że system Joomla! można wzbogacić o funkcje eCommerce ukierunkowane na klientów, takie jak sklep internetowy. Jednak większość transferowanych przez internet pieniędzy związana jest z transakcjami typu Business to Business (B2B). Za pomocą odpowiednich rozszerzeń możliwe jest zarządzanie takimi transakcjami w Joomla!.
320
Joomla!. Profesjonalne tworzenie stron W1NW EDI (Electronic Data Interchange — elektroniczna wymiana danych) to zbiór standardów stosowanych przy elektronicznej wymianie informacji między organizacjami. Mimo braku rozgłosu format ten jest głównym standardem wykorzystywanym przy większości ogólnoświatowych elektronicznych transakcji. Ze względu na głównym obszar zastosowania (B2B) większość implementacji EDI pozostaje „ukryta", w przeciwieństwie do spopularyzowanych formatów, takich jak XML. Dzięki odpowiednim rozszerzeniom możesz zmienić Joomla! w serwer EDI.
Dokumenty EDI EDI stosowany jest często do automatyzacji realizacji transakcji. Dokumenty EDI mogą być przesyłane w dowolny sposób, np. przez FTP, HTTP, MIME, bezpośrednio połączony modem, AS2, AS2 lub VAN. Value Added Network (VAN) to rodzaj zabezpieczonej, prywatnej sieci, oferowanej przez firmy, takie jak INOVIS, GXS i BT*EDINET. Coraz częściej stanowi także warstwę zabezpieczeń w przypadku przesyłania danych przez internet, co zmniejsza koszty i daje większe możliwości przesyłu. Korporacja Wal-Mart stosuje standard Applicability Statement 2 (AS2), który narzuca model klient-serwer w komunikacji EDI. Standard nakreśla listę wymagań (np. statyczny adres IP serwera bazowego), które ograniczają ryzyko kompromitacji systemu. Protokół AS2 opisano w dokumencie RFC 4130, dostępnym pod adresem: www.ietf.org/rfc/rfc4130.
txt
Większość dokumentów EDI odpowiada treścią oryginalnym, papierowym materiałom, które zastępuje. Standardowy format dokumentów określono dla wielu branż, np. przemysłu maszynowego (plany konstrukcyjne, harmonogram pracy itd.), przemysłu medycznego (dane o pacjentach, wyniki badań laboratoryjnych itd.), transportu (faktury, zamówienia itd.). Opisy kilku standardów dokumentów EDI znajdziesz na stronie: http://rapidnet.org/Default.aspx?tabid=486
Standardy EDI Istnieją dwa główne standardy EDI. Standard ANSI ASC Xl2 (najczęściej nazywany po prostu AT/2) jest główną implementacją wykorzystywaną w Stanach Zjednoczonych. W Europie stosowany jest standard United Nations/Electronic Data Interchange For Administration, Commerce, and Transport (UN/EDIFACT), popierany przez ONZ. Standardy dla dokumentów X12 dla różnych branż pogrupowano w kategorie — przedstawia je (z odpowiednimi skrótami) tabela 12.1.
Rozdział 12. • Łączenie z zasobami zewnętrznymi abela 12.1. Kategorie formatów dokumentów standardu
321
X12
Kategoria
Co zawiera
Zamówienia (ORD)
Standardy określające różne pozycje, w tym porozumienia o współpracy reklamowej, powiadomienia o bonach, faktury/zlecenia kupna/zmiany zleceń kupna artykułów spożywczych, faktury, utrzymanie artykułów, bony producentów i wykup bonów, katalogi handlowe, zlecenia zakupu i potwierdzenia tych zleceń, charakterystyki kont, powiadomienia i potwierdzenia zwrotów, listy przewozowe oraz powiadomienia o wysyłce i zafakturowaniu.
Obsługa materiałów (MAT)
Standardy związane z ewidencją zasobów, zapytaniami o artykuły, reklamacją materiałów, badaniem zobowiązań materiałowych, statusem i zatwierdzaniem cen, informacją o cenach, zatwierdzaniem (lub wycofaniem zatwierdzenia) produktów prośbami o oferty cenowe, zamówieniami oraz odpowiedziami na oferty cenowe.
Usługi podatkowe (TAX)
Definicje dotyczące kont firmowych, elektronicznej rejestracji formularzy podatkowych i potwierdzeń ich złożenia, rozliczeń dochodów i aktywów, zaświadczeń o stanie zatrudnienia, powiadomień o upoważnieniach udzielonych pełnomocnikom, oceny lub korekty należności podatkowych, oświadczeń o uzyskanych dochodach, informacji statystycznych oraz wymiany informacji podatkowych.
Magazyny (WAR)
Standardy określające sposób raportowania o odwiedzonych klientach, raporty z analiz dedukcyjnych, przydział funduszy rozwojowych, odpowiedzi na oferty przetargowe, powiadomienia o korektach stanu magazynowego, powiadomienia o przewozach magazynowych, zamówienia przewozu, powiadomienia 0 odbiorze przekazanego towaru do magazynu oraz powiadomienia o wysyłce towaru z magazyn li.
Finanse (FIN)
Definicje dotyczące analizy kont, ich rozdziału i informacji oraz obsługi i statusu, informowania o obciążeniach, kontroli ogólnego obciążenia, raportowania sprzedaży komisowej, wyciągów z konta/faktur dotyczących usług skonsolidowanych, korekt po stronie „winien" i „ma", zatwierdzania obciążeń, raportów finansowych, zawiadomień o zwrotach finansowych, faktur przewozowych, podsumowania działalności operacyjnej, faktur, depozytów, sprawozdań z wydatków operacyjnych, wniosków o unieważnienie płatności oraz zawiadomień o zleceniach zakupu 1 przelewach.
Urzędowe (GOV)
Standardy dotyczące podmiotów gospodarczych, nakazów sądowych i egzekucyjnych, wniosków sądowych, elektronicznej rejestracji potwierdzeń złożenia formularzy podatkowych, wniosków o przyznanie koncesji przez Federalną Komisję Łączności, rekompensat okresowych, sprawozdań związanych z opłatami licencyjnymi, informacji statystycznych, powiadomień o stawkach podatkowych, informacji o stawkach podatkowych lub zwrocie podatku z tytułu ubezpieczenia od utraty pracy, określenia jednolitych kodów handlowych oraz informacji o rejestracji wyborców.
Produkcja (MAN)
Standardy dotyczące raportowania danych o kosztach związanych z wykonawcami, potwierdzeń lub korekt dostawy/zwrotu, zapisu bazowego dostaw/zwrotów, zapytań/informacji o towarach, zapytań o statusie zamówienia, raportów o statusie zamówień, planowania harmonogramu z uwzględnieniem możliwości wydania towarów, danych na temat funkcjonowania produktów, korygowania zapisu transferu produktów, raportów o odsprzedaży i transferze produktów, kolejności produkcji, odbioru potwierdzenia (akceptacji) certyfikatu oraz odpowiedzi w sprawie korekty zapisu transferu produktów.
Standardy dotyczące przydziału zadań związanych z transportem, rachunków i faktur przewozowych, informacji zbiorczych na temat bezpośrednich dostaw do sklepów, zamówień na usługi logistyczne, odpowiedzi od usługodawców logistycznych, zbiorczego zestawienia ładunku dla przewoźników, dokumentacji zlecenia usługi transportowej, odpowiedzi na przydział zadań transportowych, instrukcji związanych z trasą i przewoźnikiem, zgłoszenia ładunku (manifest przewozowy), powiadomień o wysyłce i zafakturowaniu, informacji o rozbieżnościach w dostawie wysłanego towaru, informacji wysyłkowych orazhannonogramu przewozu.
Inżynieria zarządzania i umowy (ENG)
Standardy dotyczące klauzul i postanowień umownych, treści części składowych, streszczeń umów, statusu sfinalizowania umowy, raportów dotyczących zarządzania płatnościami wynikającymi z umowy, propozycji cenowych w umowach, raportowania danych o kosztach kontrahentów, pogłębiania komunikacji, zmiany przydziałów zadań logistycznych, utrzymania zamówień usługowych, historii cen, powiadomień o zaopatrzeniu, zachowania wymiarów produktów, raportowania kosztów projektu, raportowania harmonogramu projektu, specyfikacji (informacji technicznych), charakterystyki partnerów handlowych, przeglądu wyników sprzedaży oraz innych informacji.
Ubezpieczenia i zdrowie (INS)
Standardy określające działalność rentową, szczegóły przeglądu pojazdów samochodowych, pobierane korzyści i świadczenia, zaświadczenia o ubezpieczeniu przewożonego ładunku, raporty o stanie roszczeń i śledzenie odpowiedzi na wnioski, śledzenie realizacji świadczeń, warunki i zakres przyznawania ich oraz informacje 0 ich wysokości, zapytania o warunki nabycia świadczeń, zakres i wysokość świadczeń, świadczenia zdrowotne, zawiadomienia/płatności dotyczące świadczeń zdrowotnych, powiadomienia o statusie świadczeń zdrowotnych, prośby o status świadczeń zdrowotnych, informacje o dostawcy usług medycznych, informacje na temat usług medycznych, wnioski o ubezpieczenie na życie i przyznanie renty inwalidzkiej, opis systemu ubezpieczeń, dane na temat agenta ubezpieczeniowego, raportowanie wymogów ubezpieczeniowych, status wniosków o ubezpieczenie/rentę, świadczenia dotyczące utraty lub zniszczenia pojazdów samochodowych, zgłaszanie wypadków medycznych, informacje o pacjentach, zawiadomienia o stratach losowych 1 utracie mienia, raporty o zniszczeniu mienia, raporty dotyczące urazów ciała, chorób i wypadków losowych, usługi informacji ubezpieczeniowej oraz orzeczenia wypłaty.
Pozostałe transakcje (MIS)
Definiuje komunikaty usług kryptograficznych, śledzenie statusu danych, strukturę formularzy elektronicznych, transfer plików, potwierdzenia funkcjonalne, zapytania ogólne, odpowiedzi lub potwierdzenia, potwierdzenia rezerwacji, listy adresowe, anulowanie ustaleń oraz komunikaty tekstowe.
Hipoteka (MOR)
Standardy dotyczące wniosków o przyznanie świadczeń na podstawie ubezpieczeń hipotecznych, informacji o zdolności kredytowej, raportów o kredycie hipotecznym, zamówienia raportu o kredycie hipotecznym, statusu domyślnego pożyczki hipotecznej, wpisu do księgi wieczystej, powiadamiania o zmianie zapisów dotyczących własności lub hipoteki, raportu o nieruchomości, prośby o raport o nieruchomości, inspekcji nieruchomości, informacji o spłacie nieruchomości, dokumentowania tytułu do nieruchomości, zamówienia usług ubezpieczenia tytułu do nieruchomości, wniosków o pożyczkę mieszkaniową, wniosków o ubezpieczenie hipoteczne, odpowiedzi na wniosek o ubezpieczenie hipoteczne, raportu o dodatkowym zabezpieczeniu hipotecznym inwestora oraz przekazania dodatkowej pożyczki hipotecznej.
Definicje dotyczące rejestracji produktu, roszczeń serwisowych, odpowiedzi na roszczenia serwisowe, powiadomień o serwisowaniu produktu, informacji 0 pochodzeniu produktu, ogłoszeń promocyjnych oraz zgłaszania i autoryzacji zwrotów handlowych.
Jakość i bezpieczeństwo Standardy określające dane toksykologiczne z testów przeprowadzanych na zwierzętach, uprawnienia do prowadzenia samochodów dostawczych, (SQQ) wymianę informacji na temat uprawnień do prowadzenia samochodów dostawczych oraz ich bezpieczeństwa, karty charakterystyk substancji niebezpiecznych, protokoły niezgodności, raporty z wynikami testów oraz żądania 1 raportowanie wyników testowych. Informacje dla studentów (STU)
Definiuje podania o przyjęcie do instytucji edukacyjnych, ewidencję kursów edukacyjnych, podania o stypendium i pomoc finansową, wnioski o wydanie zaświadczeń z przebiegu studiów (wyciągi), odpowiedzi na wnioski o wydanie zaświadczeń z przebiegu studiów (wyciągi) i poświadczenia, potwierdzenia przyjęcia na studia, wnioski o kredyt studencki, poręczenia kredytów studenckich, nakaz zwrotu kredytu studenckiego oraz weryfikację statusu i spłaty kredytu studenckiego.
Europejski standard U N / E D I F A C T został z a a k c e p t o w a n y przez ISO j a k o standard 9735. Nie uwzględniono w nim określonego zestawu kategorii jak w X l 2 . Zamiast tego d o k u m e n t y zdefiniowano w formacie wiadomości identyfikowanych przez skróty przedstawione w tabeli 12.2. abela 12.2. Skróty
UN/EDIFACT
Metoda
Opis
Skrót
Znaczenie
APERAK
Błędy transmisji i potwierdzenia
AUTACK.
Bezpieczne uwierzytelnianie i potwierdzanie
AUTHOR
Autoryzacja
BANSTA
Stan realizacji zleceń bankowych
BAPLIE
Plan rozmieszczenia ładunku i wolne miejsca
BAPLTE
Ogólna liczba towarów lub ilość ładunku
BOPBNK
Rozliczenia bankowe i zestawienie transakcji
BOPCUS
Zestawienie salda płatności klienta
BOPDIR
Deklaracja bezpośredniego salda płatności
BOPINF
Informacja od klienta na temat salda płatniczego
CALINF
Informacja o przybyciu statku
CASINT
Prośba o wystąpienie na drogę sądową w postępowaniu cywilnym
324
Joomla!. Profesjonalne tworzenie stron W1NW
Tabela 12.2. Skróty UN/EDIFACT — ciąg dalszy Metoda
Opis
CASRES
Wystąpienie na drogę sądową w postępowaniu cywilnym
CHAMAP
Tablica odwzorowań
COARRI
Raport o wyładowaniu (załadunku) kontenera
CODECO
Raport przyjęcia (odprawy) kontenera
CODENO
Powiadomienie o gotowości do klarowania statku/wygaśnięciu pozwolenia
Rozdział 12. • Łączenie z zasobami zewnętrznymi Tabela 12.2. Skróty UN/EDIFACT — ciąg dalszy Opis Deklaracja celna Ekspresowa deklaracja celna Raport spedycji celnej Odpowiedź urzędu celnego Siedzenie danych Zawiadomienie o obciążeniu konta Wielostronne zawiadomienie o obciążeniu konta Harmonogram dostaw Precyzyjne określenie czasu dostawy Zawiadomienie o wysyłce Ocena zniszczeń wyposażenia i kosztów naprawy Polecenie zapłaty Definicja katalogu Zawiadomienie o akredytywie dokumentowej Zawiadomienie o zmianie w akredytywie dokumentowej Informacje o zmianie w akredytywie dokumentowej Prośba o zmianę w akredytywie dokumentowej Wniosek o akredytywę dokumentową Odpowiedź na zmianę w akredytywie dokumentowej Informacja o wystawieniu akredytywy dokumentowej Wycofanie operacji finansowej Wyciąg z konta bankowego Komunikat ogólny Informacje statystyczne Przygotowanie towaru do transportu Spedycja i konsolidacja Kalkulacja kosztów spedycji i transportu Powiadomienie o materiałach niebezpiecznych Koszty przewozu w transporcie międzynarodowym i inne opłaty Lista ładunków niebezpiecznych Powiadomienie o przybyciu przesyłki Potwierdzenie rezerwacji
325
326
Joomla!. Profesjonalne tworzenie stron W1NW
Tabela 12.2. Skróty UN/EDIFACT — ciąg dalszy Metoda
Opis
ITFMBF
Rezerwacja stała
IFTMBP
Rezerwacja tymczasowa
IFTMCS
Status wykonania instrukcji zawartych w umowie
1FTMIN
Instrukcja transportowa
IFTMSC
Spedycja i transport pojedynczej przesyłki
1FTRIN
Informacja o tempie spedycji i transportu
IFTSAI
Harmonogram spedycji i transportu oraz informacje o dostępności towaru
1FTSTA
Informacja o statusie międzynarodowego transportu multimodalnego
IFTSTQ
Prośba o status międzynarodowego transportu multimodalnego
IHCEBI
Interaktywne zapytania i odpowiedzi na temat uprawnień i świadczeń z tytułu ubezpieczenia zdrowotnego
INSPRE
Składka ubezpieczeniowa
INVOIC
Faktura
INVRPT
Raport magazynowy
ITRGRP
Przeładunek na trasie przewozu
ITRRPT
Szczegółowy raport o przeładunku na trasie przewozu
JAPRES
Wyniki przeglądu podań o przyjęcie do pracy
JIBILL
Sprawozdanie rozliczeniowe wspólnego udziału
JINFDE
Prośba o informacje na temat pracy
JOBAPP
Przedstawienie ofert osób ubiegających się o przyjęcie do pracy
JOBCON
Potwierdzenie zlecenia pracy
JOBMOD
Modyfikacja zlecenia pracy
JOBOFF
Zlecenie pracy
MEDADR
Niepożądane działanie leku
MEDAUT
Wstępna autoryzacja medyczna
MEDPID
Identyfikacja osoby
MEDREQ
Prośba o usługę medyczną
MEDRPT
Wyniki badania medycznego
MESGEV
Wydarzenie towarzyskie
MIGRPT
Zgłoszenie instrukcji wdrażania wiadomości (MIG, ang. Message implementation guide)
MOVINS
Instrukcja rozmieszczenia i zamocowania ładunku
ORDCHG
Prośba o zmianę zamówienia
Rozdział 12. • Łączenie z zasobami zewnętrznymi abela 12.2. Skróty UN/EDIFACT — ciąg dalszy Opis Zamówienie Odpowiedź na zamówienie Informacja adresowa Lista pasażerów Zawiadomienie o potrąceniach płacowych Szczegółowe polecenie zapłaty Wielostronne polecenie zapłaty Polecenie zapłaty Raport o uszkodzeniach i utracie mienia Katalog lub cennik Dane o produkcie Uzgodnienie wymiany produktów Lista promocyjna Zaplata składki ubezpieczeniowej Dane jakościowe Oferta cenowa Raportowanie surowych danych Potwierdzenie reasekuracji Potwierdzenie dostawy Wyliczenia reasekuracyjne Ochrona kredytowa Roszczenia reasekuracyjne Awizo przekazu Składka reasekuracyjna Prośba o dokument Prośba o ofertę cenową Rozliczenie reasekuracyjne Rezerwacja Prośba o rezerwację — komunikat interaktywny Odpowiedź na rezerwację — komunikat interaktywny Reasekuracyjny rachunek techniczny
327
328
Joomla!. Profesjonalne tworzenie stron W1NW
Tabela 12.2. Skróty UN/EDIFACT — ciąg dalszy Metoda
Opis
SAFHAZ
Dane na temat bezpieczeństwa i materiałów niebezpiecznych
SANCRT
Regulacje prawne dotyczące międzynarodowego przewozu towarów
SCRIPT
Zapytania i odpowiedzi dotyczące recept — komunikat interaktywny
SKDACK
Potwierdzenia harmonogramu
SLSFCT
Prognoza sprzedaży
SLSRPT
Raport sprzedaży
SSCLDE
Decyzja w sprawie świadczenia z opieki społecznej
SSDREQ
Prośba o przesłanie danych dla opieki społecznej
SSIMOD
Zmiana danych identyfikacyjnych
SSRECH
Historia ubezpieczeniowa pracownika
SSREGW
Powiadomienie o zarejestrowaniu pracownika
STATAC
Wyciąg z konta
SUPCOT
Zawiadomienie o składkach na fundusz emerytalny
SU PM AN
Obsługa funduszu emerytalnego
SUPRES
Odpowiedź dostawcy
TANSTA
Raport o stanie zbiorników
TESTEX
Komunikat testowy w trybie jawnym
TESTIM
Komunikat testowy w trybie ukrytym
TINREQ
Prośba o informacje turystyczne
TINRSP
Odpowiedź na prośbę o informacje turystyczne
TRADES
Definicje opisu podróży i ruchu ulicznego
TRADIN
Szczegółowe informacje na temat trasy podróży lub ruchu ulicznego dotyczące pojedynczego podróżującego
TRAILS
Planowanie i wskazówki dotyczące trasy podróży i ruchu ulicznego
TRALOC
Lokalizacja trasy lub położenia w ruchu ulicznym
TRAREQ
Prośba o informacje na temat trasy podróży lub ruchu ulicznego
TRAVAK
Potwierdzenie informacji na temat trasy podróży lub ruchu ulicznego
TRAVIN
Informacja o sytuacji na trasie podróży lub w ruchu ulicznym
VATDEC
Podatek VAT
VESDEP
Wypłynięcie statku
WKGRDC
Decyzja w sprawie dodatku pracowniczego
WKGRRE
Prośba o przyznanie dodatku pracowniczego
Rozdział 12. • Łączenie z zasobami zewnętrznymi
329
Rozszerzenie Skylark Za pomocą rozszerzenia Skylark możesz zmienić Joomla! w serwer EDI. Skylark umożliwia zarządzanie partnerami handlowymi, procesami biznesowymi, protokołami komunikacyjnymi, a także konwerterami formatów dokumentów. Nie ma ograniczeń odnośnie do typów obsługiwanych dokumentów, przetwarzane są zarówno przychodzące, jak i wychodzące dokumenty. Rozszerzenie Skylark składa się z zestawu komponentów i modułów. Obsługiwane są następujące transporty (protokoły komunikacyjne): •
Generic (ogólne, np. FTP, SMTP i POP3),
•
ARI (wykorzystuje HTTP),
•
Honda (wykorzystuje IBM MQ),
•
Stihl (wykorzystuje HTTP).
Obsługuje poniższe translatory: •
ARI,
•
Briggs,
•
GMI,
•
Honda,
•
Stihl.
Po ukończeniu instalacji zostanie wyświetlony odnośnik do wprowadzenia (zobacz rysunek 12.17). Warto zapoznać się z jego treścią, ponieważ wyjaśnia podstawowe zasady działania komponentu. Rysunek 12.17. Wybierz Skylark introduction aby zapoznać się ? przydatnymi informacjami wprowadzającymi
SkylaikEDlit>a,lllaIi
"
®
Skylark EDI: Welcome to Skylark EDI
. Please read the following notes. Before Skylaik EDI can actually be used for anything you will need to install and configure additional Skylaik EDI modules. This can be a little involved and so you are strongly advised to read the Skylaik EDI Administration Manual for information on how
ble by clicking on the "Help" menu ite individual pages within Skylark EDI car This is the fourth alpha release of Skylark EDI. An alpha release is a version of the software that is still in development and probably has features, sometimes important features, missing or not woiking. Features that are woiking may be changed without notice, be broken by a future release, or simply be removed. In short, an alpha release is not suitable for a production environment. If you are upgrading from a previous release then you will need to update your database schema. Update scripts are available to assist you. but please read the section on updating Skylaik in the Administration Manual for full instructions. Substantial changes have been made to drivers for this release. If you have produced your own drivers for earlier releases of Skylark EDI then you will need to amend them before they will work correctly with this release. Refer to the Skylaik EDI Developers Manual and the release notes for further information. The following shortcuts will take you directly to specific pages in the help system (it is not strictly necessary to click on "Continue" at this point).
330
Joomla!. Profesjonalne tworzenie stron W1NW
Komunikacja z sieciami zewnętrznymi W poprzednich rozdziałach miałeś okazję doświadczyć, że stworzenie własnego, prostego komponentu dla systemu Joomla! nie wymaga dużych nakładów pracy. Dzięki zastosowaniu platformy Joomla! większość elementów interfejsu użytkownika jest już gotowa, co pozwala Ci skupić się na szczegółach implementacji danej funkcji. Z tego powodu komunikacja z sieciami zewnętrznymi w Joomla! jest nie tylko praktyczna, ale także tania w porównaniu z tworzeniem samodzielnej aplikacji internetowej. W tym podrozdziale dowiesz się, jak stworzyć rozszerzenia, które łączą się z zewnętrznymi stronami. Pierwsza, prosta aplikacja zostanie zbudowana z zastosowaniem zawartych w PHP funkcji do pobierania danych z serwerów zewnętrznych. Dane pobrane w formacie HTML zostaną przefiltrowane, a interesujące informacje wyświetlone na stronie Joomla!. Drugie rozszerzenie doda nowe materiały na stronie, korzystając z interfejsu internetowego zdalnego systemu (w tym wypadku jest to AP1 Map Google). Ostatnie rozszerzenie to przykład interakcji ze zdalną bazą danych, w odpowiedzi na przesłane zapytanie zostaną zwrócone dane w formacie XML. Wszystkie zademonstrowane rozszerzenia można dopasować, dzięki temu uda się sprostać realnym problemom. Przykładowo doświadczenia zdobyte w komunikacji za pośrednictwem interfejsu internetowego zdalnego systemu można wykorzystać przy programowaniu komunikacji z serwisem zewnętrznym, a jest to szczególnie przydatne, biorąc pod uwagę fakt, że liczba usług posiadających internetowe AP1 stale rośnie.
Komponent typu screen scraper System sieci World Wide Web przyczynił się, jak żaden inny, do popularyzacji danych w formie tekstowej. Prawie wszystkie strony dostępne w internecie można odwiedzić zarówno przez przeglądarkę, jak i prosty program pobierający wyłącznie tekst (w tym wypadku zostaną wyświetlone także znaczniki HTML). Dostępność danych spowodowała ponowny rozrost popularności programów typu screen scraper. Screen scraper pobiera dane, które normalnie pojawiłyby się na ekranie (lub w oknie przeglądarki), a następnie filtruje je pod kątem pożądanych informacji. Tak uzyskane informacje mogą zostać zapisane lub ponownie sformatowane i wyświetlone.
Krótka historia screen scraperów Między latami siedemdziesiątymi XX wieku, które cechowała popularność tekstowych aplikacji opartych na modelu mainframe-terminal, a erą przeglądarek internetowych XXI wieku miała miejsce era graficznych interfejsów użytkownika (GUI — Graphical User Interface). Producenci oprogramowania, zachęceni sukcesem komputerów typu Macintosh, zaczęli wzbogacać aplikacje o okna, rozwijalne menu, pola wyboru, a także inne elementy, czego skutkiem była większa elastyczność w porównaniu z tekstowymi poprzednikami.
Rozdział 12. • Łączenie z zasobami zewnętrznymi
331
Rewolucyjny rozrost popularności aplikacji graficznych oznaczał spory problem dla organizacji, które zainwestowały ogromne ilości czasu i pieniędzy w tekstowe programy napisane z myślą o komputerach typu mainframe. Nie minęło dziesięć lat, a aplikacje tekstowe z nowinek technologicznych zmieniły się w zabytek. Niezbędne okazało się przepisanie aplikacji, tak aby korzystały z nowych paradygmatów GUI. Jeszcze większym wyzwaniem, niż ogrom pracy programistycznej, była konwersja danych przechowywanych w tych specyficznych systemach. W czasie projektowania tych systemów nie stosowano ogólnych standardów, ponieważ nie były one jeszcze zdefiniowane. W ten sposób zmiana formatu danych stała się wielkim wyzwaniem. Na scenie pojawiły się wtedy screen scrapery. Screen scraper był programem pośredniczącym między aplikacją tekstową a użytkownikiem lub bardziej zaawansowanym programem pobierającym dane. W przypadku aplikacji graficznych screen scraper to warstwa pośrednia między interfejsem graficznym, który był częścią frontową systemu, a właściwą aplikacją tekstową, pracującą w tle. Dane były odczytywane z wydruków programów tekstowych i przesyłane do aplikacji graficznych. W ten sposób użytkownik mógł korzystać ze wszystkich nowoczesnych udogodnień, takich jak możliwość cofania, wycinania, kopiowania i wklejania (a także wielu innych). Gdy użytkownik kliknął przycisk Zapisz, screen scraper przesyłał dane do właściwej aplikacji tekstowej, symulując wprowadzanie danych z klawiatury. Częściej zadaniem screen scraperów było filtrowanie informacji z wydruków, generowanych przez aplikacje tekstowe. Otrzymywane dane były następnie przesyłane do nowego systemu, np. systemu zarządzania bazą danych (DBMS). Wraz z upływem czasu i spadkiem zastosowania aplikacji tekstowych screen scrapery traciły na znaczeniu i popularności. Większość organizacji wymieniła stare systemy na zgodne ze standardami serwery baz danych, które umożliwiały dużą elastyczność przechowywanych danych. Zniknęła konieczność stosowania programów typu screen scraper, ponieważ zgodny ze standardami system przechowywania danych pozwalał na dostęp do nich za pośrednictwem aplikacji middleware dowolnego typu. Wraz z wybuchem popularności HTML wszystko się zmieniło. Niemalże z dnia na dzień udostępniono ocean danych w niezaszyfrowanym, publicznym i łatwo dostępnym formacie. Wszystkie informacje publikowane na stronach WWW, dostępne dla przeglądarek internetowych, są dostępne także dla programów zbierających, które przetwarzają pobrane dane, aby zapisać je lub wyświetlić w innym formacie. Ponieważ PHP posiada wbudowane funkcje związane z obsługą HTTP, stosunkowo prosto można napisać program, który pobiera kod HTML danej strony internetowej, a następnie wyszukuje na niej pożądane informacje. Implementacja takiego programu w postaci komponentu Joomla! nie sprawia większego problemu.
Wady zastosowania screen scrapera Jeśli pobierasz materiały ze zdalnej strony i publikujesz je na swojej witrynie, powstaje spora liczba problemów — techniczne, prawne i etyczne. Powinieneś je rozważyć, zanim zastosujesz aplikację typu screen scraper.
332
Joomla!. Profesjonalne tworzenie stron W1NW Problemem technicznym związanym z wykorzystaniem screen scrapera jest brak standardowego API, które umożliwia dostęp do danych. W praktyce oznacza to, że każda zmiana na stronie zewnętrznej może spowodować, że Twój program przestanie działać, ponieważ zakłada, że dane pojawią się w określonym formacie. W przeciwieństwie do człowieka, który jest w stanie odczytać informacje poprawnie, niezależnie od tego, czy wyświetlono je w trzech, czy czterech kolumnach, program musi kierować się ścisłymi regułami przy zbieraniu informacji. Z tego powodu screen scraper może dzisiaj działać bezbłędnie, a jutro nie działać wcale. Zastosowanie aplikacji tego typu wymaga ciągłego nadzoru. Kolejny aspekt techniczny związany jest z działaniami dążącymi do zablokowania scrapera. Niektóre organizacje aktywnie zwalczają aplikacje tego typu, ponieważ pobierają informacje, marnotrawiąc łącze internetowe i inne zasoby. Dodatkowo ich zastosowanie eliminuje potrzebę odwiedzenia strony, na której pojawiły się materiały, zapobiegając np. wyświetleniu reklam, które są źródłem zysku dla właściciela. Biorąc pod uwagę problemy prawne, może się okazać, że zwielokrotnianie informacji ze zdalnej strony na Twojej witrynie jest nielegalne, chociaż informacje są publicznie dostępne. Działa tutaj ta sama zasada, jak przy kopiowaniu artykułów i twierdzeniu, że jest się ich autorem — to plagiat. Dla materiałów dostępnych w sieci kwestie związane z prawem autorskim są bardzo niejasne. Niektóre strony są kompilacją informacji z innych źródeł, co utrudnia ustalenie oryginalnego źródła. Ponowna publikacja w zmienionym formacie dodatkowo utrudnia cały proces. Dodatkowym problemem natury prawnej mogą być warunki korzystania z danej strony. Google na przykład zabrania korzystania z aplikacji typu screen scraper, o czym pisze w dokumencie „Warunki korzystania z serwisów spółki Google". Mimo że bardzo łatwo można pobrać informacje udostępniane w Google, jest to działanie nielegalne. Chociaż możesz być w stanie pobrać informacje i opublikować je na swojej witrynie bez konsekwencji prawnych, może być to działanie nieetyczne. Bez żadnych wątpliwości program, który automatycznie pobiera dane z danego serwera WWW, zużywa jego zasoby. Można także założyć, że właściciel tej strony nie zamierzał opublikować informacji, aby były one dostępne dla programu, a następnie ponownie wykorzystane w nieznanym celu. Obok tych niejednoznacznych sytuacji istnieje sporo zastosowań, dla których screen scraping jest szalenie użyteczną techniką. Wiele rządowych stron WWW zawiera informacje, które są dostępne za darmo i do dowolnych zastosowań. Ich powszechność finansowana jest z pieniędzy podatników (np. komunikaty ministerstwa zdrowia). Często informacje te umieszczane są w trudno dostępnych miejscach lub są podane w tak niejasnej formie, że ponowna publikacja w zmienionym formacie może być zaklasyfikowana jako służąca dobru publicznemu. Pamiętaj, że nawet publiczne bazy danych zawierają czasem ostrzeżenia przed automatycznym pobieraniem danych. Przykładowo Warunki korzystania z usług Google zawierają poniższy fragment, który wyklucza nieautoryzowane zastosowanie screen scrapera: Użytkownik zgadza się nie uzyskiwać dostępu do usług Google inaczej niż za pośrednictwem interfejsu oferowanego przez Google w celu uzyskiwania dostępu do usług Google z wyjątkiem przypadków wyraźnie dozwolonych w osobnej umowie na piśmie.
Rozdział 12. • Łączenie z zasobami zewnętrznymi
333
Chociaż opisana w tym rozdziale technologia może służyć do pobierania informacji praktycznie z dowolnych stron, czyli także z tych, które tego zabraniają, powinieneś szanować wolę ich właścicieli i nie stosować aplikacji typu screen scraper w takich wypadkach.
•odstawowy kod źródłowy komponentu Aby skonstruować screen scrapera, który działa efektywnie w roli middleware'a, projekt komponentu musi uwzględniać cztery zadania: •
Otrzymać żądanie lub zapytanie od użytkownika — Najczęściej zapytanie wprowadzane jest przez użytkownika w pole formularza HTML, wyświetlonego przez komponent. Użytkownik przesyła żądanie do komponentu, klikając przycisk Submit po zakończeniu wprowadzania danych.
•
Pobrać dane z zewnętrznej strony — To zadanie jest kluczowym punktem programu, jest to typowy element scrapera. Do pobrania danych w formacie HTML zostanie wykorzystana biblioteka PHP do obsługi gniazd sieciowych.
•
Przetworzyć pobrane dane — Dzięki potędze wyrażeń regularnych można łatwo przetworzyć ogromne ilości danych tekstowych.
•
Sformatować uzyskane informacje i zwróć je do użytkownika — W przypadku systemu Joomla! można zastosować jedną z kilku różnych metod, które wypełniają to zadanie. Często najlepszą metodą jest zapisanie danych w formacie X M L i wykorzystanie dokumentu XSLT, który posłuży do formatowania. Aby nie komplikować niepotrzebnie przykładu, przedstawiony komponent wyświetli dane w postaci tabeli HTML.
Po wyszczególnieniu najważniejszych punktów komponentu możemy przejść do fazy konstrukcji, aby uzyskać efekt przedstawiony na rysunku 12.18. Rysunek 12.18. Screen Scraper wyświetli na stronie sformatowane informacje oobrane z zewnętrznego źródła
Oto wyniki Twojego zapytania Zapytanie Hemingway
i 1. Hemingway
] mmJ>
Category: book By: Lynn, Kenneth Schuyler Published: 1987 Language: English Details » Check Availability »
2. 2, Hemingway Category: book By. McDowell, Nicholas Published: 1989 Series. Life and works Language. English Check Availability i
3. 3. Hemingway in his own country Category: book
334
Joomla!. Profesjonalne tworzenie stron W1NW
Plik deskryptora Plik deskryptora w tym przypadku jest prymitywny, służy wyłącznie do zarejestrowania komponentu w systemie. Wprowadź poniższy kod w edytorze tekstu i zapisz go pod nazwą comscrape.xml:
encoding="utf-8"?>
«install version="1.5.0"
type="component">
ScrapeDan RahmelJuly
2007
(C) 2007 Dan Rahmel. Wszystkie prawa zastrzeżone.admin@joomlajumpstart.org www.jooml a jumpstart. org l.0.0Pobiera wartość pola z formularza, wykonuje zapytanie na zdalnej stronie i zwraca odczytane
informacje.
component="com_scrape">scrape.php
component="com_scrape">scrape.php
Kod komponentu Scraper Zadaniem komponentu jest wyszukiwanie na zewnętrznym portalu książek, których tytuł zawiera podaną przez odwiedzającego frazę. Z pobranych danych zostanie usunięty kod HTML, a uzyskane informacje, po ponownym sformatowaniu, będą przesiane do przeglądarki użytkownika odwiedzającego Twoją stronę. Wprowadź poniższy kod i zapisz go pod nazw\scrape.php\
bezpośredni
definedt
'_JEXEC' ) or die(
dostęp 'Brak dostępu' )
informacje
Rozdział 12. • Łączenie z zasobami zewnętrznymi // Sprawdź wartość parametru task i uruchom właściwą funkcję switch( JRequest::getVar( case 'query':
// Wyświetl formularz function displayQueryEntryO { ?> Formularz
zapytania
335
336
Joomla!. Profesjonalne tworzenie stron W1NW
Umieść oba pliki w archiwum o nazwie com_scrape.zip i zainstaluj komponent w systemie Joomla!. Zadaniem tego kodu jest po prostu wycięcie fragmentu zawierającego wyniki i wstawienie go na Twojej stronie. W przypadku zmiany strony musisz dopasować wyrażenie regularne przekazywane funkcji preg_match(), aby pobierany był właściwy fragment kodu HTML.
Komponent Joomlamap Google udostępnia darmową usługę, która pozwala webmasterom wstawić na swoich stronach zdjęcie satelitarne lub mapę (lub oba elementy jednocześnie) danej okolicy. Ponieważ mapa pobierana jest z serwera Google (informuje o tym stosowny komunikat), zawiera odpowiednie znaki wodne, ale także dodatkowe dane. Jest to rekompensata dla Google za to, że usługa jest darmowa. Chociaż dostępny jest już komponent, który łączy API Map Google z systemem Joomla!, samodzielna implementacja takiego rozszerzenia ma wysoką wartość dydaktyczną, pozwala Ci zrozumieć, jak funkcjonuje komunikacja ze zdalnym API. Interfejs komponentu pozwoli użytkownikowi wprowadzić adres w pole tekstowe, jak przedstawiono to na rysunku 12.19. Rysunek 12.19. Wprowadź adres w pole adresu komponentu Joomlamap
Gdy użytkownik kliknie przycisk Wyświetl lokalizację, komponent zostanie przeładowany, tym razem wartość parametru task będzie ustawiona na goto. Komponent odczyta wartość z formularza, za pomocą procedury geokodowania przetłumaczy podany adres na długość oraz szerokość geograficzną i wywoła API Map Google w celu wyświetlenia odpowiedniej mapy, jak przedstawiono to na rysunku 12.20.
API Map Google Google udostępnia bardzo dobre i darmowe API, za pomocą którego Twój program może pobierać mapy z serwerów Google. Kompletną listę funkcji API (wraz z przykładowym kodem) znajdziesz na: www.google.com/apis/maps
Rozdział 12. • Łączenie z zasobami zewnętrznymi ysunek 12.20. Component oomlamap przedstawiający sidok satelitarny siatką ulic
Aplikacja internetowa Mapy Google tworzy obiekt map, który można manipulować za pomocą kodu JavaScriptu, aby ustawić takie parametry, jak lokalizacja, zbliżenie, typ widoku (widok ulic, satelitarny, hybrydowy) i inne.
ejestracja w systemie Każda strona, która korzysta z API Map Google, musi mieć przypisany unikatowy klucz. Jeśli klucz wysłany wraz z żądaniem mapy będzie niewłaściwy, mapa nie zostanie zwrócona. Oznacza to, że musisz mieć oddzielny klucz dla serwera testowego i serwera produkcyjnego. Dodatkowo system Google rozróżnia wielkość liter w adresie, dlatego klucz przypisany stronie www.przyklad.com/mapa nie zadziała na stronie www.przyklad.com/Mapa. Aby zdobyć klucz, musisz zarejestrować się na poniższej stronie: www.google,
com/apis/maps/signup.html
lik deskryptora Plik deskryptora w tym przypadku jest prymitywny, służy wyłącznie do zarejestrowania komponentu w systemie. Wprowadź poniższy kod w edytorze tekstu i zapisz go pod nazwą com Joomlamap.xml: JoomlamapDan RahmelJuly 2007(C) 2007 Dan Rahmel. Wszystkie prawa zastrzeżone.admi n@joomlajumpstart.orgwww. joomlajumpstart .org l.0.0Komponent wyświetla mapę odpowiadającą adresowi wprowadzonemu w pole tekstowe
component="com_joomlamap">joomlamap.php
338
Joomla!. Profesjonalne tworzenie stron W1NW jooml amap. php
Kod komponentu Joomlamap Zadaniem komponentu jest wyświetlenie na stronie dwóch elementów: skryptu wyświetlającego i znacznika rezerwującego miejsce dla mapy. Wprowadź poniższy kod w edytorze tekstu i zapisz go pod nazwajoomlamap.php-.
/**
* @version $Id: joomlamap.php 5203 2007-06-15 02:45:14Z DanR $ * @copyright Copyright (C) 2007 Dan Rahmel. Wszystkie prawa zastrzeżone. * @package Joomlamap * Komponent łączący z usługą Map Google, wyświetla mapę dla wprowadzonego */ // Zablokuj
bezpośredni
defined(
'_JEXEC' ) or die( Brak dostępu' ):
// Sprawdź
wartość parametru
adresu
dostęp
task i uruchom
switch( JRequest::getVar( case 'goto': gotoLocation(); break: default:
właściwą
funkcję
'task' )) {
displayAddressEntryO; break;
}
// Przetwórz
dane przesłane
function gotoLocation()
w
formularzu {
SuserKey = $params->get('key', 0); // Pobierz wartość poła location z formularza IfldLocation = JRequest::getVar('location') : // Usuń wszystko, co mogłoby być kodem HTML itp. $fldQuery = preg_replace("/[^ąćęłńóśźża-zĄĆĘŁŃÓŚŹŻA-Z0-9
.?!$()\'\"]/", "", SfldQuery)-
//" echo "Twoja ?>
lokalizacja":
echo "
Lokalizacja: " . SfldLocation
. "
":
.
Rozdział 12. • Łączenie z zasobami zewnętrznymi //
}
}
function showAddresstaddress) { if (geocoder) { geocoder,getLatLng( address. function(point) { if (!point) { alertiaddress + " not found"): } else { map.setCenter(point. 13); var marker = new GMarker(point); map.addOverlay(marker); marker.openlnfoWindowHtml(address); map.addControl (new GSmalIZoomControl
}
);
}
O):
}
i //]]> loadO; showAddress('
?>'):
" . "Wróć do Joomlamap":
} // Wyświetl formularz do wprowadzania adresu function displayAddressEntryO { ?> Formularz wyszukiwania mapy