View Full Version : using/exporting php code in templates
derfy
04-03-2008, 04:54 AM
Hey guys. The forum I help run has requested a public ban list. I've already got a php script looking at the userban table in vB and outputting the data in a table(don't know css :(). Thing is, it looks bland. I'd like to make it look like it's integrated with our forums. I've followed How to create your own vBulletin-powered page! (uses vB templates) (https://vborg.vbsupport.ru/showthread.php?t=62164) and have a custom page (http://community.purevanity.net/derftest.php) setup. Thing is, I'm not sure how to get the data in there. Am I missing something obvious? I don't think you can use php in templates and not sure if a plugin would do this properly(or at all)
Thanks in advance.
Dismounted
04-03-2008, 05:47 AM
You put your PHP into your file and assign the output to a variable. Then use that variable to display the data in the template.
derfy
04-05-2008, 09:24 PM
Ok, so how do I do that? I've got the template set up, all the code is being assigned to a variable...but when I type that variable into the template, nothing happens. I get the feeling I'm missing something trival here...
Here's a portion of the template($output is the var assigned to be the output):
<table class="tborder" cellpadding="$stylevar[cellpadding]" cellspacing="$stylevar[cellspacing]" border="0" width="100%" align="center">
<tr>
<td class="tcat">Title</td>
</tr>
<tr>
$output
</tr>
</table>
Lynne
04-05-2008, 09:35 PM
Have you considered this mod: VBAREA - Banned Users List 1.1 (https://vborg.vbsupport.ru/showthread.php?t=152280&highlight=list)
(Not that I want to dissuade you from learning how to write a mod yourself.)
derfy
04-05-2008, 09:50 PM
It looks nice(and will probably end up using it instead) but I would still like the answer to my problem.
Thank you for the link, though :)
Lynne
04-05-2008, 10:00 PM
Why don't you post your php script.
You are evaling the template, right?
derfy
04-05-2008, 10:14 PM
<?php
// ####################### SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE);
// #################### DEFINE IMPORTANT CONSTANTS #######################
define('NO_REGISTER_GLOBALS', 1);
define('THIS_SCRIPT', 'publicbanlist'); // 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(
'publicbanlist',
);
// pre-cache templates used by specific actions
$actiontemplates = array(
);
// ######################### REQUIRE BACK-END ############################
require_once('./global.php');
// ################################################## #####################
// ######################## START MAIN SCRIPT ############################
// ################################################## #####################
$navbits = array();
$navbits[$parent] = 'Public ban listing';
$navbits = construct_navbits($navbits);
eval('$navbar = "' . fetch_template('navbar') . '";');
eval('print_output("' . fetch_template('publicbanlist') . '");');
$DB_HOSTNAME = 'localhost';
$DB_USERNAME = 'derf-test';
$DB_PASSWORD = 'thisisatest';
$DB_DBNAME = 'pvnet_community';
$db = mysql_connect($DB_HOSTNAME, $DB_USERNAME, $DB_PASSWORD);
mysql_select_db($DB_DBNAME, $db);
$output .= '<table width="100%"><tr><th>Name</th><th>Banned by</th><th>Ban date</th><th>Reason</th><th>Lifted on</th></tr>'."\n";
$sql = "SELECT * FROM userban";
$r = mysql_query($sql);
if (mysql_num_rows($r)) {
while ($row = mysql_fetch_array($r, MYSQL_BOTH)) {
//print_r($row);
$output .= '<tr><td align="center">'.retUsername($row[0]).'</td><td align="center">'.retUsername($row[5]).'</td><td align="center">'.date(DATE_RFC822, $row [6]).'</td>';
$output .= '<td align="center">'.$row[8].'</td><td align="center">'.retLiftban($row[7]).'</td></tr>';
}
}
// not sure what to put here.
// Define functions here.
// First up, getting a username from a userid.
// Let's ask the user table for help.
function retUsername($userid) {
global $DB_DBNAME, $db;
mysql_select_db($DB_DBNAME, $db);
$sql = "SELECT username FROM user WHERE `userid`='$userid'";
$r = mysql_query($sql);
if (mysql_num_rows($r)) {
$row = mysql_fetch_array($r, MYSQL_ASSOC);
$username = $row['username'];
}
return $username;
}
function retLiftban($date) {
if ($date == '0') {
return 'Never';
} else {
return date($date);
}
}
?>
Let me know of any glaring errors. Template:
$stylevar[htmldoctype]
<html dir="$stylevar[textdirection]" lang="$stylevar[languagecode]">
<head>
<title>$vboptions[bbtitle]</title>
$headinclude
</head>
<body>
$header
$navbar
<table class="tborder" cellpadding="$stylevar[cellpadding]" cellspacing="$stylevar[cellspacing]" border="0" width="100%" align="center">
<tr>
<td class="tcat">Title</td>
</tr>
<tr>
$output
</tr>
</table>
$footer
</body>
</html>
Lynne
04-05-2008, 10:30 PM
You need to eval your template *after* you have defined $output. So, move this line to the bottom of your php page (or at least to after you have defined $output):
eval('print_output("' . fetch_template('publicbanlist') . '");
derfy
04-05-2008, 10:31 PM
That gives me a blank page.
http://community.purevanity.net/publicbanlist.php
Lynne
04-05-2008, 11:02 PM
Are you using the same database that vbulletin uses? If so, you really don't need to go through and define all the database stuff again. It should be available to you after you call global.php. So, try rewriting some of the stuff just as if it were vb stuff, ie. "$db->query_read" instead of "mysql_query" and "while ($row = $db->fetch_array($r))" instead of "while ($row = mysql_fetch_array($r, MYSQL_BOTH))". In the while loop, you would then use "$row[username]" instead of "retUsername($row[0])".
(Disclaimer: I write code by trial and error so often, so I hope I'm not steering you wrong here.)
derfy
04-05-2008, 11:51 PM
Ok, that worked. I'll post again if I need more help. Thanks again!
King Justice
02-03-2009, 02:14 AM
So this still doesn't work...we put the the plugin in and it makes the entire forum go blank and not just the page we're calling the plugin in..
Help.
We are using product: vbulletin
hook: global_start
execution order: 5
>_<
Lynne
02-03-2009, 03:15 AM
What still doesn't work? She only posted some of her code and it wasn't a plugin, so I'm not sure what you are talking about.
vBulletin® v3.8.12 by vBS, Copyright ©2000-2025, vBulletin Solutions Inc.