2016-09-19 1 views
-1

Im Bau eines kleinen Browser-basierte Leinwand-Spiel. Ich bin mit Javascript und jQuery gut, aber ich habe nur mittelmäßige Erfahrung mit PHP und vor allem das Erstellen von Webseiten basierend auf PHP.Erstellen einer HTML-Seite mit PHP

Was im Moment geschieht, überprüft $_GET, um einige Datenbankdaten abzurufen. Abhängig von diesen Daten möchte ich "einzigartige" HTML-Seiten erstellen.

Zum Beispiel: Ich habe eine Seite namens createGame.php, die überprüft, ob ein Spieler in einem Spiel ist.

Wenn er ist, möchte ich eine Tabelle ausfüllen und anzeigen.

meine php:

<?php 
    $gamedata = someObject // basicly the entire gamedata, playerIds, subObjects, a bunch of database data clumped together. 

    if ($gamedata ->playerHasJoined()){ 
     $table = // code here to create a unique table element 
    } 
    ?> 

    <body> 
    <div> 
     <?php echo $table ?> 
    </div> 
    </body> 

Nun, im Grunde ist meine Frage: Wie kann ich "beste" das Tabellenelement aufbauen? muss ich tun:

$table = "<table>"; 
$table .= "<tr><th>Im the Header</th></tr>"; 
$table .= "do this 50 times more"; 

Oder gibt es einen besseren Weg, um ein Element zu schaffen, basierend auf meine $gamedata Variable? Oder sollte ich einen anderen Weg nutzen, um meine HTML-Seite zu erstellen?

danke

+0

Kann nützlich sein, um uns zu sagen, was in '$ gamedata' ist, also haben wir eine Idee von den Daten, die Sie verarbeiten – RiggsFolly

+0

Werfen Sie einen Blick auf diese Antworten http://programmers.stackexchange.com/questions/159529/how- to-structure-template-system-using-plain-php –

+1

Ihre Frage ist eher breit und wahrscheinlich meinungsbezogen. Allerdings und für meine * "2 Cent" *; Sie könnten Include für das HTML-Markup verwenden und einfach Variablen verwenden, die dort eingefügt werden, wo sie angezeigt werden sollen. Aber Ihr * "tun Sie das 50-mal mehr" * ist unklar, was das halten soll. Sie könnten dafür wahrscheinlich eine 'foreach' verwenden, und wenn das die Daten der db-Spalte (n) enthalten soll. –

Antwort

1

jetzt rechts scheint es, wie Sie alle html gleich am Anfang erstellen möchten, und drucken Sie dann einfach die ganze Seite. Was ich stattdessen tun würde, ist das Erstellen aller Textbausteine ​​(der Code, der gleich bleibt, egal was in der Antwort ist) und dann Zeug auf der ganzen Seite Echo.

Beispiel:

<body> 
    <?php 
     $array = ['One', 'Two', 'Three']; 
    ?> 
    <ul> 
     <?php 
      foreach($array as $item) { 
       echo "<li>" . $item . "</li>"; 
      } 
     ?> 
    </ul> 
</body> 

Wenn Sie etwas komplexere tun ich Sie raten würde einen Vorlage-Engine wie Zweig (http://twig.sensiolabs.org/) zu verwenden, um das Leben leichter für sich selbst zu machen.

1

Sie etwas tun können, wie es

<table> 
    <tr> 
     <?php 
     $header = array_keys($_GET); 
     for ($x=0; $x<count($header); $x++) { 
     ?> 

     <th><?=$header[$x]?></th> 

     <?php 
     } 
     ?> 
    </tr> 
    </table> 
1

der beste Weg, um eine Template-Engine zu verwenden, wie Smarty ist, oder Twig Wahrscheinlich.

Hier ist, wie es mit Zweig getan wird:

require_once '/path/to/vendor/autoload.php'; 

$loader = new Twig_Loader_Filesystem('/path/to/templates'); 
$twig = new Twig_Environment($loader, array(
    'cache' => '/path/to/compilation_cache', 
)); 

$rows = fetch_an_array_from_database(); 

echo $twig->render('index.html', [ 'table_rows' => $rows ]); 

wo '/path/to/vendor/autoload.php' eine Datei von Composer erzeugt wird.

index.html:

<table> 
{% for row in table_rows %} 
<tr> 
    <td>Name</td><td>{{ row.name }}</td> 
    <td>Age</td><td>{{ row.age }}</td> 
    <!-- etc. --> 
</tr> 
{% endfor %} 
</table> 
Verwandte Themen