Redakční systém s možností rozšíření
- nanuqcz
- Člen | 822
Napadlo mě, co kdybych chtěl pomocí Nette napsat redakční systém, který by se dal rozšiřovat (podobně jako např Joomla) jen nahráním nových souborů na FTP. Základ není nijak složitý, prostě se na FTP nahrajou nové presentery, modely a templaty. Ale jak zařídit, aby měly tyto rozšíření možnost nastavit si routy, uživatelská práva, aby při prvním spuštění mohly např vytvořit v DB potřebné tabulky, atd.?
Jakým způsobem se dá toto v Nette řešit?
Díky za návrhy ;-)
- sodae
- Nette Evangelist | 250
mohl bych říct, že jde jen o tvoji představivost, jak to uděláš. Ale na začátečníka bych mohl říct, že by to mohlo být celkem obtížnější jako pro začátečníka
ale jestli chceš návrh, tak můžeš nahrát (dejme tomu) „loader“ modulu, který bude při spuštění volat patřičné metody, dejme tomu:
interface IModule
{
public function setupRouter(IRouter $router);
public function setupPermission(Permission $permission);
public function installModule();
}
(píšu jej přímo do prohlížeče, snad v tom nebude chyba)
samozřejmě bude asi potřeba nějak informovat aplikaci že existuje nějaký modul
jedná se o jen o jednoduchý návrh, jeden z x návrhů a fantazii se meze nekladou
- nanuqcz
- Člen | 822
public function setupRouter(IRouter $router); public function setupPermission(Permission $permission); public function installModule();
A tohle asi nejsou nějaké obecné metody, které be Nette automaticky načítalo, že?
samozřejmě bude asi potřeba nějak informovat aplikaci že existuje nějaký modul
jo, přesně na to jsem se chtěl zeptat, jak tohle udělat :-D
Napadlo mě třeba vytvořit ve složce app
složku
extensions
, ve které by mělo každé rozšíření svůj soubor
(tedy např extensions/gallery.php
,
extensions/mailform.php
apod.), ve kterém by byly skripty pro
ošetření toho všeho. V bootstrap.php
by pak byl cyklus, který
by všechny php soubory z této složky spouštěl přes
include
.
Co na to říkáte? Je to ne-objektové, ale zato jednoduché. Je nějaký
důvod, proč bych to takto použít neměl, nebo proč je onen objektový
návrh (metody setupRouter
, setupPermission
, atd.)
lepší? Popřípadě uvítám i jiné návrhy ;-)
- nanuqcz
- Člen | 822
LuKo napsal(a):
ObiWan: Četl jsi Pandův popis: https://forum.nette.org/…ura-a-moduly?… ?
Teď už ano. Ale tam se název každého rozšíření musí ručně zapsat
do ini souboru. Popravdě doufal jsem, že Nette bude mít už nějakým
způsobem vyřešené, jak automaticky zjistit které kontrolery jsou na ftp
nahrané a případně by pak mohlo i spouštět ony metody
setupRouter
apod. Protože tohle je jedna z věcí, které
u každého projektu řeším znova a tomu se mám přece v Nette vyhnout,
ne? :-)
Takže žádný Best practise na tohle není, jo?
- nanuqcz
- Člen | 822
redhead napsal(a):
To je takový problém si to napsat sám? Nette nemůže řešit takhle konkrétní případy. Draft už máš, teď je na tobě kontrolovat nějakou složku s moduly a volat si ty metody.
Není, jen jsem si nejdřív chtěl být jistý, jestli už něco takového vyřešené v Nette není ;-)
- LuKo
- Člen | 116
ObiWan: Uvažoval jsem stejným směrem, jako ty, aby stačilo do adresáře nahrát modul a Nette si ho samo našlo. Ale nakonec jsem to udělal podle Pandova postupu, kdy moduly definuji v config.ini. Stačí tam mít seznam všech modulů a jen odkomentovávat aktivní moduly. Je to daleko pohodlnější, než blbnout s kopírováním nebo mazáním adresářů. Nehledě na to, že takto mohu na serveru ladit rozbitý modul (pro svůj login si zapnu development režim), zatímco uživatelé ho budou mít neaktivní.