[PHP] Alle output via functies of niet?

Pagina: 1
Acties:

Onderwerpen


  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Ik ben pas begonnen aan het bouwen van een veilingsite (had enkele dagen geleden al een post hierover). Ik probeer nu de conventies die gebruikt gaan worden, op een rijtje te krijgen.

Als sinds ik programmeer (vanaf eind 1999, voornamelijk ASP; ben nieuw met PHP) heb ik twee manieren om includes vorm te geven. Ik heb nooit gekozen; pakte wat het snelst werkte, maar wil nu wel eens gestructureerd aan de slag :+ . Stel dat ik een include heb waarin een tabelletje gegenereerd wordt met de "specials" van de dag.

Ik kan deze include, laten we zeggen _specials.php, als volgt opbouwen:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
/* Print a list of items that are on special. */
$qid = db_query("SELECT id, name, description, price FROM products WHERE on_special = 1");
 
?>

<table cellpadding="5" cellspacing="1" border="0">
  <tr>
    <td class="label">Specials</td>
  </tr>
  <tr>
    <td class="normal">
      <?php 
      
      while ($r = db_fetch_object($qid))
      { 
      
      ?>

      <p><a href="<?=$CFG->wwwroot?>/auctions/details.php?id=<?=$r->id?>"><?=$r->name?></a>
      <br><?=$r->description?>
      <br>$<?=$r->price?>
      <br>[<a href="<?=$CFG->wwwroot?>/auctions/bids.php?id=<?=$r->id?>">+ Bid on this item</a>]</p>

      <? 
      
      } 
      
      ?>
    </td>
  </tr>
</table>


of op deze manier:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/* Print a list of items that are on special. */
function print_on_specials()
{
    global $CFG;
    $qid = db_query("SELECT id, name, description, price FROM products WHERE on_special = 1");

    print '<table cellpadding="5" cellspacing="1" border="0">
             <tr>
               <td class=label nowrap>On-Special</td>
             </tr>
             <tr>
               <td class=normal>';
               
    while ($r = db_fetch_object($qid))
    {
    print '<p><b><a href="'.$CFG->wwwroot.'/auctions/details.php?id='.$r->id.'">'.$r->name.'</a></b>
           <br>'.$r->description.'
           <br>'.$r->price.'
           <br>[<a href="'.$CFG->wwwroot.'/auctions/bids.php?id='.$r->id.'">+ Bid on this item</a>]';
    }

    print '</td></tr></table>';
}


Mijn vraag is: wat is jullie voorkeur? Wat mij betreft zitten er voor -en nadelen aan elk van de manieren. Zo vind ik een functie overzichtelijker, maar wanneer je veel HTML en slechts weinig PHP code hebt, ziet het er zo overbodig uit. Bovendien is de HTML net wat minder snel aan te passen.

[ Voor 21% gewijzigd door Reveller op 18-12-2003 01:24 ]

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

persoonlijk werk ik met zo weinig mogelijk PHP in m'n templates.

• Ik heb een globale $_TPL var
• die kan ik bijvoorbeeld vullen met:
PHP:
1
2
3
$_TPL['onload'] = "alert('woei!');"
$_TPL['script'] =  "function foo(bar) { alert(bar); }";
$_TPL['body'] = "<table><tr><td>woei</td></tr></table>";


In de tempalte zelf zet je dan op de goede plekken alleen:

<?=$_TPL['body'];?>, etc :)

Stop uploading passwords to Github!


Verwijderd

Ik heb zelf zoveel mogelijk in functies gestopt, zo blijft de pagina layout makkelijker aanpasbaar, maar de vraag is natuurlijk hoevaak je dat gaat doen.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Probeer de daadwerkelijke layout te scheiden van de rest.

Ikzelf gebruik (tenminste toen ik nog wat met php deed ;) ) meestal een appart php bestand met daarin het ophalen van de data. Dit werd dan in een object gestopt, en dit object werd uitgelezen op een manier vergelijkbaar als de eerste. Groote voordeel is ten eerste dat je je layout gescheiden hebt van de rest. Verder kun je je html gewoon met een willekeurige html editor bewerken. Een ander voordeel is dat je op deze manier je eigen php code heel simpel kunt integreren in al bestaande projecten.

Kortom: De eerste oplossing met als toevoeging dat je de daadwerkelijke query (en het uitlezen ervan) in een ander bestand in een apparte functie zet.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'