{"id":227,"date":"2008-11-28T17:42:10","date_gmt":"2008-11-28T16:42:10","guid":{"rendered":"http:\/\/morony.pl\/?p=227"},"modified":"2008-11-28T17:42:10","modified_gmt":"2008-11-28T16:42:10","slug":"joomla-pisanie-wlasnych-modulow-i-komponentow","status":"publish","type":"post","link":"https:\/\/morony.pl\/?p=227","title":{"rendered":"Joomla &#8211; Pisanie w\u0142asnych modu\u0142\u00f3w i komponent\u00f3w"},"content":{"rendered":"<div>\n<p>\u00a0<\/p>\n<div>\n<p>Kiedy\u015b stworzenie ma\u0142ej strony domowej zajmowa\u0142o du\u017co czasu. \u00a0Trzeba by\u0142o zaprojektowa\u0107 ciekawy layout, napisa\u0107 w HTMLu osobno ka\u017cd\u0105 stron\u0119. A je\u015bli nagle zachcia\u0142o nam si\u0119 doda\u0107 jedn\u0105 pozycj\u0119 w menu trzeba by\u0142o edytowa\u0107 kilkana\u015bcie (kilkadziesi\u0105t czasem) plik\u00f3w. Je\u015bli kto\u015b by\u0142 ambitny, pisa\u0142 stron\u0119 z u\u017cyciem php, co pozwala\u0142o na includowanie element\u00f3w powtarzaj\u0105cych si\u0119 na ka\u017cdej stronie itp. W dalszym ci\u0105gu podmiana jakiej\u015b tre\u015bci by\u0142a jednak \u017cmudna. Czasy te min\u0119\u0142y, gdy ludzie wymy\u015blili systemy CMS. Jednym z najpopularniejszych i najlepszych tego typu rozwi\u0105za\u0144 jest Joomla!<\/p>\n<h3>Zalety Joomla:<\/h3>\n<ul>\n<li>Joomla jest darmowa. \u2013 Mo\u017cemy j\u0105 wykorzystywa\u0107 za darmo, bez ogranicze\u0144 i to nawet w komercyjnych projektach.<\/li>\n<li>Joomla jest pisana przez ogromny zesp\u00f3\u0142 zapale\u0144c\u00f3w, kt\u00f3rzy od kilku lat dopieszczaj\u0105 ka\u017cdy szczeg\u00f3lik kodu. Na 99%, je\u015bli w kodzie isntnieje jaki\u015b babol, zostanie on znaleziony przez tych kt\u00f3rzy naprawi\u0105 ten b\u0142\u0105d i wydadz\u0105 \u0142atk\u0119. Nie przez tych kt\u00f3rzy go wykorzystaj\u0105 do zniszczenia strony.<\/li>\n<li>Umo\u017cliwia bardzo proste tworzenie oraz instalowanie pobranych z internetu rozsze\u017ce\u0144 \u2013 sk\u00f3rek, modu\u0142\u00f3w i komponent\u00f3w.\u00a0<\/li>\n<li>Bogaty zbi\u00f3r rozsze\u017ce\u0144 oraz funkcji wbudowanych w joomle pozwala na stworzenie bardzo zaawansowanej strony internetowej.<\/li>\n<\/ul>\n<p>\u00a0<\/p>\n<h3>Czym jest modu\u0142 a czym komponent?<\/h3>\n<p>Kiedy przegl\u0105damy jak\u0105\u015b stron\u0119 internetow\u0105, zazwyczaj korzystamy z menu. Czyli takiej tam listy odno\u015bnik\u00f3w, kt\u00f3re prowadz\u0105 nas w r\u00f3\u017cne miejsca na witrynie. To gdzie si\u0119 przeniesiemy po klikni\u0119ciu w link, to jest w\u0142a\u015bnie komponent. Jest to Jaka\u015b trze\u015b\u0107, kt\u00f3ra znajduje si\u0119 w centralnym (zazwyczaj) miejscu strony. Przyk\u0142adami komponent\u00f3w mog\u0105 by\u0107 Forum, Artyku\u0142, sklep internetowy , Panel konfiguracji konta u\u017cytkownika, Lista najnowszych artyku\u0142\u00f3w, Wyniki ankiety.\u00a0<\/p>\n<p>Modu\u0142 natomiast jest mniejszym fragmentem kodu (tworz\u0105cego jak\u0105\u015b logiczn\u0105 ca\u0142o\u015b\u0107). Z kt\u00f3rych uk\u0142adamy wszystko znajduj\u0105ce si\u0119 dooko\u0142a komponent\u00f3w. Np. Na g\u00f3rze witryny pokazuje nam si\u0119 menu. Jest to w\u0142asnie modu\u0142. Modu\u0142ami mog\u0105 te\u017c by\u0107: Panel logowania, Panel newslettera, Panel statystyk.\u00a0<\/p>\n<p>To gdzie s\u0105 wy\u015bwietlane modu\u0142y i tre\u015bc komponentu na stronie zale\u017cy od sk\u00f3rki. Tworz\u0105c sk\u00f3rk\u0119 (czego nied\u0142ug\u0105 si\u0119 nauczymy) definiujemy miejsca na modu\u0142y, oraz miejsce na tre\u015b\u0107 komponentu \u2013 czyli miejsce gdzie b\u0119dzie \u0142adowana g\u0142\u00f3wna tre\u015b\u0107 strony. Sp\u00f3j\u017cmy na poni\u017cszy shcemat:<\/p>\n<p style=\"text-align: center; \"><a href=\"http:\/\/morony.pl\/wp-content\/uploads\/2008\/11\/template_schema.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-223 aligncenter\" title=\"template_schema\" src=\"http:\/\/morony.pl\/wp-content\/uploads\/2008\/11\/template_schema-300x249.png\" alt=\"\" width=\"300\" height=\"249\" srcset=\"https:\/\/morony.pl\/wp-content\/uploads\/2008\/11\/template_schema-300x249.png 300w, https:\/\/morony.pl\/wp-content\/uploads\/2008\/11\/template_schema.png 789w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Na obrazku widzimy jak\u0105\u015b bardzo schematyczn\u0105 sk\u00f3rk\u0119. Na czerwono zaznaczono miejsce (najcz\u0119\u015bciej jak\u0105\u015b warstw\u0119 &#8211; &lt;div&gt;), do kt\u00f3rej jest \u0142\u0105dowana zawarto\u015b\u0107 aktualnie przegl\u0105danego komponentu. Je\u015bli klikn\u0105\u0142e\u015b w menu \u201eForum\u201d wtedy w czerwonym polu wczyta si\u0119 forum, a nie tre\u015b\u0107 artyku\u0142u. Na stronie jednocze\u015bnie mo\u017ce by\u0107 wy\u015bwietlony tylko jeden komponent.<\/p>\n<p>Na niebiesko natomiast zaznaczono miesca (czyli inne warstwy HTML), do kt\u00f3rych b\u0119d\u0105 \u0142adowane modu\u0142y. Zawsze. Je\u017celi miejscu ka\u017cemy jakiemu\u015b modu\u0142owi wy\u015bwietla\u0107 si\u0119 w miejscu \u201etop\u201d wtedy za ka\u017cdym razem i przy wczytaniu ka\u017cdego komponentu, w miejscu \u201etop\u201d znajdziemy zawarto\u015b\u0107 menu. (To nie jest do ko\u0144ca prawda. Przy tworzeniu modu\u0142u mo\u017cemy zdefiniowa\u0107 na kt\u00f3rych stronach ma by\u0107 on widoczny a na kt\u00f3rych nie. Technicznie rzecz bior\u0105c wybieramy dla jakich pozycji menu (wszystkich menu dost\u0119pnych na witrynie) ma by\u0107 widoczny dany modu\u0142)<\/p>\n<p>Tw\u00f3rca zdefiniowa\u0142 7 miejsc na stronie, do kt\u00f3rych mo\u017cemy wczytywa\u0107 modu\u0142y:<\/p>\n<p>\u00a0<\/p>\n<ul>\n<li>Search \u2013 mo\u017cemy tam wpakowa\u0107 modu\u0142 zarz\u0105dzania u\u017cytkownikiem (wyloguj, konto, wiadomo\u015bci), oraz modu\u0142 wyszukiwarki (czyli malutkie okienko z polem do wpisania s\u0142owakluczowego. Kiedy wci\u015bniemy \u201eszukaj\u201d wczytana zostanie strona z komponentem \u201ewyniki wyszukiwania\u201d \u2013 czyli wyniki wyszukiwania wy\u015bwietl\u0105 si\u0119 w czerwonym polu. Kiedy do jednego miejsca na modu\u0142y (nazwijmy to miejsce kontenerem) zostanie przypisanych kilka modu\u0142\u00f3w, zostan\u0105 one wy\u015bwietlone wszystkie. Mo\u017cemy za pomoc\u0105 panelu administracyjnego ustawia\u0107 kolejno\u015b\u0107, a dodatkowo programista przy tworzeniu templatki ma mo\u017cliwo\u015b\u0107 wyboru w jaki spos\u00f3b maj\u0105 by\u0107 wczytywane modu\u0142y (lista, ka\u017cdy modu\u0142 w osobnej tabelce, czy te\u017c bez \u017cadnego formatowania)<\/li>\n<li>Top \u2013 Miejsce na menu.\u00a0<\/li>\n<li>Route \u2013 Miejsce na modu\u0142, kt\u00f3ry wy\u015bwietli aktualn\u0105 pozycj\u0119 u\u017cytkownika na stronie (np. www.adres.pl &gt; forum &gt; samochody &gt; Tworzenie nowego w\u0105tku<\/li>\n<li>Left, Right \u2013 obszerne miejsca na du\u017ce modu\u0142y takie jak ankieta, subskrypcja newslettera itp.<\/li>\n<li>Footer \u2013 miejsce na stopk\u0119. Mo\u017ce to by\u0107 modu\u0142 \u201ew\u0142asny tekst HTML\u201d \u2013 dzi\u0119ki temu b\u0119dziemy mogli \u0142atwo zmieni\u0107 tre\u015b\u0107 stopki za pomoc\u0105 panelu admina. Nie mieliby\u015bmy takiej mo\u017cliwo\u015bci gdyby\u015bmy zakodowali stok\u0119 bezpo\u015brenio w sk\u00f3rce.<\/li>\n<li>Info \u2013 Modu\u0142 dodatkowych informacji. Na przyk\u0142ad informacji o promocji.<\/li>\n<\/ul>\n<p>\u00a0<\/p>\n<p>Miejsca na modu\u0142y w templatce, cz\u0119sto s\u0105 napisane tak, \u017ce gdy nie ma przypisanego \u017cadnego modu\u0142y, wtedy kontenery s\u0105 nie widoczne. W powy\u017cszym przypadku na przyk\u0142ad gdy pozostawimy \u201einfo\u201d puste, wtedy komponent mo\u017ce nam si\u0119 przeci\u0105gn\u0105\u0107 a\u017c do \u201eroute\u201d<\/p>\n<p>Dzi\u0119ki temu, mo\u017cemy b\u0142yskawicznie w panelu w\u0142\u0105cza\u0107, wy\u0142\u0105cza\u0107 modu\u0142y oraz przenosi\u0107 je z jednego kontenera na drugi.<\/p>\n<h3>Zalety p\u0142yn\u0105ce z tego, \u017ce piszemy w joomli<\/h3>\n<p>Poniewa\u017c pliki modu\u0142\u00f3w i komponent\u00f3w, kt\u00f3re piszemy s\u0105 przetwarzane przez joomle, mamy dost\u0119p do wszystkich jej klas. Np:<\/p>\n<p>\u00a0<\/p>\n<ul>\n<li>JUser \u2013 Pobieranie informacji o u\u017cytkownikach, tworzenie r\u00f3\u017cnych poziom\u00f3w dost\u0119pu do modu\u0142\u00f3w i komponent\u00f3w.<\/li>\n<li>JText \u2013 Obs\u0142uga plik\u00f3w j\u0119zykowych.<\/li>\n<li>JFactory \u2013 Np. Obs\u0142uga bazy danych Joomli.<\/li>\n<li>JRequest \u2013 Obs\u0142uga metod GET, POST i FILE.<\/li>\n<\/ul>\n<p>\u00a0<\/p>\n<h3>Komponent w praktyce:<\/h3>\n<p>\u00a0<\/p>\n<ul>\n<li>Z regu\u0142y posiada sw\u00f3j panel administracyjny, kt\u00f3ry r\u00f3wnie\u017c mo\u017cemy mu napisa\u0107. Na przyk\u0142ad komponent wczytuj\u0105cy z bazy danych dane o artystach muzycznych oraz ich albumach oraz bli\u017aniaczy komponent w bazie danych do tworzenia nowych rekord\u00f3w<\/li>\n<\/ul>\n<p>\u00a0<\/p>\n<h3>Modu\u0142 w praktyce<\/h3>\n<p>\u00a0<\/p>\n<ul>\n<li>Mo\u017cemy zdefiniowa\u0107 (za pomoc\u0105 pliku instalacyjnego) parametry, kt\u00f3re b\u0119dziemy ustawia\u0107 w panelu admina. Nast\u0119pnie mo\u017cemy bardzo \u0142atwo w kodzie modu\u0142u pobiera\u0107 te ustawienia. Np. Modu\u0142 wy\u015bwietlaj\u0105cy list\u0119 u\u017cytkownik\u00f3w. W zale\u017cno\u015bci od parametru \u201ewy\u015bwietlanie\u201d (lista, tabelka, plain) modu\u0142 generuje inny kod \u2013 rekordy w postaci tabelki albo listy. Jest to najcz\u0119strze wykorzystanie parametr\u00f3w modu\u0142u.<\/li>\n<li>Mo\u017cemy utworzy\u0107 kilka egzemplarzy jakiego\u015b modu\u0142u. Ka\u017cdy o swoich parametrach, oraz miejscu na stronie. Na przyk\u0142ad na wszystkich stronach po lewej modu\u0142 wy\u015bwietlaj\u0105cy list\u0119 kategorii artyku\u0142\u00f3w. A dodatkowo na jakiej\u015b stronie wy\u015bwietlaj\u0105cy list\u0119 trzech najbogatszych w artyku\u0142y. Praktycznie (w powi\u0105zaniu z baz\u0105) dzia\u0142a to tak:\u00a0<\/li>\n<\/ul>\n<div style=\"text-align: center; \"><a href=\"http:\/\/morony.pl\/wp-content\/uploads\/2008\/11\/modules_schema.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-224\" title=\"modules_schema\" src=\"http:\/\/morony.pl\/wp-content\/uploads\/2008\/11\/modules_schema-300x300.png\" alt=\"\" width=\"300\" height=\"300\" srcset=\"https:\/\/morony.pl\/wp-content\/uploads\/2008\/11\/modules_schema-300x300.png 300w, https:\/\/morony.pl\/wp-content\/uploads\/2008\/11\/modules_schema-150x150.png 150w, https:\/\/morony.pl\/wp-content\/uploads\/2008\/11\/modules_schema.png 604w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/div>\n<p>\u00a0<\/p>\n<p>Teraz kiedy ju\u017c wiemy z czym b\u0119dziemy mieli doczynienia mo\u017cemy zacz\u0105\u0107 uczy\u0107 si\u0119 pisa\u0107. Poni\u017cej przedstawiam planowan\u0105 list\u0119 artyku\u0142\u00f3w, kt\u00f3re nied\u0142ugo si\u0119 uka\u017c\u0105.<\/p>\n<h4>Modu\u0142y:<\/h4>\n<p>\u00a0<\/p>\n<ul>\n<li>Modu\u0142 \u201eHello world\u201d<\/li>\n<li>Budowa Modu\u0142\u00f3w &#8211; Przypisywanie parametr\u00f3w<\/li>\n<li>JText \u2013 Tworzymy modu\u0142 z obs\u0142ug\u0105 j\u0119zyk\u00f3w<\/li>\n<li>JUser \u2013 \u201edost\u0119p zablokowany, zaloguj si\u0119\u201d<\/li>\n<li>Korzystamy z bazy danych<\/li>\n<li>Po\u017c\u0105dkujemy kod<\/li>\n<li>Modu\u0142 mod_latestnews \u2013 komentarz krok po kroku.<\/li>\n<\/ul>\n<p>\u00a0<\/p>\n<p>Komponenty:<\/p>\n<p>\u00a0<\/p>\n<ul>\n<li>Zasada dzia\u0142ania i pierwszy komponent \u201eHello world\u201d;<\/li>\n<li>System tr\u00f3jwarstwowy \u2013 MVC<\/li>\n<li>MVC \u2013 bardziej zaawansowanie<\/li>\n<li>Komponent z panelem administracyjnym<\/li>\n<li>Komponent w joomla + AJAX<\/li>\n<li>JRequest \u2013 Obs\u0142uga formularzy itp<\/li>\n<li>Do\u0142\u0105czanie arkuszy css<\/li>\n<\/ul>\n<p>\u00a0<\/p>\n<p>Mam nadziej\u0119 \u017ce rozbudzi\u0142em wasz\u0105 ciekawo\u015b\u0107, Zw\u0142aszcza \u017ce w polskim internecie ci\u0119\u017cko znale\u017a\u0107 cokolwiek na tamat pisania dodatk\u00f3w do joomli w zwartej formie. Do zobaczenia nied\u0142ugo<\/p><\/div>\n<p>\u00a0<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u00a0 Kiedy\u015b stworzenie ma\u0142ej strony domowej zajmowa\u0142o du\u017co czasu. \u00a0Trzeba by\u0142o zaprojektowa\u0107 ciekawy layout, napisa\u0107 w HTMLu osobno ka\u017cd\u0105 stron\u0119. A je\u015bli nagle zachcia\u0142o nam si\u0119 doda\u0107 jedn\u0105 pozycj\u0119 w menu trzeba by\u0142o edytowa\u0107 kilkana\u015bcie (kilkadziesi\u0105t czasem) plik\u00f3w. Je\u015bli kto\u015b by\u0142 ambitny, pisa\u0142 stron\u0119 z u\u017cyciem php, co pozwala\u0142o na includowanie element\u00f3w powtarzaj\u0105cych si\u0119 na [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14],"tags":[],"_links":{"self":[{"href":"https:\/\/morony.pl\/index.php?rest_route=\/wp\/v2\/posts\/227"}],"collection":[{"href":"https:\/\/morony.pl\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/morony.pl\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/morony.pl\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/morony.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=227"}],"version-history":[{"count":1,"href":"https:\/\/morony.pl\/index.php?rest_route=\/wp\/v2\/posts\/227\/revisions"}],"predecessor-version":[{"id":228,"href":"https:\/\/morony.pl\/index.php?rest_route=\/wp\/v2\/posts\/227\/revisions\/228"}],"wp:attachment":[{"href":"https:\/\/morony.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=227"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/morony.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=227"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/morony.pl\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=227"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}