Nezobrazuje se diakritika v URL
- suxik
- Člen | 62
Ahoj, mám na webu vygenerovaný odkaz na
localhost/test/mista/kraj/Středočeský
který na localhostu funguje normálně, ale na ostrém hostingu (Active24 /
WIN)
se v adresním řádku objeví
test.moje.cz/mista/kraj/Stedoesk
a samozřejmě se nevrátí žádné výsledky.
Kde je chyba, že ta diakritika zmizí?
kód routy:
<?php
$router[] = new NRoute('mista/<do kraj>/<district>', 'mista:default');
?>
edit: všecko je v utf-8
Editoval suxik (8. 5. 2012 10:44)
- davidm
- Člen | 81
Lexi napsal(a):
Btw pokud pouzijes v databazi kodovani utf8_general_ci/cs mistoutf8_czech_ci/cs tak ti to vrati zaznamy s diakritikou i kdyz v dotazu ji mit nebudes.
tak takove reseni bych vazne nedoporucoval …
spravne by jsi si mel ke kazdemu districtu vytvorit slug, kterej bude unique a podle toho zaznam vyhledavat
- suxik
- Člen | 62
uestla a jak to mám vyřešit s těmi městy, když nejsou ve zvlášť tabulce? Navíc se těžko webalizují města s pomlčkou v názvu (resp. jejich převod zpět je nemožný), takže třeba pro
test.moje.cz/mista/mesto/Brno-Královo pole
to mám udělat jak? Říkám, na localhostu vše jede, jen na hostingu to nejede
- Jan Tvrdík
- Nette guru | 2595
suxik wrote:
Říkám, na localhostu vše jede, jen na hostingu to nejede
Kdybys uměl položit dotaz, už jsi dávno mohl mít odpověď. Bohužel já nežiji v kouzelném světě, kde se URL sami objevují v adresním řádku. Jak se tam to URL teda dostalo? Klikl jsi na odkaz? A kde se vzal ten odkaz? Napsal sis ho sám? Nechal sis ho vygenerovat? Jak vypadá vygenerovaný odkaz? Jak vypadá kód, kterým ho generuješ?
- suxik
- Člen | 62
Honzo, jestli máš potřebu vychovávat, tak si najdi jiný topic, jestli chceš poradit, tak napiš, co mám pastnout, routa je v prvním příspěvku, takže z ní je patrné, jak se generuje odkaz, explicitně to sem ještě připíšu, konkrétně pro filtrování podle města
šablona:
<?php
<a n:foreach="$places as $place" href="{link mesto!, $place->city}">
?>
presenter:
<?php
public function handleMesto($city) {
$this->template->places = PlacesModel::getPlacesByCity($city)->fetchAll();
}
?>
řeším podobu url, která se na localhostu zonrazí s diakritikou správně (vygenerovaný odkaz), ale na hostingu zmizí znaky s diakritikou, takže LIKE dotaz v MySQL nenajde správná místa pro konkrétní město.
Editoval suxik (8. 5. 2012 13:23)
- davidm
- Člen | 81
@suxik Honza ma pravdu :)
kazdopadne muzes treba pridat do tabulky sloupec city_slug a potom neco jako …
<a n:href="mesto!, $place->city_slug">
public function handleMesto($city) {
$this->template->places = PlacesModel::getPlacesByCitySlug($city)->fetchAll();
}
nejlepsi by samozrejme bylo mit na mesta samostatnou tabulku …
- suxik
- Člen | 62
no to mě napadlo, akorát tam je asi 1300 míst a ty slugy se mi vyrábět nechce, tak jsem zatím udělal workaround v podobě routy:
<?php
$router[] = new NRoute('mista/<do mesto>/<city>', array(
'presenter' => 'mista',
'action' => 'default',
'city' => array(
NRoute::FILTER_IN => callback("PlacesModel::getPlaceCityWebalized"),
NRoute::FILTER_OUT => callback("PlacesModel::getPlaceCityDewebalized")
),
)
);
?>
a metod:
<?php
public static function getPlaceCityWebalized($city) {
$r = str_replace('-', ' ', $city);
return str_replace('_', '-', $r);
}
public static function getPlaceCityDewebalized($city) {
$city = BaseModel::removeDiacritics($city);
$r = str_replace('-', '_', $city);
return str_replace(' ', '-', $r);
}
?>
takže jsem se zbavil pomlček v názvech měst, ale je to prasečina :/
Editoval suxik (8. 5. 2012 13:31)
- suxik
- Člen | 62
*sry ne 1300 ale 13000, no těžký by to nebylo, kdyby zákazník nebyl bfu a necpal tam tucty dalších znaků, který teď musím řešit, ale nechápu, když to podle tebe jde tak snadno automaticky, proč bych měl přidávat sloupeček do db a ne to dělat nějak přímo stylem, jak jsem naznačil? Vpodst. by to vyřešila revertovatelná webalizace
- Jan Tvrdík
- Nette guru | 2595
suxik wrote: routa je v prvním příspěvku, takže z ní je patrné, jak se generuje odkaz.
Mýlíš se. A jestli máš problém být vychováván, najdi si jiné fórum, děkuji.
Co ti vypíše:
$route = new NRoute('<city>', 'City:default');
$url = $route->constructUrl(
new NPresenterRequest(
'City',
'get',
array('city' => 'Prostějov')
),
new NUrl('http://example.com')
);
echo $url;
- Jan Tvrdík
- Nette guru | 2595
suxik wrote: pokud místo
new NUrl
myslíšnew NUri
tak vypíšehttp://example.com/Prost%C4%9Bjov
Co máš za verzi Nette? V aktuální by mělo být NUrl
.
Pořád si nebyl schopen uvést, jaká URL ti to generuje do šablony.
Zkus nyní toto:
$route = new NRoute('mista/<do kraj>/<district>', 'mista:default');
$url = $route->constructUrl(
new NPresenterRequest(
'mista',
'get',
array('do' => 'kraj', 'district' => 'Středočeský')
),
new NUri('http://example.com')
);
echo $url; // expected: "http://example.com/mista/kraj/St%C5%99edo%C4%8Desk%C3%BD"
exit;
- Jan Tvrdík
- Nette guru | 2595
suxik wrote: nezlob se, já nejspíš nevím, na co se mě ptáš, do šablony mi to generuje url tak, jak je to úplně v prvním příspěvku
Není. V prvním příspěvku je to, co vidíš v adresním řádku
prohlížeče, v HTML by mělo být místo
localhost/test/mista/kraj/Středočeský
pravděpodobně
localhost/test/mista/kraj/St%C5%99edo%C4%8Desk%C3%BD
.
Router očividně funguje. Zkus tedy v presenteru
echo $this->link('kraj!', array('district' => 'Středočeský'));
echo $this->link('kraj!', array('Středočeský'));
Případně v šabloně
<a n:href="kraj!, 'Středočeský'}">Středočeský</a>
<a n:href="kraj!, 'district' => 'Středočeský'}">Středočeský</a>
- suxik
- Člen | 62
jo takhle, no v html je to samé:
/test/mista/kraj/Středočeský
výpis z obou echo je stejný: „/test/mista/kraj/Středočeský“
jinak kraje zwebalizuju, tam není problém, ten asi bude u těch měst, kde jsou znaky jako pomlčka, čárka atd., které se webalizovat sice dají, ale zpět už to nejde, víš, co myslím, ne?
Editoval suxik (8. 5. 2012 14:42)
- Jan Tvrdík
- Nette guru | 2595
Co ti vypíše
<a n:foreach="$places as $place" href="{link mesto!, $place->city}">
A co ti vypíše
<a n:foreach="$places as $place" href="{link mesto!, 'Prostějov'}">
- Jan Tvrdík
- Nette guru | 2595
Jak vypadá sestavený HTTP požadavek, který pošle prohlížeč ajaxem?
Jak vypadá pak na serveru $_SERVER["REQUEST_URI"]
?
- suxik
- Člen | 62
požadavek podle firebugu:
<?php
POST http://test.cz/mista/mesto/Ben%C3%A1tky%20nad%20Jizerou"
?>
a $_SERVER[„REQUEST_URI“] vrátí
„/mista/mesto/Ben�tky nad Jizerou“
a proměnná $city je naplněná:
„Bentky nad Jizerou“
ještě mě napadá, taky to ve firebugu píše chybu „payload is undefined“, ale na localu to jede i s ní…
Editoval suxik (8. 5. 2012 15:30)