PDA

View Full Version : How does the blog product implement custom skins?


DetroitYES
04-02-2012, 05:02 PM
Okay, this was mind numbingly simple in the long run.

It involves making a plugin, and making a vb option, both of which can be achieved in debug mode and exported into the XML:

for the blog, the plugin code is here:




<plugin active="1" executionorder="5">
<title>Style: Override Style and Setup Group Blog Permissions</title>
<hookname>style_fetch</hookname>
<phpcode><![CDATA[if (defined('VBBLOG_STYLE') AND $vbulletin->options['vbblog_style'])
{
$styleid = $vbulletin->options['vbblog_style'];
$vbulletin->userinfo['styleid'] = $styleid;
$userselect = true;
$vbulletin->options['allowchangestyles'] = false;
}]]></phpcode>
</plugin>





and the setting code is here


<setting varname="vbblog_style" displayorder="1">
<datatype>number</datatype>
<optioncode><![CDATA[select:eval
require_once(DIR . '/includes/adminfunctions_template.php');
global $stylecache;
cache_styles();
$options = array(0 => $vbphrase['none']);
foreach($stylecache AS $style)
{
$options["$style[styleid]"] = construct_depth_mark($style['depth'], '--') . " $style[title]";
}]]></optioncode>
<defaultvalue>0</defaultvalue>
</setting>


obviously, replace vbblog with your product name were applicable.

hope this saves you some time, it took me 5 hours of digging through every file prefixed with blog_ to figure this out and was right under my nose as usual.






//----------
when the blog is installed, you are given the option to assign a particular skin to the blog, that is different from the default style of the forum...

I would like to implement this in a product I am developing as well. Where/how in the code does this happen? Can anyone give me an abstract or point to a particular file?

I noticed the following line in blog.php, but can't find any further refrence:



define('VBBLOG_STYLE', true);




I also see this in the product-vbblog.xml, and have located the var in the database, but cannot figure out where it gets called back into the php from mysql:



<settinggroup name="vbblog" displayorder="678">
<setting varname="vbblog_style" displayorder="1">
<datatype>number</datatype>
<optioncode><![CDATA[select:eval
require_once(DIR . '/includes/adminfunctions_template.php');
global $stylecache;
cache_styles();
$options = array(0 => $vbphrase['none']);
foreach($stylecache AS $style)
{
$options["$style[styleid]"] = construct_depth_mark($style['depth'], '--') . " $style[title]";
}]]></optioncode>
<defaultvalue>0</defaultvalue>
</setting>




Update, this is quite a rabbit hole. I found this in /includes/class_bootstrap.php however it is a protected var:



/**
* A particular style ID to force. If specified, it will be used even if disabled.
*
* @var int
*/
protected $force_styleid = 0;



Thanks.