Joomla a práce s databází
Pondělí, 31 Srpen 2009 12:39
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é:
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_text82387 ); 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_text87643 ); 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_text11641 ); 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_text34396 ); 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_text86420 ); 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_text54620 ); document.write( '<\/a>' ); //--> Tato emailová adresa je chráněna před spamboty, abyste ji viděli, povolte JavaScript [username] => ydegaulle )
)
$query = "$db =& JFactory::getDBO();
SELECT name, email, username
FROM . . . ";
$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ší.
Přidej Váš komentář
Další odkazy
Spřátelené weby
Anketa
Uživatelé na chatu
- No users online
Clanky se ukladaji do tabulky jos_content (misto jos_ muze byt i neco jineho) v databázi.
Takze je mozne je pote naimportovat ke kolegovi, problem je trochu v pridelovani ID clanku, je mozne kdyz kolega napise 10 clanku ze se jim prideli ID od 1 do 10, vam totez, a jelikoz ID musi byt jedinecne pro kazdy clanek, pri importu k sobe ci kolegovi vam zahlasi chybu. Takto bych to tedy neresil. Moje rada je hodit Joomlu na web aby jste oba pracovali na stejnem systemu. Muzete zvolit treba i nejaky freehosting, pokud nemate vlastni domenu.
Pokud ste na stejne siti, je mozne Joomlu nainstalovat pouze na jeden z PC a z druheho se pote pripojovat k prvnimu pomoci IP adresy:
Misto localhost/joomla
pak muzete zadavat
192.168.1.20/joomla