Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    15

    Scegliere dinamicamente quali classi istanziare (PHP + Smarty)

    Ciao a tutti,
    il problema che vi sottopongo è un po' molto complesso ma sicuramente per qualcuno sarà banalissimo ^_^

    Sto realizzando un sito in PHP con template Smarty.
    Ho creato diversi moduli (Classi accessorie per es "RSS", "Newsletter" etc).

    Per come ho pensato il sistema, ogni classe ha, nel costruttore, un "demone" in ascolto per catturare i suoi GET o POST, quindi, necessariamente, ogni classe deve essere istanziata.

    ## pseudo, molto pseudo codice :-)

    for(tutte_le_classi_da_attivare)
    new Classe$i;



    Il problema sorge, però, nell'utilizzo.

    1. Innanzitutto dovrei assegnare ad una variabile PHP il riferimento alla relativa classe.
    (potrei ovviare al problema assegnano il riferimento a variabili "protette" che hanno lo stesso nome della classe.. anche se scadrebbe un po' nella sicurezza..)

    ## pseudo, molto pseudo codice :-)

    for(tutte_le_classi_da_attivare)
    $newsletter = new Newsletter();

    2. Successivamente dovrei, però, assegnare ad una variabile Smarty il risultato del metodo chiamato (metodo che dipende strettamente dal template incluso)

    $smarty->assign('newsletterIscritti', $newsletter->elencoIscritti());

    3. Tutto questo è possibilissimo farlo.. ma mi troverei, ad ogni pagina del sito, ad istanziare n classe (necessario in qualsiasi caso, credo), assegnare n variabili PHP vincolate al nome della relativa classe, istanziare (n * ogni_metodo_classe) variabili Smarty e sapere, a priori, in ogni template, quale metodo ho chiamato..

    Non è affatto facile da spiegare.. e immagino neppure da capire, nel complesso..
    Addirittura il titolo del post non è stato troppo semplice da definire XD
    Ma confido ci siano diverse soluzioni e, addirittura, percorsi più semplici da intraprendere..

    Grazie in aticipo a tutti,
    Mauro

  2. #2
    iniziere con il chiarire questo punto:

    Per come ho pensato il sistema, ogni classe ha, nel costruttore, un "demone" in ascolto per catturare i suoi GET o POST, quindi, necessariamente, ogni classe deve essere istanziata.
    cosa intendi per demone? perchè instanzi una classe se non la usi?

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    15
    Ciao maje,
    intanto grazie per aver risposto :-)

    Faccio un esempio di come ho ragionato.

    Prendiamo, per esempio, la classe Newsletter.
    Ogni pagina del sito web mostra il form dal quale è possibile iscriversi alla newsletter, quindi, l'utente, potrà sottomettere il modulo da ogni pagina.

    In ogni pagina, dunque, dovrà esserci un "demone" (così l'ho chiamato) che controllerà se il modulo è stato sottomesso o no. ( if(isset($_GET['email'])) o if(isset($_POST['email'])) ).

    Inizialmente creavo un file con una infinita serie di if isset... per ogni possibile parametro.

    Successivamente ho pensato di inserire i controlli in ogni costruttore per ogni classe, quindi, nel caso della newsletter:

    codice:
    class Newsletter(){
        public function __construct(){
            if(isset($_POST['email'])){
                ...
            }
        }
    }
    So che non è intelligentissima come idea ma è l'unica che mi è venuta in mente..
    Sono comunque felicissimo di poterla cambiare con una soluzione più corretta sotto tutti i punti di vista..

    Mauro

  4. #4
    è un comportamente che dovrebbe gestire la classe newsletter. Ragionando ad oggetti, potresti fare una sorta di placeholder (caricato in tutte le pagine in cui deve essere disponibile )che potrebbe creare un oggetto di tipo Newsletter: questo oggetto gestirà il comportamento per quanto riguarda il submit del relativo form.

    In questo modo risulta più pulito e sopratutto riutilizzi codice: per farlo più carino, ma puoi farlo in un secondo momento, potresti inserirci Ajax per evitare il fastidioso reload della pagina.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    15
    Si, l'idea sarebbe di far gestire tutto alle rispettive classi senza sporcare il codice.
    Quindi, creando una nuova classe, così come si gestisce la visualizzazione del modulo si gestisce anche l'invio di GET o POST.

    Il problema però è che nei template non vorrei usare altro che HTML (o Smarty Language)..

    Come posso specificare quale metodo chiamare dal template incluso?

  6. #6
    dovresti adottare ad esempio l'MVC, ti aiuterebbe a chiarire i vari passaggi: ti consiglierei di provare qualche framework, tipo Zend Framework o Symfony, per vedere come viene strutturato il codice. Sono entrambi due ottimi strumenti, e possono chiarirti non poco le idee: tra le altre cose entrambi supportano smarty

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    15
    Credo proprio tu abbia ragione.
    Anche se, praticamente, non so se potrò usare framework di questo genere, l'osservare e capire il loro funzinonamento (soprattutto quello dell'MVC in generale) sono sicuramente un'ottima scelta che non avevo considerato.

    Grazie mille Maje per i preziosi consigli ^_^
    A presto,
    Mauro

  8. #8

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.