Solved

Smarty PHP Nested foreach loop

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

Find Ransomware Secrets With All-Source Analysis

Ransomware has become a major concern for organizations; its prevalence has grown due to past successes achieved by threat actors. While each ransomware variant is different, we’ve seen some common tactics and trends used among the authors of the malware.

Join & Write a Comment

Suggested Solutions

Title # Comments Views Activity
Multilanguage Database Design in MySQL 5 35
Time difference 10 35
session dropped in IE 10 20
Editing login page in zencart. 2 14
Deprecated and Headed for the Dustbin By now, you have probably heard that some PHP features, while convenient, can also cause PHP security problems.  This article discusses one of those, called register_globals.  It is a thing you do not want.  …
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.
Learn how to match and substitute tagged data using PHP regular expressions. Demonstrated on Windows 7, but also applies to other operating systems. Demonstrated technique applies to PHP (all versions) and Firefox, but very similar techniques will w…
The viewer will learn how to create and use a small PHP class to apply a watermark to an image. This video shows the viewer the setup for the PHP watermark as well as important coding language. Continue to Part 2 to learn the core code used in creat…

706 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

20 Experts available now in Live!

Get 1:1 Help Now