Solved

Smarty PHP Nested foreach loop

Posted on 2009-05-13
3
1,605 Views
Last Modified: 2012-05-06
I am developing a site using the Smarty template engine and I need to display a list of links grouped in categories like this:

Category 1
     link
     link
     link
Category 2
     link
     link
     link
 

I am using the following code, but it keeps returning a "Query was empty" error.  Any ideas?
// PHP CODE
 
$rs_linkcatlist = mysql_query("SELECT * FROM tbl_link_category ORDER BY linkcat_position ASC");
while($linklist = mysql_fetch_array($rs_linkcatloop))
{
 $rs_linklist = mysql_query("SELECT dir_id, dir_status, dir_name, dir_url, dir_description, dir_link_library FROM tbl_company_directory WHERE dir_active = 1 AND dir_status >  1 AND dir_link_library = '" . $linklist['linkcat_id'] . "' ORDER BY dir_name ASC");
 while($links = mysql_fetch_array($rs_linklist))
 {
   // Organize an array
   $links_array[$linklist['linkcat_id']][] = $links;
  }
 $linkcats[] = $linklist;
}
$smarty->assign(array(
 'linkcats' => $linkcats,
 'links_array' => $links_array
 )
);
 
 
// TPL CODE
{foreach from=linkcats item=loopcats}
  <div class="section_border_bottom">
    <a name="{$loopcats.dir_link_library}" id="{$loopcats.dir_link_library}"></a>
    <h2>{$loopcats.linkcat_name}</h2>
    {foreach from=game_array[$loopcats.id] item=looplinks}
      <p><a href="{$looplinks.dir_url}" target="_blank">{$looplinks.dir_name}</a>
      {if $looplinks.dir_status eq 3}
        - <span class="smallfont"><span class="redbold">MARKETING PARTNER</span></span>
      {/if}
      <br />
      {$looplinks.dir_description}</p>
      <p class="right"><a href="#top">Top Of Page</a></p>
    {/foreach}
  </div><!--end section_border_bottom -->
{/foreach}

Open in new window

0
Comment
Question by:aguawebdesign
  • 2
3 Comments
 

Author Comment

by:aguawebdesign
ID: 24381165
JUST NOTICED AN ERROR IN MY .TPL CODE.  CORRECTED CODE IS:

{foreach from=linkcats item=loopcats}
  <div class="section_border_bottom">
    <a name="{$loopcats.dir_link_library}" id="{$loopcats.dir_link_library}"></a>
    <h2>{$loopcats.linkcat_name}</h2>
    {foreach from=links_array[$loopcats.linkcat_id] item=looplinks}
      <p><a href="{$looplinks.dir_url}" target="_blank">{$looplinks.dir_name}</a>
      {if $looplinks.dir_status eq 3}
        - <span class="smallfont"><span class="redbold">MARKETING PARTNER</span></span>
      {/if}
      <br />
      {$looplinks.dir_description}</p>
      <p class="right"><a href="#top">Top Of Page</a></p>
    {/foreach}
  </div><!--end section_border_bottom -->
{/foreach}  


(Still getting the same error though)
0
 
LVL 109

Expert Comment

by:Ray Paseur
ID: 24385172
You need to know if your MySQL queries are working right.  Try changing them so you can see if there are any errors.  See line 3 in the above example.  You might also want to test the number of rows that are returned from the queries.

HTH, ~Ray
$rs_linkcatlist = mysql_query("SELECT * FROM tbl_link_category ORDER BY linkcat_position ASC");
 
// TEST FOR QUERY COMPLETION
if (!$rs_linkcatlist) die( mysql_error() );
 
// TEST FOR ANY DATA
$nr = mysql_num_rows($rs_linkcatlist);
if (!$nr) die( "NO ROWS" );

Open in new window

0
 

Accepted Solution

by:
aguawebdesign earned 0 total points
ID: 24389810
The MySQL queries were fine.  After combing through the code again I found an error in the php:

while($linklist = mysql_fetch_array($rs_linkcatloop))  SHOULD BE  while($linklist = mysql_fetch_array($rs_linkcatlist))

Also found another error in my .tpl code:

{foreach from=linkcats item=loopcats}  SHOULD BE   {foreach from=$linkcats item=loopcats}
and
{foreach from=links_array[$loopcats.linkcat_id] item=looplinks}  SHOULD BE  {foreach from=$links_array[$loopcats.linkcat_id] item=looplinks}


It's all working perfectly now.
0

Featured Post

NAS Cloud Backup Strategies

This article explains backup scenarios when using network storage. We review the so-called “3-2-1 strategy” and summarize the methods you can use to send NAS data to the cloud

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article discusses how to create an extensible mechanism for linked drop downs.
Since pre-biblical times, humans have sought ways to keep secrets, and share the secrets selectively.  This article explores the ways PHP can be used to hide and encrypt information.
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…
This tutorial will teach you the core code needed to finalize the addition of a watermark to your image. The viewer will use a small PHP class to learn and create a watermark.

825 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question