{"id":235,"date":"2008-12-02T13:56:25","date_gmt":"2008-12-02T12:56:25","guid":{"rendered":"http:\/\/morony.pl\/?p=235"},"modified":"2008-12-02T14:00:27","modified_gmt":"2008-12-02T13:00:27","slug":"joomla-piszemy-pierwszy-modul","status":"publish","type":"post","link":"https:\/\/morony.pl\/?p=235","title":{"rendered":"Joomla &#8211; Piszemy pierwszy modu\u0142"},"content":{"rendered":"<p>Kiedy skrypt napotyka \u017c\u0105danie wyrenderowania jakiego\u015b modu\u0142u, wtedy za pomoc\u0105 klasy JModuleHelper pobierana jest zawarto\u015b\u0107 pliku modules\/mod_nazwamodulu\/mod_nazwamodulu.php &#8211; to tak w uproszczeniu, bo jeszcze w zale\u017cno\u015bci od templatki modu\u0142 mo\u017ce by\u0107 ubierany w jakie\u015b divy albo tabelk\u0119. A wi\u0119c do programisty teoretycznie nale\u017cy napisanie pliku mod_nazwamodulu.php. Praktycznie &#8211; te\u017c tak jest. Nale\u017cy jednak pami\u0119ta\u0107 o pewnych &#8220;trendach&#8221; jakich powinno si\u0119 trzyma\u0107 pisz\u0105c modu\u0142y. Przez kilka nast\u0119pnych artyku\u0142\u00f3w b\u0119dziemy uczy\u0107 si\u0119 w\u0142a\u015bnie tych trend\u00f3w. B\u0119dziemy te\u017c powoli przyswaja\u0107 budow\u0119 samej Joomli. Nie b\u0119dziemy natomiast uczy\u0107 si\u0119 PHP. To mam nadziej\u0119 ju\u017c w jakim\u015b stopniu jest opanowane<\/p>\n<h2>Po pierwsze &#8211; Plan<\/h2>\n<p>Musimy si\u0119 najpierw zastanowi\u0107 co chcemy zrobi\u0107 i jako\u015b to rozplanowa\u0107. Nasz modu\u0142 nie b\u0119dzie zbyt skomplikowany. Jego dzia\u0142anie polega\u0107 b\u0119dzie na wypisaniu na ekran &#8220;Hello world&#8221;. Ca\u0142o\u015b\u0107 wi\u0119c zakodujemy po prostu w pliku mod_hello.php &#8211; poniewa\u017c tak b\u0119dzie nazywa\u0142 si\u0119 nasz komponent &#8211; mod_hello.<\/p>\n<h2>mod_hello<\/h2>\n<p>zobaczmy na poni\u017cszy kod<\/p>\n<pre style=\"padding-left: 30px; \"><span style=\"color: #0000ff;\">&lt;?php\r\n\/**\r\n * Modu\u0142 mod_helloworld - stworzony na potrzeby www.morony.pl\r\n * autor Maciej Mucha, maciej@morony.pl\r\n *\/\r\n\r\ndefined('_JEXEC') or die('Direct Access to this\r\n\t\t location is not allowed.');\r\n\r\necho 'Hello World!';<\/span><\/pre>\n<p>Jest to zwyk\u0142y plik php. Wyja\u015bnienia wymaga linia sprawdzaj\u0105ca istnienie sta\u0142ej &#8216;_JEXEC&#8217;. Jest to sta\u0142a zdefiniowana w pliku index.php. Joomla ca\u0142a opiera si\u0119 w\u0142a\u015bnie na tym pliku. tzn wszystkie adresy naszej strony to index.php?&#8230; Nie ma wi\u0119c potrzeby otwierania bezpo\u015brednio jakiegokolwiek\u00a0innego\u00a0pliku (mo\u017ce to by\u0107 nawet niebezpieczne). Sprawdzamy wi\u0119c czy plik zosta\u0142 wczytany za pomoc\u0105 pliku index.php. Je\u015bli nie &#8211; wtedy blokujemy dost\u0119p. t\u0105 klauzul\u0119 mo\u017cemy znale\u017a\u0107 prakrycznie w ka\u017cdym pliku php wchodz\u0105cym w sk\u0142ad joomli.<\/p>\n<p>Kiedy jeste\u015bmy ju\u017c pewni \u017ce strona zosta\u0142a wczytana prawid\u0142owo przechodzimy do w\u0142a\u015bciwego kodu. W tym przypadku kod nie wymaga chyba t\u0142umaczenia \ud83d\ude42<\/p>\n<p>Skrypt si\u0119 sko\u0144czy\u0142.. A gdzie tag zamykaj\u0105cy skrypt php? Nie jest on wymagany. A poniewa\u017c plik kt\u00f3ry napisalismy ma by\u0107 \u0142adowany do innego pliku, wszelkie spacje czy inne bia\u0142e znaki by\u0142y by bardzo niepo\u017c\u0105dane, A takie zosta\u0142y by wczytane gdyby wyst\u0105pi\u0142y po &#8220;?&gt;&#8221;. Jest to praktyka przyj\u0119ta w Joomla 1.5, i b\u0119dziemy j\u0105 stosowa\u0107 za ka\u017cdym razem.<\/p>\n<p>Pi\u0119knie &#8211; skrypt napisany. Ale co z tego? jak go teraz wgra\u0107 aby by\u0142 dost\u0119pny z poziomu panelu administracyjnego? W Joomli s\u0142u\u017c\u0105 do tego pliki instalacyjne XML.<\/p>\n<h2>Plik instalacyjny<\/h2>\n<p>nasz plik instalacyjny b\u0119dzie wygl\u0105da\u0142 tak:<\/p>\n<pre style=\"padding-left: 30px; \"><span style=\"color: #0000ff;\">&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;install type=\"module\" version=\"1.5.0\"&gt;\r\n\t&lt;name&gt;Hello World&lt;\/name&gt;\r\n\t&lt;author&gt;Maciej Mucha - www.morony.pl&lt;\/author&gt;\r\n\t&lt;creationDate&gt;December 2008&lt;\/creationDate&gt;\r\n\t&lt;copyright&gt;Maciej Mucha - www.morony.pl&lt;\/copyright&gt;\r\n\t&lt;license&gt;http:\/\/www.gnu.org\/licenses\/gpl-2.0.html GNU\/GPL\r\n              &lt;\/license&gt;\r\n\t&lt;authorEmail&gt;maciej@morony.pl&lt;\/authorEmail&gt;\r\n\t&lt;authorUrl&gt;http:\/\/www.morony.pl&lt;\/authorUrl&gt;\r\n\t&lt;version&gt;1.5.0&lt;\/version&gt;\r\n\t&lt;description&gt;Modu\u0142 s\u0142u\u017c\u0105cy do wy\u015bwietlenia \r\n               informacji \"Hellow World\"&lt;\/description&gt;<\/span><\/pre>\n<pre style=\"padding-left: 30px; \"><span style=\"color: #0000ff;\">\t&lt;files&gt;\r\n\t\t&lt;filename module=\"mod_hello\"&gt;mod_hello.php&lt;\/filename&gt;\r\n\t\t&lt;filename module=\"mod_hello\"&gt;index.html&lt;\/filename&gt;\r\n\t&lt;\/files&gt;\r\n&lt;\/install&gt;<\/span><\/pre>\n<p>O co tu chodzi? To proste, najpierw podajemy kilka informacji o sobie i o skrypcie kt\u00f3re b\u0119d\u0105 widoczne w panelu admina, oraz list\u0119 plik\u00f3w, kt\u00f3re instalator przekopiuje na dysk.<\/p>\n<p>Co jest wa\u017cne:<\/p>\n<p>\u00a0<\/p>\n<ul>\n<li><strong>&lt;install type=&#8221;module&#8221; version=&#8221;1.5.0&#8243;&gt;<\/strong> &#8211;\u00a0informacja o tym \u017ce instalujemy modu\u0142, kompatybilny z jooml\u0105 1.5.x i wy\u017csze<\/li>\n<li><strong>&lt;name&gt;Hello World&lt;\/name&gt;<\/strong> &#8211; nazwa modu\u0142u wyswietlana w panelu administracyjnym<\/li>\n<li><strong>&lt;filename module=&#8221;mod_hello&#8221;&gt;mod_hello.php&lt;\/filename&gt;<\/strong> &#8211; parametr module=&#8221;mod_hello&#8221; zostanie przyj\u0119ty jako nasza nazwa modu\u0142u oraz katalog w k\u00f3rym b\u0119dzie dost\u0119pny modu\u0142. Nie myli\u0107 z przyjazn\u0105 nazw\u0105 wy\u015bwietlan\u0105.<\/li>\n<li><strong>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243;?&gt;<\/strong> &#8211; wa\u017cne jest aby plik zosta\u0142 zakodowany w kodowaniu kt\u00f3re zadeklarowali\u015bmy. W przeciwnym wypadku instalator wurzuci b\u0142\u0105d.<\/li>\n<li><strong>&lt;filename module=&#8221;mod_hello&#8221;&gt;index.html&lt;\/filename&gt;<\/strong> &#8211; w dobrym tonie jest, aby w ka\u017cdym katalogu joomli znajdowa\u0142 si\u0119 plik index.html o tre\u015bci&#8221;&lt;html&gt;&lt;body bgcolor=&#8221;#ffffff&#8221;&gt;&lt;\/body&gt;&lt;\/html&gt;<\/li>\n<\/ul>\n<h2>Instalujemy!<\/h2>\n<p>Aby m\u00f3c przyst\u0105pi\u0107 do instalacji musimy jeszcze spakowa\u0107 pliki (razem z plikiem instalacyjnym, kt\u00f3ry zapisujemy jao mod_hello.xml). Najlepiej do pliku mod_hello.zip. Nast\u0119pnie instalujemy komponent.\u00a0<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/morony.pl\/wp-content\/uploads\/2008\/12\/instmod1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-236  aligncenter\" title=\"instmod1\" src=\"http:\/\/morony.pl\/wp-content\/uploads\/2008\/12\/instmod1.jpg\" alt=\"\" width=\"500\" height=\"234\" srcset=\"https:\/\/morony.pl\/wp-content\/uploads\/2008\/12\/instmod1.jpg 541w, https:\/\/morony.pl\/wp-content\/uploads\/2008\/12\/instmod1-300x140.jpg 300w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/a><a href=\"http:\/\/morony.pl\/wp-content\/uploads\/2008\/12\/instmod2.jpg\"><\/a><\/p>\n<p style=\"text-align: center;\">1. Wybieramy instalator<\/p>\n<p style=\"text-align: center;\">\u00a0<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/morony.pl\/wp-content\/uploads\/2008\/12\/instmod2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-237    aligncenter\" title=\"instmod2\" src=\"http:\/\/morony.pl\/wp-content\/uploads\/2008\/12\/instmod2.jpg\" alt=\"\" width=\"499\" height=\"130\" srcset=\"https:\/\/morony.pl\/wp-content\/uploads\/2008\/12\/instmod2.jpg 499w, https:\/\/morony.pl\/wp-content\/uploads\/2008\/12\/instmod2-300x78.jpg 300w\" sizes=\"(max-width: 499px) 100vw, 499px\" \/><\/a><\/p>\n<p style=\"text-align: center;\">2. Wybieramy plik i klikamy instaluj<\/p>\n<p style=\"text-align: center;\">\u00a0<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/morony.pl\/wp-content\/uploads\/2008\/12\/instmod3.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-238  aligncenter\" title=\"instmod3\" src=\"http:\/\/morony.pl\/wp-content\/uploads\/2008\/12\/instmod3.jpg\" alt=\"\" width=\"500\" height=\"247\" srcset=\"https:\/\/morony.pl\/wp-content\/uploads\/2008\/12\/instmod3.jpg 656w, https:\/\/morony.pl\/wp-content\/uploads\/2008\/12\/instmod3-300x148.jpg 300w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/a><\/p>\n<p style=\"text-align: center;\">3. Cieszymy si\u0119 z zainstalowanego modu\u0142u.<\/p>\n<p style=\"text-align: center;\">\u00a0<\/p>\n<h2>Uruchamiamy modu\u0142<\/h2>\n<p style=\"text-align: center;\"><a href=\"http:\/\/morony.pl\/wp-content\/uploads\/2008\/12\/instmod4.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-239  aligncenter\" title=\"instmod4\" src=\"http:\/\/morony.pl\/wp-content\/uploads\/2008\/12\/instmod4.jpg\" alt=\"\" width=\"472\" height=\"194\" srcset=\"https:\/\/morony.pl\/wp-content\/uploads\/2008\/12\/instmod4.jpg 472w, https:\/\/morony.pl\/wp-content\/uploads\/2008\/12\/instmod4-300x123.jpg 300w\" sizes=\"(max-width: 472px) 100vw, 472px\" \/><\/a><\/p>\n<p style=\"text-align: center;\">1. Wybieramy modu\u0142y z menu<\/p>\n<p style=\"text-align: center;\">\u00a0<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/morony.pl\/wp-content\/uploads\/2008\/12\/instmod5.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-240  aligncenter\" title=\"instmod5\" src=\"http:\/\/morony.pl\/wp-content\/uploads\/2008\/12\/instmod5.jpg\" alt=\"\" width=\"355\" height=\"137\" srcset=\"https:\/\/morony.pl\/wp-content\/uploads\/2008\/12\/instmod5.jpg 355w, https:\/\/morony.pl\/wp-content\/uploads\/2008\/12\/instmod5-300x115.jpg 300w\" sizes=\"(max-width: 355px) 100vw, 355px\" \/><\/a><\/p>\n<p style=\"text-align: center;\">2. Tworzymy nowy modu\u0142<\/p>\n<p style=\"text-align: center;\">\u00a0<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/morony.pl\/wp-content\/uploads\/2008\/12\/instmod6.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-241  aligncenter\" title=\"instmod6\" src=\"http:\/\/morony.pl\/wp-content\/uploads\/2008\/12\/instmod6.jpg\" alt=\"\" width=\"462\" height=\"570\" srcset=\"https:\/\/morony.pl\/wp-content\/uploads\/2008\/12\/instmod6.jpg 462w, https:\/\/morony.pl\/wp-content\/uploads\/2008\/12\/instmod6-243x300.jpg 243w\" sizes=\"(max-width: 462px) 100vw, 462px\" \/><\/a><\/p>\n<p style=\"text-align: center;\">3. Z listy wybieramy nasz modu\u0142<\/p>\n<p style=\"text-align: center;\">\u00a0<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/morony.pl\/wp-content\/uploads\/2008\/12\/instmod7.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-242  aligncenter\" title=\"instmod7\" src=\"http:\/\/morony.pl\/wp-content\/uploads\/2008\/12\/instmod7.jpg\" alt=\"\" width=\"500\" height=\"510\" srcset=\"https:\/\/morony.pl\/wp-content\/uploads\/2008\/12\/instmod7.jpg 548w, https:\/\/morony.pl\/wp-content\/uploads\/2008\/12\/instmod7-294x300.jpg 294w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/a><\/p>\n<p style=\"text-align: center;\">4. Ustawiamy parametry wy\u015bwietlania modu\u0142u<\/p>\n<p style=\"text-align: center;\">\u00a0<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/morony.pl\/wp-content\/uploads\/2008\/12\/instmod8.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-243  aligncenter\" title=\"instmod8\" src=\"http:\/\/morony.pl\/wp-content\/uploads\/2008\/12\/instmod8.jpg\" alt=\"\" width=\"494\" height=\"441\" srcset=\"https:\/\/morony.pl\/wp-content\/uploads\/2008\/12\/instmod8.jpg 494w, https:\/\/morony.pl\/wp-content\/uploads\/2008\/12\/instmod8-300x267.jpg 300w\" sizes=\"(max-width: 494px) 100vw, 494px\" \/><\/a><\/p>\n<p style=\"text-align: center;\">5. Je\u015bli wszystko zrobili\u015bmy dobrze, powinni\u015bmy zobaczy\u0107 co\u015b takiego &#8211; dzia\u0142aj\u0105cy modu\u0142<\/p>\n<h2>Poprawki<\/h2>\n<p>To \u017ce modu\u0142 nam si\u0119 zainstalowa\u0142, nie znaczy jeszcze \u017ce b\u0119dzie dzia\u0142a\u0142. Mo\u017ce si\u0119 okaza\u0107, ze pope\u0142nili\u015bmy jakiego\u015b babola i nasz modu\u0142 wywala b\u0142\u0105d php. Nie musimy wtedy powtarza\u0107 ca\u0142ej procedury od pocz\u0105tku. Wystarczy, \u017ce podmienimy odpowiedni modu\u0142 na serwerze i ju\u017c (no i oczywi\u015bcie potem w paczce z modu\u0142em, kiedy ju\u017c b\u0119dzie dzia\u0142a\u0142.\u00a0<\/p>\n<h2><strong>Podsumowanie<\/strong><\/h2>\n<p>Jak wida\u0107 napisanie prostego modu\u0142u dla Joomli nie jest czym\u015b szczeg\u00f3lnie trudnym (cho\u0107 nasz modu\u0142 nie robi\u0142 za wiele). W nast\u0119pnych artyku\u0142ach dowiemy si\u0119 ju\u017c jak napisa\u0107 co\u015b po\u017cytecznego.<\/p>\n<p>Pozdrawiam,<\/p>\n<p>Much<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kiedy skrypt napotyka \u017c\u0105danie wyrenderowania jakiego\u015b modu\u0142u, wtedy za pomoc\u0105 klasy JModuleHelper pobierana jest zawarto\u015b\u0107 pliku modules\/mod_nazwamodulu\/mod_nazwamodulu.php &#8211; to tak w uproszczeniu, bo jeszcze w zale\u017cno\u015bci od templatki modu\u0142 mo\u017ce by\u0107 ubierany w jakie\u015b divy albo tabelk\u0119. A wi\u0119c do programisty teoretycznie nale\u017cy napisanie pliku mod_nazwamodulu.php. Praktycznie &#8211; te\u017c tak jest. Nale\u017cy jednak pami\u0119ta\u0107 o [&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\/235"}],"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=235"}],"version-history":[{"count":4,"href":"https:\/\/morony.pl\/index.php?rest_route=\/wp\/v2\/posts\/235\/revisions"}],"predecessor-version":[{"id":245,"href":"https:\/\/morony.pl\/index.php?rest_route=\/wp\/v2\/posts\/235\/revisions\/245"}],"wp:attachment":[{"href":"https:\/\/morony.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=235"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/morony.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=235"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/morony.pl\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=235"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}