Mapa stránek
- amsys
- Člen | 20
Zdravím, jednou v noci co jsem vstal ve 4 ráno z důvodu vybírání zbytků v ledničče jsem se rozhodl, že budu generovat mapu stránek nějakou „hezčí“ cestou…
Co jsem si to tedy vymyslel:
@meta v phpDoc bude obsahovat nějaké užitečné info použité i pro template
nebo také třeba v případě více stránek ->
Informace v komentářích se budou dědit: class → action → render
Co dále?
* Jak teď řešit nadřazené stránky… @parent()?
* Jak bude vypadat úložiště pole mapy ze kterého se mapa bude následně
renderovat?
* Z těchto informací lze vlastně generovat i drobečkovou navigaci, jak to
spáchat nějak inteligentně aniž by to příliš zatěžovalo běh?
Nějak jsem zkoušel něco sesmolit, ale možná bude nejdříve lepší dát dohromady nějaké další nápady a z toho to tedy nakonec napsat něco do extras neb tohle se určitě hodí více lidem.
Editoval amsys (28. 9. 2009 12:33)
- amsys
- Člen | 20
Template budou předávany objekty meta a breadcrumbs:
Object $meta {
title (string)
robots (string)
keywords (string)
description (string)
}
Object $breadcrumbs {
Object { $item ->
link (string)
name (string)
title (string)
}
Object $item -> ...
}
a kde tyto 2 objekty získáme? Zde mě napadá využití afterRender, ověříme si zda v render{view} byl nastaven dynamický obsah, pokud ne vytáhneme z cache. V případě dynamické stránky je třeba doplnit chybějící stránky – breadcrumbs nebudou kompletní tz. v metodě afterRender doplníme až do konce. S pomocí RobotLoaderu by načítání nadřazených presenterů pro získání Reflection neměl být problém.
Pro tento případ aktualizace stránek mě nepadá v případě aktualizace „části“ databáze se provede touch() na nějakej soubor který použijeme jako podmínku znovunačtení této části cache.
Limitace: Statický obsah nemůže odkazovat na Dynamickou parent stránku. Zde může dojít k chybě.
V případě generování SiteMap, jak zjistíme použitelné presentery? Zkoušel jsem cache: Nette.RobotLoader->list což asi nebude nejlepší řešení.
Metody pro získání meta informací a breadcrumbs můžeme využít pro generování mapy.
Jak bude vypadat array pro sitemap, jak vyřešíme nadřazené stránky?
array
(
':title' => 'a',
':neco' => 'b',
':children' => array(
array(...),
array(...),
),
);
Nebo raději přes objekty?
- amsys
- Člen | 20
_Martin_ napsal(a):
A je požadavkem toho backendu, že tuhle mapu stránek jenom vyplivne a nebo umožní uživateli i její změnu?
Takhle bych to zase nekomplikoval, ještě není pořádně vymyšlené to hlavní :-) tz. vyplivne (backendem jsem zde myslel model)
Vidím to takhle:
Část 1:
SitemapModel
* Zpracuje phpDoc informace ze všech presenterů, zavolá definované funkce
pro získání dat indexovaného dynamického obsahu a vyhodí pole s mapou
stránky
SitemapPresenter
* Zpracuje data z modelu do XML pro vyhledávače a do nějakého pěkného
stromu xhtml
Část 2:
BasePresenter
* Obsahuje hook před vykreslením který doplní $meta a $breadcrumbs pomocí
metody pomocné třídy ze SitemapModel která zpracuje informace ze
současného Presenteru
* Asi by to mělo dávat pozor na případnou změnu v případě
changeView
- amsys
- Člen | 20
Je to děs, šlape to a bude to ještě chtít ještě dost úprav. Any comments? Prosím nekamenovat, teprve v tom začínám :-)
Jo a psal jsem to nad 0.8 (tu aplikaci kde jsem to nasadil musím konečně převést, neb z 0.9 používám např. Mail)
Tímhle sestavíme strom:
Interakce aplikace se stromem:
Pomůcky (componentcontainer nešel serializovat):
Příklad použití: