Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]wybieranie języka wyświetlenia strony. Pomoc w zaznaczeniu który język wybrany.
Forum PHP.pl > Forum > Przedszkole
casperii
Witam Panowie, mam kod:

  1. <?php
  2. //============== *** JEZYKI *** ==============
  3. $jezyki = '';
  4. $jezyki_array = array('pl','ua');
  5. if(isset($lang)){
  6. $lang = $_GET['lang'];
  7. }else{
  8. $lang = 'pl';
  9. }
  10. $language_get = $lang;
  11. if(in_array($language_get, $jezyki_array)){
  12. $language_page = $language_get; }
  13. else{
  14. $language_page = 'pl';
  15. }
  16. /*if(isset($lang)=='pl'){
  17. $classy = '_act';
  18. }else{
  19. $classy = '';
  20. }
  21. */
  22. switch ($language_page){
  23. case 'pl':
  24. include_once('language/polish.php');
  25. $kodowanie = "text/html; charset=UTF-8";
  26. break;
  27.  
  28. case 'ua':
  29. include_once('language/ukrainian.php');
  30. $kodowanie = "text/html; charset=UTF-8";
  31. break;
  32.  
  33. default:
  34. include_once('language/polish.php');
  35. $kodowanie = "text/html; charset=UTF-8";
  36. }
  37.  
  38. $adres_url = "http://".$_SERVER["SERVER_NAME"].$_SERVER["SCRIPT_NAME"];
  39. $adres_zmn = explode("&", $_SERVER["QUERY_STRING"]);
  40.  
  41. for($jl=0;$jl<count($jezyki_array);$jl++){
  42.  
  43. $adres_zmienne = NULL;
  44. $lang_tak = FALSE;
  45.  
  46. for($jz=0;$jz<count($adres_zmn);$jz++){
  47.  
  48. $and_nie = TRUE;
  49.  
  50. if(preg_match('/lang=+/i', $adres_zmn[$jz])){
  51.  
  52. if($lang_tak){
  53. $and_nie = FALSE;
  54. }else{
  55. $adres_zmienne .= 'lang='.$jezyki_array[$jl];
  56. $lang_tak = TRUE;
  57. }
  58. }else{
  59. $adres_zmienne .= $adres_zmn[$jz];
  60. }
  61.  
  62. if($jz==(count($adres_zmn)-1) AND !$lang_tak){
  63.  
  64. if($adres_zmn[$jz]!=NULL){
  65. $adres_zmienne .= '&lang='.$jezyki_array[$jl];
  66. }else{
  67. $adres_zmienne .= 'lang='.$jezyki_array[$jl];
  68. }
  69.  
  70. $and_nie = FALSE;
  71. }
  72.  
  73. if($jz!=(count($adres_zmn)-1) AND $and_nie){
  74. $adres_zmienne .= '&';
  75. }
  76.  
  77. }
  78.  
  79. $adres_href = $adres_url.'?'.$adres_zmienne;
  80. $jezyki .= '<div style="padding:0px; margin:0px;"><a href="'.$adres_href.'" class="lang'.$classy.'"><img src="/images/flag/'.$jezyki_array[$jl].'.png" border="0"></a></div>';
  81. }
  82. //============================================
  83. ?>
  84. <?= $jezyki;?>


Proszę o sprawdzenie czy kod jest dobrze napisany i jeżeli zawiera niepotrzebne lub przestarzałe funkcje to proszę o naprowadzenie mnie.
Ponadto chciałbym dodać do classy zmienną $classy jeżeli wybrałem dany język.
Reasumując wybrałem język polski dodaje mi do class="lang_act" pozostałe języki class="lang"
KsaR
  1. <?php
  2. //============== *** JEZYKI *** ==============
  3. $jezyki = '';
  4. $jezyki_array = array('pl','ua');
  5. if(isset($lang)){

Mi się tylko zdaje czy korzystasz z REGISTER_GLOBALS questionmark.gif ohmy.gif
explode, in_array, count, preg_match. Wedlug mnie nie sa przestarzale tongue.gif,
Yyy. Poczytaj o DRY. Bo powtarzasz kod gdzies gdzie doslownie bylby zbedny np.
$kodowanie...
poza tym:
  1. for($jl=0;$jl<count($jezyki_array);$jl++){
  2.  
  3. $adres_zmienne = NULL;
  4. $lang_tak = FALSE;
  5.  
  6. for($jz=0;$jz<count($adres_zmn);$jz++){

Count powinienes miec wpierwszym argumencie zapisany jesli ilosc eleementow tablicy sie nie zmeinia co 1 petle. - a u ciebie sie nie zmiena.

Tzn w pierwszym argumencie for mozesz zapisywac nowe zmienne po porzecinku, wiec mozesz tak:

for ($x=0, $ct=count($cos); $x<$ct ; ++$x)

Dla przykladu.

tongue.gif

Poza tym tworzysz duzo zmienmych.
$language_get = $lang;
(..ciach..)
$language_page = $language_get;

  1. if(isset($lang)){
  2. $lang = $_GET['lang'];
  3. }else{
  4. $lang = 'pl';
  5. }
  6. $language_get = $lang;
  7. if(in_array($language_get, $jezyki_array)){
  8. $language_page = $language_get; }
  9. else{
  10. $language_page = 'pl';
  11. }

  1. $language_page = isset($_GET['lang']) ? $_GET['lang'] : 'pl';
  2. if (!in_array($language_page, $jezyki_array))
  3. $language_page='pl';

Tak chyba lepiej?..

@@ widze ze nie moge zedytowac postu bo go na html zamieni.
Co do register_globals; no chyba ze includujesz ten plik.. ; tongue.gif
KsaR
1. $lang = 'pl'; skasuj ta zmienna bo jej nawet nie uzywasz.
2. $kodowanie = "text/html; charset=UTF-8"; skasuj z switcha bo robisz w kazdym case to samo(więc mozesz raz za switchem)
3. Uzyj funkcji ktora ci pokazalem w innym temacie parse_str()
Zamiast tej kombinacji str_replace.
4. Razi tak czy inaczej:
for($jl=0;$jl<count($jezyki_array);
Lepiej:
for($jl=0,$jct=count($jezyki_array);$jl<$jct;
Bo inaczej liczy od nowa za kazdym obiegiem pętli.
Ale z tego co widze i tak mozesz ta petle pominac jak sie nie myle, gdy uzyjesz funkcji z pkt. 3.
Edit. nie chce mi sie kombinowac bo dzis nie mysle.
Mam gorączkę to moglem cos pomylic wink.gif

Edit. Po godzinie biggrin.gif, zrob tak jak w manualu.
  1. $params = parse_str($_SERVER['QUERY_STRING']);

I z tego wydobadz jaki język wink.gif, (oczywiscie zrob print_r($params) zeby zobaczyc jak wyglada tablica zeby wiedziec jak sie odwolac)

I potem mozesz np.

$wybrany_jezyk = isset($params['lang']) ? $params['lang'] : 'pl';
I switch tego wybranego języka. Oczywiscie klucz lang to ma byc klucz pod ktorym bedzie język.
A for mozesz pominąć tzn to kasowanie przez str_replace itp. Zbuduj z tego co wyzej odpowiedni url.
casperii
@KsaR zrobiłem trochę po swojemu :-) ale działa. Napisz mi w jaki sposób mam zaznaczyć który język jest wybrany. Np dopisanie czegoś do class

  1.  
  2. $jezyki = '';
  3. $jezyki_array = array('pl','ua');
  4.  
  5. $language_page = isset($_GET['lang']) ? $_GET['lang'] : 'pl';
  6. if(!in_array($language_page, $jezyki_array))
  7. $language_page='pl';
  8.  
  9. switch ($language_page){
  10. case 'pl':
  11. include_once('language/polish.php');
  12. break;
  13.  
  14. case 'ua':
  15. include_once('language/ukrainian.php');
  16. break;
  17.  
  18. default:
  19. include_once('language/polish.php');
  20. }
  21. $kodowanie = "text/html; charset=UTF-8";
  22.  
  23. $count_lang = count($jezyki_array);
  24. for ($jl=0; $jl <$count_lang; $jl++){
  25. $jezyk = NULL;
  26. $jezyk .= ''.$jezyki_array[$jl];
  27.  
  28. $cos=$_SERVER['REQUEST_URI'];
  29. $cos2 = str_replace($language_page, '', $cos);
  30. $cos2 = str_replace('/', '', $cos2);
  31. $adres_href = NULL;
  32. $adres_href .= '/'.$jezyk.'/'.$cos2;
  33. $jezyki .= '<div style="padding:0px; margin:0px;"><a href="'.$adres_href.'" class="lang"><img src="/images/flag/'.$jezyk.'.png" border="0"></a></div>';
  34. }


Musiałem użyć str_replace ponieważ parse_str nic nie wyświetlał.
Wstawienie w switch zmiennej class i później jej dopisanie w hrefie nic nie daje.
KsaR
Bo ja wycielem fragment ktory trzeba zamienic a nie cala tongue.gif,
A ogolem to miales bez petli z tym co pisalem poprobowac hm... I wedlug tego link zbudowac.
casperii
Ma ktoś jakiś pomysł jak mam zaznaczyć który język wybrano?
Pyton_000
A czego Ty tu nie umiesz? Przecież masz w zmiennej wybrany język, teraz trzeba tylko coś z tym zrobić.
casperii
@Pyton_000 to ja wiem, że za wybrany język odpowiada mi zmienna $language_page.
ale chciałbym to jakoś wkomponować w pętle for gdzie mam wyświetlone flagi i ten język który został wybrany to flaga będzie miała inną classe.

  1. if($language_page='pl'){
  2. $classaNowa ='opacity:0.5';
  3. }


tylko, przecież tu nie może być pl bo to przecież może tyczyć się każdego języka. a nie nas*am ifów tongue.gif

Drugim problemem jest to, że chce do flagi do adresu dodać index.html jeśli ktoś wszedł główną domenę. Bo to teraz wygląda tak domena.pl/pl <- a tu muszę dopisać index.html , ale nie może być na stałe, bo jak ktoś wybierze start to adres jest domena.pl/index.html :-)
casperii
@Pyton_000 to ja wiem, że za wybrany język odpowiada mi zmienna $language_page.
ale chciałbym to jakoś wkomponować w pętle for gdzie mam wyświetlone flagi i ten język który został wybrany to flaga będzie miała inną classe.

  1. if($language_page='pl'){
  2. $classaNowa ='opacity:0.5';
  3. }


tylko, przecież tu nie może być pl bo to przecież może tyczyć się każdego języka. a nie nas*am ifów tongue.gif

Drugim problemem jest to, że chce do flagi do adresu dodać index.html jeśli ktoś wszedł główną domenę. Bo to teraz wygląda tak domena.pl/pl <- a tu muszę dopisać index.html , ale nie może być na stałe, bo jak ktoś wybierze start to adres jest domena.pl/index.html :-)
Pyton_000
if($jezyk == $language_page)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.