--=REKLAMA=--

Projektowanie komponentu według wzorca Model-Widok-Kontroler - Część 3 - Korzystanie z bazy danych

Z Joomla!WikiPL

Ikona przetlumacz.png
 Uwaga o zawartości

Ta strona wymaga przetłumaczenia lub jest w trakcie tłumaczenia! Pomoc jest mile widziana. Ostatnio edytowane przez Zwiastun (dyskusja. Data edycji: Sat, 07 Dec 2013 22:05:18 +0000

Wprowadzenie

W pierwszych dwóch tutorialach, pokazaliśmy, jak zbudować prosty component model-widok-kontroler. Mieliśmy jeden widok, który pobierał dane z modelu (który powstał w 2. tutorialu). W tym tutorialu, będziemy pracować z modelem, który zamiast pobierać dane z modelu, będzie pobierał dane z tabeli w bazie danych.

Ten poradnik pokaże, jak korzystać z klasy JDatabase do pobierania danych z bazy danych.

Pobieranie danych

Nasz model posiada obecnie jedną metodę: getGreeting(). Ta metoda jest bardzo prosta - i zawsze zwróci jeden wynik.

Żeby było ciekawiej, będziemy wyciągać dane z tabeli bazy danych. Pokażemy później, jak utworzyć plik SQL i dodać odpowiedni kod do manifest pliku XML tak, że tabela i niektóre przykładowe dane zostaną utworzone, gdy component jest instalowany. Na razie po prostu zastąpimy nasze return na kod, który będzie wyciągał z bazy danych i zapisywał.

Pierwszym krokiem jest uzyskanie odwołania do obiektu bazy danych. Joomla! korzysta z bazy danych dla jej funkcjonowania, połączenia z bazą danych już istnieje, dlatego nie ma potrzeby tworzyć własne. Odniesienie do istniejącej bazy danych można uzyskać za pomocą:

$db =& JFactory::getDBO();

JFactory jest statyczną klasą, która jest używana do utworzenia nowego obiektu do wielu obiektów systemowych. Więcej informacji o tej klasie można znaleść w dokumentacji API JFactoryAPI.

Nazwa metody (getDBO) oznacza obiekt bazy danych, i jest łatwe do zapamiętania.

Teraz, gdy utworzyliśmy obiekt bazy danych, możemy pobrać nasze dane. Robimy to w dwóch etapach:

  • przechowywać nasze zapytanie w obiekcie bazy danych
  • load the result

Nasza nowa metoda getGreeting() będzie więc wyglądać tak:

function getGreeting()
{
   $db =& JFactory::getDBO();
 
   $query = 'SELECT greeting FROM #__hello';
   $db->setQuery( $query );
   $greeting = $db->loadResult();
 
   return $greeting;
}

hello to nazwa tabeli, będziemy tworzyć później, a greeting to nazwa pola. Jeśli nie są zaznajomieni z SQL, warto byłoby podjąć tutorial. Jeden z takich tutoriali można znaleść na stronie [W3Schools http://www.w3schools.com/sql/default.asp].

$db->loadResult() metoda wykona przechowywane zapytanie do bazy danych i da wynik pierwszego pola w pierwszym wierszu. Zobacz JDatabase API Więcej informacji na temat innych metod w klasie JDatabase.

Tworzenie pliku instalacyjnego SQL

Instalator Joomla! ma wbudowane wsparcie dla wykonywania kodu SQL w części instalacji. Te polecenia są przechowywane w standardowym pliku tekstowym.

Będziemy mieć trzy polecenia SQL w naszym pliku instalacyjnym: pierwsze polecenie usunięcie tabeli w przypadku gdy już taka istnieje, drugie utworzy tabelę z odpowiednimi polami, a trzecie będzie wstawić dane.

Oto nasze polecenia:

DROP TABLE IF EXISTS `#__hello`;
 
CREATE TABLE `#__hello` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `greeting` varchar(25) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
 
INSERT INTO `#__hello` (`greeting`) VALUES ('Hello, World!'), ('Bonjour, Monde!'), ('Ciao, Mondo!');

Może się wydawać, że przedrostek do nazw tabeli wygląda raczej dziwnie. Joomla! zastąpi ten przedrostek z przedrostkiem używanym przez obecny system. Dla większości instalacji, tabela ta będzie miała nazwę jos_hello. Pozwala to na wiele instalacjach Joomla! na tej samej bazie danych i zapobiega kolizji z innymi aplikacjami przy użyciu tych samych nazw tabel (tzn. dwie aplikacje mogą współużytkować bazę danych, ale mogą wymagać tej sanej tabeli "użytkownicy". Konwencja ta pozwala na uniknięcie problemów.)

Mamy za zadanie dodać dwa pola do naszej bazy. Pierwsze pole id, i nazywa się to "klucz podstawowy". Klucz podstawowy tabeli bazy danych jest opcją, która służy do jednoznacznej identyfikacji rekordu. Jest to często wykorzystywane do wyszukiwania rekordów w bazie danych. drugie pole greeting. To jest pole, które przechowuje powitania, zwracane jest przez zapytanie SQL, którego użyliśmy powyżej.

Polecenia SQL zapisujemy w pliku o nazwie admin/install.sql. (Uwaga: W pierwotnej wersji ten plik miał nazwę, install.utf.sql - jest to nieprawidłowe Zobacz też discussion.).

Tworzenie pliku Uninstall SQL

Chociaż morzę mamy nadzieję, że ludzie nigdy nie będą chcieć "uninstall" naszego komponentu, to ważne jest, żeby po "uninstall" naszego komponentu nic nie zostało. Joomla! zajmie się usuwaniem plików i katalogów, które zostały utworzone, podczas "zainstaluj", ale musimy ręcznie podać nazwy tabel, które były dodane do bazy danych.

Ponieważ mamy tylko jedną tabelę, dodamy jedno polecenie SQL:

DROP TABLE IF EXISTS `#__hello`;

W pierwotnej wersji ten plik miał nazwę Polecenia "uninstall" będziemy zapisać w pliku o nazwie admin/uninstall.sql. (Uwaga: W pierwotnej wersji ten plik miał nazwę, uninstall.utf.sql - jest to nieprawidłowe Zobacz też discussion.).

Aktualizacja naszego pliku XML

Musimy zmienić kilka rzeczy w naszym hello.xml. Po pierwsze, musimy dodać do listy plików nasze dwa nowe pliki sql. Po drugie, pliki SQL należy umieścić w katalogu 'admin. Po trzecie, musimy poinformować instalator o uruchomienie odpowiednich zapytań na czas instalacji i uninstall.

Nasz nowy plik wygląda tak:

<?xml version="1.0" encoding="utf-8"?>
<install type="component" version="1.5.0">
 <name>Hello</name>
 <!-- The following elements are optional and free of formatting constraints -->
 <creationDate>2007-02-22</creationDate>
 <author>John Doe</author>
 <authorEmail>john.doe@example.org</authorEmail>
 <authorUrl>http://www.example.org</authorUrl>
 <copyright>Copyright Info</copyright>
 <license>License Info</license>
 <!--  The version string is recorded in the components table -->
 <version>3.01</version>
 <!-- The description is optional and defaults to the name -->
 <description>Description of the component ...</description>
 
 <!-- Site Main File Copy Section -->
 <!-- Note the folder attribute: This attribute describes the folder
      to copy FROM in the package to install therefore files copied
      in this section are copied from /site/ in the package -->
 <files folder="site">
  <filename>controller.php</filename>
  <filename>hello.php</filename>
  <filename>index.html</filename>
  <filename>models/hello.php</filename>
  <filename>models/index.html</filename>
  <filename>views/index.html</filename>
  <filename>views/hello/index.html</filename>
  <filename>views/hello/view.html.php</filename>
  <filename>views/hello/tmpl/default.php</filename>
  <filename>views/hello/tmpl/index.html</filename>
 </files>
 
 <install>
  <sql>
    <file charset="utf8" driver="mysql">install.sql</file>
  </sql>
 </install>
 <uninstall>
  <sql>
    <file charset="utf8" driver="mysql">uninstall.sql</file>
  </sql>
 </uninstall>
 
 <administration>
  <!-- Administration Menu Section -->
  <menu>Hello World!</menu>
 
  <!-- Administration Main File Copy Section -->
  <files folder="admin">
   <filename>hello.php</filename>
   <filename>index.html</filename>
   <filename>install.sql</filename>
   <filename>uninstall.sql</filename>
  </files>  
 
 </administration>
</install>

Można zauważyć dwa atrybuty <file> w tagach <install> i <uninstall> opcje: charset i driver. Charset jest typem kodowania. ważne tylko charset utf8 jest prawidłowe. Jeśli chcesz utworzyć zainstalować pliki dla non-utf8 baz danych (dla starszych wersji MySQL), należy pominąć ten atrybut.

Opcja driver określa dla, których baz danych zapytania zostały napisane . Obecnie może to być tylko mysql, ale w przyszłych wersjach Joomla! może być więcej sterowników bazy danych.

Zakończenie

Mamy teraz komponent, który wykorzystuje zarówno Joomla! MVC framework i klasę JDatabase. Jesteś teraz w stanie napisać komponent MVC, który współpracuje z bazą danych i może korzystać z Instalatora Joomla! do tworzenia i wypełnienia tabel bazy danych.

Artykuły z tej serii

Współpraca

  • staalanden

Download

The component can be downloaded at: com_hello3_01

© Ten materiał jest dokładnym albo swobodnym tłumaczeniem artykułu http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_3_-_Using_the_Database udostępnionego na licencji JEDL na witrynie: Joomla! Official Documentation Wiki

Dziękujemy za wkład

» Stefan Wajda [zwiastun],