stránkování výsledků a detail článku
- adferg
- Člen | 31
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 | 94
Projdi si v dokumentaci sekci
https://doc.nette.org/cs/quickstart
Konkrétně pak tady
https://doc.nette.org/…/single-post
- adferg
- Člen | 31
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 | 2667
Š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 | 128
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