The Arcive of Official vBulletin Modifications Site.It is not a VB3 engine, just a parsed copy! |
|
#1
|
||||
|
||||
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(); 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(); } |
#2
|
||||
|
||||
You just need to register the array:
PHP Code:
|
#3
|
||||
|
||||
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? |
#4
|
||||
|
||||
In place of this one:
PHP Code:
|
#5
|
||||
|
||||
I must be doing something wrong that's giving blank results. .
|
#6
|
||||
|
||||
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()); ?> 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 </b></td> <td class="smallfont" align=center width="140"><b>Venue </b></td> <td class="smallfont" align=center><b>Title </b></td> <td class="smallfont" align=center width="40"><b>Age </b></td> <td class="smallfont" align=center width="80"><b>Tickets </b></td> </tr> {vb:raw event_giglistrow} </table> 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> Code:
{vb:raw linkrow.ticketlink} It doesn't seem to be getting included in the template. |
#7
|
||||
|
||||
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:
|
#8
|
||||
|
||||
That sorted them appearing at the top but still leaving me blank results at the ticket column :S.
|
#9
|
||||
|
||||
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.
|
#10
|
||||
|
||||
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); All sorted with addition of $event_giglistrowticket=''; after $event_giglistrow .= $templater->render(); Hopefully this helps someone else in future. |
|
|
X vBulletin 3.8.12 by vBS Debug Information | |
---|---|
|
|
More Information | |
Template Usage:
Phrase Groups Available:
|
Included Files:
Hooks Called:
|