Returning a partial list

16 posts by 2 authors in: Forums > CMS Builder
Last Post: April 19, 2010   (RSS)

By dennisoneil - April 16, 2010

I have if currently setup in three categories:

<2500
2500-3500
>3500

If I did an "if <2500, else" I'd get all the other plans in the "else". What I want is to say:

If some plans <2500 exist, do this
If none <2500 exist, do this
If some plans 2500-3500 exist, do this
If none 2500-3500 exist, do this
If some plans >3500 exist, do this
If none >3500 exist, do this


All of these are displayed on the same page.

Thoughts?

-Dennis

By dennisoneil - April 16, 2010

Hi Jason,

Unfortunately, if doesn't seem to be working.

Below is the code I'm using above the doctype:

<?php
require_once "/home/kaine2/public_html/cmsAdmin/lib/viewer_functions.php";

list($communitiesRecords, $communitiesMetaData) = getRecords(array(
'tableName' => 'communities',
'where' => whereRecordNumberInUrl(1),
'limit' => '1',
));
$communitiesRecord = @$communitiesRecords[0]; // get first record

list($homesRecords, $homesMetaData) = getRecords(array(
'tableName' => 'homes',
'orderBy' => 'size',
));

?>


And here's what's in the page:

<?php
$square_foot[0]=0;
$square_foot[1]=0;
$square_foot[2]=0;

foreach($homesRecords as $record){
if($record['size']<2500)
$square_foot[0]++;
else if($record['size']>=2500 && $record['size']<=3000 )
$square_foot[1]++;
else if($record['size']>=3000)
$square_foot[2]++;
}
?>


<li><a id="community-floorplans-button" href="#"><span class="grey">Available Plans</span></a></li>
<ul class="community-floorplans-list">
<?php foreach($homesRecords as $record): ?>
<?php if($square_foot[0]==0): ?>
<?php elseif($record['size']<2500): ?>
<li><a id="small-homes-button" href="#">2,500 sq ft and below</a></li>
<?php break; ?>
<?php endif ?>
<?php endforeach ?>
<?php foreach($homesRecords as $record): ?>
<?php if($square_foot[1]==0): ?>
<?php elseif($record['size']>=2500 && $record['size']<=3000): ?>
<li><a id="large-homes-button" href="#">2,000 to 3,000 sq ft</a></li>
<?php break; ?>
<?php endif ?>
<?php endforeach ?>
<?php foreach($homesRecords as $record): ?>
<?php if($square_foot[2]==0): ?>
<?php elseif($record['size']>3000): ?>
<li><a id="larger-homes-button" href="#">3,000 sq ft and up</a></li>
<?php break; ?>
<?php endif ?>
<?php endforeach ?>
</ul>


Currently ALL of the <li>'s are being displayed despite the filter attempt.

You can see what I mean here:
http://208.79.239.28/~kaine2/calvert-county-new-communities.php?Covenant-Creek-1

If you click on the "Available Plans" button, then the "2500 sq ft and below" you'll see it empty. I was wanting to use this filter to remove the <li> altogether if there were no plans in that category.


Thanks again for all of your help.

Please let me know if you see an error I've made.
Thanks.

Re: [dennisoneil] Returning a partial list

By Jason - April 19, 2010

Hi,

Okay, I have a better understanding of what you're trying to do now. We can try this, just changing our code slightly:
<ul class="community-floorplans-list">
<?php if($square_foot[0]!=0): ?>
<li><a id="small-homes-button" href="#">2,500 sq ft and below</a></li>
<?php endif ?>
<?php if($square_foot[1]!=0): ?>
<li><a id="large-homes-button" href="#">2,000 to 3,000 sq ft</a></li>
<?php endif ?>
<?php if($square_foot[2]!=0): ?>
<li><a id="larger-homes-button" href="#">3,000 sq ft and up</a></li>
<?php endif ?>
</ul>


So we're just determining whether or not to display a button, so we won't need the foreach loops we were using. Give that a try.

If it doesn't work, put in this piece of code for testing:

<?php
echo $square_foot[0]."<br/>;
echo $square_foot[1]."<br/>;
echo $square_foot[2]."<br/>;
?>


Let me know what that outputs (should be 3 numbers, each on a separate line).

Hope this helps.
---------------------------------------------------
Jason Sauchuk - Project Manager
interactivetools.com

Hire me! Save time by getting our experts to help with your project.
http://www.interactivetools.com/consulting/

By dennisoneil - April 19, 2010

Hi Jason,

After no success with the revised code, but a successful "test" with the code you provided, I realized the error I was making. I was also filtering my results on the page by an second criteria. There WERE homes that fit the (<2500, etc) size criteria, but none were displayed because I was also filtering based on the presence of a price. I revised my page with the code below and its now working.


<?php
$square_foot[0]=0;
$square_foot[1]=0;
$square_foot[2]=0;

foreach($homesRecords as $record){
if($record['size']<2500)
$square_foot[0]++;
else if($record['size']>=2500 && $record['size']<=3000 )
$square_foot[1]++;
else if($record['size']>=3000)
$square_foot[2]++;
}
?>
<?php $field="price_".$_SERVER['QUERY_STRING']; ?>


<ul class="community-floorplans-list">
<?php foreach($homesRecords as $record): ?>
<?php if($square_foot[0]==0): ?>
<?php elseif($record['size']<2500 && $record[$field] != ""): ?>
<li><a id="small-homes-button" href="#">2,500 sq ft and below</a></li>
<?php break; ?>
<?php endif ?>
<?php endforeach ?>
<?php foreach($homesRecords as $record): ?>
<?php if($square_foot[1]==0): ?>
<?php elseif($record['size']>=2500 && $record['size']<=3000 && $record[$field] != ""): ?>
<li><a id="large-homes-button" href="#">2,500 to 3,000 sq ft</a></li>
<?php break; ?>
<?php endif ?>
<?php endforeach ?>
<?php foreach($homesRecords as $record): ?>
<?php if($square_foot[2]==0): ?>
<?php elseif($record['size']>3000 && $record[$field] != ""): ?>
<li><a id="larger-homes-button" href="#">3,000 sq ft and up</a></li>
<?php break; ?>
<?php endif ?>
<?php endforeach ?>
</ul>


Thanks so much for all your help.

-Dennis

Re: [dennisoneil] Returning a partial list

By Jason - April 19, 2010

Awesome! Glad it all works. :)
---------------------------------------------------
Jason Sauchuk - Project Manager
interactivetools.com

Hire me! Save time by getting our experts to help with your project.
http://www.interactivetools.com/consulting/