Vlastní CMS s moduly a routováním z DB
- Joacim
- Člen | 229
Zdravím,
zajímá mě zda má cenu (pokud někdo z vás uvažoval nad podobným řešením jako já) rozdělit CMS napsané v Nette na Moduly (pouze do složky app nakopíruji modul a v CMS jej nainstaluji a zaktivuji) nebo použít standardní Nette rozložení(při přidání nové funkčnosti musím přidat JS, CSS, Obrázky, latte atd do příslušných složek a ručně v db přidat tabulky a nastavení).
- Nevím jak vyřešit JS(ajax) a CSS specifické pro modul (rád bych to měl vše ve složce daného modulu, ne v WWW)
- Jakým způsobem přidávat „routy“ k danému modulu → chci z DB automaticky generovat aktivní moduly (cms-routy-best-practice)
- Jak vyřešit permalink na články z DB (nechci mít nazevwebu/clanky/1/, ale nazevwebu/clanky/nazev_clanku/)
- Jak řešit stránkování, sorting a ordering (přes session ? nebo je i lepší způsob přes COOL URL bez rovnítek a otazníků ?)
Pokud budu mít moduly, mám i lepší řízení rolí a jejich oprávnění (z DB). Moduly chci jednak kvůli jednoduché rozšiřitelnosti CMS, ale i pro lepší správu.
Venne CMS se dá stáhnou pouze přes composer a zatím jsem na něj nekoukal, hledám nějakou jednodušší variantu a zda se do toho vůbec pouštět, kdysi jsem se chtěl alespoň inspirovat Starší dotaz. Chci na to znát váš názor, zda se do toho vůbec pouštět a pokud ano, jak co řešit, na co dát bacha co nového z nete využít atd:.
Díky moc
Editoval Joacim (12. 1. 2016 13:21)
- iguana007
- Člen | 970
- Nevím jak vyřešit JS(ajax) a CSS specifické pro modul (rád bych to měl vše ve složce daného modulu, ne v WWW)
https://componette.org/search/?…
- Jakým způsobem přidávat „routy“ k danému modulu → chci z DB automaticky generovat aktivní moduly (cms-routy-best-practice)
http://blog.jsifalda.name/…e-nette-rout
- Jak vyřešit permalink na články z DB (nechci mít nazevwebu/clanky/1/, ale nazevwebu/clanky/nazev_clanku/)
Routerem, resilo se to tady uz 100×, hledej ;) https://forum.nette.org/…37-routovani
- Jak řešit stránkování, sorting a ordering (přes session ? nebo je i lepší způsob přes COOL URL bez rovnítek a otazníků ?)
Na cool URL se uz moc nehraje, ale muzes to taky vyresit pomoci routeru, kde jeden z parametru bude aktualni stranka pagingu.
- Joacim
- Člen | 229
iguana007 napsal(a): . . . . .
Modulem jsem měl na mysli TOTO
Tzn: ve složce app budu mít např: modulRezervace (který bude obsahovat model presenter i templaty), přes Venne Moduly to jde asi taky, ale přijde mi to spíš jako nette moduly (extensions), asi jsem to špatně pochopil. Chci jen modul přes FTP nakopírovat a dál vše nastavovat pouze přes webové rozhraní. Tím nechci říci aby mě někdo poslal celé řešení, jen ukázat cestu nejschůdnější.
Co jsem hledal musím vždy někam něco dopsat (config.neon, extension.php
atd:.)
Staticky si moduly umím přidat, teď hledám způsob, jak to udělat
automatizovaně.
V app/ bych měl složku modules/ a při každém zapnutí aplikace by se prošly složky a zjistilo se zda tam není nová (přidán nový modul), v CMS bych měl odkaz moduly a tam bych viděl že je nový modul (našlo to složku, která obsahuje install.php a data název adresáře není schodný s názvy modulů v DB)
Editoval Joacim (12. 1. 2016 14:58)
- akadlec
- Člen | 1326
Toto řeším u sebe v cms, co snad jednou spatří světlo světa jako os :D co modul to „složka“ kde má modul vše při ruce co potřebuje. Každý modul má svůj vlastní config (aktuálně to řeším přes neon, kdy se výstup z konfiguračního formu transformuje na soubor). To jaký modul je zapnutý a vypnutý je řízeno neonem. Na ty moduly mám udělanou malou extenstion která se tak trochu stará o jejich správu. imho ale jen ftp upload je málo. Většinou k tomu potřebuješ i nějaké tabulky atd, tak je vhodné pouvažovat o nějakém instaleru.
Router si každý modul řeší sám, tj. vytáhne si službu routeru z DI a přidá do něj vlastní routy které potřebuje.
Statické soubory (js,css) si moduly taky řeší samy, vytáhnou si službu assets loaderu a předají mu svůj seznam souborů.
Permalinky řeší router, tam není co vymýšlet.
Filtry, stránkování apod. by imho mělo být v url, osobně mě dokáže docela dost nasrat když sem např. někde v eshopu, klikám si filtr a pak jej chcu někde poslat a mám smolíka protože je v session apod. a nebo si to vzájemně nepamatuje filtr vs stránkovač apod.
- Joacim
- Člen | 229
akadlec napsal(a): . . . . . . . .
Přesně takhle to chci taky udělat.
S tím, že každý modul bude potřebovat DB tabulky atd:. počítám a
instalátor tam udělám.
Jen u extension modulů nemáš dokumentaci koukám.
Nemáš alespoň ukázkový projekt s jedním modulem (jen ukázka nastavení) ?
Editoval Joacim (12. 1. 2016 15:22)
- akadlec
- Člen | 1326
No dokumentace není :( ale teď ty jednotlivé extensiony procházím a vyhezkávám, takže i chybějící dokumentace dopisuji. Hele, jako fakt light ukázka může sloužit modul pro správu uživatelů ale brát to fakt s rezervou, jednak tam nemám spoustu věcí ještě commitlých a jednak je to těžce pracovní/testovací verze.
- Joacim
- Člen | 229
akadlec napsal(a):
No dokumentace není :( ale teď ty jednotlivé extensiony procházím a vyhezkávám, takže i chybějící dokumentace dopisuji. Hele, jako fakt light ukázka může sloužit modul pro správu uživatelů ale brát to fakt s rezervou, jednak tam nemám spoustu věcí ještě commitlých a jednak je to těžce pracovní/testovací verze.
Koukám, že mi odkaz Composer v NB nevezme (budu to muset vyřešit jinak).
config,neon je stejně společný a musím do něk přidat extension.
Já s tím měl problém už i při instalaci CMS, mám instal page, kde jsou základní nastavení jako DB atd:., ale musím přepsat config.neon přes PHP za dodržení formátování.
- Joacim
- Člen | 229
akadlec napsal(a):
Neon souborů můžeš mít více, né jen jeden. A pokud myslíš odkaz na ten bitbucket, tak to by sis musel dokonfigurovat, pro tohle repo není package.
Aha, já jsem vždy zatím používal klasický config.neon, lze mít tedy pro každý Modul clastní sločku config se eouborem config.neon ? (jakým způsobem mám tedy přidat config.neon z modulu do $configurator->addConfig ?)
- Joacim
- Člen | 229
akadlec napsal(a):
Ty ho nepotřebuješ přidávat, stačí ho jen zpracovat a o to se tě stará extension loader.
Takže nemusím do config.neon přidávat novou servisu ? Tzn. pokud si vytvořím v modulu nový model, který chci používat i v jiných modulech ? (P.S. – Občas mě trvá něco pochopit déle)
Zpracovat znamená co ? Myslel jsem, že stačí načíst konfiguraci a přidat do ní moje services.
Editoval Joacim (13. 1. 2016 14:59)
- Jiří Nápravník
- Člen | 710
Uděláš si CompilerExtension a tam dáš:
public function loadConfiguration()
{
parent::loadConfiguration();
$this->compiler->parseServices(
$this->getContainerBuilder(), $this->loadFromFile(__DIR__ . '/config.neon')
);
}
tím se zpracuje ten config.neon a přídá se do kontejneru
- Joacim
- Člen | 229
Jiří Nápravník napsal(a):
Uděláš si CompilerExtension a tam dáš:
public function loadConfiguration() { parent::loadConfiguration(); $this->compiler->parseServices( $this->getContainerBuilder(), $this->loadFromFile(__DIR__ . '/config.neon') ); }
tím se zpracuje ten config.neon a přídá se do kontejneru
To chápu (ZDE) jsem se trošku inspiroval, napíšu si novou třídu CompilerExtension(app/modules), injektnu do presenteru daného modulu(app/modules/nazev_modulu/presenters) a přidám do bootstrap.php + v app/config přidám jako servisu.
Předem se omlouvám za hloupou otázku, ale nemám ještě 100% znalosti Nette. – Poté mohu v prezenteru modulu zavolat tuto servisu a přes ní přidat konfiguraci ? (Myslím, že jsem to špatně pochopil, jelikož by měla bejt konfigurace načtena hned při startu aplikace a ne až po tom co se dostanu do daného presenteru modulu)
app/
config/
modules/
Modul-1/
config/
presenters/
templates/
models/
Modul-2/
config/
presenters/
templates/
models/
model/
presenters/
router/
Editoval Joacim (13. 1. 2016 17:03)
- akadlec
- Člen | 1326
Jop, špatně si to pochopil. Uděláš si modul, třeba jak sem tě odkazoval na správu uživateů. Tento modul je vlastně extension která rozšíří DI a pomocí metody jak psal @JiříNápravník ti vytvoří její služby. Ty pak jen do config neonu co má tvoje aplikace přidáš tuto novou extension:
extensions:
tvujmodul: TvujModulExtension
A pokud tvůj modul vytváří nové služby tak je vytvoří, přidá do DI a máš je pak k dispozici i jinde. A ty moje zmíněné doplňky řeší to ruční přidávání služby do neonu, aby se přidávaly dynamicky.
- Joacim
- Člen | 229
akadlec napsal(a):
Jop, špatně si to pochopil. Uděláš si modul, třeba jak sem tě odkazoval na správu uživateů. Tento modul je vlastně extension která rozšíří DI a pomocí metody jak psal @JiříNápravník ti vytvoří její služby. Ty pak jen do config neonu co má tvoje aplikace přidáš tuto novou extension:
extensions: tvujmodul: TvujModulExtension
A pokud tvůj modul vytváří nové služby tak je vytvoří, přidá do DI a máš je pak k dispozici i jinde. A ty moje zmíněné doplňky řeší to ruční přidávání služby do neonu, aby se přidávaly dynamicky.
- Pro každý modul musím mít extension (CompilerExtension) nebo stačí jeden pro všechny moduly ? a u každého modulu mu jen předám parametry, které bych jinak musel psát do config.neonu ručně ?
- Kde si budu CompilerExtension volat v Modulu, abych inicioval parametry předávané do compileru (parametry neonu)?
Editoval Joacim (13. 1. 2016 18:22)
- Joacim
- Člen | 229
akadlec napsal(a):
- To je na tobě jak si to navrhneš, já mám co modul do extension, jen je to obaleno balíčkovačem co se stará o drobnosti kolem.
- Co nevoláš ty přímo, ale volá si to nette, tím že tu extension registruješ mezi ostatní.
Ok, takže nette se automaticky postará o loadConfiguration (zde budu mít parametry, které bych jinak napsal do modul/config/config.neon) a tuto extensio si jen regnu v hlavním config.neonu