SuiteCRM è sviluppato seguendo il pattern MVC (Model-View-Controller) che permette la separazione delle logiche di lavorazione dei dati da quelle di presentazione. Questa è la struttura del core come lo è dei singoli moduli.
Ogni modulo è implementato tramite le regole dell’MVC e può essere esteso nelle proprie funzionalità senza andare a toccare il codice sorgente originale sfruttando la riscrittura e l’ereditarietà della programmazione a oggetti.
Nella solita cartella custom andiamo a creare tutti files necessari al nostro lavoro
custom/modules/<nome del modulo>/
all’interno di questa directory possiamo andare a riscrivere tutto le classi necessarie al nostro scopo
MODEL:
custom/modules/<nome del modulo>/<nome del modulo>.php
La riscrittura del model non è solitamente usata, le modifiche ai campi avvengono tramite lo “studio” di SuiteCRM e la logica di lavorazione avviene nel controller, mentre la presentazione dei dati passa dalle view.
VIEW:
custom/modules/<nome del modulo>/views/view.<nome vista>.php
Le viste del CRM sono 3:
- detail – richiamata dal file view.detail.php
- edit – richiamata dal file view.edit.php
- list – richiamata dal file view.list.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
require_once('include/MVC/View/views/view.detail.php'); class <nome modulo>ViewDetail extends ViewDetail { function __construct(){ parent::__construct(); } function display(){ // logica parent::display(); } function preDisplay(){ // logica parent::display(); } } |
di base abbiamo due metodi da sovrascrivere per la preparazione del data da mandare a schermo.
- preDisplay, permette di lavorare l’informazione prima che venga inviata a schermo;
- display, permette di inviare il dato allo schermo
CONTROLLER:
custom/modules/<nome del modulo>/controller.php
1 2 3 4 5 6 7 8 9 |
require_once('modules/<nome modulo>/controller.php'); class Custom<nome modulo>Controller extends <nome modulo>Controller{ function action_<nome azione>() { //Logica del controller } } |
Il controller potrebbe non essere presente nel modulo originale, in tal caso si estende la classe controller principale “SugarController”
1 2 3 4 5 6 7 8 |
class <nome modulo>Controller extends SugarController{ function action_<nome azione>() { //Logica del controller } } |