1

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 smile

2

Odp: zamiana frazy 'page:' w urlach paginacji

Mozesz to zmienic w kontrolerze w metodzie beforeFilter, tylko po co ?

3

Odp: zamiana frazy 'page:' w urlach paginacji

robal77 napisał/a:

Mozesz to zmienic w kontrolerze w metodzie beforeFilter, tylko po co ?

hmmm... mozesz podac przyklad kodu ? smile

po co ? no sorry, ale nie wyobrazam sobie polskojezycznej aplikacji ze slowkiem page w url-ach

4

Odp: zamiana frazy 'page:' w urlach paginacji

tomay7 napisał/a:
robal77 napisał/a:

Mozesz to zmienic w kontrolerze w metodzie beforeFilter, tylko po co ?

hmmm... mozesz podac przyklad kodu ? smile

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)

5

Odp: zamiana frazy 'page:' w urlach paginacji

i co z ta propozycja? bo az sam jestem ciekaw ?

6

Odp: zamiana frazy 'page:' w urlach paginacji

tomay7 napisał/a:

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)

7

Odp: zamiana frazy 'page:' w urlach paginacji

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)

8

Odp: zamiana frazy 'page:' w urlach paginacji

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)

9

Odp: zamiana frazy 'page:' w urlach paginacji

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 smile

10

Odp: zamiana frazy 'page:' w urlach paginacji

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 wink

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)

11

Odp: zamiana frazy 'page:' w urlach paginacji

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,

12

Odp: zamiana frazy 'page:' w urlach paginacji

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.

13

Odp: zamiana frazy 'page:' w urlach paginacji

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ć.