Upload
lukas-russa
View
35
Download
0
Embed Size (px)
Citation preview
03/2008
Technika
50
Joomla!
www.phpsolmag.org 51
W pierwszej części artykułu poka-żemy na praktycznym przykła-dzie jak skorzystać z możliwo-
ści umieszczenia w treści artykułu własnego kodu php, za pomocą dodatku Add PHP.
Run Digital Add PHPRD Add PHP to dodatek (bot) umożliwiają-cy wstawienie do artykułu kodu PHP, który zostanie wykonany. Dodatek instalujemy wybierając z menu Instalatory –> Boty. Po wczytaniu plik bę-dzie widoczny na liście Zainstalowane boty. Przed użyciem musimy go jeszcze opubliko-wać wybierając z menu Boty –> Boty witryna i Publikacja.
Użycie tego dodatku jest bardzo proste – wystarczy w treści wybranego artykułu wstawić nazwę pliku z kodem w postaci:
{rdaddphp file=sciezka/plik.php}
w miejscu gdzie ma być widoczny rezultat działania kodu.
Podany plik może zawierać dowolny skrypt php który zostanie wykonany w chwili wyświetlenia artykułu Może to być nasz własny licznik, formularz, galeria czy zapytanie do bazy danych – cokolwiek po-
trzebujemy. Można w ten sposób również wstawić do artykułu zawartość pliku teksto-wego (w ten sam sposób, podając nazwę pli-ku txt zamiast php) – jest to przydatna moż-liwość jeśli do wielu artykułów wstawiamy wspólny fragment tekstu; można go wtedy umieścić w zewnętrznym pliku i załączyć w podany sposób, późniejsze zmiany dla tego wspólnego fragmentu będą dokonywane tyl-ko w jednym pliku.
Przykład zastosowania – strona czasopismaMagazyn Twój Ogród to darmowa gazetka, która chce również udostępniać swoje treści na stronie internetowej. Odwiedzający ma-ją mieć możliwość przeglądania aktualnego numeru i wszystkich poprzednich nume-rów wraz z całą ich zawartością.
Możemy więc przygotować prosty skrypt php który pobierze z bazy danych informa-cje o dotychczas wydanych numerach i wy-świetli ich okładki oraz numery jako lin-ki – po kliknięciu w wybrany numer poka-że się jego spis treści jako kolejne pozycje w menu – one z kolei prowadzić będą do arty-kułów w danym numerze.
Skrypt ten wstawimy do powitalnego ar-tykułu na stronie głównej. Domyślnie może-my też wyświetlić w menu spis treści aktu-alnego numeru (Rysunek 1.) Przygotowanie treści w serwisie:
• Wykorzystamy sekcje i kategorie do po-grupowania treści. Sekcja określi dany
numer magazynu a kategorie w sekcji będą widoczne w menu jako jego spis treści,
• nazwa sekcji to numer czasopisma li-cząc od pierwszego wydania (np. 64). Według nazwy sekcji będą pobierane dane z bazy więc nie może się ona po-wtarzać. Ta liczba również określi któ-ry numer jest najnowszy (największa liczba).
• tytuł to podpis który wyświetli się pod czasopismem (np. 1(64)/2008),
• do sekcji przypisać można też obrazek – okładkę magazynu która wyświe-tli się na stronie głównej gdzie będzie można wybrać dany numer. Żeby ob-razki pojawiły się na liście rozwijanej obok pola Grafika należy je umieścić na serwerze w katalogu images/stories (Rysunek 2.)
Do sekcji przypisujemy kategorie. Tytuł ka-tegorii to pozycja w spisie treści danego wy-dania i wyświetlana będzie jako link w me-nu. Po kliknięciu w ten link pokażą się ar-tykuły z danej pozycji.
Dodajemy artykuły wybierając dla każde-go odpowiednią sekcję (numer magazynu) i kategorię (temat). Przygotowanie skryptu:
• Zadaniem naszego skryptu będzie wy-świetlenie okładek wydanych magazy-nów i oraz ich numerów jako linków które wyświetlą spis treści danego nu-meru (Listing 1.)
Musimy teraz utworzyć artykuł lub mate-riał statyczny który wyświetli na stronie głównej rezultat działania naszego skryp-tu. Możemy umieścić w nim dowolne tre-ści (Rysunek. 3) a w miejscu gdzie mają wy-świetlić się okładki wstawiamy:
{rdaddphp file=skrypty/sekcje.php}
Joomla!
Dla Joomla! istnieje wiele użytecznych dodatków – w tym artykule pojawią się trzy z nich – które zwiększają już i tak duże możliwości tego systemu a za pomocą niewielkiej ilości kodu php możemy jeszcze lepiej dopasować je do swoich potrzeb.
Dowiesz się...• Jak dopasować system do własnych potrzeb
za pomocą dostępnych komponentów;
• Jak umieścić własny skrypt PHP za pomocą
Add PHP;
• Jak dodawać ogłoszenia za pomocą kompo-
nentu JA.
Powinieneś wiedzieć...• Umiejętność zainstalowania systemu Joomla!
oraz dodatkowych komponentów;
• Umiejętność tworzenia sekcji, kategorii i arty-
kułów w Joomla!;
• Podstawowa wiedza z zakresu PHP.
Poziom trudności
Przydatne dodatki
03/2008
Technika
50
Joomla!
www.phpsolmag.org 51
Po utworzeniu materiału umieszczamy go jako pierwszą pozycję w menu (Menu –> mainmenu) żeby wyświetlił się jako strona startowa oraz żeby umożliwić odwiedza-jącym powrót do strony z wyborem maga-zynu (Rysunek 4.). Zostało nam jeszcze do przygotowania wyświetlanie spisu treści da-nego numeru – po kliknięciu w link pod wybranym numerem następuje przekaza-nie informacji o numerze sekcji (czyli o nu-merze danego magazynu którego spis treści ma się pokazać). Możemy zrobić to na kil-ka sposobów – ponieważ w przypadku tego serwisu w menu z lewej strony zawsze wy-świetlamy jakiś spis treści możemy po pro-stu wstawić skrypt w naszym pliku strony – index.php z katalogu aktualnego szablo-nu (templates –> katalog z szablonem). Od-najdujemy w nim wpis:
<?php mosLoadModules ('left'); ?>
Który wyświetla moduły przypisane do ob-szaru left (jak np. nasze menu główne). Pod nim wstawiamy skrypt wyświetlający linki do artykułów z danego numeru:
<? include ('skrypty/spis.php'); ?>
Z bazy danych pobierane są informacje o kategoriach w podanej sekcji i zostają wy-świetlone jako linki do artykułów z kate-gorii (task=blogcategory).
Jeśli sekcja nie została podana wyświetla się spis treści z ostatniego numeru (katego-rie z sekcji o najwyższym numerze w na-zwie). Skrypt widoczny na Listingu 2.
Artykuły wyświetlane są w sposób do-myślny (Rysunek 5.)
Jeśli chcemy określić swój sposób wyświe-tlania treści (ilość kolumn, kolejność arty-kułów itd.) możemy w menu głównym (Me-nu –> mainmenu) utworzyć przykładowy link do artykułów w sekcji dla którego okre-
Rysunek 1. Pierwsza strona magazynu Twój Ogród – z lewej spis treści aktualnego numeru, obok okładki i linki do poprzednich numerów
Rysunek 2. Nowa sekcja – grudniowy numer magazynu
Rysunek 3. Przykład artykułu z wstawionym kodem php
Rysunek 4. Łącze do materiału który wyświetli się na stronie głównej w menu głównym
03/2008
Technika
52
Joomla!
www.phpsolmag.org 53
ślimy wszystkie te ustawienia – link ten nie będzie opublikowany (Rysunek 6.) ale mo-żemy wykorzystać go jako wzór w naszym skrypcie (plik spis.php), w miejscu gdzie wstawiamy linki do artykułów, podając jego identyfikator (ID pozycji menu):
echo"<a href=\"$mosConfig_live_site?option=com
_content&task=blogcategory&id=$id_k&Itemid=3\
" class=
\"mainlevel\">$title_k</a><br />";
Artykuły będą teraz wyświetlane w sposób ja-ki określiliśmy w naszym wzorze (Rysunek 7.)
Skrypt można łatwo dostosować do własnych potrzeb, określając jakie treści mają być widocz-ne na stronie oraz sposób ich wyświetlania.
Ulepszamy galerięW tej części artykułu zaprezentujemy kom-ponent PonyGallery który umożliwi nam szybkie stworzenie galerii zdjęć na naszej stronie. Pokażemy również jak stworzyć możliwość wypisania kategorii naszych zdjęć w postaci linków tekstowych.
PonyGalleryKomponent instalujemy wybierając z menu Insta-latory –> Komponenty. Po wczytaniu pliku Pony-Gallery będzie widoczny w menu Komponenty.
Możemy teraz tworzyć kategorie zdjęć, wczytywać pliki, zmieniać ich tytuły, opisy, przydział do kategorii itd. Miniaturkę dla kategorii można wybrać z listy po wczyta-niu zdjęć do danej kategorii.
Żeby dodać link do galerii zdjęć jako pozycję w menu wybieramy Menu –> mainmenu, Dodaj, Komponent, podajemy nazwę (np. Galeria) i wska-zujemy na liście komponentów PonyGallery.
Po wczytaniu zdjęć możemy zobaczyć naszą ga-lerię na stronie (Rysunek 8.). Sposób wyświetlania zdjęć na stronie oraz informacje jakie są przy tym widoczne możemy określić w części administracyj-nej za pomocą Configuration Managera PonyGalle-ry. Na stronie wyświetlają się nazwy kategorii wraz z przypisanymi im obrazkami. Po kliknięciu w da-ną kategorię możemy zobaczyć umieszczone w niej zdjęcia (Rysunek 9.).
Dodajemy linki w menuDo wyboru galerii możemy wrócić klikając przy-cisk wstecz jeśli jednak mamy duży wybór zdjęć w wielu kategoriach może przydać się nam ich spis w postaci linków zawsze widocznych na stronie.
Rezultat ten możemy osiągnąć w podobny spo-sób co w poprzednim przykładzie – tworzymy od-powiedni skrypt i umieszczamy go tam gdzie ma być widoczny – w artykule lub w danym menu. Wstawienie skryptu w menu bocznym: W pliku index.php z katalogu aktualnego szablonu (templa-tes –> katalog z szablonem) odnajdujemy wpis:
<?php mosLoadModules ('left'); ?>
Który wyświetla moduły przypisane do ob-szaru left (jak np. nasze menu główne). Pod nim wstawiamy skrypt wyświetlający linki do kategorii naszych zdjęć:
<? include ('skrypty/linki.php'); ?>
Rysunek 5. Domyślny sposób wyświetlania artykułów
Rysunek 6. Przykładowa pozycja w menu z zapisanymi ustawieniami dotyczącymi wyświetlania artykułów
Rysunek 7. Artykuły wyświetlane w sposób określony za pomocą jednej pozycji w menu głównym
Rysunek 8. Kategorie zdjęć stworzone a pomocą PonyGallery
03/2008
Technika
52
Joomla!
www.phpsolmag.org 53
Mając już linki widoczne w menu możemy usunąć link Galeria wyłączając publikację tej pozycji (Menu –> mainmenu). Rezultat widoczny jest na Rysunku 10. Zawartość pliku linki.php przedstawia Listing 3
Skrypt można dalej rozbudowywać – do-dając opcję wyświetlania linków do podka-tegorii lub zmieniając zawartość menu w za-
leżności od wyboru odwiedzającego (gale-ria – treści).
Dodajemy ogłoszeniaOstatnim prezentowanym przez nas w tym artykule dodatkiem jest komponent JA Sub-mit umożliwiający dodawanie ogłoszeń na stronie.
Komponent instalujemy wybierając z menu In-stalatory –> Komponenty. Po wczytaniu pliku JA Submit będzie widoczny w menu Komponenty.
Żeby dodać link umożliwiający dodawanie ogłoszeń jako pozycję w menu wybieramy Me-nu –> mainmenu, Dodaj, Komponent, podajemy nazwę (np. Dodaj ogłoszenie) i wskazujemy na liście komponentów JA Submit (Rysunek 11.).
Widok formularza dodawania ogłoszeń na stronie przedstawia Rysunek 12.
Ogłoszenia mogą być dodawane w udostęp-nionych przez nas kategoriach (można je okre-ślić w ustawieniach komponentu JA Submit (menu Komponenty –> JA Submit –> Ustawie-nia) Dodane ogłoszenia widoczne są w części administracyjnej jako artykuły w danej kate-gorii i tam możemy je opublikować lub usu-nąć. Po opublikowaniu ogłoszenie pojawi się na stronie jako artykuł.
Modyfikujemy komponentPliki komponentu znajdują się w katalo-gu components/com_ja_submit. Plik ja_sub-
Rysunek 9. Widok wybranej kategorii
Rysunek 10. Linki do kategorii zdjęć widoczne w lewym menu
Listing 1. Skrypt wyświetlający okładki magazynów oraz linki do spisu treści (plik sekcje.php)
//połączenie z bazą danych nawiązane w osobnym pliku i zapisane w zmiennej $connect
require('connect.php');
//tabela sekcje
$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());
//wyświetlenie na stronie okładek z linkami -- po trzy w jednym rzędzie:
?>
<div style="padding-left: 10px; padding-top: 10px; display: block; height: 250px;
margin-top: 10px;">
<?
$licz=0;
while($query_data=mysql_fetch_array($result))
{
if (($licz!=0)&&(($licz % 3)= =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;">
<?
//okładki
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++;
}
echo"</div>";
?>
Informacje o wersjach użytych w artykule:
• Joomla 1.0.13 JIE iso
Dodatki:
• RD Add PHP 4.5.2• Pony Gallery ML 2.4.1• JA Submit 2.1 pl.
W Sieci
• Polskie Centrum Joomla! – http://www.joomla.pl• Strona z której można pobrać RD Add PHP – http://www.run-digital.com (dodatek można
również pobrać ze strony joomla.pl)• PonyGallery – strona projektu – http://www.taher-zadeh.com (komponent można również
pobrać ze strony joomla.pl)• Strona JA Submit – http://www.joomlart.com
03/2008
Technika
54
Joomla!
www.phpsolmag.org 55
Listing 2. Skrypt wyświetlający linki do artykułów z wybranego numeru magazynu (spis.php)
<?
//funkcja wypisuje kategorie z danej sekcji jako linki do listy
artykułów
function links($sekcja, $connect)
{
//tabela kategorii
$tablename="jos_categories";
$query="select id, title from $tablename where published='1'
AND section='$sekcja'";
$result=mysql_query($query, $connect);
if(!$result) error_message(sql_error());
while($query_data=mysql_fetch_array($result))
{
$id_k=$query_data["id"];
$title_k=$query_data["title"];
//link do listy artykułów z danej kategorii
echo"<a href=\"$mosConfig_live_site?option=com_content
&task=blogcategory&id=$id_k\" class=\
"mainlevel\">$title_k</a><br />";
}
}
//funkcja sprawdza najnowszy numer magazynu
function pokaz_ost()
{
require('connect.php');
//tabela sekcji
$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];
$query="SELECT id from $tablename where name='$nazwa_
sekcji'";
$result=mysql_query($query, $connect);
if(!$result) error_message(sql_error());
$dane=mysql_fetch_row($result);
$id_sekcji=$dane[0];
//pokaż spis treści
links($id_sekcji, $connect);
}
//nr sekcji z linku na stronie głównej
$sekcja=$_GET["sekcja"];
//dane z linku w menu bocznym
$id_kat=$_GET["id"];
$option=$_GET["option"];
$task=$_GET["task"];
//pokaż spis treści wybranego numeru
if($sekcja)
{
//pokaż spis treści
links($sekcja, $connect);
}
//brak sekcji
else
{
//jest id kategorii, wyświetlana jest lista artykułów lub
wybrany artykuł
if(($id_kat)&&($option= ='com_content')&&(($task= ='blogcat
egory')||($task= ='view')))
{
require('connect.php');
if($task= ='view')
{
//sprawdź sekcję wyświetlanego artykułu
$id_art=$_GET["id"];
//tabela artykułów
$tablename="jos_content";
$query="select sectionid, catid from $tablename where
id='$id_art'";
$result=mysql_query($query, $connect);
if(!$result) error_message(sql_error());
$dane=mysql_fetch_row($result);
$id_sekcji=$dane[0];
$id_kategori=$dane[1];
}
else
{
//sprawdź sekcję danej kategorii
//tabela kategorii
$tablename="jos_categories";
$query="select section from $tablename where id='$id_
kat'";
$result=mysql_query($query, $connect);
if(!$result) error_message(sql_error());
$dane=mysql_fetch_row($result);
$id_sekcji=$dane[0];
}
//tabela sekcji
$tablename="jos_sections";
$query="select title from $tablename where id='$id_sekcji'";
$result=mysql_query($query, $connect);
if(!$result) error_message(sql_error());
$dane=mysql_fetch_row($result);
$tytul_s=$dane[0];
//brak sekcji i kategorii, pokaż spis najnowszego numeru
if(($id_sekcji= =0)&&($id_kategori= =0))
{
pokaz_ost();
}
else
{
//pokaz spis treści danego numeru
links($id_sekcji, $connect);
}
}
//pierwsza strona, spis streści dla najnowszego numeru
else
{
pokaz_ost();
}
}
?>
03/2008
Technika
54
Joomla!
www.phpsolmag.org 55
Listing 3. Skrypt wyświetlający w menu linki tekstowe do kategorii zdjęć (linki.php)
<?
//połączenie z bazą danych nawiązane 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
$cid=$query_data["cid"];
//nazwa kategorii
$name=$query_data["name"];
//link
echo"<a href=\"index.php?option=com_ponygallery&func=viewcategory&catid=$cid\">$name</a><br><br>";
}
?>
Listing 4. Przykładowy fragment wyświetla pole Imię i nazwisko
<?
/*
<tr><td><label for="created_by_alias"><?php echo _H_FULLNAME; ?>*</label>:</td>
<td><input class="inputbox" type="text" name="created_by_alias" id="created_by_alias" size="50" maxlength="50" value="<?php echo
$my->name; ?>" style="width:200px;" /></td></tr>
*/
?>
Listing 5. Kod wyświetlający w formularzu dodawania ogłoszeń nowe pola umożliwiające wstawienie daty rozpoczęcia i zakończenia ogłoszenia. (plik ja_submit.html.php)
<?
<tr>
<td colspan="2" align="left" style="vertical-align: top;">
<div style="height: 50px; padding-top: 20px;">
Data rozpoczęcia ogłoszenia:
<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 zakończenia ogłoszenia:
<input class="inputbox" type="text" name="publish_down" id="publish_down" size="17" maxlength="19" value="<?php echo $row->publish_
down; ?>" />
<input type="reset" class="button" value="kalendarz" onclick="return showCalendar('publish_down', 'y-mm-dd');" />
</div>
</td>
</tr>
?>
Listing 6. W pliku index.php z katalogu aktualnego szablonu (templates –> katalog z szablonem) w części 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>
<script language="javascript" type="text/javascript" src="<?php echo $mosConfig_live_site;?>/includes/js/calendar/lang/calendar-
pl.js"></script>
03/2008
Technika
56
mit.html.php wyświetla formularz widoczny na stronie – możemy tutaj ukryć pola któ-rych nie chcemy wyświetlać (np. imię i na-zwisko czy możliwość dodawania grafiki). Umieszczając go w komentarzu powodujemy że nie będzie on widoczny na stronie. Musi-my jeszcze uwzględnić tą zmianę w funkcji submitbutton która sprawdza czy wszystkie wymagane pola są wypełnione. Bierzemy w komentarz odpowiedni jej fragment:
/*
else if ( form.created_by_alias.value = =
"" ) {
alert ( "<?php echo _H_ENTER_NAME; ?>" );}*/
Instrukcję dodawania ogłoszeń, która jest wi-doczna nad formularzem możemy zmodyfiko-wać zmieniając tekst w pliku polish.php (w ka-talogu components/com_ja_submit/language).
Na koniec pokażemy jak dodać dwa nowe pola do formularza tak żeby dodający ogłosze-nia sami mogli zadecydować o dacie rozpoczę-cia i zakończenia ogłoszenia (administrator ma dostęp do tych pól w edycji artykułu). W pliku ja_submit.html.php w miejscu gdzie ma-ją być widoczne nowe pola wklejamy kod sko-piowany z części administracyjnej (Listing 5). Ostatnia część to wyświetlenie kalendarza po kliknięciu w przycisk. Skrypty kalendarza znajdują się w katalogu includes/js/calendar musimy więc wstawić do nich link w części head naszej strony. Wstawione daty będą wi-doczne w części administracyjnej w edycji ar-tykułu jako pola Rozpocznij i Zakończ. Zmody-fikowany formularz przedstawia Rysunek 13.
MAGDALENA MARYAŃSKAAutorka pracuje na Politechnice Krakowskiej ja-
ko webmaster.
Kontakt: [email protected]
Rysunek 11. Dodanie linku do komponentu JA Submit w menu głównym
Rysunek 12. Formularz dodawania ogłoszeń na stronie
Rysunek 13. Wygląd formularza dodawania ogłoszeń po wprowadzeniu zmian
Joomla!
www.phpsolmag.org 57