Temat: zamiana frazy 'page:' w urlach paginacji
Hej,
macie pomysl jak zamienic fraze 'page:' w linkacha paginacji na cos polskiego np. 'strona:' ?
I najlepiej aby Reverse Routing dzialalo po tej zmianie ![]()
Nie jesteś zalogowany. Proszę się zalogować lub zarejestrować.
Strony 1
Zaloguj się lub zarejestruj by napisać odpowiedź
Hej,
macie pomysl jak zamienic fraze 'page:' w linkacha paginacji na cos polskiego np. 'strona:' ?
I najlepiej aby Reverse Routing dzialalo po tej zmianie ![]()
Mozesz to zmienic w kontrolerze w metodzie beforeFilter, tylko po co ?
Mozesz to zmienic w kontrolerze w metodzie beforeFilter, tylko po co ?
hmmm... mozesz podac przyklad kodu ? ![]()
po co ? no sorry, ale nie wyobrazam sobie polskojezycznej aplikacji ze slowkiem page w url-ach
robal77 napisał/a:Mozesz to zmienic w kontrolerze w metodzie beforeFilter, tylko po co ?
hmmm... mozesz podac przyklad kodu ?
po co ? no sorry, ale nie wyobrazam sobie polskojezycznej aplikacji ze slowkiem page w url-ach
http://biznes.onet.pl/tadzykistan-prezy 3024191,1,news-detal
http://wiadomosci.wp.pl/gid,11352225,title,Co-rodzice-moga-zrobic-z-dzieci---zdjecia,galeria.html?ticaid=18771
zeby interia sie nie poczula obrazona
http://muzyka.interia.pl/pop/news/piekne-trojaczki-w-mam-talent,1344793,50
jak skoncze ogladac ulubiony serial to wkleje. przykladowy kod.
Ostatnio edytowany przez robal77 (2009-07-28 17:20:42)
i co z ta propozycja? bo az sam jestem ciekaw ?
i co z ta propozycja? bo az sam jestem ciekaw ?
I czekales 4 czy 5 godzin , zamiast ruszyc glowa ?
To tak po 3 minutach zerkania w kod : mozna to zrobic rozszerzajac klase PaginatorHelper i nadpisujac 2 metody : __pagingLink i link a pozniej w danym kontrolerze odwrocic zmiany wprowadzone w tych metodach w metodzie beforeFilter...
Ewentualnie zeby bylo prosciej przetlumaczyc asc i desc , ktorych w polskiej wersji jezykowej miec nie przystoi, mozesz sobie sklonowac calego helpera i zrobic ctrl + H
Ostatnio edytowany przez robal77 (2009-07-29 00:52:58)
i co to ma byc rozwiazanie? bo jak na razie to rzuciles pare frazesow, z ktorych nic nie wynika i z ktorych czesc jest oczywistoscia. a gdzie jest ten obiecany przez ciebie przyklad kodu?
ja juz rozwiazalem ten problem i niedlugo umieszcze to rozwiazanie na forum ale dam ci szanse sie jeszcze wykazac
Ostatnio edytowany przez tomay7 (2009-07-29 08:37:10)
Wiec tak wyjaśnie Ci te "frazesy" i resztę czarnej magii, oraz wszystkie oczywiste oczywitości, ta prosto jak to możliwe, w razie dalszych problemów ze zrozumieniem proszę zerknąć do pierszego lepszego "php od podstaw" w jakiś słownik czy skorowidz.
Calego kodu pisac nie zamierzam, srednio rozgrarniety beginer php sobie z tym poradzi w 5 miut..., a skoro wymiatasz , to pojdzie Ci jak po masle:
1.
<?php
myFisrtClassHelper extends PaginatorHelper
{
function link($title, $url = array(), $options = array())
{
... tutaj wlasnie napidsujesz metode 1, zamieniajac pewien string na jego polskojezyczny odpowiednik
}
function __pagingLink($which, $title = null, $options = array(), $disabledTitle = null, $disabledOptions = array()) {
{
... tutaj wlasnie napidsujesz metode 2, zamieniajac pewien string na jego polskojezyczny odpowiednik
}
}<?php
class ImNewbieAndRudeController extends AppController
{
function beforeFilter()
{
if(!empty($this->pass["params"]["strona"])
{
//o ile to wlasnie z wtym miejscu sa zmienne paginacji odwracasz to co zrobiles wyzej.... ( taki maly test na iq ;)
}
}
}Jest to dokladnie to o czym pisalem powzyej, ale chyba ktos ma problemy z pojeciem rozszerzania klas czy napdisywaniem metod...
Kolejne rozwiazaniem to sklonowanie helpera i pozamieianiem zywcem przez find/replcace ( CTRL+H) wszystkich indexow "page" na "strona".
Jak ktos jest z epoki kamienia lupanego, dokana zmian bezsrednio w helperze ;-)
Rozumie ze "swoj" kod masz, ale czekasz na moje gotowe rozwiazaniem, bo bedziesz robic benchmarki wydajnosci obydwu rozwiazan, po to by wybrac to optymalne i najszybsze.
Ostatnio edytowany przez robal77 (2009-07-29 10:30:52)
mi chodzi o eleganckie rozwiazanie, myslalem ze zaproponujesz cos konkretnego i ciekawego ale ciagle wrzucasz pseudo-kod - w dodatku z bledami:
if(!empty($this->pass["params"]["strona"]))
chyba raczej:
if(!empty($this->params["pass"]["strona"]))
chociaz Paginator wykorzystuje named arguments (nie wiem czy slyszales o czyms takim) wiec jesli juz to:
if(!empty($this->passedArgs['strona']))
dam ci jeszcze troche czasu na zaproponowanie konkretnego kodu bo nie chce kopac lezacego ![]()
kop dowoli,
losowo wybrana linijka kodu z pagnitatora
$url = array_merge(array('page' => $this->current($model)), $url);O ile sie nie myle w urlu bedziesz miec "page" puki tej metody nie nadpiszesz, no chyba ze sie nie znam.
Idac dalej tym tropem , wycinek kodu z metody paginate controllera ktora oczekuje wlasnie indexu page ...
if ($page === 'last' || $page >= $pageCount) {
$options['page'] = $page = $pageCount;
} elseif (intval($page) < 1) {
$options['page'] = $page = 1;
}przejmy kilka linijek wyzej
extract($options = array_merge(array('page' => 1, 'limit' => 20), $defaults, $options));.... kurde znow to holerne page.... idzmy wyzej...
$options = array_merge($this->params, $this->params['url'], $this->passedArgs);hmm chyba jedna z tablic musi zawierac index page inaczej zawsze $var["page"] = 1 ... no to kupa, bo Twoje sprytne rozwiazanie bedzie paginowac tylko 1-sza strone , i bedie wstanie pokazac tylko wyniki dla niej , obojtenie co bys nie wsadzil w url... chyba ze bedzie to page wieksze niz 1 ![]()
Sam helper moze przeslac dodtkowe zmienne, poza jego wlasnymi do metody paginate controlera lub modelu, w tym named arguments. Zycze powodzenia w zmianie hardcodowanych inexow jakimkolwiek argumentem wstawionym w url.
Ostatnio edytowany przez robal77 (2009-07-29 10:58:04)
dobra, troche znudzila mnie juz ta dyskusja wiec podaje gotowe rozwiazanie.
po pierwsze nalezy uzmyslowic sobie, ze zmienna 'page' z URLa jest mapowana na klucz 'page' w tablicy $paginate kontrolera. wiec jak ktos chce zrobic bezmyslny search & replace to moze sie przejechac.
ja rozwiazalem to w ten sposob:
1) skopiowalem metode paginate() z /cake/libs/controller/controller.php do /app/app_controller.php, w skopiowanej metodzie odnalazlem ta linie:
$options = array_merge($this->params, $this->params['url'], $this->passedArgs);i bezposrednio nad nia dodalem cos takiego:
if (isset($this->passedArgs['strona'])) $this->passedArgs['page'] = $this->passedArgs['strona'];2) skopiowalem caly Paginator Helper z /cake/libs/view/helpers/paginator.php do /app/view/helpers/paginator.php, w skopiowanym helperze w metodzie link odnalazlem ta linie:
return $this->{$obj}->link($title, $url, $options); i bezposrednio nad nia dodalem:
$url['strona'] = $url['page'];unset($url['page']);3) w pliku /cake/libs/router.php w zmiennej $named w kluczu 'default' zastapilem wartosc 'page' slowkiem 'strona'
po tych zmianach mamy piekne URLe paginacji po polsku, i nawet Reverse Routing dziala. to by bylo na tyle, mam nadzieje ze komus to pomoze
pozdrawiam,
Rzeczywiscie zmiana kodu frameworka (nadpisanie metody paginate i grzebanie w routerze) podczas gdy sa inne rozwiazania jest eleganckim posunieciem, tym bardziej ze co jakis czas sa wypuszczane stabilne wersje z przeroznymi fixami, ktorych instalacja jest zalecana.
O ile znajde czas wieczorem, podam wygodniejsze rozwiazanie.
Na ten moment nie ma eleganckiego rozwiązania Twojego problemu. Jedyne co to zaproponowane już teraz:
- skopiowanie PaginatorHelper, wrzucenie go jako MyPaginatorHelper i edycja jego zawartości
- w before filter przypisywanie 'page' wartości przekazanej w parametrze 'strona'
Głową muru nie przebijesz.
Możesz też NIE KORZYSTAĆ z PaginatorHelper i samemu generować takie linki jak Ci się podoba i obsłużyć to w w beforeFilter.
Tak czy siak problem jest z kategorii "chcę ponownie wymyślić koło", a zyski z tego prawie zerowe (oprócz estetycznych, bo w urlu masz po polsku). Gdyby to było chociaz SEO friendlu, ale nie wydaje się takie być.
Strony 1
Zaloguj się lub zarejestruj by napisać odpowiedź
Forum oparte o: PunBB, Gigaone - Certyfikaty SSL
Currently installed 7 official extensions. Copyright © 2003–2009 PunBB.