Professional Documents
Culture Documents
Joomla!
Przydatne dodatki
Dla Joomla! istnieje wiele uytecznych dodatkw w tym artykule pojawi si trzy z nich ktre zwikszaj ju i tak due moliwoci tego systemu a za pomoc niewielkiej iloci kodu php moemy jeszcze lepiej dopasowa je do swoich potrzeb.
Dowiesz si...
Jak dopasowa system do wasnych potrzeb za pomoc dostpnych komponentw; Jak umieci wasny skrypt PHP za pomoc Add PHP; Jak dodawa ogoszenia za pomoc komponentu JA.
Powiniene wiedzie...
Umiejtno zainstalowania systemu Joomla! oraz dodatkowych komponentw; Umiejtno tworzenia sekcji, kategorii i artykuw w Joomla!; Podstawowa wiedza z zakresu PHP.
Poziom trudnoci
pierwszej czci artykuu pokaemy na praktycznym przykadzie jak skorzysta z moliwoci umieszczenia w treci artykuu wasnego kodu php, za pomoc dodatku Add PHP. Run Digital Add PHP RD Add PHP to dodatek (bot) umoliwiajcy wstawienie do artykuu kodu PHP, ktry zostanie wykonany. Dodatek instalujemy wybierajc z menu Instalatory > Boty. Po wczytaniu plik bdzie widoczny na licie Zainstalowane boty. Przed uyciem musimy go jeszcze opublikowa wybierajc z menu Boty > Boty witryna i Publikacja. Uycie tego dodatku jest bardzo proste wystarczy w treci wybranego artykuu wstawi nazw pliku z kodem w postaci:
{rdaddphp file=sciezka/plik.php}
trzebujemy. Mona w ten sposb rwnie wstawi do artykuu zawarto pliku tekstowego (w ten sam sposb, podajc nazw pliku txt zamiast php) jest to przydatna moliwo jeli do wielu artykuw wstawiamy wsplny fragment tekstu; mona go wtedy umieci w zewntrznym pliku i zaczy w podany sposb, pniejsze zmiany dla tego wsplnego fragmentu bd dokonywane tylko w jednym pliku. Przykad zastosowania strona czasopisma Magazyn Twj Ogrd to darmowa gazetka, ktra chce rwnie udostpnia swoje treci na stronie internetowej. Odwiedzajcy maj mie moliwo przegldania aktualnego numeru i wszystkich poprzednich numerw wraz z ca ich zawartoci. Moemy wic przygotowa prosty skrypt php ktry pobierze z bazy danych informacje o dotychczas wydanych numerach i wywietli ich okadki oraz numery jako linki po klikniciu w wybrany numer pokae si jego spis treci jako kolejne pozycje w menu one z kolei prowadzi bd do artykuw w danym numerze. Skrypt ten wstawimy do powitalnego artykuu na stronie gwnej. Domylnie moemy te wywietli w menu spis treci aktualnego numeru (Rysunek 1.) Przygotowanie treci w serwisie: Wykorzystamy sekcje i kategorie do pogrupowania treci. Sekcja okreli dany
numer magazynu a kategorie w sekcji bd widoczne w menu jako jego spis treci, nazwa sekcji to numer czasopisma liczc od pierwszego wydania (np. 64). Wedug nazwy sekcji bd pobierane dane z bazy wic nie moe si ona powtarza. Ta liczba rwnie okreli ktry numer jest najnowszy (najwiksza liczba). tytu to podpis ktry wywietli si pod czasopismem (np. 1(64)/2008), do sekcji przypisa mona te obrazek okadk magazynu ktra wywietli si na stronie gwnej gdzie bdzie mona wybra dany numer. eby obrazki pojawiy si na licie rozwijanej obok pola Grafika naley je umieci na serwerze w katalogu images/stories (Rysunek 2.) Do sekcji przypisujemy kategorie. Tytu kategorii to pozycja w spisie treci danego wydania i wywietlana bdzie jako link w menu. Po klikniciu w ten link poka si artykuy z danej pozycji. Dodajemy artykuy wybierajc dla kadego odpowiedni sekcj (numer magazynu) i kategori (temat). Przygotowanie skryptu: Zadaniem naszego skryptu bdzie wywietlenie okadek wydanych magazynw i oraz ich numerw jako linkw ktre wywietl spis treci danego numeru (Listing 1.) Musimy teraz utworzy artyku lub materia statyczny ktry wywietli na stronie gwnej rezultat dziaania naszego skryptu. Moemy umieci w nim dowolne treci (Rysunek. 3) a w miejscu gdzie maj wywietli si okadki wstawiamy:
{rdaddphp file=skrypty/sekcje.php}
w miejscu gdzie ma by widoczny rezultat dziaania kodu. Podany plik moe zawiera dowolny skrypt php ktry zostanie wykonany w chwili wywietlenia artykuu Moe to by nasz wasny licznik, formularz, galeria czy zapytanie do bazy danych cokolwiek po50
03/2008
Joomla!
Po utworzeniu materiau umieszczamy go jako pierwsz pozycj w menu (Menu > mainmenu) eby wywietli si jako strona startowa oraz eby umoliwi odwiedzajcym powrt do strony z wyborem magazynu (Rysunek 4.). Zostao nam jeszcze do przygotowania wywietlanie spisu treci danego numeru po klikniciu w link pod wybranym numerem nastpuje przekazanie informacji o numerze sekcji (czyli o numerze danego magazynu ktrego spis treci ma si pokaza). Moemy zrobi to na kilka sposobw poniewa w przypadku tego serwisu w menu z lewej strony zawsze wywietlamy jaki spis treci moemy po prostu wstawi skrypt w naszym pliku strony index.php z katalogu aktualnego szablonu (templates > katalog z szablonem). Odnajdujemy w nim wpis:
<?php mosLoadModules ('left'); ?>
Ktry wywietla moduy przypisane do obszaru left (jak np. nasze menu gwne). Pod nim wstawiamy skrypt wywietlajcy linki do artykuw z danego numeru:
<? include ('skrypty/spis.php'); ?>
Z bazy danych pobierane s informacje o kategoriach w podanej sekcji i zostaj wywietlone jako linki do artykuw z kategorii (task=blogcategory). Jeli sekcja nie zostaa podana wywietla si spis treci z ostatniego numeru (kategorie z sekcji o najwyszym numerze w nazwie). Skrypt widoczny na Listingu 2. Artykuy wywietlane s w sposb domylny (Rysunek 5.) Jeli chcemy okreli swj sposb wywietlania treci (ilo kolumn, kolejno artykuw itd.) moemy w menu gwnym (Menu > mainmenu) utworzy przykadowy link do artykuw w sekcji dla ktrego okre-
Rysunek 1. Pierwsza strona magazynu Twj Ogrd z lewej spis treci aktualnego numeru, obok okadki i linki do poprzednich numerw
www.phpsolmag.org
51
Technika
limy wszystkie te ustawienia link ten nie bdzie opublikowany (Rysunek 6.) ale moemy wykorzysta go jako wzr w naszym skrypcie (plik spis.php), w miejscu gdzie wstawiamy linki do artykuw, podajc jego identyfikator (ID pozycji menu):
echo"<a href=\"$mosConfig_live_site?option=com _content&task=blogcategory&id=$id_k&Itemid=3\ \"mainlevel\">$title_k</a><br />"; " class=
Ulepszamy galeri
W tej czci artykuu zaprezentujemy komponent PonyGallery ktry umoliwi nam szybkie stworzenie galerii zdj na naszej stronie. Pokaemy rwnie jak stworzy moliwo wypisania kategorii naszych zdj w postaci linkw tekstowych.
PonyGallery
Komponent instalujemy wybierajc z menu Instalatory > Komponenty. Po wczytaniu pliku PonyGallery bdzie widoczny w menu Komponenty. Moemy teraz tworzy kategorie zdj, wczytywa pliki, zmienia ich tytuy, opisy, przydzia do kategorii itd. Miniaturk dla kategorii mona wybra z listy po wczytaniu zdj do danej kategorii.
Artykuy bd teraz wywietlane w sposb jaki okrelilimy w naszym wzorze (Rysunek 7.) Skrypt mona atwo dostosowa do wasnych potrzeb, okrelajc jakie treci maj by widoczne na stronie oraz sposb ich wywietlania.
eby doda link do galerii zdj jako pozycj w menu wybieramy Menu > mainmenu, Dodaj, Komponent, podajemy nazw (np. Galeria) i wskazujemy na licie komponentw PonyGallery. Po wczytaniu zdj moemy zobaczy nasz galeri na stronie (Rysunek 8.). Sposb wywietlania zdj na stronie oraz informacje jakie s przy tym widoczne moemy okreli w czci administracyjnej za pomoc Configuration Managera PonyGallery. Na stronie wywietlaj si nazwy kategorii wraz z przypisanymi im obrazkami. Po klikniciu w dan kategori moemy zobaczy umieszczone w niej zdjcia (Rysunek 9.).
Ktry wywietla moduy przypisane do obszaru left (jak np. nasze menu gwne). Pod nim wstawiamy skrypt wywietlajcy linki do kategorii naszych zdj:
<? include ('skrypty/linki.php'); ?>
Rysunek 7. Artykuy wywietlane w sposb okrelony za pomoc jednej pozycji w menu gwnym
52
03/2008
Joomla!
Majc ju linki widoczne w menu moemy usun link Galeria wyczajc publikacj tej pozycji (Menu > mainmenu). Rezultat widoczny jest na Rysunku 10. Zawarto pliku linki.php przedstawia Listing 3 Skrypt mona dalej rozbudowywa dodajc opcj wywietlania linkw do podkategorii lub zmieniajc zawarto menu w za-
Dodajemy ogoszenia
Ostatnim prezentowanym przez nas w tym artykule dodatkiem jest komponent JA Submit umoliwiajcy dodawanie ogosze na stronie.
W Sieci
Polskie Centrum Joomla! http://www.joomla.pl Strona z ktrej mona pobra RD Add PHP http://www.run-digital.com (dodatek mona rwnie pobra ze strony joomla.pl) PonyGallery strona projektu http://www.taher-zadeh.com (komponent mona rwnie pobra ze strony joomla.pl) Strona JA Submit http://www.joomlart.com
Listing 1. Skrypt wywietlajcy okadki magazynw oraz linki do spisu treci (plik sekcje.php)
//poczenie z baz danych nawizane w osobnym pliku i zapisane w zmiennej $connect require('connect.php'); //tabela sekcje
Komponent instalujemy wybierajc z menu Instalatory > Komponenty. Po wczytaniu pliku JA Submit bdzie widoczny w menu Komponenty. eby doda link umoliwiajcy dodawanie ogosze jako pozycj w menu wybieramy Menu > mainmenu, Dodaj, Komponent, podajemy nazw (np. Dodaj ogoszenie) i wskazujemy na licie komponentw JA Submit (Rysunek 11.). Widok formularza dodawania ogosze na stronie przedstawia Rysunek 12. Ogoszenia mog by dodawane w udostpnionych przez nas kategoriach (mona je okreli w ustawieniach komponentu JA Submit (menu Komponenty > JA Submit > Ustawienia) Dodane ogoszenia widoczne s w czci administracyjnej jako artykuy w danej kategorii i tam moemy je opublikowa lub usun. Po opublikowaniu ogoszenie pojawi si na stronie jako artyku.
Modyfikujemy komponent
Pliki komponentu znajduj si w katalogu components/com_ja_submit. Plik ja_sub-
$tablename="jos_sections";
//wczytanie danych opublikowanych sekcji $query="select id, title, image from $tablename where published='1'"; $result=mysql_query($query, $connect); if(!$result) error_message(sql_error()); //wywietlenie na stronie okadek z linkami -- po trzy w jednym rzdzie: ?> <div style="padding-left: 10px; padding-top: 10px; display: block; height: 250px; <? margin-top: 10px;">
$licz=0; {
<div style="padding-top: 25px; display: block; height: 250px; margin-top: 10px; <? } clear:both">
$id_s=$query_data["id"];
$title_s=$query_data["title"]; $image_s=$query_data["image"]; ?> <? <div style="display: block; float: left; text-align: left; padding-left: 20px;"> //okadki echo"<img src=\"images/stories/$image_s\" border=\"0\" alt=\"$title\"> <br /><br //numery jako linki -- przekazanie informacji o identyfikatorze sekcji echo"<a href=\"$mosConfig_live_site?sekcja=$id_s\"><strong>Numer:</strong> $title_ ?> <? } s</a>"; />";
</div> $licz++;
Dodatki:
RD Add PHP 4.5.2 Pony Gallery ML 2.4.1 JA Submit 2.1 pl.
echo"</div>"; ?>
www.phpsolmag.org
53
Technika
<?
//funkcja wypisuje kategorie z danej sekcji jako linki do listy artykuw function links($sekcja, $connect) { //tabela kategorii $query="select id, title from $tablename where published='1' $result=mysql_query($query, $connect); AND section='$sekcja'"; $tablename="jos_categories";
$title_k=$query_data["title"]; //link do listy artykuw z danej kategorii echo"<a href=\"$mosConfig_live_site?option=com_content "mainlevel\">$title_k</a><br />"; &task=blogcategory&id=$id_k\" class=\ } {
$query="select sectionid, catid from $tablename where $result=mysql_query($query, $connect); $dane=mysql_fetch_row($result); $id_sekcji=$dane[0]; $id_kategori=$dane[1]; id='$id_art'";
if(!$result) error_message(sql_error());
//funkcja sprawdza najnowszy numer magazynu function pokaz_ost() { require('connect.php'); $tablename="jos_sections"; $query="SELECT MAX(name) AS name FROM $tablename"; $result=mysql_query($query, $connect); if(!$result) error_message(sql_error()); $dane=mysql_fetch_row($result); $nazwa_sekcji=$dane[0];
else //sprawd sekcj danej kategorii //tabela kategorii $tablename="jos_categories"; kat'"; $query="select section from $tablename where id='$id_ $result=mysql_query($query, $connect); $dane=mysql_fetch_row($result); } $id_sekcji=$dane[0];
//tabela sekcji
if(!$result) error_message(sql_error());
//tabela sekcji $tablename="jos_sections"; $query="select title from $tablename where id='$id_sekcji'"; $result=mysql_query($query, $connect); $dane=mysql_fetch_row($result); $tytul_s=$dane[0]; if(!$result) error_message(sql_error());
$query="SELECT id from $tablename where name='$nazwa_ $result=mysql_query($query, $connect); $dane=mysql_fetch_row($result); $id_sekcji=$dane[0]; //poka spis treci } links($id_sekcji, $connect); sekcji'";
if(!$result) error_message(sql_error());
//brak sekcji i kategorii, poka spis najnowszego numeru if(($id_sekcji= =0)&&($id_kategori= =0)) { } { pokaz_ost();
//nr sekcji z linku na stronie gwnej $sekcja=$_GET["sekcja"]; $id_kat=$_GET["id"]; $task=$_GET["task"]; if($sekcja) { //poka spis treci links($sekcja, $connect); //dane z linku w menu bocznym $option=$_GET["option"]; //poka spis treci wybranego numeru
} }
//pierwsza strona, spis streci dla najnowszego numeru else { } } ?> pokaz_ost();
//brak sekcji
54
03/2008
Joomla!
//poczenie z baz danych nawizane w osobnym pliku i zapisane w zmiennej $connect include ("connect.php"); //tabela z kategoriami zdj $tablename='jos_ponygallery_catg'; $query="SELECT * FROM $tablename WHERE published = '1' AND parent = 0"; $odp=mysql_query ($query, $connect); { while($query_data=mysql_fetch_array($odp)) //identyfikator kategorii //nazwa kategorii //link } $cid=$query_data["cid"]; $name=$query_data["name"]; echo"<a href=\"index.php?option=com_ponygallery&func=viewcategory&catid=$cid\">$name</a><br><br>";
?>
Listing 5. Kod wywietlajcy w formularzu dodawania ogosze nowe pola umoliwiajce wstawienie daty rozpoczcia i zakoczenia ogoszenia. (plik ja_ submit.html.php)
<? <tr>
<td colspan="2" align="left" style="vertical-align: top;"> <div style="height: 50px; padding-top: 20px;"> Data rozpoczcia ogoszenia:
<input class="inputbox" type="text" name="publish_up" id="publish_up" size="17" maxlength="19" value="<?php echo $row->publish_up; <input type="reset" class="button" value="kalendarz" onclick="return showCalendar('publish_up', 'y-mm-dd');" /> </div> </td> </tr> <tr> <td colspan="2" align="left" style="vertical-align: top;"> <div style="height: 50px;"> Data zakoczenia ogoszenia: ?>" />
<input class="inputbox" type="text" name="publish_down" id="publish_down" size="17" maxlength="19" value="<?php echo $row->publish_ <input type="reset" class="button" value="kalendarz" onclick="return showCalendar('publish_down', 'y-mm-dd');" /> </div> </td> </tr> ?> down; ?>" />
Listing 6. W pliku index.php z katalogu aktualnego szablonu (templates > katalog z szablonem) w czci head wstawiamy linki
<link rel="stylesheet" type="text/css" href="<?php echo $mosConfig_live_site;?>/includes/js/calendar/calendar-mos.css" /> <script language="javascript" type="text/javascript" src="<?php echo $mosConfig_live_site;?>/includes/js/calendar/calendar_mini.js"></ <script language="javascript" type="text/javascript" src="<?php echo $mosConfig_live_site;?>/includes/js/calendar/lang/calendarpl.js"></script> script>
www.phpsolmag.org
55
Technika
mit.html.php wywietla formularz widoczny na stronie moemy tutaj ukry pola ktrych nie chcemy wywietla (np. imi i nazwisko czy moliwo dodawania grafiki). Umieszczajc go w komentarzu powodujemy e nie bdzie on widoczny na stronie. Musimy jeszcze uwzgldni t zmian w funkcji submitbutton ktra sprawdza czy wszystkie wymagane pola s wypenione. Bierzemy w komentarz odpowiedni jej fragment:
/*
Instrukcj dodawania ogosze, ktra jest widoczna nad formularzem moemy zmodyfikowa zmieniajc tekst w pliku polish.php (w katalogu components/com_ja_submit/language). Na koniec pokaemy jak doda dwa nowe pola do formularza tak eby dodajcy ogoszenia sami mogli zadecydowa o dacie rozpoczcia i zakoczenia ogoszenia (administrator ma dostp do tych pl w edycji artykuu). W pliku ja_submit.html.php w miejscu gdzie maj by widoczne nowe pola wklejamy kod skopiowany z czci administracyjnej (Listing 5). Ostatnia cz to wywietlenie kalendarza po klikniciu w przycisk. Skrypty kalendarza znajduj si w katalogu includes/js/calendar musimy wic wstawi do nich link w czci head naszej strony. Wstawione daty bd widoczne w czci administracyjnej w edycji artykuu jako pola Rozpocznij i Zakocz. Zmodyfikowany formularz przedstawia Rysunek 13.
MAGDALENA MARYASKA
Rysunek 12. Formularz dodawania ogosze na stronie
56
03/2008
Joomla!
www.phpsolmag.org
57