 V dnešním článku si ukážeme vše co se týče databáze a Joomly, naučíme se jak se k databázi připojit, jak provádět dotazy na databázi a v závěru článku si řekneme jak databázi zálohovat.
Nejprve si tedy řekneme něco o připojení k databázi
Informace o databázi, ke které se Joomla připojuje se vždy vyplňuje při instalaci Joomly, pokud však chceme Joomlu přesunout na jiný hosting určitě se nám bude hodit umět změnit data pro připojení k DB. Konfigurační soubor configuration.php, se nachází v kořenovém adresáři Joomly. Pro připojení k databízi nás zajímají tyto proměnné:
var $dbtype = 'mysql'; var $host = 'localhost'; var $user = 'root'; var $password = ''; var $db = 'joomla'; var $dbprefix = 'jos_';
%0Avar%20%24dbtype%20%3D%20%27mysql%27%3B%0Avar%20%24host%20%3D%20%27localhost%27%3B%0Avar%20%24user%20%3D%20%27root%27%3B%0Avar%20%24password%20%3D%20%27%27%3B%0Avar%20%24db%20%3D%20%27joomla%27%3B%0Avar%20%24dbprefix%20%3D%20%27jos_%27%3B
Typ databáze zřejmě měnit nebudete ve většině případů se jedná o MySQL, host udává jméno serveru, na lokálním počítači je to localhost, user je uživatelské jméno, password heslo. Db je jméno databáze která už je vytvořena, dbprefix je předpona tabulek v databázi (např. jos_users, jos_menu,...)
Dotazy na databázi
Nyní se podíváme na pokročilejší věci, a to jak se dotazovat na databázi, získávat z ní data a používat je. Hodí se to pokud vytváříme vlastní skript, modul, komponentu, nebo jen upravujeme některé stávající.
Nejdříve si ukažme jak správně vytvářet dotazy. V minulém odstavci jsme si řekli, že prefix tabulek, je keonfigurovatelný při instalaci, a tak skript kde by se používal prefix jos_ natvrdo by nemusel být funkční, místo něho slouží řetězec "#__" - krizek a dve podtrzitka.
Dotaz tedy může vypadat takto:
SELECT obsah.id FROM #__content AS obsah left join #__users AS uzivatel ON uzivatel.id=obsah.author LIMIT 1
Nehledejte za tím nějaký konkrétní dotaz, je to vymyšlené a slouží pouze pro ilustraci. Nyní víme jak správně psát dotazy, pojďme tedy nějaký ten dotaz poslat na Mysql server. Nejprvé musíme získat referenci na globální objekt databáze. To s provede pomocí příkazu:
$db =& JFactory::getDBO();
Pokud máme vytvořen objekt, můžeme použít funkci na položení dotazu, k tomu slouží setQuery takto
$db->setQuery('SELECT * from #__content ....');
Tato funkce má ještě mimo to tři nepovinné parametry, offset, limit a prefix tabulky z které s má vybírat. Nyní když jsme položili dotaz a byl správně položen, musíme nějak získat data. Na výběr máme z několika možností. My si však ukážeme tři nejpoužívanější.
-
loadRowList() - hodně podobný jako mysql_fetch_row, vrací seznam záznamů ve vícerozměrném poli indexovaného od 0, přistupujeme k nim klasicky přes pole, napr.:
Array ( [0] => Array ( [0] => 1 [1] => John Smith [2] =>
Tato emailová adresa je chráněna před spamboty, abyste ji viděli, povolte JavaScript
[3] => johnsmith ) [1] => Array ( [0] => 2 [1] => Magda Hellman [2] =>
Tato emailová adresa je chráněna před spamboty, abyste ji viděli, povolte JavaScript
[3] => magdah ) [2] => Array ( [0] => 3 [1] => Yvonne de Gaulle [2] =>
Tato emailová adresa je chráněna před spamboty, abyste ji viděli, povolte JavaScript
[3] => ydegaulle ) )
-
loadAssocList() - podobný jako mysql_fetch_array, vrací seznam zíznamů ve vícerozměrném poli indexovaných podle názvů sloupců v databázi napr.:
Array ( [0] => Array ( [id] => 1 [name] => John Smith [email= =>
Tato emailová adresa je chráněna před spamboty, abyste ji viděli, povolte JavaScript
] => [email=
Tato emailová adresa je chráněna před spamboty, abyste ji viděli, povolte JavaScript
]
Tato emailová adresa je chráněna před spamboty, abyste ji viděli, povolte JavaScript
';
document.write( '' );
document.write( addy_text82596 );
document.write( '<\/a>' );
//-->
Tato emailová adresa je chráněna před spamboty, abyste ji viděli, povolte JavaScript
[username] => johnsmith ) [1] => Array ( [id] => 2 [name] => Magda Hellman [email= =>
Tato emailová adresa je chráněna před spamboty, abyste ji viděli, povolte JavaScript
] => [email=
Tato emailová adresa je chráněna před spamboty, abyste ji viděli, povolte JavaScript
]
Tato emailová adresa je chráněna před spamboty, abyste ji viděli, povolte JavaScript
';
document.write( '' );
document.write( addy_text83635 );
document.write( '<\/a>' );
//-->
Tato emailová adresa je chráněna před spamboty, abyste ji viděli, povolte JavaScript
[username] => magdah ) [2] => Array ( [id] => 3 [name] => Yvonne de Gaulle [email= =>
Tato emailová adresa je chráněna před spamboty, abyste ji viděli, povolte JavaScript
] => [email=
Tato emailová adresa je chráněna před spamboty, abyste ji viděli, povolte JavaScript
]
Tato emailová adresa je chráněna před spamboty, abyste ji viděli, povolte JavaScript
';
document.write( '' );
document.write( addy_text21585 );
document.write( '<\/a>' );
//-->
Tato emailová adresa je chráněna před spamboty, abyste ji viděli, povolte JavaScript
[username] => ydegaulle ) )
-
loadObjectList() - vrací seznam záznamů jako objekty, například takto:
Array ( [0] => stdClass Object ( [id] => 1 [name] => John Smith [email= =>
Tato emailová adresa je chráněna před spamboty, abyste ji viděli, povolte JavaScript
] => [email=
Tato emailová adresa je chráněna před spamboty, abyste ji viděli, povolte JavaScript
]
Tato emailová adresa je chráněna před spamboty, abyste ji viděli, povolte JavaScript
';
document.write( '' );
document.write( addy_text98273 );
document.write( '<\/a>' );
//-->
Tato emailová adresa je chráněna před spamboty, abyste ji viděli, povolte JavaScript
[username] => johnsmith ) [1] => stdClass Object ( [id] => 2 [name] => Magda Hellman [email= =>
Tato emailová adresa je chráněna před spamboty, abyste ji viděli, povolte JavaScript
] => [email=
Tato emailová adresa je chráněna před spamboty, abyste ji viděli, povolte JavaScript
]
Tato emailová adresa je chráněna před spamboty, abyste ji viděli, povolte JavaScript
';
document.write( '' );
document.write( addy_text6216 );
document.write( '<\/a>' );
//-->
Tato emailová adresa je chráněna před spamboty, abyste ji viděli, povolte JavaScript
[username] => magdah ) [2] => stdClass Object ( [id] => 3 [name] => Yvonne de Gaulle [email= =>
Tato emailová adresa je chráněna před spamboty, abyste ji viděli, povolte JavaScript
] => [email=
Tato emailová adresa je chráněna před spamboty, abyste ji viděli, povolte JavaScript
]
Tato emailová adresa je chráněna před spamboty, abyste ji viděli, povolte JavaScript
';
document.write( '' );
document.write( addy_text83189 );
document.write( '<\/a>' );
//-->
Tato emailová adresa je chráněna před spamboty, abyste ji viděli, povolte JavaScript
[username] => ydegaulle ) )
Existují i další, které vybírají pouze jeden sloupec, řádek, atd. vše je uvedeno v oficiální dokumentaci, odkaz máte výše. Další velice užitečnou funkcí je getNumRows(), která vrací počet najitých řádků, dělá vlastně to samé jako mysql_num_rows.
Nyní si ukážeme nějaký jednoduchý příklad poskládaný z předchozích funkcí:
$query = " SELECT name, email, username FROM . . . ";
$db =& JFactory::getDBO(); $db->setQuery($query); $user=$db->loadObjectList();
foreach($user as $uzivatel){ echo 'Jmeno uzivatele:'.$uzivatel->name.' email:'.$uzivatel->email.'<br />'; }
Tímto by jsme tedy docílili, že se pod sebe vypíšou všichni uživatelé (jméno a email).
Zálohování databáze
Nyní si ještě krátce povíme o zálohování databáze. Máme tři možnosti. Buďto nám databázi průběžně zálohuje náš hosting, a my si o ni pouze v případě problémů zažádáme. Další možností je zálohovat ručně přes phpMyAdmin. Je to webové rozhraní databáze, ke kterému nám poskytne přístup naše hostingová společnost. Po přihlášení do rozhraní vybereme tlačítko vpravo - Export, poté vybereme naši databázi ze seznamu dole zaškrtneme Do souboru a necháme si vyexportovat zálohu. Poslední možností je použíkomponenty třetích stran, které to vše udělají za vás. Jen namátkou nejznámější je asi Joomla Pack, ale existují i další, mě se však zdá, že ručně je to rychlější a jistější. |