How to use the vBulletin 4 Lightbox Anywhere
http://www.vbulletin.org/forum/showthread.php?t=239392
http://www.vbulletin.org/forum/showthread.php?t=239392
// if $_POST['ajax'] is set, we need to set a $_REQUEST['do'] so we can precache the lightbox template
if (!empty($_POST['ajax']) AND isset($_POST['uniqueid']))
{
$_REQUEST['do'] = 'lightbox';
}
// #################### 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();
// pre-cache templates used by specific actions
$actiontemplates = array('lightbox' => array('lightbox'));
/*
The following headers are usually handled internally. The cache-control is to stop caches keeping private images and the Vary header is to deal with the fact the filename encoding changes.
*/
header('Cache-Control: private');
header('Vary: User-Agent');
// ########################## REQUIRE BACK-END ############################
require_once('./global.php');
$vbulletin->input->clean_array_gpc('r', array(
'id' => TYPE_UINT
));
$imgid = $vbulletin->GPC['id'];
$vbulletin->input->clean_array_gpc('p', array(
'ajax' => TYPE_BOOL,
'uniqueid' => TYPE_UINT
));
if ($_REQUEST['do'] == 'lightbox')
{
//Setup values that will be passed by the ajax caller
$vbulletin->input->clean_array_gpc('r', array(
'width' => TYPE_UINT,
'height' => TYPE_UINT,
'first' => TYPE_BOOL,
'last' => TYPE_BOOL,
'current' => TYPE_UINT,
'total' => TYPE_UINT
));
$width = $vbulletin->GPC['width'];
$height = $vbulletin->GPC['height'];
$first = $vbulletin->GPC['first'];
$last = $vbulletin->GPC['last'];
$current = $vbulletin->GPC['current'];
$total = $vbulletin->GPC['total'];
//Setup the XML generation engine
require_once(DIR . '/includes/class_xml.php');
$xml = new vB_AJAX_XML_Builder($vbulletin, 'text/xml');
// Realistically this information would be queried from the database
$imageinfo = $imgfiles["$imgid"];
$uniqueid = $vbulletin->GPC['uniqueid'];
//The url to the image
$imagelink = 'testlightbox.php?id=' . $imgid . $vbulletin->session->vars['sessionurl'];
//Date strings used by lightbox
$imageinfo['date_string'] = vbdate($vbulletin->options['dateformat'], $imageinfo['dateline']);
$imageinfo['time_string'] = vbdate($vbulletin->options['timeformat'], $imageinfo['dateline']);
$templater = vB_Template::create('lightbox');
$templater->register('attachmentinfo', $imageinfo); // This one is named attachmentinfo because of the current variable used in the defualt lightbox template
$templater->register('current', $current);
$templater->register('first', $first);
$templater->register('height', $height);
$templater->register('imagelink', $imagelink);
$templater->register('last', $last);
$templater->register('total', $total);
$templater->register('uniqueid', $uniqueid);
$templater->register('width', $width);
$html = $templater->render(true);
//Build the xml tags
$xml->add_group('img');
$xml->add_tag('html', process_replacement_vars($html));
$xml->add_tag('link', $imagelink);
$xml->add_tag('name', $imageinfo['filename']);
$xml->add_tag('date', $imageinfo['date_string']);
$xml->add_tag('time', $imageinfo['time_string']);
$xml->close_group();
//Spitout the xml and get out of here
$xml->print_xml();
}
else
{
header('Content-Type: image/png');
readfile("./{$imgfiles[$imgid][filename]}");
}
<?php
// ######################## SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE);
// if $_POST['ajax'] is set, we need to set a $_REQUEST['do'] so we can precache the lightbox template
if (!empty($_POST['ajax']) AND isset($_POST['uniqueid']))
{
$_REQUEST['do'] = 'lightbox';
}
// #################### 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();
// pre-cache templates used by specific actions
$actiontemplates = array('lightbox' => array('lightbox'), 'demo' => array('iwt_lightbox_demo'));
/*
The following headers are usually handled internally. The cache-control is to stop caches keeping private images and the Vary header is to deal with the fact the filename encoding changes.
*/
header('Cache-Control: private');
header('Vary: User-Agent');
// ########################## REQUIRE BACK-END ############################
require_once('./global.php');
$vbulletin->input->clean_array_gpc('r', array(
'id' => TYPE_UINT
));
$imgid = $vbulletin->GPC['id'];
$vbulletin->input->clean_array_gpc('p', array(
'ajax' => TYPE_BOOL,
'uniqueid' => TYPE_UINT
));
// ### Code to retrive data from database #################################
// handle lightbox requests
if ($_REQUEST['do'] == 'lightbox')
{
//Setup values that will be passed by the ajax caller
$vbulletin->input->clean_array_gpc('r', array(
'width' => TYPE_UINT,
'height' => TYPE_UINT,
'first' => TYPE_BOOL,
'last' => TYPE_BOOL,
'current' => TYPE_UINT,
'total' => TYPE_UINT
));
$width = $vbulletin->GPC['width'];
$height = $vbulletin->GPC['height'];
$first = $vbulletin->GPC['first'];
$last = $vbulletin->GPC['last'];
$current = $vbulletin->GPC['current'];
$total = $vbulletin->GPC['total'];
//Setup the XML generation engine
require_once(DIR . '/includes/class_xml.php');
$xml = new vB_AJAX_XML_Builder($vbulletin, 'text/xml');
// Realistically this information would be queried from the database
$imageinfo = $imgfiles["$imgid"];
$uniqueid = $vbulletin->GPC['uniqueid'];
//The url to the image
$imagelink = 'testlightbox.php?id=' . $imgid . $vbulletin->session->vars['sessionurl'];
//Date strings used by lightbox
$imageinfo['date_string'] = vbdate($vbulletin->options['dateformat'], $imageinfo['dateline']);
$imageinfo['time_string'] = vbdate($vbulletin->options['timeformat'], $imageinfo['dateline']);
$templater = vB_Template::create('lightbox');
$templater->register('attachmentinfo', $imageinfo); // This one is named attachmentinfo because of the current variable used in the defualt lightbox template
$templater->register('current', $current);
$templater->register('first', $first);
$templater->register('height', $height);
$templater->register('imagelink', $imagelink);
$templater->register('last', $last);
$templater->register('total', $total);
$templater->register('uniqueid', $uniqueid);
$templater->register('width', $width);
$html = $templater->render(true);
//Build the xml tags
$xml->add_group('img');
$xml->add_tag('html', process_replacement_vars($html));
$xml->add_tag('link', $imagelink);
$xml->add_tag('name', $imageinfo['filename']);
$xml->add_tag('date', $imageinfo['date_string']);
$xml->add_tag('time', $imageinfo['time_string']);
$xml->close_group();
//Spitout the xml and get out of here
$xml->print_xml();
}
else
{
//Send the image type header (png in this case since for the demo we are using only pngs)
header('Content-Type: image/png');
//This works for the demo purposes but readfile could be replaced with a more effective method for handling larger images (such as a buffering system like attachments uses)
readfile("./{$imgfiles[$imgid][filename]}");
}
?>
<link rel="stylesheet" type="text/css" href="{vb:raw vbcsspath}lightbox.css" />
<script type="text/javascript" src="clientscript/vbulletin_lightbox.js?v=402"></script>
<a href="IMAGEURL" rel="Lightbox_GROUPNUMBER" id="IMAGEID">IMAGE TAG</a>
<script type="text/javascript"> <!-- vBulletin.register_control("vB_Lightbox_Container", "DIV_ID", 1); //--> </script>
{vb:stylevar htmldoctype}
<html xmlns="http://www.w3.org/1999/xhtml" <vb:if condition="!is_browser('ie') OR is_browser('ie',8)"> dir="{vb:stylevar textdirection}"</vb:if> lang="{vb:stylevar languagecode}" id="vbulletin_html">
<head>
{vb:raw headinclude}
<title>{vb:raw pagetitle}</title>
<vb:if condition="$includecss">
<vb:each from="includecss" value="file">
<link rel="stylesheet" type="text/css" href="{vb:raw vbcsspath}{vb:raw file}.css" />
</vb:each>
</vb:if>
<link rel="stylesheet" type="text/css" href="{vb:raw vbcsspath}lightbox.css" />
{vb:raw headinclude_bottom}
<script type="text/javascript" src="clientscript/vbulletin_lightbox.js?v=402"></script>
</head>
<body>
{vb:raw header}
{vb:raw navbar}
<div id="lightboximages" class="blockbody">
<h2 class="blockhead">Sample Images</h2>
<div class="blockrow">
<div style="padding-bottom: 10px; text-align: center;">
This image is not grouped:<br /><br />
<a href="iwtlightboxdemo/testlightbox.php?id=1" rel="Lightbox_0" id="image1">
<img class="thumbnail" src="iwtlightboxdemo/IWT_Products_System_Thumb.png" alt="test"/>
</a>
</div>
<div style="text-align: center;">
These two are grouped:<br /><br />
<a href="iwtlightboxdemo/testlightbox.php?id=2" rel="Lightbox_1" id="image2">
<img class="thumbnail" src="iwtlightboxdemo/IWT_Registration_Imposter_Blocker_Thumb.png" alt="test"/>
</a>
<a href="iwtlightboxdemo/testlightbox.php?id=3" rel="Lightbox_1" id="image3">
<img class="thumbnail" src="iwtlightboxdemo/IWT_Time_Spent_Online_Thumb.png" alt="test"/>
</a>
</div>
</div>
</div>
<script type="text/javascript">
<!--
vBulletin.register_control("vB_Lightbox_Container", "lightboximages", 1);
//-->
</script>
{vb:raw footer}
</body>
</html>