Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Sortowanie urla
Przem4S
post
Post #1





Grupa: Zarejestrowani
Postów: 103
Pomógł: 3
Dołączył: 26.07.2010
Skąd: Tychy

Ostrzeżenie: (0%)
-----


Witam otóż napotkałem na problem z sortowaniem URL'a, u mnie prezentuje się on następująco "/lang/controller/method/arg1/arg2" nic nadzwyczajnego.
Chcę ustawić tak, aby lang był rozpoznawany po ilości liter (strlen) == 2 (chcę używać oznaczeń ISO (pl/de/en itd)) i ma być on opcjonalny, czyli gdy nie wpiszemy
żadnego langa ma ładować domyślny (pl) i 1 argument traktować jako kontroler. W kodzie prezentuje się to tak:

  1. $this->lang=(strlen($l = array_shift($parts))==2) ? $l: $config->get('default_language');
  2. $this->controller=($c = array_shift($parts)) ? $c: $config->get('default_controller');
  3. $this->method=($m = array_shift($parts)) ? $m: $config->get('default_method');
  4. $this->args=(isset($parts[0])) ? $parts : array();


Przy takim kodzie po wprowadzeniu urla "en/controller/method/arg1/arg2" uzyskuję:
  1. Język: en
  2. Kontroler: controller
  3. Metoda: method
  4. array(2) { [0]=> string(4) "arg1" [1]=> string(4) "arg2" }


Przy wprowadzeniu tylko "controller/method/arg1/arg2" uzyskuję:

  1. Język: pl
  2. Kontroler: method
  3. Metoda: arg1
  4. array(1) { [0]=> string(4) "arg2" }


Jak widać ucina mi kontroler z powodu array_shifta (tak się domyślam), co robię źle? Z góry dziękuję za pomoc. Pozdrawiam.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
abort
post
Post #2





Grupa: Zarejestrowani
Postów: 590
Pomógł: 107
Dołączył: 25.10.2011

Ostrzeżenie: (0%)
-----


Te testy, które chcesz zrobić, robisz tak:
- Ściągasz element z tablicy. Jak ściągnięty element ma 2 znaki, to to jest język. A jak nie ma? To co z nim robisz? Odpowiedź: zapominasz (masz puste przypisanie w operatorze ternary - zapewne tylko po to, by zachować składnię).

Powinieneś (jedna z dwóch rzeczy):
1. testować $parts[0] na okoliczność wystąpienia dwóch znaków, i jeśli TRUE, to robisz to co robisz
2. robić to co robisz, ale zamienić samotne "$l" w operatorze ternary i wstawić tam kod w stylu array_unshift ($parts, $l);
Go to the top of the page
+Quote Post
Przem4S
post
Post #3





Grupa: Zarejestrowani
Postów: 103
Pomógł: 3
Dołączył: 26.07.2010
Skąd: Tychy

Ostrzeżenie: (0%)
-----


Nie wiem już może tępo działam o tej porze ale coś takiego wykminiłem:
  1. $this->lang=(strlen($l = array_shift($parts))==2) ? $l: $config->get('default_language') AND array_unshift($parts, $l);
  2. $this->controller=($c = array_shift($parts)) ? $c: $config->get('default_controller');
  3. $this->method=($m = array_shift($parts)) ? $m: $config->get('default_method');
  4. $this->args=(isset($parts[0])) ? $parts : array();


Po wywołaniu "kontroler/test/abc" mam :

  1. Język: pl
  2. Kontroler: kontroler
  3. Metoda: test
  4. array(1) { [0]=> string(3) "abc" }


Czyli jest ok. Ale tymczasem po wywołaniu "de/kontroler/test/abc":

  1. Język: de
  2. Kontroler: de
  3. Metoda: kontroler
  4. array(2) { [0]=> string(4) "test" [1]=> string(3) "abc" }


Czyli jak by 2 razy unshiftnął to czy jak?
Go to the top of the page
+Quote Post
Sephirus
post
Post #4





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


  1. $path = '/lang/controller/method/arg1/arg2';
  2. $chunks = explode('/',trim($path,'/'));
  3. if(strlen($chunks[0]) == 2) {
  4. $this->lang = array_shift($chunks);
  5. } else {
  6. $this->lang = $config->get('default_language');
  7. }
  8. $this->controller=($c = array_shift($chunks)) ? $c : $config->get('default_controller');
  9. $this->method=($m = array_shift($chunks)) ? $m : $config->get('default_method');
  10. $this->args=(isset($chunks[0])) ? $chunks : array();


Ten post edytował Sephirus 15.11.2012, 09:13:15


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
Przem4S
post
Post #5





Grupa: Zarejestrowani
Postów: 103
Pomógł: 3
Dołączył: 26.07.2010
Skąd: Tychy

Ostrzeżenie: (0%)
-----


Tak myślałem że w ternie nie wyjdzie, chciałem to krócej napisać, ale jest ok. Działa poprawnie, dziękuję bardzo za pomoc, leci oczywiście pomógł.

Chciałbym jeszcze o jedną rzecz zapytać, mianowicie chcę wprowadzić języki, czy lepiej będzie tłumaczenia trzymać w bazie czy w plikach?

Tak wiem temat wielojęzykowości istnieje, przewertowałem go.
Do trzymania tłumaczeń w bazie skłania mnie szybka edycja (choćby z panelu),
ale czy jest to warte kosztem szybkości działania bazy itd?
Jak wy trzymacie swoje langi?
Go to the top of the page
+Quote Post
redeemer
post
Post #6





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

Ostrzeżenie: (0%)
-----


Cytat(Przem4S @ 15.11.2012, 14:09:08 ) *
Do trzymania tłumaczeń w bazie skłania mnie szybka edycja (choćby z panelu),
ale czy jest to warte kosztem szybkości działania bazy itd?
Jak wy trzymacie swoje langi?
Skorzystaj z bazy danych + cachowanie za pomocą np. memcached.


--------------------
Go to the top of the page
+Quote Post
Sephirus
post
Post #7





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Cytat(Przem4S @ 15.11.2012, 14:09:08 ) *
Tak myślałem że w ternie nie wyjdzie, chciałem to krócej napisać, ale jest ok.



Wyjdzie smile.gif

  1. $path = '/lang/controller/method/arg1/arg2';
  2. $chunks = explode('/',trim($path,'/'));
  3.  
  4. $this->lang = strlen($chunks[0]) == 2 ? array_shift($chunks) : $config->get('default_language');
  5.  
  6. $this->controller=($c = array_shift($chunks)) ? $c : $config->get('default_controller');
  7. $this->method=($m = array_shift($chunks)) ? $m : $config->get('default_method');
  8. $this->args=(isset($chunks[0])) ? $chunks : array();


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 09:10