Jump to content

Incorporare una classe custom o un controller nel modulo principale


Madsex

Recommended Posts

Salve,

stò creando un modulo (prestashop 1.7.4.3).

Per puro spirito di organizzazione mi piacerebbe creare un controller o una classe le cui funzioni possano essere richiamate dal file principale del modulo.

Come detto per puro spirito di organizzazione di codice. Questo perchè all'interno dell'hook che userò (hookActionProductSave) dovrò fare diverse operazioni e non mi va tanto di buttare tutto nella funzione dell'hook .

C'è una maniera? Ho provato diverse soluzioni ma nulla va, compresso il semplice include della mia classe salvata in una cartella classes all'interno del modulo.

grazie per l'aiuto

Link to comment
Share on other sites

A dire il vero l'ho provato sia con include che con require one messo nel costructor del file di modulo principale.

In entrambi i casi le funzioni chiamate nella mia classe non funzionano. Dovrei provare inserendo require o include in testa al file di modulo principale però avrei come obiettivo quello di usare in questa mia classe le funzioni dei controller/classi di prestashop, sarebbe utile diciamo. perchè se devo collegarmi a tabelle del Db o roba del genere potrei evitare di creare una mia connessione al Db e usare quella di prestashop.

Diciamo che avrei anche come soluzione quella di fare un'override di tools così da poter inserire le mie cose ma non mi convince tanto come soluzione.

Se hai idee ti sarei grato, grazie

Link to comment
Share on other sites

Non ho capito bene cosa devi fare :) cioè, il modulo che stai sviluppando cosa fa? 

Di solito l'include si mette in testa al file principale del modulo. Se vuoi utilizzare le funzioni static di PrestaShop non hai neanche bisogno dell'include.

Le funzioni dei controller è un po' difficile usarle da un modulo, ma forse non ho capito bene come intendi. 

 

 

Link to comment
Share on other sites

Effettivamente qualche spiegazione in più non guasta.

Il modulo deve fare diverse cose update/insert su tabelle e maneggiare diversi file.

Per fare queste cose dovrò creare diverse funzioni.

Farebbe comodo avere una classe a parte organizzata secondo le mie esigenze dove, all'occorrenza, posso fare query con le funzioni static di prestashop o utilizzare qualche funzione in tools.

Attualmente creando un modulo devo usare un unico file in con tutte le funzioni dentro, considerando che saranno tante ne uscirà un file gigantesco e forse un po' confuso.

Spero di aver chiarito.

Mi piacerebbe comunque sapere il pensiero generale in merito, secondo me sarebbe necessario dare la possibilità di aggiungere classi all'intero dell' ambiente di lavoro, per non limitare tutto ad un unico file che per moduli complessi potrebbe diventare enorme.

Grazie

Link to comment
Share on other sites

Ora è più chiaro, grazie. 

Ovviamente è possibile creare classi custom all'interno della cartella del modulo, come hai scritto precedentemente per comodità vanno messe dentro a /classes all'interno del modulo. 

Capisco anche la preoccupazione che il file diventi troppo grande e confusionario. 

Però l'utilizzo di una classe non deve essere fine a se stesso. Cioè a volte può essere più facile e/o comodo solamente usare funzioni all'interno del file principale. 

Se ad esempio vuoi creare un oggetto all'interno del tuo progetto, utilizzerei una classe che estende ObjectModel. Per esempio, creare delle reviews. Allora farei una classe Review con le sue proprietà e i suoi metodi. 

Riguardo alle funzioni in Tools in una classe, a quali ti riferisci per esempio? 

Nel tuo caso, avrei raccolto le informazioni del prodotto salvato all'interno del hook e poi chiamato altre funzioni sempre all'interno del file principale. Ricordati di commentsre il perché delle funzioni e tutto sarà piu chiaro. 

Per quanto riguarda la connessione al DB, basta scrivere Db:getInstance() e poi puoi scrivere una query. 

Link to comment
Share on other sites

mmmmm. sono un po' confuso.

Chiarisco subito che la classe non sarà fine a se stessa, anzi vorrei cercare proprio di estenderla il più possibile ad un utilizzo globale all'interno di prestashop sebbene esistano hook e override specifici per questo tipo di cose.

ES non calzante ma per rendere l'idea: la vorrei talmente estesa da poter chiamare le sue funzioni anche da altri moduli ( proprio come Tools.php -> es: Tools::getvalues())

Detto questo qual'ora non fosse possibile avere una classe mia simile a Tools.php mi accontenterei di creare nel modulo classes/pippo.php e nel file principale del modulo chiamare questa classe e le sue funzioni:

$r = new Pippo()

$r->test();

Questo non mi sembra funzionare se mi dici che è quantomeno una via funzionante allora riprovo magari sbagliavo qualche cosa e non me ne sono accorto.

Estendere objectModel mi sembra interessante ma non vedo che differenza ci possa essere rispetto ad estendere Tools.php (cosa che ora stò facendo per comodità). Al momento estendo con override ToolsCore e infilo le mie funzioni personali (non mi piace ma lo faccio per andare avanti e vedere altre cose mentre cerco una soluzione migliore).

Thanks

 

Link to comment
Share on other sites

Scusami, adesso ho capito bene cosa intendi. 

Ovviamente ciò è possibile, ma diventa un lavorone se la devi utilizzare solamente per un modulo. Se posso chiedere, quali metodi deve avere la classe che vuoi creare? 

La classe che crei in /nomeModulo/classes la puoi chinare dal file principale. Prova con require_once(_PS_MODULE_DIR. 'modulo/classes/classe).

Probabilmente no, non c'è differenza ma non avevo capito che tu volessi una classe che funzionasse come quelle di PrestaShop. Pensavo ti servisse una classe specifica per quel modulo. 

Link to comment
Share on other sites

Di preciso i metodi non li conosco ancora, via via creerò funzioni che serviranno ai miei scopi.

Di sicuro avrò una funzione che farà update/insert di record "gemelli" ai prodotti, quindi legata all'hook di aggiornamento prodotto, ho già tuto mi manca di capire cosa inserire come chiamata nell'hook (a ke classe/controller/ override.....bho). Avrò tanti campi custom da uplodare per cui già solo questa tirerebbe fuori una query lunghetta che crescerà nel tempo (e già qui vedo stretto l'unico file del modulo diciamo).

Poi mi piacerebbe creare una serie di fuzioni richiamabili un po' dappertutto (magari proprio come Tool) così se devo prendere dati da tabelle non prestashop ci penserò io. Oppure spesso mi trovo a dover far fare dei calcoli particolari per poi aggiornare prezzi o altro all'interno del prodotto.

Tutto questo se lo mettessi in una classe a parte simile a quelle di prestashop sarebbe perfetto (Pippo::supercalifragilisti()) . Diciamo che mi piacerebbe comunque sapere come fare per una questione anche di conoscenza.

Come detto al momento faccio l'override di Tools e aggiungo le mie funzioni, ma francamente è un po' scomodo, ogni volta devi resettare il modulo per far ricreare l'override, però funge, anche se mi da fastidio che magari un altro modulo potrebbe estendere la stessa classe e rovinarmi tutto.

Idee???

Thanks

Link to comment
Share on other sites

Per quanto riguarda il fatto che devi resettare il modulo ogni volta, ti conviene creare il file e lavorare direttamente in /override/controllers o override/classes e poi una volta finito copi il tutto all'interno dell'override nel modulo. Cile /modulo/override. 

Comunque se hai aggiunto i campi custom e tra all'interno del prodotto in maniera corretta cioè estendendo la classe esistente PrestaShop, gli update/insert si gestiscono da soli. 

Secondo me ti conviene a questo punto creare una classe all'interno del modulo e poi usare include ogni volta che la vuoi utilizzare. 

Hai provato a inserire l'include in alto nel file? Funziona? :)

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...