DevProTalk

Forumi IT profesionalaca
web development, web design, e-business, SEO


Idite nazad   DevProTalk > Web development i web aplikacije > PHP
Želite da se reklamirate ekskluzivno na ovoj poziciji? Javite se

PHP PHP aplikacije, Smarty, PEAR

Odgovori
 
Alati teme Način prikaza
Staro 16. 03. 2007.   #1
srdjan
xyz
Grand Master
 
Datum učlanjenja: 25.10.2006
Poruke: 893
Hvala: 87
346 "Hvala" u 163 poruka
srdjan ima spektakularnu aurusrdjan ima spektakularnu aurusrdjan ima spektakularnu aurusrdjan ima spektakularnu auru
Default PHP + hardkodirani šifrarnik

Hi!

Imam pitanje jedno, vezano za upotrebu šifrarnika (PHP/MySQL).

Sve stringove i druge podesive variable držim u 3 tabele:

- VAR
- VALUE (child od VAR)
- VALUE_LOCAL (child od VALUE_LOCAL)

Tako da, na primer, za tekst koji se ispisuje na tasteru "Login" idu sledeći podaci:

Tabela VAR: "UI"
Tabela VALUE: "BUTTON_LOGIN"
Tabela VALUE_LOCAL: "Login" (za engleski)
Tabela VALUE_LOCAL: "Prijava" (za srpski)

E sad, ovo je sve uglavnom hard-codirano i sa malo podataka ne radi loše. Funkcija GetString("UI", "BUTTON_LOGIN", $language) vrati ono što treba.

Zanima me postoji li način da se ovo sve učita jednom (nešto tipa SELECT * FROM VAR, VALUE, VALUE_LOCAL WHERE veza po ID-ju) i onda "iz memorije" serviraju stringovi web stranama.

Izgleda mi loše da za svaki poziv PHP skripta radim ovaj SELECT, a još lošije da radim SELECT za svaki string koji mi treba.

Nisam baš rodjen kao PHP programer tako da mi treba savet, nadam se da ste skapirali šta sam hteo da pitam.

Pozdrav,
S.
srdjan je offline   Odgovorite uz citat
Staro 16. 03. 2007.   #2
ivanhoe
Ivan Dilber
Sir Write-a-Lot
 
Avatar ivanhoe
 
Datum učlanjenja: 18.10.2005
Lokacija: Bgd
Poruke: 5.320
Hvala: 104
2.344 "Hvala" u 583 poruka
ivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svima
Pošaljite poruku preko Skype™ za ivanhoe
Default

ne razumem poentu VAR tabele? Jel ona treba da omoguci neke sekcije unutar prevoda?

ja obicno sve lokalizacije drzim u fajlovima, jer je tako mnogo lakse za masovno prevodjenje, samo iskopiras fajl i prevedes sve sto treba..
__________________
Leadership is the art of getting people to want to do what you know must be done.
ivanhoe je offline   Odgovorite uz citat
Staro 16. 03. 2007.   #3
ppavlovic
expert
Expert
 
Avatar ppavlovic
 
Datum učlanjenja: 27.11.2005
Poruke: 543
Hvala: 47
57 "Hvala" u 31 poruka
ppavlovic će postati "faca" uskoro
Cool

Ja imam takvo stupidno resenje za moj sajt... koji je btw za 99.9% na srpskom.

Elem, da bi ubrzao izvlacenje stringova iz baze, uradi sledece:
1) zaboravi na normalizaciju tabela i sve to stavi u jednu tabelu
Moja tabela ima sledeca polja:
Kôd:
lang_code char(2), // SR, EN, FR
name varchar(255), // labela koja se prevodi
description varchar(255), // opis labele 
value text, // vrednost labele u zavisnosti od jezika
topic varchar(30) // sekcija na koju se odnosi prevod: General, UI, Messages, Errors, Mail
2) uradi "Select * From translation_tabela" i prebaci rezultat u jedan array tipa

PHP kôd:
$translation['en']['LOGIN'] = 'Login';
$translation['sr']['LOGIN'] = 'Prijava';
...
etc... 
ili ti
PHP kôd:
$translation = array('en' => array( 'LOGIN' => 'Login''LOGOUT' => 'Logout'),
                       
'sr' => array('LOGIN' => 'Prijava''LOGOUT' => 'Odjava'); 
3) prepravi tvoju funkciju GetString() da cita vrednost iz $translation niza, a ako nije isset() taj clan niza, onda uradi SELECT za vrednoscu iz baze za default jezik

4) ako imas eAccelerator, APC cache ili mmcache, stavi promenljivu $translation u shared memory.
4a) ako nemas doticne module, onda serijalizuj promenljivu $translation i stavi je u bazu ili filesystem (sta god ce od ta dva bude brze) pa onda unserialise... Ili jos bolje, napravi skripticu koja ce da napravi jedan PHP fajl koji ce imati sadrzinu
PHP kôd:
$translation = array('en' => array( 'LOGIN' => 'Login''LOGOUT' => 'Logout'),
                       
'sr' => array('LOGIN' => 'Prijava''LOGOUT' => 'Odjava'); 
i koji ces da inkludujes na pocetku svake skripte. Svaki put kad izmenis/dodas neki translation string u bazi, pozovi neku utility skriptu koja ce da regenerise fajl sa $translation. Ovo jos bolje radi ako imas instaliran Zend Accelerator

Ima li neko bolju/optimizovaniju ideju?
__________________
MojNoviAuto.com - Tvoj prvi sajt za kupovinu novog automobila

Poslednja izmena od ppavlovic : 16. 03. 2007. u 03:47.
ppavlovic je offline   Odgovorite uz citat
Staro 16. 03. 2007.   #4
srdjan
xyz
Grand Master
 
Datum učlanjenja: 25.10.2006
Poruke: 893
Hvala: 87
346 "Hvala" u 163 poruka
srdjan ima spektakularnu aurusrdjan ima spektakularnu aurusrdjan ima spektakularnu aurusrdjan ima spektakularnu auru
Default

@ivanhoe

Cela struktura nije namenjena samo lokalizaciji, već je šifrarnik za "sve i svašta", npr. za VAR="admin_setup", recordi u tabeli VALUE imaju vrednosti razunih parametara sajta, mogu biti i numeričke i sl. A samo za stringove se "gleda" u VALUE_LOCAL

@ppavlovic

Hvala za ideje, naročito pod 4...

Obzirom da će tekst biti menjan relativno retko, ideja sa generisanjem PHP koda na osnovu podataka iz tabela nije uopšte loša.
srdjan je offline   Odgovorite uz citat
Staro 16. 03. 2007.   #5
ivanhoe
Ivan Dilber
Sir Write-a-Lot
 
Avatar ivanhoe
 
Datum učlanjenja: 18.10.2005
Lokacija: Bgd
Poruke: 5.320
Hvala: 104
2.344 "Hvala" u 583 poruka
ivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svima
Pošaljite poruku preko Skype™ za ivanhoe
Default

Citat:
Originalno napisao ppavlovic
Ima li neko bolju/optimizovaniju ideju?
mozda da se ne drze svi jezici u istoj tabeli.. u jednom trenutku tebi treba samo jedan jezik, tako da ima smisla to sve podeliti na zasebne tabele..

takodje, mozda bi imalo smisla podeliti spisak reci po stranicama gde se koriste, pa ucitavati u memoriju samo ono sto ti je potrebno za trenutnu stranu..
__________________
Leadership is the art of getting people to want to do what you know must be done.
ivanhoe je offline   Odgovorite uz citat
Staro 16. 03. 2007.   #6
zextra
Boris
Grand Master
 
Avatar zextra
 
Datum učlanjenja: 01.12.2005
Lokacija: Novi Sad
Poruke: 775
Hvala: 5
156 "Hvala" u 2 poruka
zextra is on a distinguished roadzextra is on a distinguished road
Default

@srdjan: ja sam takvo resenje koristio jednom davno... Budz varijanta je da recimo u funkciju koju stalno pozivas (GetString) stavis parce koda koje proverava da li je globalna varijabla npr. $translations definisana, i ako nije, da je inicijalno popuni bitnim podacima (prevodima i stringovima u tvom slucaju, jel), a zatim, svako naredno pozivanje funkcije samo koristi vec ucitane podatke...

Naravno, postoje i elegantnija resenja, ali ovo je najblize implementaciji u tvom slucaju.
__________________
"It’s important to have goals when you pet. Otherwise you’re just rubbing another mammal for no reason." - Scott Adams
zextra je offline   Odgovorite uz citat
Odgovori


Alati teme
Način prikaza

Pravila pisanja
Možete ne započinjati nove teme
Možete ne slati odgovore
Možete ne slati priloge
Možete ne izmeniti svoje poruke
vB kôd je Uključen
Smajliji su Uključen
[IMG] kod je Uključen
HTML kôd je Isključen
Pogledajte forum


Vreme je GMT +2. Trenutno vreme je 11:11.


Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.
Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.