Sort foreach loop to display records with uploads first

4 posts by 4 authors in: Forums > CMS Builder
Last Post: November 30, 2017   (RSS)

By Mikey - November 30, 2017

Anyone have any suggestions on how to sort records to show those records with uploads first, followed by other records without uploads? I can't use "drag sort" within the CMS.

Is it possible to sort upon // Load records from menu ? Similar to what's shown below?

  // load records from 'menu'
  list($menuRecords, $menuMetaData) = getRecords(array(
    'tableName'   => 'menu',
    'sort'        => 'uploads',
    'loadUploads' => true,
    'allowSearch' => false,
  ));

<?php header('Content-type: text/html; charset=utf-8'); ?>
<?php
  // load viewer library
  $libraryPath = 'cmsb/lib/viewer_functions.php';
  $dirsToCheck = array('/home/directory/html/','','../','../../','../../../');
  foreach ($dirsToCheck as $dir) { if (@include_once("$dir$libraryPath")) { break; }}
  if (!function_exists('getRecords')) { die("Couldn't load viewer library, check filepath in sourcecode."); }

  // load records from 'menu'
  list($menuRecords, $menuMetaData) = getRecords(array(
    'tableName'   => 'menu',
    'loadUploads' => true,
    'allowSearch' => false,
  ));

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <title></title>
  <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
 </head>
<body>

    <h1>Menu</h1>
<?php foreach ($menuRecords as $record): ?>
<?php if ($record['photo']): ?>
      <h1><a href="<?php echo $record['_link'] ?>"><?php echo htmlencode($record['name']) ?></a></h1>
      <?php echo $record['content']; ?><br/>
      Price: $<?php echo htmlencode($record['price']) ?><br/>
      
        <?php foreach ($record['photo'] as $index => $upload): ?>
          <a href="<?php echo $record['_link'] ?>">
              <img src="<?php echo htmlencode($upload['thumbUrlPath3']) ?>" alt="<?php echo htmlencode($upload['info1']) ?>" />
          </a>
        <?php endforeach ?>
        
<?php else: ?>

      <h1><a href="<?php echo $record['_link'] ?>"><?php echo htmlencode($record['name']) ?></a></h1>
      <?php echo $record['content']; ?><br/>
      Price: $<?php echo htmlencode($record['price']) ?><br/>
      
<?php endif; ?>
        
        <hr/>

<?php endforeach ?>

<?php echo poweredByHTML(); ?>

</body>
</html>

Thanks Zicky

By Deborah - November 30, 2017

Hi, Zicky.

There may be a more elegant method, but this is what I would do.

// load records WITH a photo
list($menuRecordsPHOTO, $menuMetaData) = getRecords(array(
'tableName' => 'menu',
'loadUploads' => true,
'allowSearch' => false,
));
// load records WITHOUT a photo
list($menuRecordsNOPHOTO, $menuMetaData) = getRecords(array(
'tableName' => 'menu',
'loadUploads' => true,
'allowSearch' => false,
));

<?php foreach ($menuRecordsPHOTO as $record): ?>
<?php if ($record['photo']): ?>
<h1><a href="<?php echo $record['_link'] ?>"><?php echo htmlencode($record['name']) ?></a></h1>
<?php echo $record['content']; ?><br/>
Price: $<?php echo htmlencode($record['price']) ?><br/>
<?php foreach ($record['photo'] as $index => $upload): ?>
<a href="<?php echo $record['_link'] ?>">
<img src="<?php echo htmlencode($upload['thumbUrlPath3']) ?>" alt="<?php echo htmlencode($upload['info1']) ?>" /></a>
<?php endforeach ?>
<hr>
<?php endif; ?>
<?php endforeach ?>

<?php foreach ($menuRecordsNOPHOTO as $record): ?>
<?php if (!$record['photo']): ?>
<h1><a href="<?php echo $record['_link'] ?>"><?php echo htmlencode($record['name']) ?></a></h1>
<?php echo $record['content']; ?><br/>
Price: $<?php echo htmlencode($record['price']) ?><br/>
<hr>
<?php endif; ?>
<?php endforeach ?>

Hope that helps. :)

~ Deborah

By Toledoh - November 30, 2017 - edited: November 30, 2017

Could you just do 2 loops?

<?php foreach ($menuRecords as $record): ?>
<?php if ($record['photo']): ?>

Show records with images in the order set via CMSB

<?php endif; ?>
<?php endforeach ?>

<?php foreach ($menuRecords as $record): ?>
<?php if (!$record['photo']): ?>

Show records with NO images in the order set via CMSB

<?php endif; ?>
<?php endforeach ?>

Cheers,

Tim (toledoh.com.au)