PDA

View Full Version : How to get Php code that worked in VB3 to work in Vb4?


SpikeSaunders
10-14-2011, 09:49 PM
Hello all,

As we all know the changes from VB3-4 were major, and one such change is how PHP code and variables worked. I have an issue however that despite the articles read here and vbteam, I still can not get it to function as needed.

A little background, this site in question uses the Web Templates mod (a great one!) by Logician. What's going on is in the content/template portion there are three variables
$r2d_pageNr
$r2d_navBar
$r2d_prevNext

Then on the bottom of the actual editor for this new Web Template, is the php include section, which has the code that I included below.

Now here is the kicker, as it is in this way, it works flawlessly on VB3. But when attempting to set this up for VB4 by registering the variables and such, I still can not get it to work.

Any help would be greatly appreciated!

$r2d_navBar_array = array(
"primer_intro" => "Primer intro",
"primer_tcg" => "What is a TCG?",
"primer_thespoils" => "What is The Spoils?",
"primer_why" => "Why play The Spoils?",
"primer_trades" => "The five trades",
"primer_world" => "The world",
"primer_products" => "The products"
);


$r2d_currentPage = $pg;
$r2d_navBarNumberOfPages = count($r2d_navBar_array); // Number of pages
$r2d_navBarCurrentPageNr = 0;

$r2d_navBar_html["navbar"] = "
<table class=\"r2d_navbar\">
<tr>
<td>\n";

foreach($r2d_navBar_array as $r2d_navBarLink => $r2d_navBarText)
{
$r2d_navBarPages[] = $r2d_navBarLink;
}

reset($r2d_navBar_array);

foreach($r2d_navBar_array as $r2d_navBarLink => $r2d_navBarText)
{

if ($r2d_navBarLink == $r2d_currentPage)
{
$r2d_navBar_html["navbar"] .= "<a class=\"r2d_navbar_current\" href=\"" . $_SERVER["PHP_SELF"] . "?pg=" . $r2d_navBarLink . "\"><span></span></a>\n";

$r2d_navBarDispCurrentPageNr = $r2d_navBarCurrentPageNr + 1;

$r2d_navBarPrevPageNr = $r2d_navBarCurrentPageNr - 1;
$r2d_navBarNextPageNr = $r2d_navBarCurrentPageNr + 1;
$r2d_navBarCurrentPage = $r2d_navBarPages[$r2d_navBarCurrentPageNr];
$r2d_navBarPrevPage = $r2d_navBarPages[$r2d_navBarPrevPageNr];
$r2d_navBarNextPage = $r2d_navBarPages[$r2d_navBarNextPageNr];
}
else
{
$r2d_navBar_html["navbar"] .= "<a class=\"r2d_navbar\" href=\"" . $_SERVER["PHP_SELF"] . "?pg=" . $r2d_navBarLink . "\"><span></span></a>\n";
}
$r2d_navBarCurrentPageNr++;
}

$r2d_navBar_html["navbar"] .= "
</td>
</tr>
</table>";



$r2d_navBar_html["pagenr"] .= "
<table class=\"r2d_navbar_prevnext\">
<tr>
<td class=\"r2d_navbar_pagenr\">Page $r2d_navBarDispCurrentPageNr of $r2d_navBarNumberOfPages</td>
</tr>";
$r2d_navBar_html["pagenr"] .= "
</td>
</tr>
</table>\n";



$r2d_navBar_html["prevnext"] .= "
<table class=\"r2d_navbar_prevnext\">
<tr>
<td class=\"r2d_navbar_prev\">";

if ($r2d_navBarPrevPage)
$r2d_navBar_html["prevnext"] .= "<a href=\"" . $_SERVER["PHP_SELF"] . "?pg=$r2d_navBarPrevPage\"><img style=\"float: left;\" class=\"r2d_arrow\" src=\"images/arrow_left.gif\" alt=\"Previous\" /><br />Previous page:<br />$r2d_navBar_array[$r2d_navBarPrevPage]</a>";

$r2d_navBar_html["prevnext"] .= "
</td>
<td class=\"r2d_navbar_next\">";

if ($r2d_navBarNextPage)
$r2d_navBar_html["prevnext"] .= "<a href=\"" . $_SERVER["PHP_SELF"] . "?pg=$r2d_navBarNextPage\"><img style=\"float: right;\" class=\"r2d_arrow\" src=\"images/arrow_right.gif\" alt=\"Next\" /><br />Next page:<br />$r2d_navBar_array[$r2d_navBarNextPage]</a>";

$r2d_navBar_html["prevnext"] .= "
</td>
</tr>
</table>\n";

$r2d_navBar = $r2d_navBar_html["navbar"];
$r2d_pageNr = $r2d_navBar_html["pagenr"];
$r2d_prevNext = $r2d_navBar_html["prevnext"];

SpikeSaunders
10-16-2011, 06:24 AM
I don't mean to impose, but this one issue is keeping the website from being functional. So any assistance that can be provided would be great! It may just be something simple I'm missing here.

kh99
10-16-2011, 11:40 AM
I looked it over and I'm confused. I don't notice anything that's version-specific in the code you posted, and I'm not familiar with that mod. Did you try posting your question in the mod thread?

nerbert
10-16-2011, 12:25 PM
If you're getting any result at all look at your page source, messed up HTML is easy to pick out there.

When you have a string of HTML it ought to be enclosed in single quotes -- that way all the double quotes around attribute values don't need to be escaped.

Why do you have \n at the end of so many strings? Do you want line breaks? I have no idea what those will do.

SpikeSaunders
10-16-2011, 05:45 PM
Hey guys,
First just to be clear, I didn't write the code. Not sure why it is how it is :)

And yeah I posted this in the mod's thread (https://vborg.vbsupport.ru/showthread.php?t=250202&page=10)but this seems more v3-4 specific, then mod related.

Anybody care to school me in how to take a PHP blob of code such as the above, and have it execute off the template? I thought I understood the changes, with having to register the variables and all but that didn't seem to do any good.

kh99
10-16-2011, 09:52 PM
Well, I'm still not sure. I understand you didn't write the code, but if what you posted were code that rendered a template in vb3, then I could show you how to rewrite it for vb4. But I don't see any template code in what you posted, so it's hard to know what's going on. But I'll take a shot (keep in mind I don't know anything about the mod).

What's going on is in the content/template portion there are three variables
$r2d_pageNr
$r2d_navBar
$r2d_prevNext



OK, if you have a vb3 template that you want to convert to vb4, and it includes only the above three variables, then you should be able to convert it by changing all occurances of those variables to

{vb:raw r2d_pageNr} (or r2d_navBar or r2d_prevNext)


also, any <if...></if> needs to change to <vb:if...></vb:if> (and any <else/> needs to be <vb:else/>). There are other changes, but let's hope this gets you most of the way.

Here's the vb manual on template syntax, in case that helps: https://www.vbulletin.com/docs/html/main/templates_intro



In the php code, in vb3 you'd just need to define the variables (like in the code you posted) then render the template like maybe:

eval('$output = "' . fetch_template('template_name') . '";');


In vb4 you have to register the variables. There are two ways to do that, either before the template is being rendered, or "during", I guess you'd say. I'll guess (since I don't see the template code in what you posted) that you want to do it before. So you'd do something like this:


$templatevalues = array('r2d_pageNr' => $r2d_pageNr,
'r2d_navBar' => $r2d_navBar,
'r2d_prevNext' => $r2d_prevNext);
vB_Template::preRegister('template_name', $templatevalues);



Of course you'd change template_name to the actual template name you're using.

Here's an article on how vb templates work (from the php side), if you haven't seen it already: https://vborg.vbsupport.ru/showthread.php?t=228078

SpikeSaunders
10-16-2011, 10:29 PM
Thanks Kh99, I'll give it a try tomorrow on my day off. I think I may have had the rendering backwards, and wasn't aware the php code would need the IF's changed. Missed that one!

Thanks again,

kh99
10-16-2011, 10:38 PM
...wasn't aware the php code would need the IF's changed.

The templates need the <if condition=... tags changed. if's in the php code don't need to change.