Een lijst met berichten verdeel ik over kolommen,

<?php
echo '<table><tr>';
$teller = 0;
$aantal = count($result);
foreach($result as $row) {
echo '<td>';
echo $row['bericht'];
echo '</td>';
$teller++;
if((($teller % 4) == 0) and ($aantal > $teller)) {
echo '</tr><tr>';
}
}
echo '</tr></table>';
?>

Is het mogelijk om rijen om en om te wisselen met 3 en 4 kolommen?

Dus
bericht1 bericht2 bericht3
bericht4 bericht5 bericht6 bericht6
bericht7 bericht7 bericht8

Hoe krijg ik bovenstaande voor elkaar?

En is het mogelijk om de lege 4de plek van de rij met 3, op te vullen met standaardbericht?

Dus
bericht1 bericht2 bericht3 standaardbericht
bericht4 bericht5 bericht6 bericht6
bericht7 bericht7 bericht8 standaardbericht

Ik hoop dat jullie me verder kunnen helpen.
Alvast bedankt
Wil je alleen het 6e bericht (ongeacht de inhoud) wel 2 kolommen geven?

2 manieren: colspan="2" in je HTML.
Of empty-cells in CSS.

Ik zou persoonlijk voor de eerste gaan, omdat je tabel dan overal even breed is (en dus geen gat komt).

En als je zeker te weten 4 kolommen weet: schrijf het per <tr> even statisch uit in je loop.
En soms vervang je de inhoud, anders niet.

Laat eens zien welke PHP-code je hebt gemaakt met de tips die ik je hierboven gaf.
Als HTML zou het er zo uit moeten zien,

<table width="200" border="1">
<tr>
<td>&nbsp;</td>
<td colspan="2">&nbsp;</td>
<td colspan="2">&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td colspan="2">&nbsp;</td>
<td colspan="2">&nbsp;</td>
<td colspan="2">&nbsp;</td>
</tr>
<tr>
<td>&nbsp;</td>
<td colspan="2">&nbsp;</td>
<td colspan="2">&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td colspan="2">&nbsp;</td>
<td colspan="2">&nbsp;</td>
<td colspan="2">&nbsp;</td>
</tr>
</table>

En dan in een loop.

De 2de <tr> is simpel,

<?php
echo '<table><tr>';
$teller = 0;
$aantal = count($result);
foreach($result as $row) {
echo '<td colspan="2">';
echo $row['bericht'];
echo '</td>';
$teller++;
if((($teller % 3) == 0) and ($aantal > $teller)) {
echo '</tr><tr>';
}
}
echo '</tr></table>';
?>

Maar hoe combineer ik de 1ste <tr> en de 2de in één loop.
Probeer dit eens:

<?php
echo '<table><tr>';
$teller = 0;
$aantal = count($result);

foreach($result as $row)
{
// raise teller
$teller++;

// if $i is odd: 2 colspan on last thing
$colspan = 1;
if($teller % 2 == 0 AND $teller % 3 == 0)
{
$colspan = 2;
}

// echo the row, with right colspan
echo '<td colspan="' . $colspan . '">' . $row['bericht'] . '</td>';

// end the row (table-row) accordenly
if($teller % 3 == 0 OR $teller == $aantal)
{
echo '</tr><tr>';
}
}

// end the table
echo '</tr></table>';
?>

Mocht het 4-3-4-3-4 zijn etc, zet dan $teller dan op 1 i.p.v. 0.
1 rij met 3 berichten en 1 rij met 4 berichten en dat om en om.
Net zo lang de database leeg is.

Je krijgt dan een bakstenen muur met op iedere baksteen een bericht
Aha, zie mijn vorige bericht (net gewijzigd).
Bedankt Eddy,

ik ben een stuk verder hiermee.
met teller op 1 krijg ik dit,
<table>
<tr>
<td colspan="1">bericht 1</td>
<td colspan="1">bericht 2</td>
<td colspan="1">bericht 3</td>
</tr>
<tr>
<td colspan="1">bericht 4</td>
<td colspan="2">bericht 5</td>
<td colspan="1">bericht 6</td>
<td colspan="1">bericht 7</td>
</tr>
<tr>
<td colspan="1">bericht 8</td>
</tr>
<tr>
<td colspan="1">bericht 9</td>
</tr>
</table>
Mmmm dat zit hem waarschijnlijk in de % 3.
Zet die teller weer terug op 0.
En verander regel 13 naar:

<?php
if(($teller+1) % 2 == 0 AND $teller % 3 == 0)
?>

[size=xsmall]Toevoeging op 16/11/2012 21:40:34:[/size]

Oftewel: ga zelf eens even wat spelen.
Met deze kom ik het dichste bij,
<?php
$teller = 1;

if(($teller+1) % 2 == 0 AND $teller % 3 == 0)

if($teller % 4 == 0 OR $teller == $aantal)
?>

<table>
<tr>
<td colspan="1">bericht 1</td>
<td colspan="2">bericht 2</td>
<td colspan="1">bericht 3</td>
</tr>
<tr>
<td colspan="1">bericht 4</td>
<td colspan="1">bericht 5</td>
<td colspan="1">bericht 6</td>
<td colspan="1">bericht 7</td>
</tr>
<tr>
<td colspan="2">bericht 8</td>
</tr>
<tr>
<td colspan="1">bericht 9</td>
</tr>
</table>

Er staan maar 9 berichten in de database.
Ik ga morgen even testen met meer berichten (moet nu helaas naar m'n werk)

Ik ben in ieder geval een heel stuk verder. Bedankt
Verhoogd $teller++ as $column == 2
Probeer eens.

[size=xsmall]Toevoeging op 17/11/2012 08:35:59:[/size]

Nee anders.
Die -1 bij $teller weg.
Die %3 wordt %4
Waar je $columns =2 doet doe je $teller++;
Bedankt voor de moeite Eddy
Maar trapsgewijs en om en om, lukt niet met tabellen.
Wat ik ook probeer. Niet het gewenste resultaat.

Ben nu overgestapt naar div's

Ga proberen rij om rij "margin-left:"
Zodat bijv de oneven rijen verspringen naar rechts
Achtergrondplaatje van de overkoepelende div is dan de muur.

<?php
echo '<div style="background: url(/afbeeldingen/muur.png) repeat-y; max-width: 800px; border:1px solid black; margin: 0; padding: 0;">';

$teller = 0;
$aantal = count($result);
foreach($result as $row) {
echo '<div style="float: left;">';
echo ' <div style="width: 172px; height: 56px;>' . $row['bericht'] . '</div>';
echo '</div>';
$teller++;
}
echo '<div style="clear: left;"></div>';
echo '</div>';
?>

Reageren