Jump to content

Creazione modulo admin con tab e view personalizzata


subbisci

Recommended Posts

Versione Prestashop 1.6

Ragazzi devo creare un modulo di prestashop che al momento dell'installazione crei una nuova voce di menù nel pannello admin (possibilmente sotto statistiche) e che poi utilizzi una view custom.

Attualmente sono riuscito a creare:

-file xml e db;
-classe che va a prendersi i dati dal db;

-controller con install/uninstall e costruttore che inizializza un oggetto della classe;
-creare una voce nel menù che richiamo il modulo creato da me.

Tutto questo va, ma quando entro nella pagina vedo una tabella che visualizza i dati presenti nel DB. Fa tutto prestashop in automatico, ma non è quello che mi serve e non riesco a trovare un modo per passare un oggetto di tipo "miooggetto" alla view per poi visualizzarlo o gestirlo come pare a me.
Mi farebbe comodo avere tra le mani un piccolo modulo (anche solo di esempio) con il controller che chiama un file TPL custom come view che a sua volta visualizza alcuni parametri passati dal controller. 

Qualcuno è in grado di fare questa cosa o sa dove lo posso trovare?  Le guide a me appaiono sempre troppo poco chiare in alcune cose (quella ufficiale più di tutte). Mi sembrano sempre troppo poco efficaci, dispersive e tralasciano sempre qualche informazione. Per esempio ho notato che il controller nelle guide estende (inteso come extends) una classe differente a seconda della guida o della versione di prestashop e nessuno spiega perchè è stata scelta quella classe piuttosto che un'altra.

Non riesco a fare chiarezza!

Link to comment
Share on other sites

Non ho avuto problemi a creare un modulo admin, però mi perdo qualcosa quando devo trasformarlo in un modulo. Non riesco a capire dove sbaglio. Sommare due guide non mi risulta una cosa molto semplice.

Comunque ti ringrazio per la disponibilità.

Link to comment
Share on other sites

Come hai detto tu con "modulo admin" intendevo un controller admin, un altro framework li chiamava tutti moduli e ormai sono abituato a chiamarli così. : D

 

Attualmente ho già avuto modo di creare un controller lato admin che non richiedeva una view custom e non ho avuto problemi, ho seguito quella stessa guida che mi hai linkato tu.

Non mi ero ancora imbattuto in chiamate a view custom e quando ho guardato le guide mi sono sembrate poco precise. Ti faccio un esempio stupido, nella guida linkata qua sopra dice:
 

First, you need to create a folder in the admin/themes/default/template/controllers/ folder. Let's call it /test. 
This folder name is the name of the controller without the "Admin", "Controller" and "Core" sections. For example:

  • AdminTestControllerCore -> admin/themes/default/template/controllers/test/
  • AdminTestPrestashopControllerCore -> admin/themes/default/template/controllers/test-prestashop/


Dice che il nome della folder delle views (a meno di darglielo a mano) deve essere lo stesso del controller tagliando via le parole Admin, Controller e Core. Intanto non dice che deve essere tutto minuscolo, ma nel secondo caso non è vera questa affermazione a questo punto devo dedurre che dopo la prima maiuscola che viene semplicemente convertita in minuscola le altre vengono convertite in minuscole con un meno davanti?
Niente mi da la sicurezza che sia così e questo è soltanto un esempio,ma ne ho trovati altri.

Link to comment
Share on other sites

Considera che dalla versione 1.5 in poi è possibile sviluppare i controller (sia front che admin) direttamente come modulo, quindi se ti occorre una funzionalità particolare che prevede l'aggiunta di un tab quindi un admin controller, ti conviene sviluppare un modulo, così tutti i file, sia i template sia i controller li troverai all'interno del modulo stesso.

Inoltre non hai l'obbligo di inserire i file nelle varie directory, basta installare il modulo e già funziona tutto.

Link to comment
Share on other sites

Purtroppo è quello che sto provando a fare, ma ho difficoltà a passare da controller admin a modulo, non ho idea del perché. C'è qualcosa che mi sfugge.

Ora lo creo come controller e lo faccio funzionare, poi mi studio come prendere un controller e trasformarlo in modulo. 

Ti ringrazio! : )

Link to comment
Share on other sites

Scusami codencode se ti importuno ma credo di aver trovato dove sta il bug nel mio cervello. Sto provando a creare un modulo (errata-corrige: non è un modulo, ma un controller admin) con grafica personalizzata e continuo ad aver problemi con la chiamata della view personalizzata. Per me tutta questa parte non ha senso:

First, you need to create a folder in the admin/themes/default/template/controllers/ folder. Let's call it /test. 
This folder name is the name of the controller without the "Admin", "Controller" and "Core" sections. For example:

  • AdminTestControllerCore -> admin/themes/default/template/controllers/test/
  • AdminTestPrestashopControllerCore -> admin/themes/default/template/controllers/test-prestashop/

You can change the name of the folder if you put this code in the constructor:

$this->tpl_folder = 'test_controller';

...or you could define a new architecture with subfolders by putting this code in the constructor:

$this->tpl_folder = 'test_controller/content';

In pratica (ai miei occhi) la guida mi dice: ipotizziamo che il tuo modulo (errata-corrige: non modulo ma controller) si chiami, come nel secondo esempio, AdminTestPrestashopControllerCore allora la folder nella quale dovrà trovarsi la view sarà "admin/themes/default/template/controllers/test-prestashop/" e scrive in bold il nome della folder. E già questa cosa per me è poco sensata, come ti ho già scritto, perchè non è vero che la folder si chiama come il modulo senza alcune stringhe ( per la percisione senza admin, controller e core).
Poi fortunatamente aggiunge che posso definire una variabile con tpl_folder con il valore test_controller in modo da non essere legato al nome del controller quando devo dare il nome della folder. Bene, anzi Ottimo!

Ora io quella variabile l'ho valorizzata esattamente con test_controller (per farlo contento) e la cartella in quel path l'ho chiamata, appunto, test_controller (e si posiziona sotto la cartella "tax_rules_group") ed il file form.tpl. A questo punto cliccando su ADD o su Edit dovrei vedere la mia view, però questo cavolo di coso non ne vuole sapere di leggere la mia view!

Edited by subbisci (see edit history)
Link to comment
Share on other sites

Per avere un controller legato ad un modulo bisogna strutturare il modulo nel seguente modo:

 

nomemodulo/nomemodulo.php

nomemodulo/controllers/admin/AdminNomeControllerController.php

nomemodulo/views/templates/admin/nome_modulo/helpers/list/list_header.tpl

 

In questo modo stiamo facendo l'override del file list_header.tpl

Allo stesso modo funziona per il form.

 

 

Al seguente link trovi una guida dettagliata:

http://www.programmingtunes.com/prestashop-1-5-features-for-developers-part-1-modules/

Edited by codencode (see edit history)
Link to comment
Share on other sites

Devi scusarmi, ho questo vizio di scrivere modulo anche se su Prestashop i moduli sono altri. Nel post precedente ho scritto che stavo creando un modulo con view personalizzata, in realtà ho deciso di fare un passo indietro e sto provando a creare un controller admin con view personalizzata, in modo da poter semplicemente seguire una guida. Ora se rileggi il post cambia il senso.

Comunque mi sono letto l'ultima guida che hai linkato e mi ha chiarito alcune cosette. A questo punto ti faccio sapere.

Grazie di nuovo per la disponibilità! : D

Link to comment
Share on other sites

Ormai credo di aver risolto. Faccio una piccola descrizione di come ho proceduto in modo da poter essere di aiuto a qualcuno in futuro:

Come detto ho fatto un passo indietro, sono passato dal creare un modulo al creare un controller admin, questo perchè mi ha riportato a qualcosa più facile da trovare nelle guide. Ho seguito la guida standard (linkata qua sopra da codencode) ed ho creato il modulo con funzionalità standard quali: caricamento/salvataggio dei dati dal DB, tabella dei dati nella pagina principale della tab, form di edit di modifica di un elemento.

Nelle prime righe del controller ho aggiunto la riga "$this->bootstrap = true;" che non fa altro che caricare un css standard, senza quella il tutto apparirà senza stile. Sarebbe stato molto comodo se nella guida di PS l'avessero messo.

A questo punto ho provato a seguire la guida per caricare delle view standard, dunque ho iniziato a provare a fare un override di form.tpl. La guida dice semplicemente che basta creare una cartella che ha lo stesso nome del valore della variabile "$this->tpl_folder" e dentro questa cartella basta metterci dentro il form.tpl, così ho fatto. Dunque, dato che la mia cartella si chiama "prova" e si trova ovviamente dentro /themes/default/template/controllers/ ,  ho messo form.tpl là dentro. Nessuno risultato.

Ho guardato un po' come è la struttura nelle cartelle degli altri controller e così ho creato una gerarchie di cartelle dentro la mia cartella prova, esattamente come ho fatto negli altri. Alla fine avevo qualcosa del genere:

/themes/default/template/controllers/prova/helpers/form/form.tpl

 

il file aveva nel suo interno soltanto due righe:

{extends file="helpers/form/form.tpl"}

test

 

 

Niente, veniva caricato sempre il form standard! 

Dopo mille controlli di nomi di cartell, nomi di file e valore di variabili varie ho deciso di utilizzare un metodo scientifico standar per gli informatici. Sono andato a tentativi.

Ho deciso di mettere nella  $this->variable tpl_folder il nome di una cartella già esistente: "attributes". Magicamente la chiamata ha iniziato a funzionare. La conclusione era che ci fosse qualcosa di sbagliato dentro la cartella prova, dunque mi sono messo a controllare di nuovo tutti i nomi e tutte le stringhe. Nessun miglioramento.
A quel punto ho preso il contenuto della cartella attributes e l'ho messo dentro la mia cartella e rimettendo il valore $this->tpl_folder = 'prova';  . La chiamata continuava a funzionare. Convinto di aver risolto il problema ho cancellato il contenuto del nuovo form.tpl appena copiato e l'ho pulito lasciandoci soltanto, di nuovo, le due righe di qua sopra:

{extends file="helpers/form/form.tpl"}

test

 

Il file non veniva più caricato, ergo c'è qualcosa che deve essere contenuto per forza nel file per far sì che venga considerato buono. Tagliando una parte alla volta alla fine ho scoperto che la view del form deve contenere PER FORZA un determinato blocco, altrimenti viene brutalmente scartata come se non esistesse ed al suo posto viene caricata  la view default. Questo blocco è:

 

{block name="input_row"}     {/block}

 

 

La mia view alla fine appariva così:

 

{extends file="helpers/form/form.tpl"}

 

{block name="input_row"}
     test
{/block}
 
E come potete immaginare viene visualizzato il form wrapper ed al suo interno soltanto la scritta test. Questo blocco può anche non contenere niente, ma ci deve essere, altrimenti il sistema, per lo meno la versione che ho io (1.6.0.9), non prende proprio in considerazione quella dannata view!

A quel punto sono andato avanti perchè, una volta scoperto come funziona dovevo fare in modo che cliccando nella tab creata da me nel menù admin si visualizzasse non una tabella ma una view personalizzata.

Ho scoperto di avere bisogno di valorizzare un funzione initContent, ovvero la prima funzione che viene caricata (diversamente viene ereditata dalla classe AdminController):

    public function initContent() {
        if ($this->display == 'add') {
            $this->display = 'list';
        } else{
          $this->content = $this->initMain();
          } 
 
        return parent::initContent();
    }
 
    public function initMain() {
        $this->tpl_view_vars = array(
      
         ****** array di variaibli da passare alla view *****
 
        );
 
        $this->toolbar_scroll = false;
        $this->base_tpl_view = 'main.tpl'; // nome della view
 
        $this->content .= parent::renderView();
 
        return $this->content;
    }

 

 

Dentro prova e dentro la cartella helpers (che avevo già) ho creato la cartella view e ci ho messo dentro un file index.php e main.tpl  con dentro queste righe

{extends file="helpers/view/view.tpl"}
{block name="override_tpl"}
 
    ciao sono la view custom
 
{/block}

Refresh della pagina e come per magia mi è stata stampata una pagina bianca con dentro "ciao sono la view custom". Ma che fatica!!!

Edited by subbisci (see edit history)
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...