Ako ukladať pomocný text do databáze
Aktualizované 15.1.2005 o 17:08
Po komentári od johna som trochu poupravoval kód podľa jeho rád, za čo mu veľmi pekne ďakujem.Pri tvorbe viac jazyčných webov som narazil na problém, ako ukladať jednotlivé pomocné texty, ktoré sa vyskytujú na stránke.
Pri jednom jazyku nie je tento problém, lebo text jednoducho vložíte do kódu a už vás nikdy nebude zaujímať, teda ak ho nebudete chcieť zmeniť.
Skúšal som rôzne riešenia, ale ako najinteligentnejšie mi príde to čo som sa rozhodol zverejniť.
Ako prvé si vytvoríme MySQL tabuľku a niečim ju naplníme.
--
-- Štruktúra tabulky `pomocne_texty`
--
CREATE TABLE `pomocne_texty` (
`lang` char(2) NOT NULL default 'sk',
`nazov` varchar(32),
`obsah` text,
`kam` enum('objednavka','index','cennik','kosik','produkt','registruj','rozne','vyhladavanie','postovne') NOT NULL default 'rozne',
PRIMARY KEY (`lang`,`nazov`)
) TYPE=MyISAM;
--
-- nejaké data pre tabulku `pomocne_texty`
--
INSERT INTO `pomocne_texty` VALUES ('sk', 'spravne_vypln', 'nejaky obsah', 'objednavka');
INSERT INTO `pomocne_texty` VALUES ('sk', 'skontroluj_objednavku', 'druhy obsah', 'objednavka');
INSERT INTO `pomocne_texty` VALUES ('sk', 'spat_kosik', 'dalsi obsah', 'objednavka');
Trošku si to vysvetlíme pre tých čo si to nevedia obkukať s ukážky.
- lang bude obsahovať skratku jazykovej verzie
- nazov je dôležitý ten musí byť unikátny, lebo v ňom bude vlastne názov premennej použitej v kóde
- obsah v tomto stĺpci je uložený obsah premennej
- kam je tu len pre lepšiu orientáciu, ktorý obsah kam patrí v prípade editácie
Ďalej si musíme tieto texty nejako vytiahnuť s databáze.
$result = mysql_query("SELECT nazov, obsah FROM pomocne_texty WHERE lang='".$lang."'");
$preklad = array();
while ($i = mysql_fetch_assoc($result)) {
$preklad[$i['nazov']] = $i['obsah'];
}
extract ($preklad); // k tomuto je viac poznámok dole v texte
Zase to trochu vysvetlím, vytiahneme obsah stĺpcov nazov a obsah s databáze. Obsah musí splňovať podmienku jazykovej verzie.
S premennej $preklad urobíme pole a pomocou while postupne poskladáme naše pole s obsahom.
Funkcia extract nám už len importuje premenné z poľa do aktuálnej tabuľky symbolov, čo znamená, že nám vzniknú premenné s názvom podľa obsahu stĺpca nazov a ich obsah je so stĺpca obsah.
Zjednodušene povedané nám vznikne toto:
$spravne_vypln = 'nejaky obsah';
$skontroluj_objednavku = 'druhy obsah';
$spat_kosik = 'dalsi obsah';
Pri funkcii extract si ale musíte dať pozor, aby nevznikla situácia, že sa v kóde bude niekde nachádzať premenná, ktorá vznikne po tejto funkcii, preto ak nechcete mať tento problém, nechajte to ako pole a tak aj pristupujte k jednotlivému obsahu.
Ak máte lepšie riešenie rád sa nechám poučiť, lebo ja sa stále pokladám len za začiatočníka, ktorý sa môže mýliť.
Páči sa vám tento článok, zalinkujte ho:
««« Predchádzajúci text: Opera, legend a display: none; Následujúcí text: Štyri veci (Four Things) »»»
Verzia pre tlač | 3 komentáre | 576x
Komentáre k textu
Rss komentářů tohoto textu - Formulár pre nový komentár
No ten extract by som tam určite nedával. Je celkom isté, že sa ti to začne mlátiť s premennými, ktoré už existujú. V pohode si to nechaj iba v poli alebo na to sprav objekt.
UNIQUE key na stĺpci nazov nemôže fungovať. Akonáhle budeš mať dva rôzne preklady pre spravne_vypln tak si nahratý. Osobne by som navrhol tabuľku aj bez id pokiaľ ho nepotrebuješ niekde inde. PRIMARY KEY by som zvolil ako zložený index z lang a nazov.
ENUM je väčšinou zlo a treba sa ho zbaviť. Redundancia dát. Proste si na to vytvor ďalšiu tabuľku a prepoj to idčkami.
Tabuľka by sa mala volať asi skôr slovnik ako pomocne_texty.
Inak to čo si spravil nie je zlý nápad a bežne sa to tak robí. Len to bolo treba trochu odladiť a vyčistiť. Od toho som tu.
Oveľa väčšiu srandu zažiješ, keď pochopíš, že napríklad formátovanie času a peňažných položiek je diametrálne odlišné na Slovensku ako v USA alebo inde. Klasický problém je aj s číslovkamy.
1 item, 1 položka 2 items, 2 položky 5 items, 5 položiek
Tomuto celému sa venuje Internationalization (i18n). Dobrý popis je možné nájsť na http://java.sun.com/…n/index.html
[1] johno : extract – no to si už musí každý ustrážiť sám, alebo použiť len pole, ako píšeš ty.
UNIQUE key – máš pravdu, ešte som sa nedostal k prekladu tak som na to neprišiel.
ENUM – to máš tak, čítal som články, kde to doporučujú aby sa toho programátory nebáli, tak som to použil.
Článok idem patrične upraviť ![]()

