Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [PHP-HTML] Dividere PHP da HTML

    Buon giorno.
    Ho una classe con funzioni che interagiscono con il DB.
    Fin'ora, ho sempre incluso l'HTML all'interno di queste funzioni, per visualizzarne il risultato.
    Ora vorrei, lavorare in maniera diversa questi dati.
    Ho due pagine, function.class.php e template.function.php.
    Nella prima ho:
    Codice PHP:
    public function get_organizzazione($request=0){        $query$this->connect->query("SELECT a.*         FROM ".$GLOBALS['table']." as a INNER JOIN ".tb_menu." as b ON a.id_menu_p = b.id        WHERE a.id_menu_s=".$request." AND ".$this->http_host()."=1 ORDER BY a.id_posizione");
            
    $this->conta mysqli_num_rows($query);        # vado ad interagire con la funzione in template.function.php get_table_25, get_table_2 etc etc        $table_name = "get_table_$request";        if ($this->conta > 0)        {            # controllo se in template.function.php è presente la funzione che voglio richiamare            if (function_exists($table_name)) {                 return $table_name($query);            }            mysqli_free_result($query);        }        else{            echo report_error();        }    } 
    Invece nella template.function.php, richiamo la funzione passandogli $query
    Codice PHP:
    function get_table_25($q){        $testo ="<table class='tb_zone' summary='Questa tabella indica telefono e posta elettronica'>    <caption>Questa tabella indica telefono e posta elettronica.</caption>    <tr>    <th id='header1'>Struttura aziendale</th>    <th id='header2'>Telefono</th>    <th id='header3'>Indirizzi (e-mail,pec)</th>    </tr>";    while ($rows mysqli_fetch_object($q))     {        $testo.= "<tr>            <td headers='header1'>".$rows->struttura_aziendale."</td>            <td headers='header2'>".$rows->tel1."</td>            <td headers='header3'>".$rows->email."</td>
                            </tr>"
    ;        $count++;    }    $testo.= "</table>";    echo $testo;} 
    Cosa voglio ottenere?
    Vorrei far in modo di riutilizzare la struttura di questa tabella, per altre funzioni, senza dover creare N tabelle HTML.

    Capire, come poter aggiungere o rimuovere i tag <th> e <td> a seconda della necessità.
    Cioè, avere una tabella HTML dinamica.

    E' possibile?
    Grazie mille.

  2. #2
    Non capisco come mai, non mi indenta il codice e il perché se clicco su modifica messaggio mi restituisce la textarea vuota senza contenuto.

  3. #3
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Credo ti basti parametrizzare la funzione:
    Codice PHP:
    function get_table($q$headers$fields){
       
    $testo "...";
       foreach(
    $headers as $header){
          
    $testo .= "<th>$header</th>";
       }
       
    $testo .= '...';
       while(
    $row = ...){
          
    $testo .= '<tr>';
          foreach(
    $fields as $field){
             
    $testo .= '<td>'.$row->$field .'</td>';
          }
          
    $testo .= '</tr>';
       }
       echo 
    $testo;

    Cmq, perchè non sfrutti l'essere un template engine di php ?
    Es. potresti crearti un file "table.tpl" con dentro il codice di sopra, senza la variabile $testo:
    codice:
    <table...>
       <tr>
      <?php foreach($headers as $header): ?>
          <th><?php echo $header ?></th>
      <?php endforeach ?>
      </tr>
      ...tutto il resto ..
    </table>
    nella tua funzione get_table
    Codice PHP:
    function get_table($q$headers$fields){
        
    ob_start();
        include(
    'table.tpl');
        return 
    ob_get_clean(); // oppure echo

    e se poi ci rifletti bene, potresti renderla generica (basta che passi i parametri in modo congruo) e renderizzare qualunque cosa perchè poi cosa e come visualizzare sta nel tpl
    Ultima modifica di boots; 10-04-2018 a 12:37

  4. #4
    sto facendo in questo modo.
    nella pagina template.function.php creo la funzione, che richiamerò all'interno di altre funzioni
    Codice PHP:
    function HTML_TABLE($arrTH,$caption){    $testo ="<table class='tb_zone' summary='Questa tabella indica ".$caption."'>    <caption>".$caption."</caption>    <tr>";    for($i=0;$i<=count($arrTH)-1;$i++){        $testo .="<th id='header".$i."' style='width:25%'>".$arrTH[$i]."</th>";    }    $testo .="</tr>";    return $testo;}

    // e poi
    function get_table_25($q,$arrTH,$caption){    $last = array();    $count "";    echo HTML_TABLE($arrTH,$caption);    $testo "";    while ($rows mysqli_fetch_object($q)){/*...*/}        $testo.= "</table>";    echo $testo;} 
    Invece nella function.class.php creo l'array $arrTH e la variabile $caption da passare
    Codice PHP:
    public function get_consulenti_collaboratori($request=0){    if($this->tableExists($request)!==false){        $query$this->connect->query("SELECT a.*         FROM ".$GLOBALS['table']." as a INNER JOIN ".tb_menu." as b ON a.id_menu_p = b.id        WHERE a.id_menu_s=".$request." AND ".$this->http_host()."=1");
            
    $this->conta mysqli_num_rows($query);        # vado ad interagire con la funzione in template.function.php get_table_25, get_table_2 etc etc        $table_name = "get_table_$request";        if ($this->conta > 0)        {            # controllo se in template.function.php è presente la funzione che voglio richiamare            if (function_exists($table_name)) {                 $arrTH = array("Nominativo","Ruolo","CV","Compensi","Scadenza");                $caption = "consulenze esterne";                return $table_name($query,$arrTH,$caption);            }            mysqli_free_result($query);        }        else{            echo report_error();        }    }} 
    Sembra che cosi funziona.
    Domanda: è il metodo migliore o ce ne sono altri?
    Grazie come sempre.

  5. #5
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Io preferisco sempre separare il più possibile l'html (la presentazione) dal php (la logica) sfruttando un meccanismo di template (senza scomodare smarty, twig e compagnia bella) messo a disposizione da php stesso.
    Magari nel tuo caso separerei di netto la parte di interrogazione del db da quella poi di visualizzazione.

  6. #6
    Ciao ti ringrazio per l'interesse.
    Puoi farmi un esempio per favore, come fai te di solito?

  7. #7
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Più o meno l'esempio l'ho fatto sopra:
    Codice PHP:
    <?php
    $consulenti 
    $database->getConsulenti();
    ...
    ?>
    <html>
    ...
    <div>
    <?php echo render('tabella_cosulenti.tpl', array('title'=>'...' 'headers'=>array(...), 'data'=>$consulenti)); ?>
    </div>
    </html>
    Più o meno una cosa del genere. con render() come la funzione che ho postato su.
    Cmq ormai io uso un framework...

  8. #8
    Buon giorno, il primo esempio da te postato, l'ho visto solo sta mattina, forse HTML.IT aveva qualche problema.

    Quindi nel file .tpl scrivo questo codice:
    Codice PHP:
    <table...>
       <tr>
      <?php foreach($headers as $header): ?>
          <th><?php echo $header ?></th>
      <?php endforeach ?>
      </tr>
      ...tutto il resto ..
    </table>
    Dove in "...tutto il resto..." metto il "while".

    Poi posso includere il file.tpl oppure utilizzare la funzione render come da te descritto.
    Farò qualche prova e ti faccio sapere.
    Dato che è una cosa nuova per me, mi documento meglio, prendendo spunto dal tuo consiglio.
    Ti ringrazio davvero tanto.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.