If any item's checkbox is true

8 posts by 3 authors in: Forums > CMS Builder
Last Post: August 11, 2011   (RSS)

By rez - August 8, 2011 - edited: August 8, 2011

Each item has a "new_item" checkbox. how do I only show this list and the surrounding elements if any items checkbox is marked true? If there are no "new_items" I dont need to show anything, including the titles and rule.

list($itemsRecords, $itemsMetaData) = getRecords(array(
'tableName' => 'items',
));

<?php IF THERE ARE ANY RECORDS MARKED TRUE LIST THEM IF NOT, DONT SHOW ANYTHING BELOW ?>
<h2 class="title1">latest items</h2>
<img src="images/rule_8.jpg" width="270" height="40" alt="party supplies" />
<ul class="departmentlinks">
<?php foreach ($itemsRecords as $record): ?>
<?php if($record['new_item']):?>
<li><a href="<?php echo $record['_link'] ?>"><?php echo $record['name'] ?></a>
<?php endif?><?php endforeach ?>
</ul>
<?php END IF THERE ARE ANY RECORDS MARKED TRUE LIST THEM IF NOT, DO NOTHING?>


may have something to do with a where statement in the top code but i don't know how to put this together so even my title1 doesnt show if nothing is true.

Re: [rez] If any item's checkbox is true

By Jason - August 8, 2011

Hi,

First thing you would do is add "new_item" to your where clause, to only return records where the check box has been checked. Like this:

list($itemsRecords, $itemsMetaData) = getRecords(array(
'tableName' => 'items',
'where' => "new_item = '1'",
));


You can then only output your block if records were returned like this:

<?php if ($itemsRecords): ?>

<h2 class="title1">latest items</h2>
<img src="images/rule_8.jpg" width="270" height="40" alt="party supplies" />
<ul class="departmentlinks">
<?php foreach ($itemsRecords as $record): ?>
<?php if($record['new_item']):?>
<li><a href="<?php echo $record['_link'] ?>"><?php echo $record['name'] ?></a>
<?php endif?><?php endforeach ?>
</ul>

<?php endif ?>


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/

Re: [davidcmsb] If any item's checkbox is true

By Jason - August 8, 2011

Hi,

You're right, using 'where' => "new_item = '1'" will only return records where the check box has been checked. In the if statements, we're using the entire record set:


<?php if ($itemsRecords): ?>

This means that we'll only execute the if any records where returned.

Are you using this inside of a foreach loop? If you are, you can get rid of the if statement entirely since the foreach loop will only execute on records with the box checked.

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/

Re: [Jason] If any item's checkbox is true

By davidcmsb - August 8, 2011

Thank you, Jason.

But I'm confused and don't understand why you used the entire record set, as you say.

Why do that if the top code's Where clause is limiting output to show only checked records and that's the only records the poster said he wanted outputted and displayed?

Wouldn't you only need the getRecords array top code with that Where clause that limits displayed records to those with the box checked, and then as you say just use in the bottom code a foreach loop, without surrounding that as you did with the call of the entire record set (i.e., the <?php if ($itemsRecords): ?> which you added)?

Thanks for clarifying this and helping me understand.

David

Re: [davidcmsb] If any item's checkbox is true

By Jason - August 9, 2011

Hi David,

I think there was a misunderstanding as to where you wanted to use this code. Using MySQL to limit the records returned to only records where the check box has been checked means that you can do 1 of 2 things, depending where you need to control output:

Case 1: If you need to control the output for a single block of content that is not inside the foreach loop, you can use the <?php if ($itemsRecords):?> method. This means that we only want to output a block of content if records were returned (ie, 1 or more records exist with the check box checked).

Case 2: If the condition was meant for inside your foreach loop, then you can remove the if statement entirely. It won't have any use, since there would only be records to loop through if they had the box checked.

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

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

Re: [Jason] If any item's checkbox is true

By rez - August 11, 2011 - edited: August 11, 2011

If understand what he might be confused about, I think this is another way of saying what Jason says in #1.

IN MY CASE, using only the "where" statement at the top, and removing what's in red would put this on my viewer page:



<h2 class="title1">latest items</h2>
<img src="images/rule_8.jpg" width="270" height="40" alt="party supplies" />
<ul class="departmentlinks">
</ul>


which would result in displaying the "latest items" title and a rule under it, along with an empty ul (probably adding white space) even though there may be no "new_items" checked because these things are outside the if loop / check.

Wrapping that whole thing in the additional if statement also hides the title and rule if there are no "new_items" checked.

I totally suck at getting to the point, asking and answering. lol. I think that may help though?

Re: [rez] If any item's checkbox is true

Thanks, Jason and Rez, that was helpful, don't know right now if I fully get it, but I think when I study this more I should. Rez, that was helpful and helped me better understand things here.