Jeremy
Jeremy

Reputation: 2536

Populating database result into Divs of two columns

I am using CodeIgniter to map my database result into divs of two columns

What i am trying to achieve this end result, the db->result may end up with even or odd number of rows. Regardless, it should display the result properly.

<!-- Features -->
  <div class="row">
    <div class="feature col-sm-12 col-md-6 clearfix">
      <h3>Heading 1</h3>
      <p class="small">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
    </div>
    <div class="feature col-sm-12 col-md-6 col-md-offset-0 clearfix">
      <h3>Heading 2</h3>
      <p class="small">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat..</p>
    </div>
  </div><!-- END -->

  <!-- Features -->
  <div class="row">
    <div class="feature last col-sm-12 col-md-6 clearfix">
      <h3>Heading 3</h3>
      <p class="small">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat..</p>
    </div>
    <div class="feature last col-sm-12 col-md-6 col-md-offset-0 clearfix">
      <h3>Heading 4</h3>
      <p class="small">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat..</p>
    </div>
  </div><!-- END -->

This is what i have done so far, however the result isn't exactly like what i expect it to be.

<?php
    $row = array();
    $count = count($services);
    for($x=0; $x<=$count; $x++){
      for($i=0; $i<$count; $i+=2){
        echo '<div class="feature col-sm-12 col-md-6 clearfix">';
        echo '<h3>'.$service[$i]->name.'</h3>';
        echo htmlspecialchars_decode($service[$i]->description);
        echo '</div>';
      }

      for($i=1; $i<$count; $i+=2){
        echo '<div class="feature col-sm-12 col-md-6 col-md-offset-0 clearfix">';
        echo '<h3>'.$service[$i]->name.'</h3>';
        echo htmlspecialchars_decode($service[$i]->description);
        echo '</div>';
      }
    }
  ?><!-- END -->

Can anyone suggest me to the right direction?

Upvotes: 0

Views: 65

Answers (1)

cpilko
cpilko

Reputation: 11852

How about this:

//Setup some variables
$format = <<<EOF
    <div class="%s">
       <h3>%s</h3>
       <p class="small">%s</p>
    </div>
EOF;
$left_class = 'feature col-sm-12 col-md-6 clearfix';
$right_class = 'feature col-sm-12 col-md-6 col-md-offset-0 clearfix';
$out = '';
$i=0;

//Loop through the results
foreach ($services as $service) {
   $class = $right_class;
   if ($i%2 == 0 ) {
      $out .= "<!-- Features -->\n".'<div class="row">'."\n";
      $class = $left_class;
   }
   $out .= sprintf ( $format, 
                     $class, 
                     $service->name, 
                     htmlspecialchars_decode($service[$i]->description)
                   );
   if ($i%%2 != 0) $out .= "</div><!-- END -->\n\n";
   $i++;
}

//Write the output
echo $out;

This assumes your database query result is in $services (You're using both $service and $services above.) and it is iterable with a foreach.

Upvotes: 1

Related Questions