Řešení title stránky z jednoho místa

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Tomáš Votruba
Moderator | 1114
+
0
-

Už mne nebaví lézt do šablon kvůli úpravě title, tak mne napadlo, jestli by nebylo dobré to řešit z jedno místa, tedy v BasePresenter.php něco jako:

// hrubý nástřel
$allTitles = array(
	"Homepage" => array(
		"default" => "Vítejte u nás",
		"detail" => "Prohlídka produktu"
	),
	// případně i s title pro presenter
	"Homepage" => array(
		"title" => "Domácí stránka",
		"view" => array(
			"default" => "Vítejte u nás",
			"detail" => "Prohlídka produktu"
		)
	)
);

// pro Homepage:default, vrátí Domácí stránka >> (nastavitelný sep) Vítejte u nás
$this->template->title = $this->getTitle($this->presenter->name, $this->presenter->view);

Zajímá mne, jak to řešíte vy? Tedy jiné způsoby než přímo ve stránce.
Myslím, že by to šlo rychleji a lépe nastavit pro nový projekt, kdyby to šlo z jednoho místa.

(Dále by tam mohla být podpora názvu produtku apod., ale teď mi jde o ten základ.)


EDIT: Nakonec jsem použil něco ve stylu HeaderControl, tedy základní komponenta nastavitelná ve startup(), resp. action presenteru. Config až příliš unifikuje a zapomínal jsem titulek nastavit.

Editoval Schmutzka (14. 3. 2013 20:07)

Aearsis
Člen | 57
+
0
-

HeaderControl

Osobně mám v BasePresenteru abstraktní metodu setTitle, ve který si title nastavuju, abych na titulek nikde nezapomněl.

Řešit z jednoho místa je podle mě špatný, každý presenter by si měl stránku hlídat sám.

duke
Člen | 650
+
0
-

Souhlasím s @Aearsis. Tvé řešení porušuje open/closed principle.

Felix
Nette Core | 1245
+
0
-

Resim to podobne bud z presenteru nebo z sablony(kdyz mam nejaky specialni).

Tomáš Votruba
Moderator | 1114
+
0
-

Aearsis napsal(a):

Osobně mám v BasePresenteru abstraktní metodu setTitle, ve který si title nastavuju, abych na titulek nikde nezapomněl.

Řešit z jednoho místa je podle mě špatný, každý presenter by si měl stránku hlídat sám.

To by možná šlo. Mohl bys poslat ukázku? Díky.

duke napsal(a):

Napadá tě něco „legálního“, co by splňovalo jednoduchou a rychlou obsluhu?

Zatím jen sbírám nápady, tak se rád nechám čímkoliv inspirovat.

duke
Člen | 650
+
0
-

Jak říká Aearsis, můžeš použít nějakou metodu – např. setHtmlTitle(), kterou budeš volat z beforeRender BasePresenteru. Přitom máš pořád zachovanou možnost si to v šabloně přepsat.

Pokud nutně chceš mít všechny titly na jednom místě, tak si je můžeš dát třeba do configu a v té metodě setHtmlTitle je nějak mapovat na aktuální presenter.

Elijen
Člen | 171
+
0
-

Kdyz uz, tak bych title tahal z DB. Pokud mas dynamicky generovane menu, tak staci pridat sloupec. U stranek jako detail clanku se title stejne vetsinou z DB musi tahat. A jak uz bylo receno do BasePresenter si dat pomocne metody.

Ja na to pouzivam komponentu, kde mam metody jako addTitlePart, setTitlePartSeparator, setTitlePrefix, setTitleSuffix, apod …

Tomáš Votruba
Moderator | 1114
+
0
-

duke napsal(a):

Mám v úmyslu využít basePresenter.php, díky za potvrzení. Zajímá mne hlavně, jak. Config je dobrý nápad, dokážu si představit, že to tam i bude lépe vypadat.

Elijen napsal(a):

Kdyz uz, tak bych title tahal z DB. Pokud mas dynamicky generovane menu, tak staci pridat sloupec. U stranek jako detail clanku se title stejne vetsinou z DB musi tahat. A jak uz bylo receno do BasePresenter si dat pomocne metody.

Ja na to pouzivam komponentu, kde mam metody jako addTitlePart, setTitlePartSeparator, setTitlePrefix, setTitleSuffix, apod …

DB zatím použít nechci, jde mi opravdu jen nahodit projekt (udělat presentery a šablony) a nakonec dopsat titles.

To zní dobře. Mohl bys nasdílet např. na gistu, prosím?

Elijen
Člen | 171
+
0
-

No ono je to jen asi 80 radku a psane tak nejak za pochodu jak se mi neco hodilo, tak nevim jestli je to publikovatelne :D

e: Tak jsem to hodil na pastebin.

Editoval Elijen (13. 2. 2012 16:45)

awsickness
Člen | 98
+
0
-

tohle reseni neni uplne dobre nebo ho mozna spatne chapu ale jak by si resil tohle

site.cz/contact -> Default:page slug => contact title chci -> site.cz - contact
site.cz/items -> Items:default slug=>null title chci -> site.cz - items
site.cz/kolo-55cm -> Items:detail slug=>kolo-55cm title chci -> site.cz - Kolo 55cm

ja mam predstavu neco jako presenter by definoval funkci getTitle plus entita / db object nebo neco z db by melo taky metodu getTitle a pak vysledek title by byl spojeni techto dvou. a je jedno zda v komponente / abstract function etc.

Tomáš Votruba
Moderator | 1114
+
0
-

Co popisuješ už není statické (o tom píši celou dobu), tedy Items:detail kolo-55cm ne. Také bez práce s db. Chápu, že v této oblasti se moc věcí řešit nedá, můžeme tedy uzavřít.

Teď k dynamickému. Zajímavým řešením by byla práce s modelem, který by dostal např. tabulku, klíč a požadovaný sloupec a bylo by. Samozřejmě jednoduše. Nebo by slug mohl vstupovat přímo na stránce, protože se tam asi tak jako tak objeví.

{control title $item["name"]}
<!-- či růčo -->
{control title "Kolo 55cm"}
awsickness
Člen | 98
+
0
-

no ja jsem jen chtel naznacit ze malokdo dela jen staticky weby a je lepsi mit nastavovani title na jednom miste nez to psat na 2 az 3. a to se neresi multijazycnost. zkus vymyslet jak do toho pridat vice jazyku plus ten seznam $titles urcite do configu