vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vB3 Programming Discussions (https://vborg.vbsupport.ru/forumdisplay.php?f=15)
-   -   using/exporting php code in templates (https://vborg.vbsupport.ru/showthread.php?t=175001)

derfy 04-03-2008 04:54 AM

using/exporting php code in templates
 
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) and have a custom page 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):
Code:

<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


(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 Code:

<?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($rMYSQL_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($rMYSQL_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:
Code:

$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.)


All times are GMT. The time now is 06:58 AM.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.

X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01131 seconds
  • Memory Usage 1,766KB
  • Queries Executed 10 (?)
More Information
Template Usage:
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (2)bbcode_code_printable
  • (1)bbcode_php_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)pagenav
  • (1)pagenav_curpage
  • (1)pagenav_pagelink
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (10)printthreadbit
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • showthread
Included Files:
  • ./printthread.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/class_bbcode_alt.php
  • ./includes/class_bbcode.php
  • ./includes/functions_bigthree.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
  • printthread_start
  • pagenav_page
  • pagenav_complete
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete