Solved

Smarty PHP Nested foreach loop

Posted on 2009-05-13
3
1,602 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 108

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

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

These days socially coordinated efforts have turned into a critical requirement for enterprises.
Introduction This article is intended for those who are new to PHP error handling (https://www.experts-exchange.com/articles/11769/And-by-the-way-I-am-New-to-PHP.html).  It addresses one of the most common problems that plague beginning PHP develop…
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…
The viewer will learn how to create a basic form using some HTML5 and PHP for later processing. Set up your basic HTML file. Open your form tag and set the method and action attributes.: (CODE) Set up your first few inputs one for the name and …

920 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

Need Help in Real-Time?

Connect with top rated Experts

17 Experts available now in Live!

Get 1:1 Help Now