Redakční systém s možností rozšíření

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
nanuqcz
Člen | 822
+
0
-

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
+
0
-

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
+
0
-
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 ;-)

LuKo
Člen | 116
+
0
-

ObiWan: Četl jsi Pandův popis: https://forum.nette.org/…ura-a-moduly?… ?

nanuqcz
Člen | 822
+
0
-

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?

redhead
Člen | 1313
+
0
-

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.

nanuqcz
Člen | 822
+
0
-

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
+
0
-

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í.