nach $ anzahl einträge aus der daten bank div einfügen

hups1803

Erfahrenes Mitglied
hallo ,

hab da mal wieder ein problem,

ich möchte einen Datenbank abruf machen, der nach 4 einträgen ein neues div einfügt.

Bissle kompliziert zu beschreiben.

Ich habe einen Bilder Slider der links die Überschriften anzeigt und rechts den Inhalt, das ganze ist so aufgebaut :

PHP:
<div class="cn_page">
							<div class="cn_item">
								inhalt1
							</div>
							<div class="cn_item">
								inhalt2
							</div>
							<div class="cn_item">
								inhalt3
							</div>
				</div>

wenn sich jetzt 10 Einträge in der db befinden soll er nach den 4 Eintrags-abruf wieder den code von oben ausfürhen so das sich im array nun 2 *"<div class='cn_page'>" mit 4 einträgen und 1 eintrag dann mit den Rest ausgibt

hab es so versucht :
PHP:
$classes = array("selected"); 
$classes2 = array("style='display:block;'", ""); 
$classes3 = array("style='top: 5px;'", ""); 
$classes4 = array("<div class='cn_page'>");
$classes5 = array("</div>");
 		
$folio .= '
<div class="cn_wrapper">
';

$folio .= '<div id="cn_list" class="cn_list">';
$anzahl_der_spalten = 4;
$a = 0; 
$sql3 = "SELECT `e107_compactnewspreviewer`.* FROM `e107_compactnewspreviewer`WHERE  visible='1' ORDER BY id DESC;";
$res3 = mysql_query($sql3) ;

while($row1 = mysql_fetch_array($res3))
{
	if($a == $anzahl_der_spalten) //sonst wären es ja vier spalten
  {
    $folio .=  '<div class="cn_page"'.$classes2[$a].'>';
    $a = 1;
  }
  
  $folio .=  ''.$classes4[$a].'
  <div class="cn_item '.$classes[$a].'">
				<h2>'.$row1['pg_title'].'</h2>
				<p>Tutorial on how to create a gallery in polaroid style</p>
			  </div>'.$classes5[$a].'';
			  
if($a == $anzahl_der_spalten) //sonst wären es ja vier spalten
  {
    $folio .=  '</div>';
    $a = 0;
  }			  
  $a++;
} 
$folio .= '</div>';
leider macht er erst nach den 4 eintrag ein div mit der klasse cn_page

er soll aber alle in ein <div class='cn_page'> einpacken,
das soll dann so aussehen,
wobei noch zusätzlich das erste div einen style braucht.

PHP:
<div class="cn_page"style="display:block;">
							<div class="cn_item">
							inhalt1
							</div>
							<div class="cn_item">
							inhalt2
							</div>
							<div class="cn_item">
							inhalt3
							</div>
							<div class="cn_item">
							inhalt4
							</div>
				</div>
				<div class="cn_page"style="display:block;">
							<div class="cn_item">
							inhalt1
							</div>
							<div class="cn_item">
							inhalt2
							</div>
							<div class="cn_item">
							inhalt3
							</div>
							<div class="cn_item">
							inhalt4
							</div>
				</div>

kan mal Bitte jemand Helfen
 
Dein Problem ist, dass du $a dauernd neu setzt. Wenn $a=4 ist, setzt du $a auf 1 und prüfst nacher nochmals ob es 4 ist und setzt dann $a auf 0 -> mööööp: Nach dem ersten if ist $a=1. Er kommt also nie in der gleichen Schleife in den 2ten if.

Einfach durchzählen und Prüfen obs durch 4 teilbar ist
PHP:
$counter = 0;
while($row1 = mysql_fetch_array($res3)){
	$counter++;
	//Mittels mod prüfen, ob der Counter durch 4 Teilbar ist
	$flag = ($counter % 4 == 0);
	//Div öffnen
	if($flag) $folio .=  "<div class='cn_page' {$classes2[$a]}>";
	//TODO: Normaler Code
	//Div schliessen
	if($flag) $folio .=  '\<div>';
}
 
hallo,
Danke für deine Hilfe.

hab es mal so ausprobiert:

PHP:
$counter = 0;
while($row1 = mysql_fetch_array($res3)){
    $counter++;
    //Mittels mod prüfen, ob der Counter durch 4 Teilbar ist
    $flag = ($counter % 4 == 0);
    //Div öffnen
     if($flag) $folio .=  "<div class='cn_page' style='display:block;'>";
		//TODO: Normaler Code

			$folio .= 	'
			<div class="cn_item '.$classes[$counter].'">
			<h2>'.$row1['pg_title'].'</h2>
				<p>Tutorial on how to create a gallery in polaroid style</p>
			  </div>';
	//Div schliessen
     if($flag) $folio .=  '</div>';
		  

}

leider gibt er es so im Browser wieder:

PHP:
<div class="cn_page"style="display:block;">
             <div class="cn_item">
              inhalt1
            </div>
</div>
	<div class="cn_item">
	inhalt2
	</div>
	
	<div class="cn_item">
	inhalt3
	</div>
	
	<div class="cn_item">
	inhalt4
	</div>
	
 <div class="cn_page"style="display:block;">
             <div class="cn_item">
              inhalt1
            </div>                            
</div>

er soll es aber so machen wie oben .

PHP:
<div class="cn_page"style="display:block;">

             <div class="cn_item">
              inhalt1
            </div>

			<div class="cn_item">
			inhalt2
			</div>
			
			<div class="cn_item">
			inhalt3
			</div>
			
			<div class="cn_item">
			inhalt4
			</div>
</div>	
 <div class="cn_page"style="display:block;">

             <div class="cn_item">
              inhalt1
            </div>

			<div class="cn_item">
			inhalt2
			</div>
			
			<div class="cn_item">
			inhalt3
			</div>
			
			<div class="cn_item">
			inhalt4
			</div>
</div>
u.s.w
 
Ah, ich seh das Poblem. Der Div-Ende-Tag soll natürlich nicht im gleichen durchgang gesetzt werden. Hier ein anderer, einfacherer Ansatz.
Schreibe alle Einträge formatiert in ein Array, teile diesen in 4-er Teile und schreibe dann den Inhalt jeders Teils in die div-Tags

PHP:
$rows=array();
$counter = 1;
while($row1 = mysql_fetch_array($res3)){
    $rows[] = "
            <div class='cn_item {$classes[$counter++]}'>
            <h2>{$row1['pg_title']}</h2>
                <p>Tutorial on how to create a gallery in polaroid style</p>
              </div>";
}
//Den Array mit allen Einträgen in 4er-Packete teilen 
$splits = array_chunk($rows, 4);
foreach($splits as $split){
    echo "<div class='cn_page' style='display:block;'>".implode($split)."</div>";
}
 
wow cool soweit perfect nun soll er aber nur bei den ersten
Code:
<div class='cn_page' >
style='display:block;' machen sonst nicht

und bei den ersten

Code:
<div class="cn_item ">

den tag auf
Code:
class="cn_item  selected""

um selected erweitern .

aber nur im 1 Block

sorry war mein fehler im beispiel

so soll es aussehen

PHP:
<div class="cn_page" style="display:block;">
					<div class="cn_item selected">
						<h2>Polaroid Photobar Gallery with jQuery</h2>
						<p>Tutorial on how to create a gallery in polaroid style</p>
					</div>
					
					<div class="cn_item">
						<h2>Full Page Image Gallery with jQuery</h2>
						<p>Another tutorial on how to make a full page image gallery with some jQuery</p>
					</div>
					<div class="cn_item">
						<h2>Collapsing Site Navigation with jQuery</h2>
						<p>This tutorial shows how to create a stylish sliding site navigation</p>
					</div>
					<div class="cn_item">
						<h2>Thumbnails Navigation Gallery</h2>
						<p>This gallery will show images in a scrollable menu navigation</p>
					</div>
				</div>
				<div class="cn_page">
					<div class="cn_item">
						<h2>Music Portfolio Template</h2>
						<p>A template for a music portfolio website with an HTML5 audio player</p>
					</div>
					<div class="cn_item">
						<h2>Related Posts Slide Out Boxes</h2>
						<p>Show users more of your articles with these slide out boxes</p>
					</div>
					<div class="cn_item">
						<h2>Latest Tweets Tooltip with jQuery</h2>
						<p>A Plugin for showing the latest tweets with a certain word in your article</p>
					</div>
					<div class="cn_item">
						<h2>Slide Down Box Menu with jQuery and CSS3</h2>
						<p>A menu with a nice effect</p>
					</div>
				</div>

aber super das du mir hilfst.

fettes Danke
 
Zuletzt bearbeitet:
ich glaube ich hab es jetzt .
Ist der code so ok ?

Anzeige stimmt soweit jetzt

PHP:
$sql3 = "SELECT `e107_compactnewspreviewer`.* FROM `e107_compactnewspreviewer`WHERE  visible='1' ORDER BY id DESC;";
$res3 = mysql_query($sql3) ;
$rows=array();
$counter = 1;
$co = 0;
while($row1 = mysql_fetch_array($res3)){
	$classes = array("selected","");
	 
    $rows[] = "
            <div class='cn_item $classes[$co]'>
            <h2>{$row1['pg_title']}</h2>
                <p>Tutorial on how to create a gallery in polaroid style</p>
              </div>";
    $co++;          
}
$co = 0;
//Den Array mit allen Einträgen in 4er-Packete teilen 
$splits = array_chunk($rows, 4);
foreach($splits as $split){
	$classes2 = array("style='display:block;'", ""); 
    $folio .="<div class='cn_page' $classes2[$co] >".implode($split)."</div>";
$co++;
}

vielen dank
 
Zurück