--=REKLAMA=--
Wiele modułów w Joomla wymaga użycia baz danych. W tym poradniku zakładamy, że znasz już podstawy użycia klasy JDatabase. Jeśli nie, zalecamy zapoznać się z dokumentacją dotyczącą dostępu do bazy używając klasy JDatabase nim przejdziesz dalej.
By stworzyć tabelę w bazie podczas instalacji dodamy te oto linie do mod_helloworld.xml:
<install> <sql> <file driver="mysql" charset="utf8">sql/mysql/install.mysql.utf8.sql</file> <file driver="sqlazure" charset="utf8">sql/sqlazure/install.sqlazure.utf8.sql</file> </sql> </install> <uninstall> <sql> <file driver="mysql" charset="utf8">sql/mysql/uninstall.mysql.utf8.sql</file> <file driver="sqlazure" charset="utf8">sql/sqlazure/uninstall.sqlazure.utf8.sql</file> </sql> </uninstall> <update> <schemas> <schemapath type="mysql">sql/mysql/updates</schemapath> <schemapath type="sqlazure">sql/sqlazure/updates</schemapath> </schemas> </update>
W tym kodzie znajdują się trzy sekcje:
Zwróć uwagę, że dla MySQL i Microsoft SQL są odrębne schematy - możesz wybrać dowolny system bądź też oba.
W tym przykładnie pokażemy przykładowe pliki dla MySQL. Tworzenie plików dla Microsoft SQl zostawiamy tobie jako ćwiczenie.
W naszym install.mysql.utf8.sql stworzymy tabelę i dodamy kilka tekstów powitań.
CREATE TABLE IF NOT EXISTS `#__helloworld` ( `id` int(10) NOT NULL AUTO_INCREMENT, `hello` taext NOT NULL, `lang` varchar(25) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1; INSERT INTO `#__helloworld` (`hello`, `lang`) VALUES ('Hello World', 'en-GB'); INSERT INTO `#__helloworld` (`hello`, `lang`) VALUES ('Hola Mundo', 'es-ES'); INSERT INTO `#__helloworld` (`hello`, `lang`) VALUES ('Bonjour tout le monde', 'fr-FR');
W pliku uninstall.mysql.utf8.sql zwyczajnie usuniemy tabelę.
DROP TABLE IF EXISTS `#__helloworld`
Na koniec zostawimy tylko trochę miejsca w pliku MySQL dla aktualizacji. Dla każdej wersji modułu jest jedna wersja pliku SQL. Każda nazwa pliku musi pokrywać się z nazwą podaną w pliku manifestu. Joomla wykorzystuje ten ciąg znaków by wykryć które pliki SQL wykonać i w jakiej kolejności.
"Ważna notatka" Te pliki wykorzystywane są do ustawienia numeru wersji w tabeli #__schemas. Ten numer wersji musi być obecny w aktualnej wersji komponenty by nowe pliki SQL były wykonane podczas aktualizacji. Dla przykładu, jeśli masz wersję 1.0 i aktualizujesz ją do 1.1, plik 1.1.sql nie zostanie wykonany jeśli nie istnieje plik 1.0.sql w paczce 1.0. Z tego powodu dobrą praktyką jest posiadać plik aktualizacji SQL dla każdej wersji, nawet jeśli ma żadnych zmian w bazie.
# Placeholder file for database changes for version 1.0.0
Podczas instalacji naszego modułu stworzyliśmy tabelę w bazie danych do przechowywania powitań. Teraz musimy je z stamtąd wyciągnąć i wyświetlić użytkownikowi. Na koniec stworzymy teraz funkcje getHello w pliku helper.php
Na chwilę obecną zrezygnujemy w wykorzystania pól formularza do wyboru powitania i pobierzemy angielskie powitanie.
// pobierz uchwyt do bazy $db = JFactory::getDbo(); // Pobierz powitanie $query = $db->getQuery(true) ->select($db->quoteName('hello')) ->from($db->quoteName('#__helloworld')) ->where('lang = '. $db->Quote('en-GB')); // Ustaw zapytanie $db->setQuery($query); // Pobierz wiersz $result = $db->loadResult(); // Zwróć powitanie return $result;
Użycie baz danych w modułach Joomla! jest dość proste. Wykorzystując techniki opisane w tym poradniku wiele modułów może zostać wykonanych bez większego wysiłku zachowując przy tym możliwość prostej aktualizacji.