Uživatelský zápis odkazů
- Ondřej Mirtes
- Člen | 1536
Ahoj,
vím, že se to na fóru již několikrát řešilo, ale nejsem s to to najít.
Rád bych, kdybych mohl v textech, které na web píší uživatelé,
používat nějak chytřeji odkazy – aby uživatelé mohli na stránky webu
odkazovat způsoby, které jsou popsány ve wiki syntaxi Nette
dokumentace.
Co by to mělo umět?
- Spolupráci s Texy
- Umožňovat zápis ve stylu [Presenter:action] či klidně nějakou lidštější formou – dobrým příkladem je právě ta wiki syntax, ale to by chtělo vymýšlet asi pro každý web zvlášť, liší se struktura atd.
- Rozparsovat na tvar v minulém bodě i normálně zapsaná URL (relativní i absolutní – pokud odkazují na ten samý web)
- Umět vyřešit změnu rout
- A třešnička – při tvorbě článku nějakým způsobem upozornit uživatele, že zadaný link vede na 404ku – upozorňovat na to i čtenáře na webu by bylo už asi moc náročné, kdyby to mělo být univerzální
Jelikož wiki dokumentace je napsaná v Nette, tak hádám, že David to už nějak vyřešené má – nehodilo by se to do distribuce?
Nevím, jakou by všechny tyto požadavky měly režii, takže si nedělám iluze, že půjdou splnit. A sám se k implementaci neodvážím, s regulárními výrazy si absolutně netykám.
- xificurk
- Člen | 121
V současnosti používám vlastní (ne úplně dokonalé :-)) řešení,
které převede URL na {plink Presenter:action} a zpátky.
Takže k tvému požadavku:
- Spolupráci s Texy – OK
- Umožňovat zápis ve stylu [Presenter:action] – v zásadě nic nebrání tomu zapisovat odkazy, tak jak je člověk zvyklý ze šablon, ale imho by to neměl být preferovaný způsob, protože pro zapsání takového odkazu je třeba znát strukturu presenterů a jejich ackí, což typicky uživatel nemá.
- Rozparsovat na tvar v minulém bodě i normálně zapsaná URL – pro absolutní URL funguje, pro relativní ne (osobně nevidím jednoduchý automatizovaný způsob rozpoznání relativní URL a jejího parsování)
- Umět vyřešit změnu rout – dokud se nemění struktura presenterů je vše ok, protože rozparsované URL se uchovávají jako odkaz na Presenter:action
- upozornit uživatele, že zadaný link vede na 404ku – pokládám za „zbytečnost“ (viz níže)
Vycházel jsem z toho, že pokud uživatel píše komentář k článku, článek samotný apod., tak jako dokazy používá primárně vykopírované URL z adresního řádku prohlížeče, backend si to před uložením do databáze přežvýká a převede URL na Presenter:action, což má za následek, že při přesunu webu na jinou doménu, nebo změně rout se zachovají fungující odkazy, což je imho to, oč tu skutečně běží. Pro účely typu wiki odkazů apod. bych osobně volil na míru napsaná makra/helpery.
Implementace
BasePresenter->createTemplate()
$template->registerHelperLoader('Url2Plink::latteHelpers');
config.ini
; Na jakých doménách převádět URL - zabraňuje nechtěnému převodu
; URL na cízích doménách v případě relativně definovaných rout
domainMask = "[a-zA-Z0-9._-]*?example\.com"
Před uložením do databáze převedeme URL na {plink Presenter:action}
<?php
$text = Url2Plink::url2PresenterLink($text);
?>
Vypsání textu z db v šabloně
{$text|pl2url}
(dále můžeme aplikovat libovolné další helpery, třeba Texy!)