PDA

View Full Version : 3rd party site including vbulletin framework can't display templates


Disasterpiece
11-22-2011, 01:19 PM
Hey

I'm trying to create my own page with vbulletin vars being available according to this guide:
https://vborg.vbsupport.ru/showthread.php?t=228112

I'm using a cms on the domain root http://example.tld/ and the forum being at http://example.tld/forum

I created a "bridge class" which gets included to initialize the vB bridge:

class vBBridge
{
static private $vb_name = 'xxx';
static private $vb_user = 'xxx';
static private $vb_pass = 'xxx';
static private $vb_table = 'vb3_session';
static private $vb_usertable = 'vb3_user';
static private $vb_cookie = 'bb_sessionhash';

static private $vb_db = null;

static private $vb_sessioninfo = null;
static private $vb_userinfo = null;

static public $precache_tpl = array();
static public $precache_phrase = array();
static public $precache_datastore = array();
static public $precache_tpl_special = array();

static public function init_vB() {
define('THIS_SCRIPT', 'portal');
define('CSRF_PROTECTION', true);

// ################### PRE-CACHE TEMPLATES AND DATA ######################
// get special phrase groups
$phrasegroups = self::$precache_phrase;

// get special data templates from the datastore
$specialtemplates = self::$precache_datastore;

// pre-cache templates used by all actions
$globaltemplates = self::$precache_tpl;

// pre-cache templates used by specific actions
$actiontemplates = self::$precache_tpl_special;

// change this depending on your filename
chdir ('./forum');
require_once('./global.php');
chdir ('../');
}
}

So far so good.

the init_vB() function gets called somewhere down the road, inside the cms like this:

include_once('./lib/vbbridge.class.php');

vBBridge::$precache_tpl = array('cms_toplinks');
vBBridge::init_vB();

after this call, I can use the $vbulletin var everywhere, so this works.

BUT:

now I'm trying to get a simple vbulletin template, "cms_toplinks".
To accomplish this, my test code looks like this:

global $vbulletin;

$templater = vB_Template::create('cms_toplinks');
$templater->register_page_templates();
$str = $templater->render();

var_dump($str);

[using print_output($templater->render()) as suggested in the guide gives me an error]

The output in the CMS is this:

string(74) "<!-- BEGIN TEMPLATE: cms_toplinks -->

<!-- END TEMPLATE: cms_toplinks -->"




So the vb framework is loaded, but it doesn't find my template. Why?

I created the template with the same name (yes, case-sensitive) as a child template to the MASTER-STYLE as suggested in the guide, but still. Doesn't find the template.

Any ideas?

kh99
11-22-2011, 02:01 PM
You need to add "global $bootstrap" where you are including global.php.

kh99
11-22-2011, 02:04 PM
Sent you a PM - for some reason when I try to post my response the post is being moderated.

Disasterpiece
11-22-2011, 02:28 PM
Here kh's post:
I think the problem is that you need global \$ bootstrap in the function befor eyou include global\ . php. Tried to post this in the thread but for some reason my posts are being moderated.

Wow... it works.

BUT... now I seem to have the template, but the template parse function does some really weird stuff i only can explian via screenshot. Look at this...

134626

This happens as soon as I include the $templater->parse() call, no matter if it actually outputs something or not.

My code now is like this:

global $vbulletin;

$templater = vB_Template::create('cms_toplinks');
$templater->register_page_templates();
$str = $templater->render(true);

//print $str;


With print $str being active, I get the exact same result, only with the toplinks bar rendered at the correct position (as it should be) with this code mess on the site still...

I have no idea where this could come from. maybe an issue with output buffering? But why dump all the php code un-rendered? Is this maybe a vbulletin-related bug?

Lynne
11-22-2011, 05:58 PM
Approved posts. I'm not sure what was catching those posts. :/