--=REKLAMA=--
Jeśli potrzebujesz uzyskać dostęp do tej samej bazy danych, która została skonfigurowana podczas instalacji Joomla, możesz po prostu użyć metody JFactory->getDbo. Dzięki temu używa się połączenia, za pomocą którego Joomla! jest podłączony do bazy danych. Na przykład:
<?php $db = JFactory::getDbo(); ?>
$db jest obecnie obiektem JDatabase i pozwala na dokonanie operacji za pomocą zwykłych metod.
Ale co zrobić, jeśli chcesz połączyć się z całkowicie inną bazą danych niż ta używana przez Joomla!? To może być inna baza danych na tym samym komputerze, co Joomla!, albo na zupełnie innym hoście, a może nawet wymagać innego sterownika. Cóż, można to zrobić za pomocą metody JDatabase->getInstance.
<?php $option = array(); // tablica, w której umieścimy dane konfiguracji $option['driver'] = 'mysql'; // nazwa sterownika bazy danych $option['host'] = 'db.myhost.com'; // host $option['user'] = 'fredbloggs'; // nazwa użytkownika $option['password'] = 's9(39s£h[%dkFd'; // hasło $option['database'] = 'bigdatabase'; // nazwa bazy danych $option['prefix'] = 'abc_'; // prefiks (może być pusty) $db = JDatabase::getInstance($option); ?>
$db jest obecnie obiektem JDatabase i pozwala na dokonanie operacji za pomocą zwykłych metod.
Zauważ, że jeśli baza danych używa niestandardowych numerów portów, to musisz dodać numer portu w nazwie hosta. Na przykład: jeśli baza danych MySQL pracuje na porcie 3307 (domyślnie 3306), to w tym przypadku nazwą hosta będzie 'db.mojhost.com:3307'.
Jedną z własności wynikającej z używania JDatabase->getInstance jest to, że jeśli wywoła się funkcję o tych samych parametrach, to zwróci ona wcześniej stworzony obiekt, zamiast tworzyć nowy.
Mimo wszystko zauważ, że parametry muszą dokładnie takie same, by zaszedł ten proces. Na przykład: jeśli dwa wywołania bazują na MySQL, używając JDatabase->getInstance, gdzie w pierwszym nazwa hosta to 'db.mojhost.com' a w drugim 'db.mojhost.com:3306', to zostaną utworzone dwa osobne połączenia, pomimo że port 3306 jest domyślnym portem dla MySQL, a parametry (biorąc pod uwagę logikę) są te same.
Jeśli chcesz użyć JModel z paginacją itd., powinieneś zrobić to na inny sposób. Chodzi o to, że musisz wymienić standardowy obiekt Joomla, używając JDatabase->setDbo. Pierwszym krokiem będzie nadpisanie konstruktora JModel w twoim pliku:
public function __construct($config = array()) { parent::__construct($config); $option = array(); // tablica, w której umieścimy dane konfiguracji $option['driver'] = 'mysql'; // nazwa sterownika bazy danych $option['host'] = 'db.myhost.com'; // host $option['user'] = 'fredbloggs'; // nazwa użytkownika $option['password'] = 's9(39s£h[%dkFd'; // hasło $option['database'] = 'bigdatabase'; // nazwa bazy danych $option['prefix'] = ''; // prefiks (może być pusty) $db = JDatabase::getInstance($option); parent::setDbo($db); }
Po tym zabiegu JModel pracuje tak, jak wcześniej, ale korzysta już z twojej bazy danych.