Vypsání proměnné v šabloně
- milde
- Člen | 52
Zdravím, mám takový problém – nějak se mi nedaří vypsat proměnnou
v šabloně – jedná se o to, že v linku je daná proměnná (id) na
jejímž základě by se pak měl vypsat obsah z databáze. Tento problém jsem
řešil už https://forum.nette.org/…ejici-tridou
a nějak se mi to nedaří. Jde o to, že se mi načte spravné id ( v linku
je …/tyden/(id) ale ne a ne se mi to vypsat. Mohl by, prosím, někdo poradit
uplnému začátečníkovi?
Projistotu sem dávám Presenter i Model.
TydenPresenter:
<?php
class TydenPresenter extends BasePresenter
{
public function renderDefault()
{
$this->template->tydenId = Model\TydenModel::fetchAll();
}
static public function renderTyden($id){
if(!($tydenId = Model\TydenModel::fetchAll($id))){
}
$this->template->tydenId = Model\TydenModel::fetchAll($id);
}
}
?>
TydenModel:
<?php
namespace Model;
use Nette\Object,
Nette\Enviroment,
Nette\Database\Connection;
class TydenModel extends BaseModel{
public function fetchAll($id){
return dibi::query('SELECT * FROM [tyden] WHERE [id] = %i', $id);
}
}
?>
Předem všem moc děkuji, jsem vděčný za každou radu.
Editoval milde (20. 9. 2011 18:57)
- milde
- Člen | 52
Ani napsal(a):
Pro jedno id by to melo byt takhle, jinak ti to vraci cely radek.
<?php dibi::query('SELECT id FROM [tyden] WHERE [id] = %i', $id)->fetchSingle(); ?>
No přiznám se, že jsem teď vyzkoušel tvůj návod, ale stále se mi hlásí Undefined variable: tydenId a s tímto poblémem válčím už několik dní – snažil jsem se pojít dokumentaci i fórum a nepodařilo se mi najít nic co by mi pomohlo :-(
- hAssassin
- Člen | 293
@midle > proc mas renderTyden()
jako
static
? A mas ID v adrese kdyz tam pristupujes? Pripadne zkus
nastavit parametr u metody jako volitelny –
renderTyden($id = NULL)
a uvnitr testovat jestli je ID nastaveno a
pokud ne tak presmerovat nebo vyhodit flashku
(ehm,
flashMessage
).
- milde
- Člen | 52
hAssassin napsal(a):
@midle > proc mas
renderTyden()
jakostatic
?
poradili mi tu ve vlákně, které jsem uváděl v záhlaví a pomohlo to – začínám s Nette a popravdě řečeno s návodem, kteý je uveden v tomtéž vlákně jsem si nevěděl ady – pro začátek jsem šel cestou nejmenšího odporu – i když to asi nebylo správně
hAssassin napsal(a):
>A mas ID v adrese kdyz tam pristupujes?
Jestli se ptáš na to, jestli když kliknu na link v menu, se objeví id v adrese – odpověď je ano, objeví a právě to id bych potřeboval vypsat do stranky
hAssassin napsal(a):
>Pripadne zkus nastavit parametr u metody jako volitelny –
renderTyden($id = NULL)
a uvnitr testovat jestli je ID nastaveno a
pokud ne tak presmerovat nebo vyhodit flashku
(ehm,
flashMessage
).
popravdě, tak s tím si vůbec nevím rady :-(
parametr jsem si nastavil
Editoval milde (20. 9. 2011 19:14)
- hAssassin
- Člen | 293
@milde > ok, zkus to nejak takhle (ted sem si vsimnul jeste toho, ze ty mas statickou tu metodu v presenteru ale ta ma byt normalni a naopak volas staticky metodu v modelu, ktera static neni):
presenter:
class TydenPresenter extends BasePresenter
{
/**
* sem zkus pridat nebo odmazat nasledujici radek totohle komentare, treba to taky pomuze
* @persistent
*/
protected $tydenId = NULL;
public function actionTyden($id = NULL)
{
// Test, jestli je ID zadano (kdyz ne, presmeruju)
if($id === NULL) {
$this->flashMessage('ID neni zadáno!', 'error');
$this->redirect('Tyden:default');
die;
}
// Jinak si ID ulozim
$this->tydenId = $id;
}
public function renderTyden()
{
// ID je nastaveno
$this->template->tydny = Model\TydenModel::fetchAll($this->tydenId);
}
public function renderDefault()
{
// Tady neni ID potreba, taham vsechny tydny
$this->template->tydny = Model\TydenModel::fetchAll();
}
}
model:
namespace Model;
use ...;
class TydenModel extends BaseModel{
public static function fetchAll($id = NULL){
if($id === NULL) {
return dibi::query('SELECT * FROM [tyden] WHERE [id] = %i', $id);
}
else {
return dibi::query('SELECT * FROM [tyden]');
}
}
}
sablona:
{foreach $tydny as $tyden}
<a n:href='tyden, $id => $tyden->id' title="{$tyden->title}">{$tydel->label}</a>
{/foreach}
- milde
- Člen | 52
hAssassin napsal(a):
@milde > ok, zkus to nejak takhle (ted sem si vsimnul jeste toho, ze ty mas statickou tu metodu v presenteru ale ta ma byt normalni a naopak volas staticky metodu v modelu, ktera static neni):
děkuji za radu – nicméně to hlásí Class ‚Nette\dibi‘ not found a vyhazuje to chybu v modelu u
<?php
else {
return dibi::query('SELECT * FROM [tyden]');
}
?>
přiznám se, že už jsem z toho nešťastný :-(
- milde
- Člen | 52
hAssassin napsal(a):
@milde > ano, neuvedl jsem u modelu
namespace
, takze tam pridej na zacatek:use \dibi;
to by melo stacit.
mám na tebe ještě jeden dotaz – hláška Undefined property: DibiRow::$title – co s tím? Jsem upný začátečník s nette – neměl bych tu mít u nicku člen ale lama…
- hAssassin
- Člen | 293
@milde > to byl jenom priklad co tam vypises. Ja
nevim co mas v tabulce a jak ty sloupce mas pojmenovany… Cili to v sablone
si udelej uz podle sebe, pokud mas v tabulce tyden
sloupecek
id
, coz mas, tak si tam vypisuj treba jen ID:
{foreach $tydny as $tyden}
<a n:href='tyden, $id => $tyden->id' title="Týden #{$tyden->id}">Týden #{$tyden->id}</a> <br />
{/foreach}
- milde
- Člen | 52
hAssassin napsal(a):
@milde > to byl jenom priklad co tam vypises. Ja nevim co mas v tabulce a jak ty sloupce mas pojmenovany… Cili to v sablone si udelej uz podle sebe, pokud mas v tabulce
tyden
sloupecekid
, coz mas, tak si tam vypisuj treba jen ID:{foreach $tydny as $tyden} <a n:href='tyden, $id => $tyden->id' title="Týden #{$tyden->id}">Týden #{$tyden->id}</a> <br /> {/foreach}
Asi jsem uplná lama – v tabulce mám dva sloupce id a test. Zkusil jsem tvuj návod ale hlasí se mi nedefinová poměnna id :-( prosím o poslední pomoc pak už dám pokoj ( doufám :-) )
- milde
- Člen | 52
hAssassin napsal(a):
jo kua, sorry, ono to je DibiRow a tam se k tomu pristupuje jako k poli. Takze takhle:
{foreach $tydny as $tyden} <a n:href="tyden, $id => $tyden['id']" title="Týden #{$tyden['id']}">Týden #{$tyden['id']}</a> <br /> {/foreach}
děkuji za tvou pomoc … hlasí se stále nedefinovaná proměnná id … nicméně si vážím tvých rad a jdu se s tím prát dál. snad to dám alespoň do vánoc :-)
- milde
- Člen | 52
MW napsal(a):
Hod sem cely kod(presenter, model a i sablonu), buh vi, co tam mas.
děkuji, koukni na to, prosím.
TydenPresenter:
<?php
class TydenPresenter extends BasePresenter
{
/** @persistent */
protected $tydenId = NULL;
public function actionTyden($id = NULL)
{
if($id === NULL) {
$this->flashMessage('ID neni zadáno!', 'error');
$this->redirect('Tyden:default');
die;
}
$this->tydenId = $id;
}
public function renderTyden()
{
$this->template->tydny = Model\TydenModel::fetchAll($this->tydenId);
}
public function renderDefault()
{
$this->template->tydny = Model\TydenModel::fetchAll();
}
}
?>
TydenModel:
<?php
namespace Model;
use Nette\Object,
Nette\Enviroment,
Nette\Database\Connection;
use \dibi;
class TydenModel extends BaseModel{
public function __construct($database){
parent::__construct($database);
}
public static function fetchAll($id = NULL){
if($id === NULL) {
return dibi::query('SELECT * FROM [tyden] WHERE [id] = %i', $id);
}
else {
return dibi::query('SELECT * FROM [tyden]');
}
}
}
?>
Menu v @layout.latte:
<?php
{for $id=1;$id<=13;$id++}
<div id="sub_0_{$id}" class="SubItemRow">
<a n:href="Tyden:tyden 'id'=>$id">{$id}. tyden</a>
</div>
{/for}
?>
a vypisování hodnot z tabulky tyden (2 sloupce – id, test ) na základě id v šabloně tyden.latte:
<?php
{foreach $tydny as $tyden}
<a n:href="tyden, $id => $tyden['id']" title="Týden #{$tyden['id']}">Týden #{$tyden['id']}</a>
{/foreach}
?>
- milde
- Člen | 52
hAssassin napsal(a):
ok, tak uz snad naposledy, sem to psal nejakej unavenej :-)
{foreach $tydny as $tyden} <a n:href="Tyden:, id => $tyden['id']" title="Týden #{$tyden['id']}">Týden #{$tyden['id']}</a> <br /> {/foreach}
děkuji za tvou pomoc – jsi fakt borec, moc mi to mohlo a začínám se v tom trochu orientovat. DĚKUJI