PDA

View Full Version : eval template + fetch_template


Vaupell
24 Dec 2009, 14:54
Hi guys,,

Trying to figure out how precisely vb4 works compared to vb3.
cause not many syntaxes i used to use in *.php appear to be
working on vb4, when fetching and sending data between
teplates and db..

as a exsample, to experiment and learn a little
ive setup a small test product..

Goal : list userid's, username's, emails
Going through each step and makeing my notes ofcourse.

templates and php all set to go, except
im getting a error when i try to eval the data and fetch a template..

Error is fetch_template('$dbtestrow') . '");

if ($_REQUEST['do'] == 'main')
{

$emailresult =$vbulletin->db->query_read("SELECT userid, username, email FROM " . TABLE_PREFIX . "user ORDER BY userid");
while ($row = $vbulletin->db->fetch_array($emailresult))
{
$userid = htmlspecialchars_uni($row['userid']);
$username = htmlspecialchars_uni($row['username']);
$usermail = htmlspecialchars_uni($row['email']);

eval('$dbtestdata("' . fetch_template('$dbtestrow') . '");');
}

// original print :
// eval('print_output("' . fetch_template('dbtesttemplate) . '");');

// vb4 template ; may need to be changed..
$templater = vB_Template::create('dbtesttemplate');
$templater->register_page_templates();
$templater->register('navbar', $navbar);
$templater->register('pagetitle', $pagetitle);
print_output($templater->render());
}

so when i try to run it, i get the error that eval needs to be replaced with vb:template

Error :
Warning: fetch_template() calls should be replaced by the vB_Template class in [path]/includes/functions.php on line

cant find info on vb_template()..

help..

question on vbcom How to upgrade vb3 code (http://www.vbulletin.com/forum/showthread.php?333138-[codeing]-What-is-the-syntax-of-vB_Template-and-how-does-it-work-when-i-replace-it&p=1883919)

Lynne
24 Dec 2009, 15:38
You just need to change it to be like what you did for the template dbtesttemplate - you create it, register variables for it, then render it. Only difference is, you won't do print_output, you'll just assign it to a varialbe:
$dbtestdata .= $templater->render();

Vaupell
24 Dec 2009, 16:04
since im creating an array, would i then need to put the variable register inside the
while loop, or just outside just before it render.. ?

im creating the table rows with the template dbtestrow
template dbtestrow :
<tr align="center">
<td>$userid </td><td>$username</td> <td>$usermail</td>
</tr>

and i call the eval function from the main template

part of dbtesttemplate :

<br /><table align="center" border="1">
<tr class="blockhead"><td>Welcome to test database page</td></tr>
<tr></tr><tr></tr>

<!-- get rows -->
$dbtestdata

<!-- close table -->
</table><br />

so my new php would be something like

while ($row = $vbulletin->db->fetch_array($emailresult))
{
$userid = htmlspecialchars_uni($row['userid']);
$username = htmlspecialchars_uni($row['username']);
$usermail = htmlspecialchars_uni($row['email']);

// vb3 : eval('$dbtestdata("' . fetch_template('$dbtestrow') . '");');
$dbtestdata = vb_template::create($dbtestrow);

}
$dbtestdata->register('userid', $userid);
$dbtestdata->register('username', $username);
$dbtestdata->register('usermail', $usermail);

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

or did i (excuse my expression) fall of the wagon in the last cornor. :rolleyes:

Lynne
24 Dec 2009, 16:14
You cannot register multiple variables like that. You need to do it like you did for the other template at the bottom. And,you still forgot the line I told you to add. Oh, and if you are then using that template in your bottom template, you need to register the variable there also.

Have you seen this - [vB4] Rendering templates and registering variables - a short guide (http://www.vbulletin.org/forum/showthread.php?t=228078)