--=REKLAMA=--

J3.2

Tworzenie prostego modułu/Praca z bazą danych

Z Joomla!WikiPL

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.

Tworzenie tabeli podczas instalacji

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:

  • Tag install dodaje tabelę. Tag nie wymagany.
  • Tag uninstall usuwa tabelę podczas odinstalowania modułu. Nie wszystkie moduły będą z tego korzystały i nie jest on wymagany
  • Tag update zaktualizuje tabelę podczas aktualizacji modułu.

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

Tworzenie zapytania w pliku helper.php

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;

Wnioski

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.


© Ten materiał jest dokładnym albo swobodnym tłumaczeniem artykułu http://docs.joomla.org/J3.2:Creating_a_simple_module/Using_the_Database udostępnionego na licencji JEDL na witrynie: Oficjalnej dokumentacji Joomla!.Pierwszy autor oryginału: Wilsonge.
© Tłumaczenie: malkowitch. Tłumaczenie wykonano na warunkach licencji JEDL.