Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

Smarty PHP Nested foreach loop

Posted on 2009-05-13
3
Medium Priority
?
1,655 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 111

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

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

Question has a verified solution.

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

Author Note: Since this E-E article was originally written, years ago, formal testing has come into common use in the world of PHP.  PHPUnit (http://en.wikipedia.org/wiki/PHPUnit) and similar technologies have enjoyed wide adoption, making it possib…
Part of the Global Positioning System A geocode (https://developers.google.com/maps/documentation/geocoding/) is the major subset of a GPS coordinate (http://en.wikipedia.org/wiki/Global_Positioning_System), the other parts being the altitude and t…
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.
Suggested Courses

879 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