Výpis údajov z databazy, Undefined variable: sidebars

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
kasiopia
Člen | 69
+
0
-

Dobrý deň chcel by som spýtať: vypísal som údaje z databázy v sablone

  	<div id="sidebar">
					  {foreach $sidebars as $sidebar}

        <h2>{$sidebar->title}</h2>

        <div>{$sidebar->content}</div>

    {/foreach}
	</div>
	<div id="content">
						  {foreach $articles as $article}

        <h2>{$article->title}</h2>

        <div>{$article->content}</div>

    {/foreach}
	</div>

a v presentéru

	public function __construct(Nette\Database\Context $database)
	{
		$this->database = $database;
	}


	public function renderDefault()
	{

		$this->template->articles = $this->database->table('clanok1');
		$this->template->sidebars = $this->database->table('sidebar1');

	}

všetko funguje ale ked chcem vypisať tie iste udaje na inej stránke napríklad kontakt vypíše mi chybu Undefined variable: sidebars čo mám editovať ďakujem za radu

filipsedivy
Člen | 37
+
0
-

Musíš ten kód dát do BasePresenteru a ostatní presentery by měli dědit od BasePresenteru.

kasiopia
Člen | 69
+
0
-

Dobrý deň kód som pridal ale bez zmeny stale mi vypisuje Undefined variable: sidebars kliknutím na inú stránku

<?php

namespace App\Presenters;

use Nette;
use App\Model;


/**
 * Base presenter for all application presenters.
 */
abstract class BasePresenter extends Nette\Application\UI\Presenter
{
public function __construct(Nette\Database\Context $database)
{
    $this->database = $database;
}


public function renderDefault()
{

    $this->template->articles = $this->database->table('clanok1');
    $this->template->sidebars = $this->database->table('sidebar1');

}
}
filipsedivy
Člen | 37
+
0
-

Ale tady to vypadá že pomocí presenteru taháš context databáze, což by bylo lepší práci s databází převést pod model, a v presenteru jen si vytáhnout data z modelu.

kasiopia
Člen | 69
+
0
-

Ďakujem za rady ale stale mi vypisuje Undefined variable: sidebars mohol by mi niekto ukázať ako urobiť výpis cez model. Čo ma byť v prezenteru, modelu a šablone. Ďakujem za pomoc :)

dj.kure
Člen | 70
+
-1
-

Já to dělám takhle (příklad):

config.neon zaregistruji novou službu / model:

services:
	- App\Model\MujModel

Ve složce Model vytvořím PHP soubor s názvem MujModel.php s následujícím obsahem:

<?php
namespace App\Model;

use Nette;

/**
 * Tento model obsluhuje XYZ.
 */
class MujModel
{

    /** @var Nette\Database\Context */
    private $database;

	public function __construct(Nette\Database\Context $database)
    {
        $this->database = $database;
    }

    public function vypisZTabulky($tabulka)
    {
        $q = $this->database->table($tabulka)->fetchAll();
        return $q;
    }

A pak v daném presenteru (tam, kde s modelem budu chtít pracovat) udělám jen toto:


class HomepagePresenter extends BasePresenter
{

    /** @var \App\Model\MujModel @inject */
    private $mujmodel;

    public function __construct(\App\Model\MujModel $mujmodel)
    {
            $this->mujmodel = $mujmodel;
    }

Tím získám přístup do modelu MujModel a pak už stačí jen předat potřebná data šabloně (příklad):

    public function renderDefault()
    {
            $this->template->tabulka = $this->mujmodel->vypisZTabulky('tabulka');
    }

Je to jen příklad, není v něm žádné ošetření a další věci. Dále bych rád upozornil, že s Nette nepracuji dlouho a nejsem žádný velký programátor, takže určitě by to šlo udělat lépe, snáze, či jinak.

Snad to pomůže.

David Matějka
Moderator | 6445
+
+2
-

@kasiopia renderDefault se vola pouze u akce (resp. view) default. pokud chces, aby se to nastavovalo i pro jine akce/view, presun to do metody beforeRender

kasiopia
Člen | 69
+
0
-

Ďakujem veľmi pekne