Jak zachovat stejný jazyk v odkazech po jejich rozkliknutí
- Vozman
- Člen | 16
Zdravím všechny ještě jednou,
mám web vytvoření v PHP 5.2.
Jde o problém, že mám vytvořené odkazy pro jazyky v češtině,
angličtině a ruštině.
Kliknu v MENU na odkazy v češtině a zobrazí se mi texty i fotky
v pořádku.
Když kliknu na angličtinu, tak najede MENU v angličtině, sem je to vše
v pořádku.
Ale kliknu na odkazy v angličtině, na anglické texty, tak mi naskočí MENU
v češtině a fotku se nezobrazí vůbec!
Potřebuji, když kliknu na angličtinu i ruštinu, aby zůstalo vždy menu
v tom daném jazyce a zobrazily se fotky.
Prosím o radu a pomoc. Netuším, proč mi to dělá chybu. V databázi mám
vytvoření sloupec v tabulce lang.
Pokud je potřeba zaslat jakýkoliv další kód, rád jej zašlu.
Posílám i odkaz na stránku, na které, když kliknete na odkazy vytvořené pod EN i RU v MENU s názvem Události, tak se zobrazí MENU zase jen v češtině a bez fotek. http://www.fiamoli.cz/udalosti/en/
Prosím o napsání konkrétního příkladu.
Presenter Udalosti:
<?php
class UdalostiPresenter extends HomepagePresenter
{
public $udalostiModel;
public function actionDefault($lang, $id)
{
$this->udalostiModel = new UdalostiModel('udalosti', 'id');
}
public function renderDefault($lang, $id)
{
$this->lang = $lang;
$this->template->lang = $this->lang;
$this->template->udalosti = $this->udalostiModel->getDataSource()->where('lang=%s', $this->lang)->fetchAll();
}
?>
Presenter Udalost:
<?php
class UdalostPresenter extends HomepagePresenter
{
public $udalostiModel;
public function actionDefault($lang, $id)
{
$this->udalostiModel = new UdalostiModel('udalosti', 'id');
}
public function renderDefault($lang, $id)
{
$this->lang = $lang;
$this->template->lang = $this->lang;
$data = $this->udalostiModel->getDataSource()->fetchAll();
foreach ($data as $d) {
if (NString::webalize($d->nazev) == $this->presenter->params['id']) {
//Debugger::dump($d->id);
$item = $d;
break;
}
}
$this->template->nazev = $item->nazev;
$this->template->datum = $item->datum;
$this->template->teritorium = $item->teritorium;
$this->template->popis = $item->popis;
$this->template->folder = $item->folder;
$this->template->fotky = $this->udalostiModel->getPhotos($item->id);
}
}
?>
Děkuji mockrát za pomoc.
Editoval Vozman (25. 2. 2013 15:21)
- Vozman
- Člen | 16
Děkuji mockrát za radu, už to funguje.
Ještě prosím o radu. Proč se fotky zobrazují pouze v UDÁLOSTECH v češtině, ale v EN, ani RU ne???
Prosím o vypsání kódu. Děkuji.
Presenter Udalosti:
<?php
class UdalostiPresenter extends HomepagePresenter
{
public $udalostiModel;
public function actionDefault($lang, $id)
{
$this->udalostiModel = new UdalostiModel('udalosti', 'id');
}
public function renderDefault($lang, $id)
{
$this->lang = $lang;
$this->template->lang = $this->lang;
$this->template->udalosti = $this->udalostiModel->getDataSource()->where('lang=%s', $this->lang)->fetchAll();
}
} ?>
Presenter Udalost:
<?php
class UdalostPresenter extends HomepagePresenter
{
public $udalostiModel;
public function actionDefault($lang, $id)
{
$this->udalostiModel = new UdalostiModel('udalosti', 'id');
}
public function renderDefault($lang, $id)
{
$this->lang = $lang;
$this->template->lang = $this->lang;
$data = $this->udalostiModel->getDataSource()->fetchAll();
foreach ($data as $d) {
if (NString::webalize($d->nazev) == $this->presenter->params['id']) {
//Debugger::dump($d->id);
$item = $d;
break;
}
}
$this->template->nazev = $item->nazev;
$this->template->datum = $item->datum;
$this->template->teritorium = $item->teritorium;
$this->template->popis = $item->popis;
$this->template->folder = $item->folder;
$this->template->fotky = $this->udalostiModel->getPhotos($item->id);
}
}
?>
- Vozman
- Člen | 16
Obrázky – fotky se načtou jen pod odkazem v češtině, ale v odkazech
EN a RU se nezobrazí vůbec nic.
Posílám šablony k nahlédnutí.
Prosím o rady, co opravit, nebo zda může být chyba pak v nastavení
v databázi??
Děkuji za rady.
UDÁLOSTI:
<?php
block content}
<div id="main">
<div id="udalosti-list">
{foreach $udalosti as $u}
<div class="udalosti-list-c1">
{$u->datum}
</div>
<div class="udalosti-list-c2">
{$u->teritorium}
</div>
<div class="udalosti-list-c3">
<a href="{plink Udalost:, id=>NString::webalize($u->nazev)}">{$u->nazev}</a>
</div>
<br/>
{/foreach}
</div>
</div> ?>
UDÁLOST:
<?php
{block content}
<script>
$(document).ready(function() {
$("a#grouped_elements").fancybox({
'transitionIn' : 'elastic',
'transitionOut' : 'elastic',
'speedIn' : 600,
'speedOut' : 200,
'overlayShow' : true
});
});
</script>
<div id="main">
<div id="udalost-detail">
<h2>{$nazev} – {$datum}</h2>
<p>{$popis}</p>
<div id="galerie">
{foreach $fotky as $f}
<a id="grouped_elements" rel="group" href="{$basePath}/images/udalosti/{$folder}/{$f->file}"><img src="{$basePath}/images/udalosti/{$folder}/_{$f->file}" width="150px" /></a>
{/foreach}
</div>
<p><a href="{plink Udalosti:, $lang}">Zpět na předhled událostí</a></p>
</div>
</div>
?>
Editoval Vozman (28. 2. 2013 21:54)
- Vozman
- Člen | 16
Ano, nezobrazil se.
V databázi jsem zjistil, že se fotky zobrazují podle ID, ale fotky jsou
vidět jen v češtině.
Když zadám ID u jiných jazyků, tak se zobrazí i v EN i RU, ale pak již
nejsou vidět v češtině.
Tak prosím o radu, jak nastavit v šabloně, ať se zobrazují fotky dle ID
ve všech jazycích.
http://www.fiamoli.cz/udalosti/en/
Děkuji moc za rady.
- David Matějka
- Moderator | 6445
1. pokud dumpujes v sablone, tak se dump nezobrazi primo do stranky, ale do
debug baru
2.
foreach ($data as $d) {
if (NString::webalize($d->nazev) == $this->presenter->params['id']) {
//Debugger::dump($d->id);
$item = $d;
break;
}
}
je hodne wtf kod…
3. imho bude problem v navrhu databaze, fotky jsou asi navazany na udalost a
kazda udalost ma vlastni zaznam v kazdem jazyce, ze (tzn. udalosti
v jednotlivych jazycich mezi sebou nemaji zadny propojeni a fotky jsou navazany
jen na tu ceskou udalost)? muzes sem hodit dump databaze?
- enumag
- Člen | 2118
Proměnná $id se všeobecně považuje za kladný integer, dle kódu na který nyní upozornil @matej21 to ale v tvém případě je spíše slug. Navíc je krajně nevhodné procházet všechny záznamy a hledat mezi nimi ten jehož slug odpovídá. Slug bys měl mít uložený v databázi s unique constraintem a vyhledávat podle něj přímo.
Pro tebe jako začátečníka bude lepší předávat do presenteru $slug. Což tak nyní máš, ale přejmenuj to. A rozhodně změň to hledání konkrétní entity jak píšu výše. V praxi se slug v routách většinou převádí na id pomocí FILTER_IN a FILTER_OUT, protože presenter by neměl vědět nic o tvaru url – nezajímá ho zda se tam používá slug, měl by vždy pracovat s id. To si ale raději nech na později.
Je sice fakt, že mé presentery s id zásadně nepracují a jako parametry používám přímo entity, ale to už je trochu hard-core technika a je s tím dost problémů pokud to nemáš dobře vyřešené. Časem na to vydám addon.
Editoval enumag (5. 3. 2013 21:40)
- Vozman
- Člen | 16
Díky všem za rady. Přiznám se, že jsem dump nikdy nedělal, tak přesně
nevím jak s tím pracovat.
Prosím enumag, jestli je možné napsat konkrétní kód, který bych mohl
přidat do šablony a presenteru?
Jak mám změnit hledání konkrétní entity?
Děkuji.
Editoval Vozman (6. 3. 2013 0:26)
- enumag
- Člen | 2118
Máš tam spoustu začátečnických neduhů, kvůli kterým se poněkud špatně radí – nikdo neví co všechno tam můžeš mít špatně (na tom není nic špatného, každý tak nějak začínal). Tzn. nejdříve si oprav ty kardinální chyby o kterých mluvíme a pokud to stále nebude fungovat, dej sem aktuální kód. Máš tam někde nějakou blbůstku ale takhle ti asi nikdo neřekne jakou – navíc může být i mimo kódy které jsi zde postnul.
Dump je totéž jako var_export, jen s přehlednějším výstupem. Všimni si toho panelu který Nette dává doprava dolů v development režimu. Pomocí metody barDump se ti tam objeví sekce s takto dumpnutými proměnnými. Název je samozřejmě poněkud dlouhý takže doporučuji použít nějakou zkratku.
EDIT: Pozn. to latte makro {dump $var} nedělá nic jiného než že zavolá
výše zmíněnou metodu Debugger::barDump($var)
.
Editoval enumag (6. 3. 2013 0:16)
- Vozman
- Člen | 16
Ahojte, tak jsem zkoušel ten slug, ale bohužel to nefunguje:-(
Posílám tedy ten dump z UdalostPresenter:
<?php
foreach ($data as $d) {
if (NString::webalize($d->nazev) == $this->presenter->params['id']) {
//Debugger::dump($d->id);
$item = $d;
break;
?>
Díky za rady.
Editoval Vozman (9. 3. 2013 13:56)
- enumag
- Člen | 2118
Určitě… prošel sis pořádně příklady? Také tam dost nesmyslně vytváříš ten model, měl by ses podívat do dokumentace.