Go Back   vb.org Archive > vBulletin 4 Discussion > vB4 Programming Discussions
FAQ Community Calendar Today's Posts Search

Reply
 
Thread Tools Display Modes
  #1  
Old 12-21-2009, 10:14 AM
Ghostsuit's Avatar
Ghostsuit Ghostsuit is offline
 
Join Date: Nov 2001
Location: Glasgow, Scotland
Posts: 199
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default Nested Loop with templates

Wonder if anyone can help. What I'm trying to do is show a gig listings but add multiple ticket buying options.

I'm stuck though at the nested part and getting it to display in the template. I'm pretty sure the bit that's wrong is the 1st and 3rd line as if I do it with just the second line I get one link displayed but with this code I get none.

I know it's something simple but I'm new to the way vB4 does stuff.

So any ideas?

Code:
        $templater = vB_Template::create('event_giglistrowticket');
        $templater->register('ticketlink', $linkrow[ticketlink]);
        $event_giglistrowticket .= $templater->render();
Here's the full loop with nesting

Code:
$results = $vbulletin->db->query_read("SELECT date_format(gig.date, '%a %D %b %y') AS gig_date, gig.gigid, venue.venuename AS gig_venuename, gig.title, gig.status, gig.age
FROM gig 
LEFT JOIN venue ON gig.venueid=venue.venueid
WHERE Status='confirmed' AND title != '' AND date  >= ( CURDATE()  ) ORDER BY date ASC");

// Loop through all results
while ($row = $vbulletin->db->fetch_array($results))
{   
    // Generate row html from template
    $templater = vB_Template::create('event_giglistrow');
    $templater->register('gigid', $row[gigid]);
    $templater->register('title', $row[title]);
    $templater->register('venuename', $row[gig_venuename]);
    $templater->register('date', $row[gig_date]);
    $templater->register('age', $row[age]);
    
    $linkresults = $vbulletin->db->query_read("SELECT ticketlink
    FROM ticketlink 
    LEFT JOIN gig ON ticketlink.gigid=gig.gigid
    WHERE ticketlink.gigid=gig.gigid AND ticketlink.gigid = '$row[gigid]'");

    while ($linkrow = $vbulletin->db->fetch_array($linkresults))
    {      
        $templater = vB_Template::create('event_giglistrowticket');
        $templater->register('ticketlink', $linkrow[ticketlink]);
        $event_giglistrowticket .= $templater->render();
    }
    $event_giglistrow .= $templater->render();
}
Reply With Quote
  #2  
Old 12-21-2009, 02:13 PM
Lynne's Avatar
Lynne Lynne is offline
 
Join Date: Sep 2004
Location: California/Idaho
Posts: 41,180
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

You just need to register the array:
PHP Code:
$templater->register('linkrow'$linkrow); 
And now in the template you may use {vb.raw linkrow.ticketlink}
Reply With Quote
  #3  
Old 12-21-2009, 02:52 PM
Ghostsuit's Avatar
Ghostsuit Ghostsuit is offline
 
Join Date: Nov 2001
Location: Glasgow, Scotland
Posts: 199
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Where do I need to put that register line?

Also do I need a separate bit template for the {vb.raw linkrow.ticketlink} or can I jsut include it in the main template?
Reply With Quote
  #4  
Old 12-21-2009, 02:55 PM
Lynne's Avatar
Lynne Lynne is offline
 
Join Date: Sep 2004
Location: California/Idaho
Posts: 41,180
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

In place of this one:
PHP Code:
$templater->register('ticketlink'$linkrow[ticketlink]); 
Then just use the variable {vb.raw linkrow.ticketlink} in the template.
Reply With Quote
  #5  
Old 12-21-2009, 03:06 PM
Ghostsuit's Avatar
Ghostsuit Ghostsuit is offline
 
Join Date: Nov 2001
Location: Glasgow, Scotland
Posts: 199
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

I must be doing something wrong that's giving blank results. .
Reply With Quote
  #6  
Old 12-21-2009, 03:42 PM
Ghostsuit's Avatar
Ghostsuit Ghostsuit is offline
 
Join Date: Nov 2001
Location: Glasgow, Scotland
Posts: 199
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Heres the full page code with the suggested change made.

Code:
<?php

// ####################### SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE);

// #################### DEFINE IMPORTANT CONSTANTS #######################

define('THIS_SCRIPT', 'giglist');
define('CSRF_PROTECTION', true);  
// change this depending on your filename

// ################### PRE-CACHE TEMPLATES AND DATA ######################
// get special phrase groups
$phrasegroups = array();

// get special data templates from the datastore
$specialtemplates = array();

// pre-cache templates used by all actions
$globaltemplates = array('event_giglist',
'event_giglistrow',
'event_giglistrowticket',
);

// pre-cache templates used by specific actions
$actiontemplates = array();

// ######################### REQUIRE BACK-END ############################
// if your page is outside of your normal vb forums directory, you should change directories by uncommenting the next line
// chdir ('/path/to/your/forums');
require_once('./global.php');

// #######################################################################
// ######################## START MAIN SCRIPT ############################
// #######################################################################

$navbits = construct_navbits(array('' => 'Gig List'));
$navbar = render_navbar_template($navbits);

// ###### YOUR CUSTOM CODE GOES HERE #####
$pagetitle = 'Gig List';

// ###### NOW YOUR TEMPLATE IS BEING RENDERED ######
$results = $vbulletin->db->query_read("SELECT date_format(gig.date, '%a %D %b %y') AS gig_date, gig.gigid, venue.venuename AS gig_venuename, gig.title, gig.status, gig.age
FROM gig 
LEFT JOIN venue ON gig.venueid=venue.venueid
WHERE Status='confirmed' AND title != '' AND date  >= ( CURDATE()  ) ORDER BY date ASC");

// Loop through all results
while ($row = $vbulletin->db->fetch_array($results))
{   
    // Generate row html from template
    $templater = vB_Template::create('event_giglistrow');
    $templater->register('gigid', $row[gigid]);
    $templater->register('title', $row[title]);
    $templater->register('venuename', $row[gig_venuename]);
    $templater->register('date', $row[gig_date]);
    $templater->register('age', $row[age]);
    
    $linkresults = $vbulletin->db->query_read("SELECT ticketlink
    FROM ticketlink 
    LEFT JOIN gig ON ticketlink.gigid=gig.gigid
    WHERE ticketlink.gigid=gig.gigid AND ticketlink.gigid = '$row[gigid]'");

    while ($linkrow = $vbulletin->db->fetch_array($linkresults))
    {      
        $templater = vB_Template::create('event_giglistrowticket');
        $templater->register('linkrow', $linkrow);
        $event_giglistrowticket .= $templater->render();
    }
    $event_giglistrow .= $templater->render();
}


// Optionally free memory
$vbulletin->db->free_result($results);
unset ($result_row);

$templater = vB_Template::create('event_giglist');
$templater->register_page_templates();;
$templater->register('event_giglistrow', $event_giglistrow);
$templater->register('navbar', $navbar);
$templater->register('pagetitle', $pagetitle);
print_output($templater->render());

?>
main template (only the main display of table)

Code:
<table align="center" border="1" cellpadding="$stylevar[cellpadding]" cellspacing="$stylevar[cellspacing]" class="tborder" width="100%">

<tr class="tcat">
<td class="smallfont" align=center width="120"><b>Date&nbsp;</b></td>
<td class="smallfont" align=center width="140"><b>Venue&nbsp;</b></td>
<td class="smallfont" align=center><b>Title&nbsp;</b></td>
<td class="smallfont" align=center width="40"><b>Age&nbsp;</b></td>
<td class="smallfont" align=center width="80"><b>Tickets&nbsp;</b></td>
</tr>
{vb:raw event_giglistrow}
</table>
templatebit that does the rows

Code:
<tr class="alt2">
<td class="smallfont" align=center>{vb:raw date}</td>
<td class="smallfont" align=center>{vb:raw venuename}</td>
<td class="smallfont" align=center>{vb:raw title}</td>
<td class="smallfont" align=center>{vb:raw age}</td>
<td class="smallfont" align=center>{vb:raw event_giglistrowticket}</td>
</tr>
third template for the ticket link

Code:
{vb:raw linkrow.ticketlink}
What seems to be happening is the ticket link is being skipped somehow then then just dropped in at the top of the gig list page.

It doesn't seem to be getting included in the template.
Attached Images
File Type: jpg vbproblem.jpg (40.5 KB, 0 views)
Reply With Quote
  #7  
Old 12-21-2009, 03:56 PM
Lynne's Avatar
Lynne Lynne is offline
 
Join Date: Sep 2004
Location: California/Idaho
Posts: 41,180
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

I *think* (I'm not positive) that you need to use a different variable for your template rendering in the second while loop because you are using the same variable as the template above but it isn't 'complete' yet (you hadn't rendered it and thus completed the action). Maybe try this:
PHP Code:
    while ($linkrow $vbulletin->db->fetch_array($linkresults))
    {      
        
$templater2 vB_Template::create('event_giglistrowticket');
        
$templater2->register('linkrow'$linkrow);
        
$event_giglistrowticket .= $templater2->render();
    } 
Reply With Quote
  #8  
Old 12-21-2009, 04:00 PM
Ghostsuit's Avatar
Ghostsuit Ghostsuit is offline
 
Join Date: Nov 2001
Location: Glasgow, Scotland
Posts: 199
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

That sorted them appearing at the top but still leaving me blank results at the ticket column :S.
Reply With Quote
  #9  
Old 12-21-2009, 04:12 PM
Lynne's Avatar
Lynne Lynne is offline
 
Join Date: Sep 2004
Location: California/Idaho
Posts: 41,180
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

I guess you're gonna have to do some debugging and see if your query is getting you what you want. So, play with that loop and see what is really being output.
Reply With Quote
  #10  
Old 12-21-2009, 04:18 PM
Ghostsuit's Avatar
Ghostsuit Ghostsuit is offline
 
Join Date: Nov 2001
Location: Glasgow, Scotland
Posts: 199
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Yup looks like it thanks for the help though, sure you've got me on the right track

--------------- Added 21 Dec 2009 at 18:37 ---------------

Getting there...

Code:
$templater->register('event_giglistrowticket', $event_giglistrowticket);
needed added after the second loop closed to bring the variable into the first loop. Now all I need to do is clear the variable after each loop I think so it's not constantly storing the same links. from the previous time.

All sorted with addition of $event_giglistrowticket=''; after $event_giglistrow .= $templater->render();

Hopefully this helps someone else in future.
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 04:30 AM.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.04729 seconds
  • Memory Usage 2,295KB
  • Queries Executed 12 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)ad_showthread_beforeqr
  • (1)ad_showthread_firstpost
  • (1)ad_showthread_firstpost_sig
  • (1)ad_showthread_firstpost_start
  • (7)bbcode_code
  • (3)bbcode_php
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (1)pagenav
  • (1)pagenav_curpage
  • (1)pagenav_pagelink
  • (10)post_thanks_box
  • (10)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (10)post_thanks_postbit_info
  • (10)postbit
  • (1)postbit_attachment
  • (10)postbit_onlinestatus
  • (10)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available:
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files:
  • ./showthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showthread_start
  • showthread_getinfo
  • forumjump
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • postbit_attachment
  • pagenav_page
  • pagenav_complete
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete