Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: Sito in PHP "alla CMS"

  1. #1

    Sito in PHP "alla CMS"

    per per il mi sito uso joomla, ma visto che ho fatto un corso di php vorrei provarmelo a fare da solo.
    una delle cose che m più mi lasciano perplesso è come emulare certi comportamenti di joomla ( o dei cms in generale).
    in questi cms esiste una sola pagina da modificare.
    modifichi quella e le modifichi tutte.
    ed inoltre anche lo stile è uguale ed automatico per tutte le pagine.
    se io nn volessi creare una pagina nuova a mano per ogni articolo come potrei fare?

    nn so se sono stato chiaro.

  2. #2
    Utente di HTML.it L'avatar di Luke70
    Registrato dal
    Jul 1999
    Messaggi
    767
    stai parlando dei template.

    Come è stato suggerito in diverse discussioni ti suggerisco di non utilizzare i classici template engine (smarty ecc) ma di sfruttare il php.

    Ti suggerisco una lettura interessante che spiega bene come puoi fare

    http://www.massassi.com/php/articles/template_engines/

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    35
    Devi usare un "pattern" , in questo caso l'MVC dovrebbe andar bene al caso tuo.
    Cosa è un pattern MVC ? Il pattern non è nient'altro che una suddivisione logica e successivamente anche fisica dell'applicativo web (o sito) , come funziona:
    Il sito viene richiamato sempre da un'unica pagina (detto dispatcher), genericamente la pagina index.php. Dentro la pagina index.php dovrai richiamare tramite require o include le parti di sito che tu vuoi tramite passaggio dei parametri e quindi "assemblare" il sito al volo per ogni parametro differente.
    Mi spiego meglio. Supponiamo di avere una index strutturata banalmente in questo modo:
    Codice PHP:
    <?
            
        
    require_once('connessione.php');  //esempio includi un file che esegue la connessione    


        
        /**********************************************
        *  dispatch della vista
        ***********************************************/
        
    if (!isset($_REQUEST['mod']))
            
    $_REQUEST['mod'] = 'homepage';    //assegnamo un modulo di default ne caso dovessimo richiamare la index.php senza parametri    
        
        
    $inc_file 'moduli/'.$_REQUEST['mod']'.inc';
    //suppongo che i moduli siano salvati nella cartella moduli con estenzioni ".inc" (opzionale)
        
    if (file_exists($inc_file))
            require_once(
    $inc_file);
        else 
            die(
    "redirect pagina errore");                
        
    ?>
    cosa fa questa pagina :
    1) include il file per la connessione al database
    2)controlla se è stato richiesto un modulo specifico, in caso contrario assegnamo un modulo di default
    3)controlliamo se il modulo esiste e lo includiamo

    nel file "moduli/homepage.inc" metterai il codice che svolge le operazioni per quella determinata pagina (esempio prendere le prime 4 news dal database)

    Adesso per quanto riguarda la modifica del template, io uso generalmente un template engine chiamato smarty che ti permette di usare html e codice php in maniera più trasparente.Però questo è un discorso più approfondito.

    Se tu non volessi usare un template engine semplicemente devi includere nell'index.php una pagina html di base aggiungendo, per esempio , al codice precedente :
    Codice PHP:
        require_once('base.php'); 
    e in base.php creare la struttura principale del sito, esempio:
    Codice PHP:
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <link href="css/style.css" rel="text/stylesheet"/>
    <title>Insert title here</title>
    </head>
    <body>
       <div id='container'>
           <div id='menu'>  /*qui metti il codice del menu*/  </div>
           <div id='contenuto'>
             <?php require_once($template_da_includere); ?>
           </div>
       </div>
    </body>
    </html>

    come puoi vedere nel div#contenuto eseguo una require_once da una variabile che settiamo nel modulo.

    Nel modulo , quindi, da qualche parte definiremo il percorso del template del file da inlcudere , esempio:
    Codice PHP:
    <?php
         
    //file moduli/homepage.inc
         
         //esegue operazioni varie
         
        
    $template_da_includere "templates/homepage.php"
    ?>
    come puoi vedere suppongo che nella cartella templates (dove inseriremo tutti i template dei moduli) ci sia il file homepage.php che conterrà il codice htmle della visualizzazione della homepage.

    per chiamare un'altro modulo potrai farlo tramite passaggio parametri nel browser, quindi un link. Esempio : 'index.php?mod=prodotti', che ti richiamerà il modulo prodotti.inc .

    Ovviamente il discorso è un pò più complesso e ho cercato di spiegarlo a linee grossolane il tutto. Ti consiglio di iniziare con qualche framework php per comprendere meglio il funzionamento come cakephp o codeigniter.

    Spero di non averti complicato la vita

  4. #4
    @Luke70
    mi sono letto l'articolo ma nn conoscendo l'inglese alla perfezione nn ho capito una cosa: nell'articolo mi pare di capire che nn si fa uso di template engine.
    i file .tpl allora che sono?

    @Djdrake
    ottima spiegazione anche se li per li ci sono rimasto.
    una prima cosa che nn ho capito è che cosa sono i file .inc.

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    35
    l'estensione .inc è opzionale , genericamente viene usato per i file che si includono. Ma puoi benissimo usare .php in questo caso.

    Serve solo per identificare la tipologia di file ma il contenuto è sempre uguale al php.Serve per ricordarti che quello è il modulo e genericamente i file .tpl sono i template.

    Detto in poche parole è come se il .inc fosse la mente e il .tpl il corpo. Il primo esegue le operazione, il secondo è quello che visualizzi.

  6. #6
    Utente di HTML.it L'avatar di Luke70
    Registrato dal
    Jul 1999
    Messaggi
    767
    Infatti,
    l'idea è di utilizzare solo php senza appesantire i template con del pseudocodice.

  7. #7
    Codice PHP:
     <?              require_once('connessione.php');  //esempio includi un file che esegue la connessione                /**********************************************     *  dispatch della vista     ***********************************************/     if (!isset($_REQUEST['mod']))         $_REQUEST['mod'] = 'homepage';    //assegnamo un modulo di default ne caso dovessimo richiamare la index.php senza parametri              $inc_file = 'moduli/'.$_REQUEST['mod']'.inc'; //suppongo che i moduli siano salvati nella cartella moduli con estenzioni ".inc" (opzionale)     if (file_exists($inc_file))         require_once($inc_file);     else          die("redirect pagina errore");                      ?>
    c'è una cosa che nn ho ben capito:
    mi hai detto che questa pagina (che quella principale) controlla se è richiesto un modulo specifico (dove per modulo si intende un qualsiasi altro codice php scritto da un'altra parte giusto?).
    ma se avessi più moduli?
    magari io voglio far vedere le prime 10 news in alto e nel centro altra roba presa da un'altra tabella.

    ad esempio:
    Codice PHP:
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <link href="css/style.css" rel="text/stylesheet"/> <title>Insert title here</title> </head> <body>    <div id='container'><div id="header">qui metto le news</div>        <div id='menu'>  /*qui metti il codice del menu*/  </div>        <div id='contenuto'>          <?php require_once($template_da_includere); ?>     qui metto i messaggi degli utenti   </div>    </div> </body> </html>

  8. #8
    scusate:
    Codice PHP:
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
    <html> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
    <link href="css/style.css" rel="text/stylesheet"/>
     <title>Insert title here</title> 
    </head> 
    <body>   
     <div id='container'>
    <div id="header">qui metto le news</div>       
     <div id='menu'>  /*qui metti il codice del menu*/  </div>       
     <div id='contenuto'>          
    <?php require_once($template_da_includere); ?>     qui metto i messaggi degli utenti   
    </div>   
     </div> 
    </body>
     </html>

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    35
    se devono stare sempre nella struttura principale puoi sempre fare operazioni nell'index.php per ricavarti quello che ti serve per poi usarlo nel base.php

    esempio
    Codice PHP:
    <?
            
        
    require_once('connessione.php');  //esempio includi un file che esegue la connessione    


        
        /**********************************************
        *  dispatch della vista
        ***********************************************/
        
    if (!isset($_REQUEST['mod']))
            
    $_REQUEST['mod'] = 'homepage';    //assegnamo un modulo di default ne caso dovessimo richiamare la index.php senza parametri    
        
        
    $inc_file 'moduli/'.$_REQUEST['mod']'.inc';
    //suppongo che i moduli siano salvati nella cartella moduli con estenzioni ".inc" (opzionale)
        
    if (file_exists($inc_file))
            require_once(
    $inc_file);
        else 
            die(
    "redirect pagina errore");                
        
        
    //qui esegui delle operazioni per prenderti le prime 10 notizie o tutto quello che vuoi
        
    $arr_notizie //esegui la query per ottenere le notizie e successivamente in base.php avrai sempre a disposizione in ogni pagina $arr_notizie
     

        
    require_once('base.php'):
    ?>
    e quindo qui
    Codice PHP:
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
    <html> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
    <link href="css/style.css" rel="text/stylesheet"/>
     <title>Insert title here</title> 
    </head> 
    <body>   
     <div id='container'>
    <div id="header">
       <?php foreach($arr_notizie as $notizia):?>
           //visualizzi $notizia 
        <?php endforeach ?>
    </div>       
     <div id='menu'>  /*qui metti il codice del menu*/  </div>       
     <div id='contenuto'>          
    <?php require_once($template_da_includere); ?>     qui metto i messaggi degli utenti   
    </div>   
     </div> 
    </body>
     </html>

  10. #10
    ok comincio un pò a capire.
    devo fare qualche prova però perchè per me nn è ancora così intuitivo.
    per ora grazie!!!!

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.