stránkování výsledků a detail článku

adferg
Člen | 31
+
0
-

Ahoj, učím se s nette podle návodů (konkrétně stránkování článků) podle návodu zde: https://doc.nette.org/…s/pagination. Postupoval jsem podle návodu a vše mi funguje, potud dobrá zpráva. Chtěl bych ale zapracovat ještě možnost ve výpisu prokliknout title článku tak, aby se zobrazil celý. Koukám do toho už tři dny a zkouším všechno se vším, ale bez úspěchu a dál už netuším kam. Nechci, aby to za mě někdo vyřešil, jen prosím postrčit. Moc děkuju

dms
Člen | 87
+
0
-

Projdi si v dokumentaci sekci
https://doc.nette.org/cs/quickstart

Konkrétně pak tady
https://doc.nette.org/…/single-post

adferg
Člen | 31
+
0
-

Jop, tenhle návod jsem si taky prošel a rozjel to celkem bez problémů. Jen (a teď se asi vyjádřím dost hloupě) myslím, že v prvním případě tahám data z modelu a do šablony je předávám přes presenter, zatímco v tom druhém návodu se vůbec do modelu nesahá a data se dolují z prezenteru. A teď se snažím výsledky těch dvou návodů zkombinovat, ale prostě nevím, jak té šabloně říct, jaké je id toho příspěvku aby ho mohla vložit do odkazu.

Šaman
Člen | 2632
+
0
-

Šabloně je přece jedno, kde presenter vezme data. Teoreticky si může presenter rovnou tahat data z databáze. Model je vrstva navíc, která v tom dělá pořádek, když je aplikace větší než minimální.

Šabloně musí id článku předat presenter. Nebo, pokud je to seznam článků, tak u každého zobrazeného článku máš jeho nadpis, nějaký náhled třeba a hlavně jeho id. Šablona vypíše titulek, možná ten náhled a id použije na vytvoření odkazu.

Ages
Člen | 127
+
+1
-

Doplním ti to do toho návodu, aby to bylo jasné:

# výpis článků

{block content}
<h1>Články</h1>
<div class="articles">
	{foreach $articles as $article}
		<h2><a n:href="Homepage:show, $article->id">{$article->title}</a></h2>
		<p>{$article->content}</p>
	{/foreach}
</div>

#HomepagePresenter

namespace App\Presenters;

use Nette;
use App\Model\ArticleRepository;

class HomepagePresenter extends Nette\Application\UI\Presenter
{
	/** @var ArticleRepository */
	private $articleRepository;

	public function __construct(ArticleRepository $articleRepository)
	{
		$this->articleRepository = $articleRepository;
	}

	public function renderDefault(int $page = 1): void
	{
		// ...
	}

	public function renderShow(int $articleId): void
	{
		$article = $this->articleRepository->database->table('articles')->get(articleId);
		if($article)
		{
			$this->template->article = article ;
		} else {
			$this->error('Článek nenalezen.');
		}
	}
}

# show.latte

{block content}
	<h1>{$article->title}</h1>
	<p>{$article->content}</p>

Psal jsem to z hlavy, tak je možné, že jsem se někde upsal :-)
Btw: když jsem to dopsal, tak jsem si všiml, že to je v dokumentaci: https://doc.nette.org/…/single-post

adferg
Člen | 31
+
0
-

@Ages Ahoj, funguje mi to. Hodně jsem z toho teď pochopil. Pomohlo mi to otevřít nové obzory, takže moc děkuju!