2016-10-02 5 views
0

Ich habe etwas HTML in einer Variablen, die ich 4 Mal pro Zeile loopen möchte. Ich mache zuerst ein paar Fragen. In einem bekomme ich die Anzahl der Zeilen und speichere sie in einer Variablen. In der Sekunde suche ich die zugehörigen Daten, die ich anzeigen muss.Hinzufügen von 4 Artikel pro Zeile in PHP

$results = $dbCon->query("SELECT * FROM table WHERE status = '1' ORDER BY id DESC LIMIT $start, $limit"); 
$total = mysqli_num_rows($results); 
$res = $dbCon->query($results); 
$data = $res->fetch_assoc(); 
$link = $data['link']; 
$title = $data['title']; 
$image = $data['image']; 
$imgAlt = $data['imgAlt']; 

Drittens, ich speichere, was ich in einer Variablen anzeigen möchte. Die HTML-I auf die Anzeige der Planung sieht so etwas wie dieses

$html = printf("<div style=\"text-align:center; max-width:270px; white-space:normal; word-wrap:break-word; border-left:1em solid transparent; border-right:1em solid transparent; text-overflow: ellipsis; float:left;\"> 
     <a href=\"%s\"> 
      <img style=\"width:270px; height:232px; margin-bottom:40px; border-radius:45px; -moz-border-radius:45px; -webkit-border-radius:45px; box-shadow:0px 0px 3px #fff; -moz-box-shadow:0px 0px 3px #fff; -webkit-box-shadow:0px 0px 3px #fff;\" src=\"images/recentshoots/%s\" alt=\"%s\" /> 
      <p>%s</p> <br /></a> 
     </div>", $link, $image, $imgAlt, $title); 

Als nächstes würde ich die 20 Artikel mögen Schleife pro Seite in 4 Artikel pro Zeile. Hier habe ich einige Probleme. Mein Problem ist, dass die Anzahl der Zeichen im Titel $ immer unterschiedlich ist, so dass das Layout auseinander bricht. Zuerst versuchte ich einen einfachen Weg mit CSS und PHP, um ein str_pad() zu tun, aber es scheint nicht mit leeren Räumen zu arbeiten. Ich bekomme immer ein paar Container, die größer sind als andere, die meine Reihe verzerren. Also habe ich einige Nachforschungen in dieser Plattform gemacht, um nach einem anderen Beispiel zu modellieren.

Ich habe Probleme mit dem, was ich gefunden habe, weil die Beispiele, die ich gesehen habe, fehlende Informationen haben, die ich verstehen muss, wie ich meine eigenen ändern kann. Ich habe es mit foreach und while-Schleifen gesehen. Kann mir jemand helfen, einen Weg zu finden, dies besser zu verstehen?

Wie kann ich die abgerufenen Daten loopen und sicherstellen, dass nur 4 pro Zeile auf einer Seite mit 20 Elementen vorhanden sind? Vielen Dank für deine Hilfe. Ich fing mit so etwas an

$startingPoint = 1; 
echo "<div class=\"row\">"; 
foreach($startingPoint < 4){ //this foreach is not even starting the right way, how can I fix this? 
    echo $html; 
} 

Kann ich eine foreach verwenden? oder eine while-Schleife? oder Do-While?

Welches ist die beste Lösung und der schnellste oder effizienteste Weg? Je kürzer der Code, desto besser.

Antwort

0

Sie können versuchen, diese Code. Voll Paginierung und Aussicht:

Beispiel: index.php

<?php 
    //get page id for pagination and limit query 
    $limit = 4; 
    if(isset($_GET["page"])) 
     $page = intval($_GET["page"]); 
    else 
     $page = 1; 

    $total = $limit * $page; 
    $start = $total - $limit; 

    //GEt data from database. I have used mysqli for testing purpose. 
    $conn=mysqli_connect("localhost","root","","dbname"); 
    $result = mysqli_query($conn, "SELECT * FROM table WHERE status = '1' ORDER BY id DESC LIMIT $start, $limit"); 
    $total = mysqli_num_rows($result); 
?> 


    <!--Your html code what you want--> 
    <table> 
     <tr> 
      <th>Title</th> 
      <th>Image</th> 
      <th>Link</th> 
     </tr> 
     <!--loop inside html--> 
     <?php while($data = mysqli_fetch_assoc($result)) { ?> 
      <tr> 
       <td><?php echo $data['title']; ?></td> 
       <td><img src="<?php echo $data['image']; ?>" alt="<?php echo $data['imgAlt']; ?>"> </td> 

       <td><a href="<?php echo $data['link']; ?>">Link</a></td> 
      </tr> 
     <?php } ?> 
    </table> 

<?php 
    /**======== Pagination Url generate=============*/ 
    $totalPages = ceil($total/$limit); 
    if($page <=1){ 
     " <span style='font-weight: bold;'> < Prev </span> "; 
    }else{ 
     $j = $page - 1; 
     echo " <a href='index.php?page=$j'>Prev</a> "; 
    } 

    for($i=1; $i <= $totalPages; $i++){ 
     if($i<>$page){ 
      echo " <a href='index.php?page=$i'>$i</a> "; 
     }else{ 
      echo " <span style='font-weight: bold;'>$i</span> "; 
     } 
    } 
    if($page == $totalPages){ 
     echo " <span style='font-weight: bold;'>Next ></span> "; 
    }else{ 
     $j = $page + 1; 
     echo " <a href='index.php?page=$j'>Next</a></span> "; 
    } 
?> 
+0

Ich mag was du hier hast, ich habe nur ein paar Fragen. Gibt es eine Möglichkeit, über einen Messenger zu sprechen? Meine Paginierungsklasse sieht ungefähr so ​​aus, wenn sie aufgerufen wird. '$ start = $ Paginierung-> prePagination();' und ich füge es direkt über meine SQL-Abfrage. Das Limit der Seiten wird mit $ limit festgelegt. Irgendwelche Vorschläge oder Änderungen an Ihrem Beispiel, die mir weiterhelfen könnten? Da das Beispiel für die Paginierung groß ist, ist es jedoch einfach, es zu pflegen und wiederzuverwenden. Vielen Dank für Ihre Zeit. –

+0

Auch wo ist der beste Ort, um den HTML-Code "

' and the closing "
" hinzuzufügen? Sollte ich ihn in die $ html-Variable einfügen? Oder vor der while-Anweisung? Ich habe so viele Beispiele gesehen, dass es verwirrend wird, wer die richtige oder bessere Version ist –

+1

Meine Freude @RookieRecruits.Sorgen Sie nicht, Sie können verwenden, was immer Sie wollen, dass PHP erlauben, nicht verwirrt werden. Ich habe erneut bearbeitet und initialisieren eine Tabelle für Ihr besseres Verständnis. Sie können '

' verwenden Sie können Ihre benutzerdefinierte Paginierungsfunktion verwenden, aber die Funktion enthält immer diese Art von Code, die ich zur Verfügung gestellt habe.Sie können Ihre eigene Abfrage-Methode verwenden und immer Daten werden gleich Sortierung können Sie innerhalb SqlQuery tun (Reihenfolge von). – AHJeebon

2

Foreach-Schleifen werden für Array-Datentypen verwendet, während eine While-Schleife für Boolesche Werte und mehr verwendet werden kann.

Was Sie suchen, ist eine for-Schleife, mit der Sie einen Zähler setzen können, und jedes Mal, wenn die Schleife ausgeführt wird, wird ein Zähler hinzugefügt. Sobald der Ausdruck erfüllt ist, wird die Schleife beendet.

for($i = 1; $i == 4; $i++) 
{ 
    echo 'Loop ' . $i . ': This will loop 4 times'; 
} 

Allerdings könnten Sie Ihre foreach beheben, indem diese Schnipsel mit:

$startingPoint = [1,2,3,4]; 
foreach($startingPoint as $start) 
{ 
    echo $html; 
} 

Da es 4 Elemente innerhalb des Arrays sind, wird die Schleife 4 mal weiter.

Ihr SQL kehrt somit mehr als eine Reihe von Daten $ Daten zu schaffen mehrdimensionale werden, Ihre Schleife daher möglicherweise nicht, wie seine geschrieben, könnte man dies versuchen:

for($i = 1; $i >= $limit; $i++) 
{ 
    print_f(<!-- html here -->, $data[$i]['column']); 
} 
+0

Sollte die html "Zeile" Klasse innerhalb dieser Schleife sein oder außerhalb? Wo öffnet und schließt man am besten das Tag? gerade jetzt liegt es außerhalb des "printf". Sollte es innerhalb des "printf" sein? Danke für Ihre Hilfe. –

+0

Naja, vorausgesetzt, eine Zeile trennt jede Schicht von HTML, sollte es ein deliterer des $ html sein, also innerhalb der Schleife gehen, bevor und nachdem Sie Ihr HTML drucken. @RookieRecruits – KDOT

+0

Wenn ich Sie richtig verstehe, sollte die Zeile die ersten 4 Iterationen des HTML-Codes von den folgenden 4 und so weiter trennen, bis es insgesamt 20 oder 5 Zeilen erreicht. –

Verwandte Themen