Moduly (doplňky) v nette (alternativa pro phpquery)

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

Zdravim Vas,

tak trochu se to bude tykat i tematu o phpquery zde:
https://forum.nette.org/…-html-obsahu

Mozna jsem pouzil nazev moduly nevhodne (v nette to ma trosku jiny vyznam) ale vysvetlim na prikladu o co mi jde:

kdysi jsem mel jednoduche CMS a pokud jsem chtel nejakou novou funkcionalitu, tak jsem si na to vytvoril modul. Mam napriklad stranku „detail clanku“ a rad bych pod clankem mel i komentare. V zakladu CMS ovsem komentare neumi a tak jsem si vytvoril modul pro komentare, ktery mel vlastni model, controller a sablonu. V CMS jsem tento modul aktivoval a nyni to fungovalo zjednodusene takto:
nejdrive se do promenne ulozila cela struktura aktualne zobrazovane html stranky a pote se zjistilo, jake moduly mam aktivni. Aktivni mam modul Komentare a tak „spustil“. Modul mel nastavene, ze ma vlozit ten a ten obsah za div s id „text“. Pomoci phpquery jsem tedy v promenne, ktera obsahuje dosavadni html dohledat div s id text a vlozil za nej html, ktere mi vygeneroval modul komentaru.

Jde tedy o to, ze mam jiz nejakou hotovou aplikaci v Nette a potrebuji pridat nejakou novou funkcionalitu, kterou bych do html, ktere mi aplikace vygeneruje rad vkladal pomoci phpquery. Jelikoz phpquery se mi asi implementovat nepodari, existuje nejaka jina moznost, jak podobne „moduly“ resit?

Jde mi hlavne o to, drzet logiku celeho modulu separatne od jiz naprogramovane aplikace a zaroven moduly co nejjednoduseji do aplikace implementovat tak, abych jiz nemusel do zdrojovych souboru aplikace zasahovat.

Vyclenit si nekde nejakou slozku, kam moduly budu davat, nasledne zjistim zda tam nejake jsou a pokud ano, tak spustit nejakou predem definovanou metudu nejake predem definovane tridy modulu je OK, ale jak potom vygenerovany html kod tohoto modulu zaclenit do html kodu aplikace tak, abych do aplikacnich souboru nemusel zasahovat :o)?

Diky za tipy,

Tom

frosty22
Člen | 373
+
0
-

Nejsem si jist, zda-li jsem to pochopil správně (takový přístup přes phpquery se mi zdá docela „brutální“), ale k věci. Nemělo by tvůj problém toto řešit komponenty?

Do aplikačních souborů (myslíš-li tím presentery/modely) zasahovat „nemusíš“ a pouze tedy v šabloně presenteru inicializuješ komponentu:

{control comments}

následně tedy si separátně (v podstatě kde chceš v app|libs) vytvoříš svůj modul (zde hledej jako komponentu) a její šablonu (viz https://doc.nette.org/…n/components).

Pouze tedy budeš muset vytvořit v „aplikačních souborech“ onu továrničku na komponentu, což můžeš však brát jako onu aktivaci modulu, kterou jsi měl ve svém CMS.

tomasnikl
Člen | 137
+
0
-

Tak jsem to vysvetlil spatne :o) trochu jsem se do toho zamotal.. ono to asi bude lepe pochopitelne, kdyz to uvedu na konkretnim prikladu z minulosti:

dejme tomu, ze cela webova aplikace bezi nekde u me naservru. Dejme tomu ze se jedna o eshop. Cely system funguje na systemu pronajmu napriklad. Takze muj klient si objedna eshop, ja mu zaslu pristupy na FTP ale nechci, aby mel pristup ke zdrojovym souborum aplikace a ani k latte sablonam (aby ji neukradl, neupravil atd). Na FTP bude mit pristup pouze do nejake slozky modulu, kam si bude moct nahrat vytvoreny modul pokud umi programovat..

Je to uz trosku srozumitelnejsi? cela aplikace (presentery, modely ale i latte sablony) nebudou dostupne a nebude tedy mozne do nich pridat komponentu takto:

{control comments}

Proto me napadlo reseni pomoci phpquery, kdy si modul nahraju do zminene slozky a nette jej rozpozna, inicializuje a modul si pomoci phpquery dohleda misto, kam se ma vlozit.

Muzete si to predstavit jako pluginy do wordpressu nebo do joomly a podobnych systemu, kdy jen nahrajete plugin/modul na FTP, v administraci jej aktivujete a jiz nezasahujete do zadne sablony.

Editoval tomasnikl (29. 3. 2012 11:57)

frosty22
Člen | 373
+
0
-

Jo již rozumím, jak to myslíš, hodně podobnou logiku „modularizace“ též mám v plánu zanedlouho programovat, leč z jiných důvodů, avšak podstatě věci je stejná. Jinak tedy mě spíše napadla možnost využití komponenty komponent, resp. v šabloně bys měl například definovaná místa, kde mohou být ony moduly:

...
<div id="leftside">{control modules:leftside}</div>
...
<div id="rightside">{control modules:rightside}</div>
...

Následně bys měl komponentu Modules, která by právě prolezla onu složku s moduly, přečetla například konfigurační soubory oněch modulů, nastavila jim případné závislosti a vykreslila.

Tímto bys to tedy více svázal, jelikož by šlo moduly vykreslovat jen do předem určených pozic, naproti tomu bys nemusel řešit phpquery a modifikaci již vyrenderované šablony.

V tomto případě však tedy je dost důležitá právě ta komponenta Modules, kterou zatím tedy navrženou nemám, ale osobně mám právě v plánu toto realizovat takto.

tomasnikl
Člen | 137
+
0
-

Ano, i toto me napadlo, je to varianta, ke ktere bych se priklanel az nakonec, jelikoz je podle me dost omezujici do budoucna (alespon pro me). Nebudu moct modifikovat html vygenerovane „aplikaci“ (jako bych mohl pomoci phpquery) ale budu moct jen vkladat dalsi html.

Uvidime, treba napadne jeste nekoho neco jineho. Kazdopadne diky za tip!

newPOPE
Člen | 648
+
0
-

tomasnikl napsal(a):

Tak jsem to vysvetlil spatne :o) trochu jsem se do toho zamotal.. ono to asi bude lepe …

Nieco sa mi na tomto pristupe nezda. Napada ma otazka, ci ked viem programovat tak si tam naprogramujem nieco ako „copy all eshop source code to my folder“ a podobne…

Proste myslet zbytocne na vela veci. Asi by som zvolil iny pristup celeho systemu. Skus si pozriet shopify a ako oni riesia vselijake rozsirenia ich base code.

frosty22
Člen | 373
+
0
-

Tez by me dosti zajimalo, jak se toto resi, ono jsem nikde ani nenasel nejake best practice k problematice modularizace, jako je napriklad u magento, drupal, wp, atd. Lec tedy asi univerzalni reseni nebude, v podstate je vzdy treba mit interface k danym moznostem napriklad platby, atd. A ridit se spise timto smerem, ale asi se taky podivam jak to resi tyto open source systemy, cmska, ..

awsickness
Člen | 98
+
0
-

co se tyce modularizace applikace obavam se ze to co navrhujete je trosku slozitejsi nez popisujete pro inspiraci bych rad odkazal na hospilanovo kdyby kde docela pekne resi pridavaji packages / modulu.
ja sam to resim jinym zpusobem pro me praktictejsim.