<?xml version="1.0" encoding="ISO-8859-1"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title>vBulletin Community Forum - Blogs</title>
		<link>http://www.vbulletin.com/forum/blog.php</link>
		<description>This is a discussion forum powered by vBulletin. To find out about vBulletin, go to http://www.vbulletin.com/ .</description>
		<language>en</language>
		<lastBuildDate>Sat, 21 Nov 2009 09:50:12 GMT</lastBuildDate>
		<generator>vBulletin</generator>
		<ttl>5</ttl>
		<image>
			<url>http://www.vbulletin.com/forum/images/misc/rss.jpg</url>
			<title>vBulletin Community Forum - Blogs</title>
			<link>http://www.vbulletin.com/forum/blog.php</link>
		</image>
		<item>
			<title>vBulletin 4.0 Beta 4 Now Available!</title>
			<link>http://www.vbulletin.com/forum/blog.php?b=2392</link>
			<pubDate>Thu, 19 Nov 2009 23:09:53 GMT</pubDate>
			<description>We are excited to announce the release the new Beta 4 versions of vBulletin 4.0 Publishing Suite and vBulletin 4.0 Forum.    If you have an active vBulletin license, you can download your copy of...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">We are excited to announce the release the new Beta 4 versions of vBulletin 4.0 Publishing Suite and vBulletin 4.0 Forum.    If you have an active vBulletin license, you can download your copy of Beta 4 from the vBulletin Members Area at:<br />
  <a href="http://members.vbulletin.com/" target="_blank">http://members.vbulletin.com</a> .<br />
   <br />
  Beta 4 fixes more than 140 bugs since the release of Beta 3 last week.  Thank you everyone who has filed bugs in our bug tracker.   If you find a new bug, please continue to file bugs here: <br />
<a href="http://www.vbulletin.com/forum/project.php?projectid=6" target="_blank">http://www.vbulletin.com/forum/project.php?projectid=6</a><br />
   <br />
  <b>Highlights of what’s Fixed and New in Beta 4:</b><br />
  <ul><li>(updated) New Posts and Search Results have updated Style.</li>
<li>Fixed Password Protected Forums bug</li>
<li>Fixed Promote to Article bugs</li>
<li>Fixed Ad Manager bugs</li>
<li>Fixed some usability bugs in the Attachment Manager</li>
<li>Fixed Video Players Aspect Ratio to 16:9</li>
<li>Fixed Multi-page comments browsing:  Added anchor, comments links, comment page parameters</li>
<li>Fixed the CMS WYSIWYG to better handle images</li>
<li>Fixed Pagination in multi-page articles</li>
<li><font color="Red">(new)</font> Added “Go to Last Post” link to the Recent Comments widget and Recent Forum Posts widget</li>
<li><font color="Red">(new)</font> Ability to allow Not-Registered/Not-Logged-in (Guest) to comment on articles with Captcha</li>
<li><font color="Red">(new) </font>Clicking on an article preview image now links to the article page</li>
<li><font color="Red">(new)</font> Clicking on an image in the article page will bring up the lightbox and display the image in full size</li>
<li><font color="Red">(new)</font> In Section Edit Page, we added a checkbox to limit the articles to display that section’s content only.  Also, you can now choose to display/hide the “View All” link.</li>
<li><font color="Red">(new) </font>In Article Edit Page, we added extra article “display settings.” You can now choose to display/hide the article’s title, author, published date, and pageviews.</li>
<li><font color="Red">(new) </font>In Article Edit Page, we added an extra setting to the display the full article on the section page</li>
<li><font color="Red">(new)</font> CMS Articles can now include attachments</li>
</ul></blockquote>

 ]]></content:encoded>
			<dc:creator>Don Kuramura</dc:creator>
			<guid isPermaLink="true">http://www.vbulletin.com/forum/blog.php?b=2392</guid>
		</item>
		<item>
			<title>Supercharge your vBulletin Forum with Memcached</title>
			<link>http://www.vbulletin.com/forum/blog.php?b=2391</link>
			<pubDate>Tue, 17 Nov 2009 04:39:19 GMT</pubDate>
			<description><![CDATA[There has been a lot of discussion on the forum about static content and caching in vB4, and I got me thinking... 9 out of 10 times when I look at a forum that someone is reporting as "slow", they...]]></description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">There has been a lot of discussion on the forum about static content and caching in vB4, and I got me thinking... 9 out of 10 times when I look at a forum that someone is reporting as "slow", they aren't using <a href="http://en.wikipedia.org/wiki/Memcached" target="_blank">memcached</a>. Probably 8 out of those 9 times, enabling memcached solves the problems. It is one of the easiest things you can do to supercharge your forums, especially if you have millions of posts, threads with 10,000+ posts, or are running vBSEO-- and it's already built into vBulletin!<br />
<br />
This post isn't a guide to installing memcached. It's not a difficult process, and there already <a href="http://tinyurl.com/ycgzxxt" target="_blank">plenty of resources out there</a> that will teach you how to do that. I also assume that there are two types of people reading this-- those with managed hosting and those who manage their own servers. If you're one of the latter, you should be able to figure it out. If you're one of the former, call your hosting company and tell them you want memcached installed and configured to run with php. They'll know what you're talking about. If they don't, you should probably switch hosts.<br />
<br />
Also, this is primarily for UNIX servers, however there is <a href="http://pureform.wordpress.com/2008/01/10/installing-memcache-on-windows-for-php/" target="_blank">a port of memcached for Windows</a>. I just haven't used it before, so proceed at your own risk. <br />
<br />
<font size="4"><b>Getting Started</b></font><br />
<br />
The first thing you'll need to do is make sure that memcached is running. If you have shell access, type the following:<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<pre class="bbcode_code">$ ps ax|grep memcached</pre>
</div> You should get back something like this:<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_quote"><div class="quote_container">
		<div class="bbcode_quote_container"></div>
		
			9101 pts/0    S+     0:00 grep memcached<br />
17541 ?        Ssl   15:07 memcached -d -p 11211 -u nobody -c 1024 -m 64
		</div>
	</div>
</div> The second line tells us that memcached is running. The first line is just us looking for it running. If you don't see that second line, then you've got to have memcached installed. [edit: this actually means that memcached isnt running, not that it isn't installed.] Once you know that memcached is installed, we need to make sure that it is working with php. For those without shell access who weren't able to verify that memcached was running, this will pretty much get you up to speed.<br />
<br />
Create a file called memcached-test.php on your server that has the following contents:<br />
<div class="bbcode_container">
	<div class="bbcode_description">PHP Code:</div>
	<div class="bbcode_code"><code><code><span style="color: #000000">
&nbsp;<span style="color: #0000BB">&lt;?<br />$memcache&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">Memcache</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$memcache</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">connect</span><span style="color: #007700">(</span><span style="color: #DD0000">'localhost'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">11211</span><span style="color: #007700">)&nbsp;or&nbsp;die&nbsp;(</span><span style="color: #DD0000">"Could&nbsp;not&nbsp;connect"</span><span style="color: #007700">);<br />echo&nbsp;</span><span style="color: #DD0000">"Server's&nbsp;version:&nbsp;{$memcache-&gt;getVersion()}<br />"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$tmp&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">stdClass</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$tmp</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">string_attribute&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'testing'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$tmp</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">string_attribute&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">123</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$memcache</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">set</span><span style="color: #007700">(</span><span style="color: #DD0000">'key'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">false</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">10</span><span style="color: #007700">)&nbsp;or&nbsp;die&nbsp;(</span><span style="color: #DD0000">"Failed&nbsp;to&nbsp;save&nbsp;temporary&nbsp;object&nbsp;at&nbsp;memcache&nbsp;server"</span><span style="color: #007700">);<br />echo&nbsp;</span><span style="color: #DD0000">"Data&nbsp;from&nbsp;the&nbsp;cache:<br />\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$memcache</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">get</span><span style="color: #007700">(</span><span style="color: #DD0000">'key'</span><span style="color: #007700">));<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></code></div>
</div> Your output should be something along the lines of: <br />
<br />
<div class="bbcode_container">
	<div class="bbcode_quote"><div class="quote_container">
		<div class="bbcode_quote_container"></div>
		
			Server's version: 1.2.6<br />
Data from the cache:<br />
stdClass Object ( [string_attribute] => 123 )
		</div>
	</div>
</div> If you get errors, then you should not proceed until your host has properly configured memcached. If you got output similar to the above, you should be ready to rock and roll. The first thing you're going to need to do is figure out what port memcached is running on. It's usually 11211, but you might want to make sure. In your admincp, Look for "View PHP Info" under the "Maintenance" section. Search that page for "memcache.default_port" and write down that value.<br />
<br />
<font size="4"><b>Enabling Memcached</b></font><br />
<br />
You're now ready to edit your config.php file. Please, back up this file before you start editing it. Around line 135 (in a brand new 3.7.4 config.php file at least) you will see a commented out section entitled "DATASTORE CACHE CONFIGURATION". This is where we're going to configure memcached. Find the section that looks like this:<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">PHP Code:</div>
	<div class="bbcode_code"><code><code><span style="color: #000000">
<span style="color: #0000BB"></span><span style="color: #FF8000">/*<br />$config&#91;'Datastore'&#93;&#91;'class'&#93;&nbsp;=&nbsp;'vB_Datastore_Memcached';<br />$i&nbsp;=&nbsp;0;<br />//&nbsp;First&nbsp;Server<br />$i++;<br />$config&#91;'Misc'&#93;&#91;'memcacheserver'&#93;&#91;$i&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;'127.0.0.1';<br />$config&#91;'Misc'&#93;&#91;'memcacheport'&#93;&#91;$i&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;11211;<br />$config&#91;'Misc'&#93;&#91;'memcachepersistent'&#93;&#91;$i&#93;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;true;<br />$config&#91;'Misc'&#93;&#91;'memcacheweight'&#93;&#91;$i&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;1;<br />$config&#91;'Misc'&#93;&#91;'memcachetimeout'&#93;&#91;$i&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;1;<br />$config&#91;'Misc'&#93;&#91;'memcacheretry_interval'&#93;&#91;$i&#93;&nbsp;=&nbsp;15;<br />*/&nbsp;<br /></span><span style="color: #0000BB"></span>
</span>
</code></code></div>
</div> The first and last lines there (the /* and */) are what is commenting out that section. We are going to remove those. Also, check that the 'memcacheport' setting is correct-- make sure that it's the same value as what you got from viewing the PHP info. If your site is using one server (other than an external db server), this is more than likely all you need to do. You can save your config.php and check to see that your site is still up. <b>If your site is using more than one server, you should set up memcached to use pooling. </b><br />
<br />
To set up memcached to use pooling, you first need to know the IP's of each server. Your host should be able to provide you with this information. You can also use host names, but let's just keep this simple for now. Then, you want to copy the memcached settings from "// First Server" to the closing comment so that it looks like this:<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">PHP Code:</div>
	<div class="bbcode_code"><code><code><span style="color: #000000">
<span style="color: #0000BB">$config</span><span style="color: #007700">&#91;</span><span style="color: #DD0000">'Datastore'</span><span style="color: #007700">&#93;&#91;</span><span style="color: #DD0000">'class'</span><span style="color: #007700">&#93;&nbsp;=&nbsp;</span><span style="color: #DD0000">'vB_Datastore_Memcached'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$i&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">//&nbsp;First&nbsp;Server<br /></span><span style="color: #0000BB">$i</span><span style="color: #007700">++;<br /></span><span style="color: #0000BB">$config</span><span style="color: #007700">&#91;</span><span style="color: #DD0000">'Misc'</span><span style="color: #007700">&#93;&#91;</span><span style="color: #DD0000">'memcacheserver'</span><span style="color: #007700">&#93;&#91;</span><span style="color: #0000BB">$i</span><span style="color: #007700">&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;</span><span style="color: #DD0000">'111.111.11.111'</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;ip&nbsp;of&nbsp;the&nbsp;first&nbsp;server<br /></span><span style="color: #0000BB">$config</span><span style="color: #007700">&#91;</span><span style="color: #DD0000">'Misc'</span><span style="color: #007700">&#93;&#91;</span><span style="color: #DD0000">'memcacheport'</span><span style="color: #007700">&#93;&#91;</span><span style="color: #0000BB">$i</span><span style="color: #007700">&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;</span><span style="color: #0000BB">11211</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$config</span><span style="color: #007700">&#91;</span><span style="color: #DD0000">'Misc'</span><span style="color: #007700">&#93;&#91;</span><span style="color: #DD0000">'memcachepersistent'</span><span style="color: #007700">&#93;&#91;</span><span style="color: #0000BB">$i</span><span style="color: #007700">&#93;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$config</span><span style="color: #007700">&#91;</span><span style="color: #DD0000">'Misc'</span><span style="color: #007700">&#93;&#91;</span><span style="color: #DD0000">'memcacheweight'</span><span style="color: #007700">&#93;&#91;</span><span style="color: #0000BB">$i</span><span style="color: #007700">&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$config</span><span style="color: #007700">&#91;</span><span style="color: #DD0000">'Misc'</span><span style="color: #007700">&#93;&#91;</span><span style="color: #DD0000">'memcachetimeout'</span><span style="color: #007700">&#93;&#91;</span><span style="color: #0000BB">$i</span><span style="color: #007700">&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$config</span><span style="color: #007700">&#91;</span><span style="color: #DD0000">'Misc'</span><span style="color: #007700">&#93;&#91;</span><span style="color: #DD0000">'memcacheretry_interval'</span><span style="color: #007700">&#93;&#91;</span><span style="color: #0000BB">$i</span><span style="color: #007700">&#93;&nbsp;=&nbsp;</span><span style="color: #0000BB">15</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">//&nbsp;Second&nbsp;Server<br /></span><span style="color: #0000BB">$i</span><span style="color: #007700">++;<br /></span><span style="color: #0000BB">$config</span><span style="color: #007700">&#91;</span><span style="color: #DD0000">'Misc'</span><span style="color: #007700">&#93;&#91;</span><span style="color: #DD0000">'memcacheserver'</span><span style="color: #007700">&#93;&#91;</span><span style="color: #0000BB">$i</span><span style="color: #007700">&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;</span><span style="color: #DD0000">'111.111.11.222'</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;ip&nbsp;of&nbsp;the&nbsp;second&nbsp;server<br /></span><span style="color: #0000BB">$config</span><span style="color: #007700">&#91;</span><span style="color: #DD0000">'Misc'</span><span style="color: #007700">&#93;&#91;</span><span style="color: #DD0000">'memcacheport'</span><span style="color: #007700">&#93;&#91;</span><span style="color: #0000BB">$i</span><span style="color: #007700">&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;</span><span style="color: #0000BB">11211</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$config</span><span style="color: #007700">&#91;</span><span style="color: #DD0000">'Misc'</span><span style="color: #007700">&#93;&#91;</span><span style="color: #DD0000">'memcachepersistent'</span><span style="color: #007700">&#93;&#91;</span><span style="color: #0000BB">$i</span><span style="color: #007700">&#93;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$config</span><span style="color: #007700">&#91;</span><span style="color: #DD0000">'Misc'</span><span style="color: #007700">&#93;&#91;</span><span style="color: #DD0000">'memcacheweight'</span><span style="color: #007700">&#93;&#91;</span><span style="color: #0000BB">$i</span><span style="color: #007700">&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$config</span><span style="color: #007700">&#91;</span><span style="color: #DD0000">'Misc'</span><span style="color: #007700">&#93;&#91;</span><span style="color: #DD0000">'memcachetimeout'</span><span style="color: #007700">&#93;&#91;</span><span style="color: #0000BB">$i</span><span style="color: #007700">&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$config</span><span style="color: #007700">&#91;</span><span style="color: #DD0000">'Misc'</span><span style="color: #007700">&#93;&#91;</span><span style="color: #DD0000">'memcacheretry_interval'</span><span style="color: #007700">&#93;&#91;</span><span style="color: #0000BB">$i</span><span style="color: #007700">&#93;&nbsp;=&nbsp;</span><span style="color: #0000BB">15</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">//&nbsp;Third&nbsp;Server<br /></span><span style="color: #0000BB">$i</span><span style="color: #007700">++;<br /></span><span style="color: #0000BB">$config</span><span style="color: #007700">&#91;</span><span style="color: #DD0000">'Misc'</span><span style="color: #007700">&#93;&#91;</span><span style="color: #DD0000">'memcacheserver'</span><span style="color: #007700">&#93;&#91;</span><span style="color: #0000BB">$i</span><span style="color: #007700">&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;</span><span style="color: #DD0000">'111.111.11.333'</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;ip&nbsp;of&nbsp;the&nbsp;third&nbsp;server<br /></span><span style="color: #0000BB">$config</span><span style="color: #007700">&#91;</span><span style="color: #DD0000">'Misc'</span><span style="color: #007700">&#93;&#91;</span><span style="color: #DD0000">'memcacheport'</span><span style="color: #007700">&#93;&#91;</span><span style="color: #0000BB">$i</span><span style="color: #007700">&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;</span><span style="color: #0000BB">11211</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$config</span><span style="color: #007700">&#91;</span><span style="color: #DD0000">'Misc'</span><span style="color: #007700">&#93;&#91;</span><span style="color: #DD0000">'memcachepersistent'</span><span style="color: #007700">&#93;&#91;</span><span style="color: #0000BB">$i</span><span style="color: #007700">&#93;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$config</span><span style="color: #007700">&#91;</span><span style="color: #DD0000">'Misc'</span><span style="color: #007700">&#93;&#91;</span><span style="color: #DD0000">'memcacheweight'</span><span style="color: #007700">&#93;&#91;</span><span style="color: #0000BB">$i</span><span style="color: #007700">&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$config</span><span style="color: #007700">&#91;</span><span style="color: #DD0000">'Misc'</span><span style="color: #007700">&#93;&#91;</span><span style="color: #DD0000">'memcachetimeout'</span><span style="color: #007700">&#93;&#91;</span><span style="color: #0000BB">$i</span><span style="color: #007700">&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$config</span><span style="color: #007700">&#91;</span><span style="color: #DD0000">'Misc'</span><span style="color: #007700">&#93;&#91;</span><span style="color: #DD0000">'memcacheretry_interval'</span><span style="color: #007700">&#93;&#91;</span><span style="color: #0000BB">$i</span><span style="color: #007700">&#93;&nbsp;=&nbsp;</span><span style="color: #0000BB">15</span><span style="color: #007700">;&nbsp;<br /></span><span style="color: #0000BB"></span>
</span>
</code></code></div>
</div> The only other setting that that you might be concerned with here is the 'memcacheweight' setting. This is a relative number to allow you more closely control what servers are handling the memcached load. If we set the second server's 'memcacheweight' to '2', while the other servers' were set to '1', then that server would take twice the memcached load than the first two. This is handy when you have multiple servers that don't have the same amount of memory.<br />
<br />
After you save your config file, you should immediately go to your forum to make sure that it's still up. If something is configured wrong, you'll see a white page with an error at the top. If the forum is still up, you're in good shape. Just to be sure, I usually log into the shell, run 'top', and look for memcached to show up on the list. This just tells me that it's doing something. If your forum runs vBSEO, you should log into the control panel and enable memcached under the 'Caching Options'. Please note that vBSEO requires a more recent version of memcached than vB does.<br />
<br />
<font size="1">Note: After reading through this post, it really sounds like this is a difficult process. It honestly isn't. I considered making a dumbed down "John Wayne's Guide to Configuring Memcached", but decided against it. For anyone who is gutsy, you can probably figure out what I'm talking about and try it that way, although I wouldn't recommend it.<br />
</font></blockquote>

 ]]></content:encoded>
			<dc:creator>Dick</dc:creator>
			<guid isPermaLink="true">http://www.vbulletin.com/forum/blog.php?b=2391</guid>
		</item>
		<item>
			<title>How-To: Beginners Guide to Creating a vBulletin 4 “Test” Environment</title>
			<link>http://www.vbulletin.com/forum/blog.php?b=2389</link>
			<pubDate>Mon, 16 Nov 2009 21:29:17 GMT</pubDate>
			<description><![CDATA[Tutorial written by *Pritesh Shah* & *Michael Anders* 
 
 So you've finally got your hands on the shiny new vBulletin4 and you are ready to upgrade your forum. But wait! Before you upgrade – how do...]]></description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore"><font size="2">Tutorial written by <b>Pritesh Shah</b> &amp; <b>Michael Anders</b></font><br />
<br />
 So you've finally got your hands on the shiny new vBulletin4 and you are ready to upgrade your forum. But wait! Before you upgrade – how do you test to make sure everything will work? This guide will show you how to create a vBulletin4 “Test” environment without breaking your “Live” forum.<br />
 <br />
<font color="Red"><b>Important Notes:</b></font><br />
 As always, please proceed at your own risk. While some of the general steps and advice are applicable to a Windows-based web hosting environment, this guide assumes that you have “<b>shell access</b>” on a <b>Unix-based</b> web host. “Shell access” is command line access to your site – and you will notice that we'll provide you with helpful Unix commands to complete various steps.<br />
 <font size="3"><br />
</font> <font size="3"><b>General Overview of the Process</b></font><br />
 <ul><li>Copy all     vBulletin files from the “Live” site into the “Test”     directory</li>
<li>Create a new     Mysql database for vBulletin4 upgrade</li>
<li>Create a copy     of your current “Live” database</li>
<li>Restore the     database copy into the new vBulletin4 database</li>
<li>Edit     vBulletin 3 configuration file</li>
<li>Validate     vBulletin 3 test environment</li>
<li>Upload     vBulletin4 files</li>
<li>Upgrade your     “test” forum</li>
<li>Test your     forum on vBulletin4 in the “Test” directory</li>
</ul>  <font size="3"><b>Technical How-To Guide &amp; Steps</b></font><br />
  <ol style="list-style-type: decimal"><li><b><font color="DarkGreen">(SHELL)</font> Log in and Find Current     Document Root</b><br />
     First, lets log     into the web server and find where your current vBulletin 3 site     lives. Access your server by using your favorite “terminal”     client and navigate into your site's root directory via shell     access. Your document root directory may look something like:     <br />
<br />
<font color="DarkGreen">/var/www/html/domain.com/</font><br />
<br />
<div class="bbcode_container">
	<div class="bbcode_quote"><div class="quote_container">
		<div class="bbcode_quote_container"></div>
		
			<i><b>Tip:</b> You can navigate     through your file system by using commands like:</i><br />
<br />
<b>cd</b><br />
<b>ls</b><br />
<b>dir</b><br />
<b>pwd</b>     – shows your current location within directory tree<br />
<img src="http://carblog.com/vbnexus/images/upgrade_ssh.jpg" border="0" alt="" />
		</div>
	</div>
</div> At the     end of this step you should be located inside your web document root     directory, in our example we use <b>/var/www/html/<br />
<br />
</b></li>
<li><b><font color="DarkGreen">(SHELL)</font>     Create a new directory for vBulletin4 upgrade test.<br />
</b>In our     example we ran the following command:<br />
<br />
<font color="DarkGreen">mkdir vb40</font><br />
<br />
and     created the following directory structure in our document     root:<br />
<br />
<b>/var/www/html/vb40<br />
<br />
</b></li>
<li><b><font color="DarkGreen">(SHELL)</font>     Copy vBulletin 3 Files into vBulletin4 Test Directory<br />
</b>While     located in web document root directory <b>/var/www/html</b> we     execute the following command:<br />
<br />
<font color="DarkGreen">cp -R /var/www/html/vb375/     /var/www/html/vb40/</font><br />
<br />
<font color="Red"><b>Please note</b></font> that we assume that your live     forum is located in a directory called “<b>vb375</b>”; in reality –     your forum could be located in the web document root directory     itself or located in a directory named “<b>forum</b>”. This means that     you'll have to modify the command above to work with your directory     structure. Please note that the trailing slashes ( / ) are     important!<br />
<br />
After this step is complete you should have an exact copy     of your <b>vBulletin 3</b> files and directories inside the brand new     “<b>vb40</b>” directory.</li>
<li><b><font color="DarkGreen">(SHELL)</font>     Log Into Your MySQL Server<br />
</b>Log into mysql server by executing     the following command, please note that you will need to know your     mysql database username and password. Check with your internet     service provider if you do not have access to these     credentials.<br />
<br />
<font color="DarkGreen">mysql -u'vb40dbusername' -p'vb40dbpassword'</font><br />
<br />
<b>IF</b> your web host provided you with a separate mysql server ip address     use the following command instead:<br />
 <br />
<font color="DarkGreen">mysql -h'vb40dbip'     -u'vb40dbusername' -p'vb40dbpassword'<br />
<br />
</font><div class="bbcode_container">
	<div class="bbcode_quote"><div class="quote_container">
		<div class="bbcode_quote_container"></div>
		
			<b>Tip:</b> Mysql server     user information can be found in the config.php file in vBulletin,     located in the forum root /includes/ folder. Please consult your     host if you are unable to log into your mysql server.
		</div>
	</div>
</div></li>
<li><b>(<font color="Indigo">MYSQL</font>)     Create a New vBulletin4 Mysql Database<br />
</b>Once you've     successfully logged into your Mysql server, execute the following     command to create a brand new database:<br />
<br />
<font color="Indigo">CREATE DATABASE     vb40;<br />
<br />
</font></li>
<li><b>Disable     the “Live” vBulletin discussion forum<br />
</b>Go to your     vBulletin 3 Admin Control Panel, select the vBulletin Options tab on     the left and set your vBulletin On / Off option to “No”, not     active.<br />
<img src="http://carblog.com/vbnexus/images/upgrade_vbo.jpg" border="0" alt="" /></li>
<li><b>Create Mysql Database Dump and     Restore into a New Database<br />
</b>In     <b>step #5</b> you've created a new database called <b>vb40</b>. In this step you     will create a “database dump” file of your existing “Live”     site and <b>restore it into the new database</b>. In essence, you will     create an <b>exact copy</b> of your database so that you can safely upgrade this copy to     vBulletin4. Please note that you will need to know the database     name, username and password for your current vBulletin 3 database.     The username and password is most likely the same one you've used in     step #5.<br />
<br />
Once you have all of the information, execute this command     in your shell:<br />
<font color="DarkGreen"><br />
mysqldump -uvb375dbusername -p'vb375dbpassword' vb375 | mysql -uvb40dbusername -p'vb40dbpassword' -C vb40<br />
</font><br />
<b>Alternatively, IF</b> your database     server is located on a different IP use the following command to     include the directive for the database host:<br />
<br />
<font color="DarkGreen">mysqldump -hvb375dbip -uvb375dbusername -p'vb375dbpassword' vb375 | mysql -hvb40dbip -uvb40dbusername -p'vb40dbpassword' -C vb40<br />
<br />
</font></li>
<li><b>Turn ON “Live” Site<br />
</b>Now that you've made an exact copy of your “Live” vBulletin 3     database; let's go ahead and turn ON the “Live” discussion forum. Again, go to your Admin Control Panel and set the vBulletin     option ON/OFF to “On”.</li>
<li><b>Activate the “Test”     vBulletin3 Site<br />
</b>In <b>step #3</b>     you've created a mirror copy of your vBulletin 3 forum directory in     the following location inside a directory called     “<b>/var/www/html/vb40/</b>”. In <b>step #7</b> you've created a copy of your     database. Now, <b>let's edit the config file</b> in the “Test”     directory so that it pulls data from the new “vb40” database. To     do this:<br />
<br />
<font color="DarkGreen">Edit “config.php” located in the “Testing”     directory /var/www/html/vb40/includes/; change the “Database Name”     to “vb40”.<br />
<br />
</font></li>
<li><b>Test the vBulletin 3 “Test”     Installation<br />
</b>Go to your web     browser and access the “Test” directory by visiting the “/vb40/”     URL; example, <a href="http://www.mydomainname.com/vb40/" target="_blank"><br />
<br />
http://www.mydomainname.com/vb40/</a><br />
<br />
<b>If     the process was successful you should now have 2 identical vBulletin     3 installations; one is your current “Live” discussion forum and     the additional “Test” instance located in the /vb40/     folder.<br />
</b><br />
<font color="Red"><b>Please note</b></font>; that your “Live” vBulletin site was     turned ON; and your “Test” installation was turned “OFF” -     this is a good way to make sure they are using different databases.     No new posts or users online should be observed on the “Test”     installation. If you are seeing otherwise – you may have confused     the database names and incorrectly configured the config.php file.     Please go back and make sure this is resolved!</li>
</ol> <font size="3"><font color="Blue"><b>--- Now that you have a copy of your vBulletin 3 site for “Testing”, lets Upgrade to vBulletin 4 Suite!</b></font></font><br />
 <br />
 <ol style="list-style-type: decimal"><li><b>vBulletin 3 Pre-Flight Check:     Disable Products! Check Settings!<br />
</b>Log     into the Administration Control Panel in your “Test”     installation of vBulletin 3 (in the /vb40 directory) and disable all     products; <b>do not disable all products by disabling the plugin system     or editing the config.php file</b>. Rather, simply choose “disable”     in the product manager menu.</li>
<li><b>Upload and Overwrite vBulletin     3 Files with vBulletin 4 Suite<br />
</b>Upload     and <b>overwrite all</b> of the vBulletin 3 files in the <b>/vb40/</b> folder with     the new vBulletin 4 files package. Please make sure that you are     actually overwriting the existing files and not just creating new     files.</li>
<li><b>Execute vBulletin 4 Suite     Upgrade Script<br />
</b>Run the     vBulletin 4 Upgrade script by executing upgrade.php file located in     the newly created “install” directory.<br />
<br />
<b>Example:</b>     <a href="http://www.mydomain.com/vb40/install/upgrade.php" target="_blank">http://www.mydomain.com/vb40/install/upgrade.php<br />
<br />
</a></li>
<li><b>Test vBulletin 4 Suite<br />
</b>After     the vBulletin 4 upgrade script successfully completes, you can begin     playing around with the new vBulletin 4 Suite installation located     in the /vb40/ “Test” directory.<br />
<br />
<font color="Red"><b>Please note</b></font> that at this     point you should have 2 vBulletin installations, the first is your     “Live” site and the second is your vBulletin 4 Suite “Test”     environment.</li>
</ol> <br />
<div class="bbcode_container">
	<div class="bbcode_quote"><div class="quote_container">
		<div class="bbcode_quote_container"></div>
		
			<b>Additional Tips:<br />
<br />
</b>If you are unable to log into your “Test” installation's AdminCP you may have a problem with your cookie path / domain. If this is the case; upload tools.php file from your vBulletin 4 “Do Not Upload” directory. Execute the file to edit the cookie settings.
		</div>
	</div>
</div> </blockquote>

 ]]></content:encoded>
			<dc:creator>IBxAnders</dc:creator>
			<guid isPermaLink="true">http://www.vbulletin.com/forum/blog.php?b=2389</guid>
		</item>
		<item>
			<title>Using custom templates within your own vBulletin 4 based files</title>
			<link>http://www.vbulletin.com/forum/blog.php?b=2388</link>
			<pubDate>Mon, 16 Nov 2009 19:04:50 GMT</pubDate>
			<description><![CDATA[<style type="text/css">     <!--         @page { margin: 0.79in }         P { margin-bottom: 0.08in }     -->     </style>  *Custom Templates* 
If you create custom vBulletin based files that utilize...]]></description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore"><style type="text/css">     <!--         @page { margin: 0.79in }         P { margin-bottom: 0.08in }     -->     </style>  <font face="Verdana, sans-serif"><font size="2"><b>Custom Templates</b></font></font><font face="Verdana, sans-serif"><font size="2"><br />
If you create custom vBulletin based files that utilize custom created templates within your forum installation, there are a few tricks to get them to work with vBulletin 4. Prior to vBulletin 4, you were able to use the following code to get vBulletin to evaluate the custom template for your script.<br />
<br />
</font></font><font color="#0000ff"><font face="Verdana, sans-serif"><font size="2"><i><b>eval('print_output("' . fetch_template('myCustomTemplate') . '");');</b></i></font></font></font><font face="Verdana, sans-serif"><font size="2"><br />
<br />
With vBulletin 4, the same thing can be accomplished with the following two lines of code.<br />
<br />
</font></font><font color="#0000ff"><font face="Verdana, sans-serif"><font size="2"><i><b>$templater = vB_Template::create('myCustomTemplate');<br />
print_output($templater->render());</b></i></font></font></font><font face="Verdana, sans-serif"><font size="2"><br />
<br />
This code will now allow you to reference vBulletin 4 functionality to use your custom template within your custom vBulletin PHP file.<br />
<br />
</font></font><font face="Verdana, sans-serif"><font size="2"><b>Example</b></font></font><font color="#000000"><font face="Verdana, sans-serif"><font size="2"><br />
Imagine that your</font></font></font><font color="#000000"><font face="Verdana, sans-serif"><font size="2">custom vBulletin PHP script simply outputs the words "Hello there" and you want that text to appear within your own custom vBulletin template. Your file would have the following somewhere within the code.<br />
</font></font></font><font color="#0000ff"><font face="Verdana, sans-serif"><font size="2"><i><b> <br />
$myScript_variable = "Hello there";</b></i></font></font></font><font face="Verdana, sans-serif"><font size="2"><br />
<br />
Within your custom template (called </font></font><font color="#0000ff"><font face="Verdana, sans-serif"><font size="2"><i><b>myCustomTemplate</b></i></font></font></font><font face="Verdana, sans-serif"><font size="2"> as an example), you would reference this variable as follows.<br />
<br />
</font></font><font color="#0000ff"><font face="Verdana, sans-serif"><font size="2"><i><b>{vb:raw myScript_variable}</b></i></font></font></font><font face="Verdana, sans-serif"><font size="2"><br />
<br />
Back within your script, you can make a call to force your custom template to be evaluated. This would be accomplished using the previously example.<br />
<br />
</font></font><font color="#0000ff"><font face="Verdana, sans-serif"><font size="2"><i><b>$templater = vB_Template::create('myCustomTemplate');<br />
print_output($templater->render());</b></i></font></font></font></blockquote>

 ]]></content:encoded>
			<dc:creator>David IB</dc:creator>
			<guid isPermaLink="true">http://www.vbulletin.com/forum/blog.php?b=2388</guid>
		</item>
		<item>
			<title>Pushing your variables to vBulletin 4 templates</title>
			<link>http://www.vbulletin.com/forum/blog.php?b=2387</link>
			<pubDate>Mon, 16 Nov 2009 19:03:11 GMT</pubDate>
			<description><![CDATA[<style type="text/css">     <!--         @page { margin: 0.79in }         P { margin-bottom: 0.08in }         A:link { so-language: zxx }     -->     </style>  Prior to vBulletin 4, you could...]]></description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore"><style type="text/css">     <!--         @page { margin: 0.79in }         P { margin-bottom: 0.08in }         A:link { so-language: zxx }     -->     </style>  <font face="Verdana, sans-serif"><font size="2">Prior to vBulletin 4, you could reference your plugin variables within the templates without any extra necessary work. Say you wanted print out the words "This is my plugin" within the template </font></font><font color="#0000ff"><font face="Verdana, sans-serif"><font size="2"><i><b>header</b></i></font></font></font><font face="Verdana, sans-serif"><font size="2">. The following code (with the correct plugin Hook Location) would allow you to do that.<br />
<br />
</font></font><font color="#0000ff"><font face="Verdana, sans-serif"><font size="2"><i><b>$myplugin_output = "This is my plugin";</b></i></font></font></font><font color="#0000ff"><font face="Verdana, sans-serif"><font size="2"><i><b><br />
<br />
$myplugin_output</b></i></font></font></font><font color="#000000"><font face="Verdana, sans-serif"><font size="2"> would then be referenced within the appropriate template.</font></font></font><font face="Verdana, sans-serif"><font size="2"><br />
<br />
With vBulletin 4, a little extra work is necessary to get your custom text to appear within your forum. You must now reference which templates you want to push these variables to or vBulletin will ignore them completely.<br />
<br />
If you wanted to reference this variable within the template </font></font><font color="#0000ff"><font face="Verdana, sans-serif"><font size="2"><i><b>header</b></i></font></font></font><font face="Verdana, sans-serif"><font size="2">, you would need to include the following somewhere within my plugin code after the variable was set.<br />
<br />
</font></font><font color="#0000ff"><font face="Verdana, sans-serif"><font size="2"><i><b>vB_Template::preRegister('header',array('myplugin_  output' => $myplugin_output)</b></i></font></font></font><font color="#0000ff"><font face="Verdana, sans-serif"><font size="2"><i><b>)</b></i></font></font></font><font color="#0000ff"><font face="Verdana, sans-serif"><font size="2"><i><b>;</b></i></font></font></font><font face="Verdana, sans-serif"><font size="2"><br />
<br />
</font></font><font face="Verdana, sans-serif"><font size="2">If you wanted to push this variable to multiple templates, you would need to include multiple versions of this line within your plugin. For example, if you wanted to push this variable to your </font></font><font color="#0000ff"><font face="Verdana, sans-serif"><font size="2"><i><b>FORUMHOME</b></i></font></font></font><font face="Verdana, sans-serif"><font size="2"> template in addition to </font></font><font color="#0000ff"><font face="Verdana, sans-serif"><font size="2"><i><b>header</b></i></font></font></font><font face="Verdana, sans-serif"><font size="2">, you would need to add the following lines to your plugin code.<br />
<br />
</font></font><font color="#0000ff"><font face="Verdana, sans-serif"><font size="2"><i><b>vB_Template::preRegister('header',array('myplugin_  output' => $myplugin_output)</b></i></font></font></font><font color="#0000ff"><font face="Verdana, sans-serif"><font size="2"><i><b>)</b></i></font></font></font><font color="#0000ff"><font face="Verdana, sans-serif"><font size="2"><i><b>;<br />
vB_Template::preRegister('FORUMHOME',array('myplug  in_output' => </b></i></font></font></font><font color="#0000ff"><font face="Verdana, sans-serif"><font size="2"><i><b>$myplugin_output));</b></i></font></font></font><font face="Verdana, sans-serif"><font size="2"><br />
<br />
If you wanted to reference multiple variables within one template, you would just add to the existing array.<br />
<br />
</font></font><font color="#0000ff"><font face="Verdana, sans-serif"><font size="2"><i><b>vB_Template::preRegister('header',array(<br />
   'myplugin_output' => $myplugin_output,<br />
    'myplugin_output' => $myplugin_output2,<br />
    'myplugin_output' => $myplugin_output3,<br />
);<br />
<br />
</b></i></font></font></font><font face="Verdana, sans-serif"><font size="2">Back to Part One: </font></font><a href="http://www.vbulletin.com/forum/entry.php?2385-Referring-to-plugin-variables-within-your-vBulletin-templates" target="_blank">http://www.vbulletin.com/forum/entry...etin-templates</a></blockquote>

 ]]></content:encoded>
			<dc:creator>David IB</dc:creator>
			<guid isPermaLink="true">http://www.vbulletin.com/forum/blog.php?b=2387</guid>
		</item>
		<item>
			<title>Getting Started with CMS Documentation Files (PDF)</title>
			<link>http://www.vbulletin.com/forum/blog.php?b=2386</link>
			<pubDate>Sat, 14 Nov 2009 21:49:50 GMT</pubDate>
			<description><![CDATA[To help accelerate learning and mastering the CMS features in the vBulletin 4.0 Publishing Suite (beta 3) product, we put together an updated set of "Getting Started with CMS" documentations.   
...]]></description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">To help accelerate learning and mastering the CMS features in the vBulletin 4.0 Publishing Suite (beta 3) product, we put together an updated set of &quot;Getting Started with CMS&quot; documentations.  <br />
<br />
There are 5 PDF documents and I think this might be the right order to read them:<br />
1.  CMS_Sections.pdf (spilt into 2 pdf files)<br />
2.  CMS_Permissions.pdf<br />
3.  CMS_Articles.pdf (spilt into 2 pdf files)<br />
4.  CMS_Widgets.pdf<br />
5.  CMS_Grids_&amp;_Layouts<br />
<br />
And if you missed my past blog post on &quot;Skinning your vB4 Forum in 10 Easy Steps&quot;, you can go here and download the PDF and example style:<br />
<a href="http://www.vbulletin.com/forum/entry.php?2373-vB4-Skinning-Your-Forum-in-10-Easy-Steps" target="_blank">http://www.vbulletin.com/forum/entry...-10-Easy-Steps</a><br />
<br />
These are still working drafts and we will be continue to update them, but in the meanwhile I am hoping this will help everyone get to speed faster.<br />
<br />
Thank you for all your help and support.<br />
<br />
Don Kuramura</blockquote>


<!-- attachments -->
	<div class="blogattachments">
		
			<fieldset class="blogcontent">
				<legend>Attached Thumbnails</legend>
				
			</fieldset>
		
		
		
		

	</div>
<!-- / attachments -->
 ]]></content:encoded>
			<dc:creator>Don Kuramura</dc:creator>
			<guid isPermaLink="true">http://www.vbulletin.com/forum/blog.php?b=2386</guid>
		</item>
		<item>
			<title>Referring to plugin variables within your vBulletin 4 templates</title>
			<link>http://www.vbulletin.com/forum/blog.php?b=2385</link>
			<pubDate>Sat, 14 Nov 2009 01:07:00 GMT</pubDate>
			<description><![CDATA[<style type="text/css">     <!--         @page { margin: 0.79in }         P { margin-bottom: 0.08in }     -->     </style> Prior to vBulletin 4, you were able to refer to your plugin's variables...]]></description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore"><style type="text/css">     <!--         @page { margin: 0.79in }         P { margin-bottom: 0.08in }     -->     </style> <font face="Verdana, sans-serif"><font size="2">Prior to vBulletin 4, you were able to refer to your plugin's variables exactly as you would refer to them within a standard PHP script. Due to the changes to the way vBulletin's templates work, this is no longer the case.<br />
<br />
Once you understand the new vBullein 4 template variable format, referring to your plugin's variables will be simple. Let's take a look at the new variable format by comparing some examples of how they look in vBulletin 3.8.X and vBulletin 4.<br />
<br />
</font></font><font face="Verdana, sans-serif"><font size="2"><b>Example 1</b></font></font><font face="Verdana, sans-serif"><font size="2"><br />
In this example, we will assume that you have written a plugin that stores its data within the variable </font></font><font color="#0000ff"><font face="Verdana, sans-serif"><font size="2"><i><b>$myplugin_output</b></i></font></font></font><font face="Verdana, sans-serif"><font size="2">. Using vBulletin 3.8.X, you could simply insert that variable within your templates and have the output display on the site.<br />
</font></font><br />
 <font face="Verdana, sans-serif"><font size="2">Within vBulletin 4, this same variable from your plugin would now be referenced as follows.<br />
<br />
</font></font><font color="#0000ff"><font face="Verdana, sans-serif"><font size="2"><i><b>{vb:raw myplugin_output}</b></i></font></font></font><font face="Verdana, sans-serif"><font size="2"><br />
<br />
Within vBulletin 4, all of the new template variables appear like the above example. The </font></font><font face="Verdana, sans-serif"><font size="2"><i>raw</i></font></font><font face="Verdana, sans-serif"><font size="2"> portion indicates that this is a raw variable and the translation between </font></font><font color="#0000ff"><font face="Verdana, sans-serif"><font size="2"><i><b>$myplugin_output</b></i></font></font></font><font face="Verdana, sans-serif"><font size="2"> and </font></font><font color="#0000ff"><font face="Verdana, sans-serif"><font size="2"><i><b>{vb:raw myplugin_output}</b></i></font></font></font><font face="Verdana, sans-serif"><font size="2"> occurs automatically.<br />
<br />
Remember, you must still reference this variable as </font></font><font color="#0000ff"><font face="Verdana, sans-serif"><font size="2"><i><b>$myplugin_output</b></i></font></font></font><font face="Verdana, sans-serif"><font size="2"> within your plugin. It is only within the templates that the same variable needs to be referenced in the new format.<br />
<br />
</font></font><font face="Verdana, sans-serif"><font size="2"><b>Example2<br />
</b></font></font><font face="Verdana, sans-serif"><font size="2">Say you store your variables as an array and one output variable within your plugin looks like </font></font><font color="#0000ff"><font face="Verdana, sans-serif"><font size="2"><i><b>$myplugin_var['output1']</b></i></font></font></font><font face="Verdana, sans-serif"><font size="2"> or </font></font><font color="#0000ff"><font face="Verdana, sans-serif"><font size="2"><i><b>$myplugin_var[output1]</b></i></font></font></font><font face="Verdana, sans-serif"><font size="2">. These variables are handled in the same way but with a slight variation. The following is how this same variable would be written within a vBulletin template.<br />
<br />
</font></font><font color="#0000ff"><font face="Verdana, sans-serif"><font size="2"><i><b>{vb:raw myplugin_var.output1}</b></i></font></font></font><font color="#0000ff"><font face="Verdana, sans-serif"><font size="2"> <br />
<br />
</font></font></font><font face="Verdana, sans-serif"><font size="2">Again, you are using a </font></font><font face="Verdana, sans-serif"><font size="2"><i>raw</i></font></font><font face="Verdana, sans-serif"><font size="2"> vBulletin 4 variable. This time, the key within your array variable is called after the array name and the two are separated by a period. So these types of variables always follow the following format.<br />
<br />
</font></font><font color="#0000ff"><font face="Verdana, sans-serif"><font size="2"><i><b>$arrayName['key']</b></i></font></font></font><font face="Verdana, sans-serif"><font size="2"> translates to </font></font><font color="#0000ff"><font face="Verdana, sans-serif"><font size="2"><i><b>{vb:raw arrayName.key}</b></i></font></font></font><font face="Verdana, sans-serif"><font size="2"><br />
<br />
It's that simple. Once your get the formatting down, you will be able to reference your plugin variables without any issues just as you were able to within prior versions of vBulletin.<br />
<br />
Part Two: </font></font><a href="http://www.vbulletin.com/forum/entry.php?2387-Pushing-your-variables-to-templates" target="_blank">http://www.vbulletin.com/forum/entry...s-to-templates</a></blockquote>

 ]]></content:encoded>
			<dc:creator>David IB</dc:creator>
			<guid isPermaLink="true">http://www.vbulletin.com/forum/blog.php?b=2385</guid>
		</item>
		<item>
			<title>vBulletin 4.0 Beta 3 - Now Available to Pre-Sale Customers</title>
			<link>http://www.vbulletin.com/forum/blog.php?b=2384</link>
			<pubDate>Fri, 13 Nov 2009 03:23:19 GMT</pubDate>
			<description>All of us at vBulletin are pleased to announce the release of vBulletin 4.0 Publishing Suite Beta 3 and vBulletin 4.0 Forum Beta 3, our first public beta release of vBulletin 4.0. We’re extremely...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore"><font size="2">All of us at vBulletin are pleased to announce the release of vBulletin 4.0 Publishing Suite Beta 3 and vBulletin 4.0 Forum Beta 3, our first public beta release of vBulletin 4.0. We’re extremely excited about hitting this milestone, and we know many of you can’t wait to get your hands on the product and start playing around with it.<br />
<br />
Beta 3 is available to all vBulletin 4.0 pre-sale customers. If you’re a pre-sale customer, you can download your copy of Beta 3 from the vBulletin Members Area at:</font><a href="http://members.vbulletin.com/" target="_blank"> http://members.vbulletin.com/</a><br />
<font size="2"><br />
Since the launch of Beta 2 on vBulletin.com, we’ve fixed more than 100 bugs thanks to valuable feedback from our customers and hard work on the part of our developers. Please keep the feedback coming as you explore Beta 3.<br />
<br />
We also want to say a huge “thank you” to all of our vBulletin 4.0 private alpha and beta testers. Their contributions were crucial in bringing you the product we have for you to test today. You guys rock!<br />
<br />
Go here to find some FAQs about Beta 3:<br />
</font><a href="http://www.vbulletin.com/forum/showthread.php?325115-vBulletin-Beta-3-Released-to-Customers-with-4-0-Licenses&amp;p=1838067" target="_blank">http://www.vbulletin.com/forum/showt...nses&amp;p=1838067</a><br />
<br />
<font size="2">In the meantime, enjoy exploring vBulletin 4.0!</font></blockquote>

 ]]></content:encoded>
			<dc:creator>Don Kuramura</dc:creator>
			<guid isPermaLink="true">http://www.vbulletin.com/forum/blog.php?b=2384</guid>
		</item>
		<item>
			<title>Challenges in Curating and Publishing Content Online</title>
			<link>http://www.vbulletin.com/forum/blog.php?b=2382</link>
			<pubDate>Thu, 12 Nov 2009 11:43:17 GMT</pubDate>
			<description>First there was the L.A. Times, and news you consume while sipping coffee on a Sunday morning. Then LATimes.com. Much later, Forums and Blogging came around, and the Web blew-up, millions of voices...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">First there was the L.A. Times, and news you consume while sipping coffee on a Sunday morning. Then LATimes.com. Much later, Forums and Blogging came around, and the Web blew-up, millions of voices came online, writing their own articles, cultivating myriads of micro-audiences, many of them growing to online publishing powerhouses.<br />
<br />
Somewhere in that time-frame social networking also blew-up. Friendster. MySpace. Facebook. Then micro-publishing with Twitter. And statuses everywhere. People and content are everywhere, interconnected, closer.<br />
<br />
All this has so-far left us with the following main categories of content sources:<br />
<br />
<ol style="list-style-type: decimal"><li>Purely editorialized destinations such as CNN.com</li>
<li>Blogs</li>
<li>Forums</li>
</ol><br />
The first category strives to provide quality content with paid writers, without emphasis on community-contributed content. They claim and strive to "cover" stories, not merely "opine on topics". While the line is blurry, they've attained credibility, they're part of The Press, their web sites have fancy layouts, sections and categories. Readers aren't typically invited to "Comment" and among the few who do allow comments, this feature is typically executed as an "add-on" several clicks away. In this model, Content is unidirectional: Writer writes, readers read.<br />
<br />
Blogging has opened the doors for the little guy to voice an opinion while fostering an open-dialog with readership in the form of Comments closely tied to a Post. A blog typically revolves around a Person or Voice and a set of Interests. Bloggers have for years challenged mainstream media in their coverage of events in timeliness and comprehensiveness. TV and Newspapers find themselves referencing and incorporating bloggers in their coverage. Part of this Blogger's edge flows from agility afforded by their open bias and their rapid-publishing model, as well as their ability to leverage content and feedback from their readership and fellow bloggers. In the blogging model, Content is bidirectional: Writer writes, readers write-back.<br />
<br />
Forums have for over a decade grown into the ultimate source of timely information on a wide variety of topics revolving around a Niche Interest, powered by many Voices. Content flows from a collaborative and conversational model. Questions and Answers. Debates. There are no "second-class" contributors, in fact, a Thread Starter Post rarely contains the most interesting information, it's all in the conversation that ensues. All replies are equal. In this model, Content is omnidirectional: Many writers are constantly writing, readers are writers.<br />
<br />
These models all have advantages and drawbacks.<br />
<br />
While you've come to enjoy and trust the structured, consistent and reliable flow of quality event coverage coming from an editorialized site, you'll often find yourself wishing you could offer your opinion on an article to other readers.<br />
<br />
While a certain Blog may have given you a lot of interesting and useful information for a while, you might find yourself yearning for some variety of opinion on a given topic as you start looking around for other bloggers or simply flee to a Forum.<br />
<br />
After having enjoyed the variety of information and opinion on a Forum, you're finding yourself struggling with the vast amount of information, constantly wandering from one topic to the other while having the sneaking suspicion that someone somewhere is writing a very interesting post and you're not seeing it!<br />
<br />
Beyond the drawbacks of each Content model, it's typically hard for a Publisher to explore which fits them best without wedging themselves into a platform slanted toward a specific model. While transition is always possible with modules, add-ons, plug-ins or full-fledged migrations, the process is typically painful, costly and time-consuming.<br />
<br />
It's time for a publishing platform to keep your options open while enabling you to explore, blend and leverage those models.<br />
<br />
It's time for Facebook addicts to graduate from the "friend of a friend" model, by meeting interesting new people on your site around the niche interest they share: the DNA for true social networking.<br />
<br />
It's time to evolve way beyond Forums. It's time to graduate your Moderators from the "Content-Filterers" they currently are, to the "Content Curators" they could become. it's time to break valuable Content from its paginated forum shackles right onto the front-page. It's time to reward your most prolific users with prestigious links back to their profiles from the article, so they might connect with more users who are interested in their writing. And what better way  is there to nurture their writing, than with a welcoming Blogging home?<br />
<br />
it's time for a publishing platform to give you the tools you need to enable, foster and reward a culture of Great Content.<br />
<br />
It's time.</blockquote>

 ]]></content:encoded>
			<dc:creator>chrisholland</dc:creator>
			<guid isPermaLink="true">http://www.vbulletin.com/forum/blog.php?b=2382</guid>
		</item>
		<item>
			<title>New CMS Tutorial: Managing Sections and Content</title>
			<link>http://www.vbulletin.com/forum/blog.php?b=2383</link>
			<pubDate>Wed, 11 Nov 2009 20:50:01 GMT</pubDate>
			<description><![CDATA[Since the new CMS went up on vBulletin.com last Friday, we've received a ton of great initial feedback.  We're reading every comment and taking everyone's input into consideration as we tweak the...]]></description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore"><font size="2">Since the new CMS went up on vBulletin.com last Friday, we've received a ton of great initial feedback.  We're reading every comment and taking everyone's input into consideration as we tweak the CMS.  Thanks for the great response, and please keep the suggestions coming!<br />
<br />
One theme we're seeing in the feedback is that people are finding our CMS tutorial articles valuable as they explore the CMS.  I've just created a new tutorial article on Managing CMS Sections and Content.  This article describes the various section features and attributes, including:<br />
<br />
-       Setting a unique style and layout for each section<br />
-       How to change the number of columns the articles will be displayed<br />
-       How to set section links on the top navbar<br />
-       How to manage which content to display for each section.<br />
-       Managing all the content assigned to a section and its sub-sections<br />
<br />
You can check out the article here:<br />
</font><a href="http://www.vbulletin.com/forum/content.php?93-Managing-CMS-Section-and-Content" target="_blank">http://www.vbulletin.com/forum/conte...on-and-Content</a><br />
<font size="2"> <br />
We also held our first Developer Chat yesterday evening, and got a great response.  We plan to continue these chats on a regular basis.  If you weren't able to join the chat live, you can find a transcript at:  <a href="http://www.vbulletin.com/forum/showthread.php?324757-Developer-Chat" target="_blank">http://www.vbulletin.com/forum/showt...Developer-Chat</a><br />
<br />
Finally, some of you have asked for some more information about the vB team.  Here's some background on me in case you're interested:<br />
<br />
In my role as Director of Product Management for vBulletin, I oversee all aspects of the vBulletin product development process. I have quite a bit of experience in software, web, and mobile product development, and I'm having a blast applying my multi-platform skills to the vBulletin environment.<br />
<br />
Before joining vBulletin, I worked at both big companies and small start-ups.  At Sony Pictures Digital Entertainment, I was the Director of Product Development, where I oversaw global mobile product development working on mobile games with brands like Spider-Man 2, Wheel of Fortune, Jeopardy, Snoop Dogg, and the New York Times.  At American Greetings Interactive, I was the VP Product Management, where I headed all mobile, instant messaging, and social networking products.  As an entrepreneur, I co-founded a company that developed social applications on the Facebook platform, and in 1999 I founded a company that designed innovative new toys for Mattel.  I have a B.S. and M.S. in Electrical Engineering from UC San Diego and also have a patent in multimedia databases.<br />
<br />
We're all looking forward to the Public Beta release later this week!  Stay tuned for more information.<br />
<br />
<br />
</font></blockquote>

 ]]></content:encoded>
			<dc:creator>Don Kuramura</dc:creator>
			<guid isPermaLink="true">http://www.vbulletin.com/forum/blog.php?b=2383</guid>
		</item>
		<item>
			<title>CMS Update</title>
			<link>http://www.vbulletin.com/forum/blog.php?b=2381</link>
			<pubDate>Fri, 06 Nov 2009 22:45:38 GMT</pubDate>
			<description>Just wanted to give a quick update on the CMS features of the vBulletin 4.0 Publishing Suite.  We just launched the CMS on our site.  Check it out at:http://www.vbulletin.com/forum/content.php 
 
You...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">Just wanted to give a quick update on the CMS features of the vBulletin 4.0 Publishing Suite.  We just launched the CMS on our site.  Check it out at:<a href="http://www.vbulletin.com/forum/content.php" target="_blank">http://www.vbulletin.com/forum/content.php</a><br />
<br />
You are going to see a sample site with multiple sections, categories and content created with our CMS.  We are still trying out different layout and content.  It would be great to hear suggestions from the community about what type of content they would like to see here.  In fact, we may elect &#8220;editors&#8221; from the community to publish new articles.<br />
<br />
For today, most of the content on the site is &#8220;lorem ipsum&#8221; articles with some of random photos.   But on the homepage, I created 3 sample tutorial articles that I think will be helpful:<br />
<br />
1.    A visual guide of the various elements on the page. <br />
<a href="http://www.vbulletin.com/forum/content.php?40-Welcome-to-the-new-CMS--Read-me-first" target="_blank">http://www.vbulletin.com/forum/conte...-Read-me-first</a><br />
<br />
2.    An article that visually explains the steps to create an article.  This gives you a better sense of features available when publishing content. <br />
<a href="http://www.vbulletin.com/forum/content.php?44-How-Create-a-New-Article" target="_blank">http://www.vbulletin.com/forum/conte...-a-New-Article</a><br />
<br />
3.    Description of the new &#8220;Promote to Article&#8221; feature.<br />
<a href="http://www.vbulletin.com/forum/content.php?43-Promoting-Articles-from-the-Forums" target="_blank">http://www.vbulletin.com/forum/conte...rom-the-Forums</a><br />
<br />
I will continue to publish more documentation of the CMS features here.  <br />
<br />
To demonstrate some of the layout and customization features, on each section you will see different page layouts, content layouts, and various built-in widgets and also 3rd party widgets (i.e. Google Gadgets). Of course, all of this is totally configurable by the admin.  <br />
<br />
To promote more content discovery across the entire site, you will see on the homepage right sidebar, three widgets:<br />
-    Recent Forum Posts Widgets<br />
-    Recent Blog Entries Widget<br />
-    New Article Comments<br />
<br />
This is still beta and you will continually see the CMS UI designs, UX, and features evolve until we launch.  In fact, the screenshots on vbulletin.com site is already old and need to be replaced.  Some examples of recent changes as of this morning:<br />
-    The Section Navigation Widgets and Category Navigation look incredibly better. <br />
-    The Category Widget now displays the number of content in that category.<br />
-    We were now able to display the video player with the Article Preview on Section Pages.  <br />
-    Updated and created new icons.<br />
-    The Recent Comments widgets now display avatars.<br />
<br />
With all that said, take a look and we welcome suggestions and feedback.<br />
<br />
Cheers,<br />
<br />
Don</blockquote>

 ]]></content:encoded>
			<dc:creator>Don Kuramura</dc:creator>
			<guid isPermaLink="true">http://www.vbulletin.com/forum/blog.php?b=2381</guid>
		</item>
		<item>
			<title>Our Vision for vBulletin</title>
			<link>http://www.vbulletin.com/forum/blog.php?b=2379</link>
			<pubDate>Mon, 02 Nov 2009 20:38:51 GMT</pubDate>
			<description>As we continue to introduce to our new vBulletin 4.0 Publishing Suite, we would like to share our broader vision and answer some questions about where we are headed. 
 
First, our vision.  We believe...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore"><font face="Tahoma">As we continue to introduce to our new vBulletin 4.0 Publishing Suite, we would like to share our broader vision and answer some questions about where we are headed.<br />
<br />
First, our vision.  We believe that both content and community are king.  Launched in 2000, vBulletin has grown to become the leading and most powerful forum management software in the world, with considerably more than 100,000 copies sold. If you combined the traffic of all vBulletin sites, they would easily rank in top ten largest sites globally—roughly same the size as Wikipedia in terms of unique visitors. <br />
<br />
We take pride in the success of our customers as they build some of the leading websites in the world.  <br />
<br />
But we feel this is only a start.  To bring vBulletin to the next level, we are investing heavily.  Over the last year, we have doubled the number of developers working on the product—and they are a very talented group.  You should expect a much faster pace of development—and more exciting new features.<br />
<br />
To focus our efforts, we continue to do research with vBulletin community owners and webmasters.  We find that many of the most successful sites want to become more significant content publishers.  This is because many communities that started as simple discussion forums have grown into powerful databases of knowledge and content— true leaders in their areas of expertise.<br />
<br />
These site owners tell us they want simple, but powerful tools to manage articles, blogs, and all manner of content—all in one publishing platform.  The new vBulletin does this elegantly.  And by fully integrating with our forums, we believe that our new Suite uniquely captures the power of community and content in a single platform.<br />
<br />
This doesn’t mean that we have slowed investments in forum functionality.  To the contrary, we continue to invest heavily in the core forum platform and the new product includes some important new features.  In our research, vBulletin site owners tell us that in addition to content management, they want tools to help with such activities as: advertising monetization, SEO, site analytics, and mobile.  <br />
<br />
While we have made some changes in vB 3.8 and vB 4.0 along these lines, many of those changes are ahead for the vB 4.0 series.  In subsequent posts from our staff you will learn more specifics about our vision in these areas, in addition to our plans about more content management features, and more enhancements to forum and blog functionality.<br />
<br />
You may have noticed that we’ve priced vB 4 products to strongly encourage adoption of the Suite by offering a much larger discount on the Suite.  This is very intentional.  We now view vBulletin Publishing Suite as our core product.  As we add new functionality, it will continue to be fully integrated with the Suite. <br />
<br />
You may have also noticed that we’ve finished migration of vBulletin development from the U.K. to California.  We have deep respect for the wonderful heritage of vBulletin.  <br />
The primary reason for the move was the availability of pools of technical talent and proximity to the resources of our parent company.  <br />
<br />
We are occasionally asked about the role of Internet Brands as the parent of vBulletin.  For instance, how important is vBulletin to Internet Brands?  The answer is: very important.  Internet Brands is the largest operator of vBulletin sites in the world.  We deeply care about the software and will continue to invest heavily in its development.  Internet Brands brings far more resources to the ongoing development of vBulletin.<br />
<br />
We are also asked: how do we view certain vBulletin sites that compete with Internet Brands sites?  The answer is: we manage vBulletin for its own success and we view those sites as valued customers.  vBulletin thrives as its own community continues to grow.  Internet Brands websites must compete on their own and receive no “special treatment”.  Even where we compete, we are all in this together.  It’s a big world.<br />
<br />
In closing, we are extremely confident about vBulletin’s continued growth and success.  We are grateful for your wonderful support.  And we have enormous excitement about the road ahead for us all.<br />
</font></blockquote>

 ]]></content:encoded>
			<dc:creator>bbrisco</dc:creator>
			<guid isPermaLink="true">http://www.vbulletin.com/forum/blog.php?b=2379</guid>
		</item>
		<item>
			<title>Coming Soon: Forum and Suite Beta</title>
			<link>http://www.vbulletin.com/forum/blog.php?b=2377</link>
			<pubDate>Sat, 31 Oct 2009 01:13:34 GMT</pubDate>
			<description>First, a huge thank you for all the great (http://www.vbulletin.com/forum/forumdisplay.php?148-vBulletin-4-Suggestions) feedback...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">First, a huge thank you for all the <a href="http://www.vbulletin.com/forum/forumdisplay.php?148-vBulletin-4-Suggestions" target="_blank">great</a> <a href="http://www.vbulletin.com/forum/showthread.php?321973-vBulletin-Style-Revisions" target="_blank">feedback</a> on the 4.0 product from both the Alpha group and customers on vBulletin.com. <br />
<br />
vBulletin 4.0 is right around the corner and we're eager to deliver it to you as soon as possible.  To that end, we've decided to release a Beta version of Forum and Suite. If you have access to download Forum 4.0 or Suite 4.0, expect the Beta to be available in the member's area no later than mid-November.<br />
<br />
And stay tuned in as next week we'll launch the Publishing Suite on vBulletin.com!</blockquote>

 ]]></content:encoded>
			<dc:creator>Joe Rosenblum</dc:creator>
			<guid isPermaLink="true">http://www.vbulletin.com/forum/blog.php?b=2377</guid>
		</item>
		<item>
			<title>Part 1 vB4mance: Helping communities grow, performance data model changes in vB 4.0</title>
			<link>http://www.vbulletin.com/forum/blog.php?b=2376</link>
			<pubDate>Tue, 27 Oct 2009 02:26:12 GMT</pubDate>
			<description>The new vBulletin 4.0 boasts a lot of new changes such as CSS-friendly styles, multi-content search and other various new features. The biggest improvement in vBulletin 4.0, however – is well hidden...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">The new vBulletin 4.0 boasts a lot of new changes such as CSS-friendly styles, multi-content search and other various new features. The biggest improvement in vBulletin 4.0, however – is well hidden under the hood and it is the actual changes to the database storage mechanism. While there are exceptions, this change improves the way vBulletin sites scale upwards to serve more visitors and more content without sacrificing performance. As a preface to my blog post, allow me to please explain its purpose. I'd like to very simply describe the database processes and the problems that the average forum owner is facing. I'd also like to explain the basic solutions to these problems. Furthermore, I'd like to discuss this in the context of exciting changes coming in vB 4.0. I also further understand the problem, and I realize that this change is not a complete solution to the problems that large forums are facing, but it is a really good and exciting step in the right direction towards helping vBulletin perform better. <br />
<br />
<b>Let's talk Simple Database Server Mechanics:</b><br />
In an average installation, vBulletin typically stores data in only one database, while it uses many different tables inside that database to store different sets of data. For example, user information is stored in a table called “user”, and post text is accordingly stored in a separate table called “post”. When a new thread is added, or a reply to a post is made, a new “row” is created in these database tables to store the additional information. When a visitor wants to read a thread, they click on a link sending the database server a command to query the various database tables and show the specified results. An average active discussion forum could be seeing hundreds of these queries per second.<br />
 <br />
<b>Defining the General  Database Problem and Errors:</b><br />
As your discussion forum grows, you will notice that your hosting requirements may change drastically. As the user activity on your forum increases, so is the amount of data collected in your database. In turn, as the physical size of the database increases the server uses more and more hardware resources to service each individual request, such as displaying a thread or adding a new reply. When the server becomes overwhelmed with requests it starts taking a longer time to service each query, this starts a chain reaction where even the simplest of queries aren't being serviced; this condition is called “Locked”. The best way to visualize the “Locking” issue is to imagine a road traffic jam. This problematic condition manifests itself via MySQL error messages and general site slowness. It's believed that upgrading to a better web host (ie. Dedicated server) would resolve the performance issues; and while it's generally good advice – the reality is that upgrading to a better host only increases the safety buffer before the errors will occur again. In our example of a traffic jam, a server upgrade will increase the amount of travel lanes – but the traffic jam is still possible, even though more cars are able to travel. This traffic jam condition is not exclusive to vBulletin, but rather to a default implementation of MySQL; let's further examine the problem by talking about the Search function.<br />
 <br />
<b>Taking a Closer Look at “Search”</b><br />
Let's drill down and examine the search functionality in vBulletin 3. Earlier, we talked about the “thread” and “post” tables in the forum database. When a forum user executes a search, a query is issued that checks the “post” and “thread” tables for availability of the specified keywords. This process is very intensive and it uses an internal MySQL function called “fulltext” database search. Both the “thread” and “post” tables have an index that speeds up this process, something that resembles a table of contents in a book and it's called a “fulltext index”. While this search process is happening, the database server has much less resources dedicated to serving other queries (reading and especially writing). Depending on server capacity, activity level and the size of your post table, a single simple search can cause the aforementioned traffic jam condition and bring your forum down.<br />
 <br />
<b>Examining the Search Issue and Solutions</b><br />
Currently, the most common approach to scaling a vBulletin forum to handle the load is to avoid the traffic jam condition entirely. Lets evaluate the root cause of the problem.  <br />
 <br />
Issues can be found in the mechanism storing and retrieving the data inside the database tables; this storage engine is called <b>“MyISAM”</b>. When a database request is made on a specific table (specifically the “write” query), the <b>MyISAM</b> engine temporarily “locks” the specified table briefly making it unavailable to all other requests. This means that given the typical conditions while it's searching through the larger tables such as “post” all other requests are quickly queuing as well, creating the traffic jam condition, in turn spewing database errors and slowing down the site.  <br />
<br />
The solution to “table level locking” in MyISAM is as simple as converting the database table engine to type <b>“InnoDB”. </b>At a first glance, <b>InnoDB </b>is very similar to MyISAM; the main difference being that unlike MyISAM engine, InnoDB uses “row level” locking, whereas the specific table is never locked completely and is always available to service all other requests. This means that when an expensive search query is executed and and/or writing occurs, the “post” table does not lock and delay all other requests from successfully completing.<br />
<br />
<b>InnoDB - The important difference between vB 3.x and 4.0</b><br />
The main problem is that InnoDB does not support “fulltext” searching; this means that converting to InnoDB will break the default search engine in vBulletin 3. This is due to InnoDB requiring that “fulltext index” be dropped when the conversion occurs. No full text index, no search; it's as simple as that. Currently, the solution is to use a third-party search engine such as Sphinx.  vBulletin 4 data model tackles this problem head on by redesigning the search engine functionality by no longer relying on a fulltext index in the “post” and “thread” tables and giving the flexibility of optimization without sacrificing the search.  <br />
<br />
<b>Database performance changes in vB 4.0</b><br />
As I've mentioned in the beginning of my blog post – what's really cool in vBulletin 4.0 is not necessarily apparent to the untrained eye. Previously, vBulletin utilized the fulltext index on both “thread” and “post” tables making optimization and server problem resolution very expensive and complicated. vBulletin 4.0 no longer needs the fulltext index to be present in either of the “thread” or “post” tables. This means that vBulletin 4.0 database can utilize the InnoDB table engine and prevent a lot of common database issues associated with locked database queries. <b>This is great news for small to medium board owners who will be able to resolve some performance overhead problems without having unnecessary expenditures for expensive hosting</b> or complicated third-party search engines.<br />
 <br />
<br />
<b>What else is new?</b><br />
Another cool update in vBulletin 4.0 are the new indicies that it builds on tables such as thread and post that further optimize database performance. This is especially beneficial to forums with “long” threads where replies could reach well into the thousands. <br />
<br />
<i><u>Stay tuned for a detailed guide to InnoDB converting vBulletin 3.8 and 4.0.</u></i></blockquote>

 ]]></content:encoded>
			<dc:creator>IBxAnders</dc:creator>
			<guid isPermaLink="true">http://www.vbulletin.com/forum/blog.php?b=2376</guid>
		</item>
		<item>
			<title>Dear vBulletin Developers...</title>
			<link>http://www.vbulletin.com/forum/blog.php?b=2374</link>
			<pubDate>Fri, 23 Oct 2009 22:35:22 GMT</pubDate>
			<description><![CDATA[Thanks for your continued support of vBulletin. It's been several years since the last major point release of vBulletin, and through all that time, your energy and enthusiasm have been inspiring to...]]></description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">Thanks for your continued support of vBulletin. It's been several years since the last major point release of vBulletin, and through all that time, your energy and enthusiasm have been inspiring to us. With the upcoming release of vBulletin 4.0 Forums and Publishing Suite, we want to re-engage and strengthen the ties between the core vB development team and all of you.<br />
<br />
We just publicly unveiled vB 4.0 and there are some great new features, including:<br />
<br />
-An awesome, and highly flexible CMS product (unveiling soon!)<br />
-A Great new default theme<br />
-SEO Urls <br />
-Multi-content search capability<br />
<br />
Along with some of these consumer facing changes, we've made some major changes to the internals, including:<br />
<br />
-Validating XHTML markup<br />
-A new templating system<br />
-A new <a href="http://www.vbulletin.com/forum/blog.php?b=2366" target="_blank">stylevar</a> system<br />
<br />
All in all, we're talking tens of thousands of lines of new and improved code. While this means your old styles will need rework and some of your plugins will break -- we're confident that all the new features and functionality we've added make up for it. Additionally, we have no designs on changing the styles or template system again in 5.0 (yes, we're already planning for 5.0), so you can be confident that your updates will have real longevity.<br />
<br />
In addition to initializing this discussion of the developer impact of vB4, I want to take this opportunity to announce three major initiatives for the developer community. <br />
<br />
<b>vB 4 Plugin Prize </b><br />
Starting soon, we'll kick off a contest with a cash prize for the best vB 4 hack or plugin.<br />
<br />
<b>Formal Developer Program</b><br />
In the coming months, we'll unveil a formal vBulletin developer program which will include pre-release access to vB source code.<br />
<br />
<b>Monthly Developer Chats </b><br />
We'll be hosting monthly, moderated live chats with the core developers of vB. The first chat will be 4pm PST on Tuesday, November 10th and will feature <a href="http://www.vbulletin.com/forum/member.php?214190-Kevin-Sours" target="_blank">Kevin Sours</a>, Lead VB Developer.<br />
<br />
More details will be forthcoming for all of these, and we have more exciting plans that we're not yet ready to announce but will be discussing here soon. <br />
<br />
Thanks for all your contributions, we wouldn't be here without you,<br />
<br />
-Joe <br />
<br />
Joe Rosenblum<br />
CTO, Internet Brands, Inc.<br />
<a href="http://www.internetbrands.com" target="_blank">www.internetbrands.com</a><br />
<a href="http://www.vbulletin.com" target="_blank">www.vbulletin.com</a><br />
<br />
<b>Update: Submit and vote on questions for our first developer chat here: <a href="http://bit.ly/Y1NW0" target="_blank">http://bit.ly/Y1NW0</a></b></blockquote>

 ]]></content:encoded>
			<dc:creator>Joe Rosenblum</dc:creator>
			<guid isPermaLink="true">http://www.vbulletin.com/forum/blog.php?b=2374</guid>
		</item>
		<item>
			<title>vB4: Skinning Your Forum in 10 Easy Steps</title>
			<link>http://www.vbulletin.com/forum/blog.php?b=2373</link>
			<pubDate>Fri, 23 Oct 2009 22:07:26 GMT</pubDate>
			<description><![CDATA[In the spirit of providing more documentation to our customers and developer community, we put together two PDF documents and an example style.  The first is "vB4: Skinning Your Forum in 10 Easy...]]></description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">In the spirit of providing more documentation to our customers and developer community, we put together two PDF documents and an example style.  The first is &quot;vB4: Skinning Your Forum in 10 Easy Steps.&quot; This is a step-by-step guide on how to customize the main areas of your vB4 Forum. <br />
   <br />
  The second document is the vB4 StyleVar Visual Dictionary. The StyleVar (style variable) Dictionary is more of a complementary reference guide aimed at understanding how and where to use each StyleVar for advanced customization.  As we finalize the product, I will continue to provide updated versions of these two docs. <br />
   <br />
  Finally, I also included a zip file, &quot;Wave 1.zip&quot; that includes:<br />
  1. Image files used in this vB4: Skinning doc. <br />
  2. wave-style.xml - if you want to install this new style.<br />
  3. install.rtf - instructions on how to install wave-style. <br />
   <br />
  We are currently writing similar documents for customizing the new CMS.  Stay tuned.<br />
   <br />
  I hope these documents are helpful and I welcome suggestions.<br />
   <br />
  Cheers,<br />
   <br />
  Don<br />
<br />
<br />
<a href="http://www.vbulletin.com/forum/attachment.php?attachmentid=37894&amp;d=1258236280"id="attachment37894"rel="nofollow"><img src="http://www.vbulletin.com/forum/attachment.php?attachmentid=37894&amp;d=1255722428&amp;thumb=1"border="0"alt="Click image for larger version

Name:	vB4_StyleVar_Visual_Dictionary.pdf
Views:	658
Size:	581.9 KB
ID:	37894"class="thumbnail" /></a><br />
<br />
<a href="http://www.vbulletin.com/forum/attachment.php?attachmentid=37893&amp;d=1258236278" >vB4_Skinning_Forums_Steps.pdf</a><a href="http://www.vbulletin.com/forum/attachment.php?attachmentid=37894&amp;d=1258236278" >Attachment 37894</a><br />
<br />
<a href="http://www.vbulletin.com/forum/attachment.php?attachmentid=37892&amp;d=1258235944" >Wave 1.0.zip</a></blockquote>

 ]]></content:encoded>
			<dc:creator>Don Kuramura</dc:creator>
			<guid isPermaLink="true">http://www.vbulletin.com/forum/blog.php?b=2373</guid>
		</item>
		<item>
			<title>vBulletin Update #42</title>
			<link>http://www.vbulletin.com/forum/blog.php?b=2371</link>
			<pubDate>Fri, 28 Aug 2009 16:40:23 GMT</pubDate>
			<description>I spent quite a lot of the last few months working on the vB4 style. Obviously, there was a lot of HTML to convert to the proper semantic style. Kier converted a lot before he left and I was...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">I spent quite a lot of the last few months working on the vB4 style. Obviously, there was a lot of HTML to convert to the proper semantic style. Kier converted a lot before he left and I was assisting him in that process.  <br />
<br />
There was just too much HTML to convert for one person so  Alpha is very much an alpha in terms of the style.  It is  very rough around the edges and usability is being worked on.<br />
<br />
A few days ago I added a popup to the editor that allows a video url (youtube, metacafe, etc) to be input, which results in a video bbcode being output. The result is that you can finally embed videos in your posts. The timeframe and requirements did not allow me to include a method by which end users can add their own video services but I'm sure that can be handled in the near future.<br />
<br />
At the moment I am working on the asset manager, working on its usability.<br />
<br />
<img src="http://www.vbulletin.com/forum/attachment.php?attachmentid=35452&amp;d=1256338694" border="0" alt="Name:  avatar224_4.gif
Views: 20133
Size:  5.5 KB"  style="float: CONFIG" /></blockquote>

 ]]></content:encoded>
			<dc:creator>Freddie Bingham</dc:creator>
			<guid isPermaLink="true">http://www.vbulletin.com/forum/blog.php?b=2371</guid>
		</item>
		<item>
			<title>Widget Programming</title>
			<link>http://www.vbulletin.com/forum/blog.php?b=2370</link>
			<pubDate>Fri, 14 Aug 2009 03:01:08 GMT</pubDate>
			<description>Widget Programming 
    
  *Introduction* 
  This is intended for reasonably experienced PHP programmers with some experience in vBulletin programming. You should have at least a basic understand of...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">Widget Programming<br />
   <br />
  <b><font size="3">Introduction</font></b><br />
  This is intended for reasonably experienced PHP programmers with some experience in vBulletin programming. You should have at least a basic understand of the vB templating system and phrasing. If you don’t, I strongly recommend you do some homework before trying to program a widget. I will use as an example the static html widget. <br />
<br />
It's very early to be writing this, I know. I can't say exactly when alpha testing will start on the CMS system, which will be part of the suite. Soon, but I'm not in a position to give a date. I've had several requests for more information, so here it is. I've attached a zip file for two widgets- the static html and the rss. This may not be the final code, but it's close.<br />
<br />
I've walked through the statichtml widget, because it's the simplest. If you understand that, there are two more things you need to know. You can call $this-&gt;content-&gt;getNodeId() to get the unique id of the page you are on. This allows you to do things like make navigation widgets that are page-dependent. Neither of these widgets need that. Also, most widgets should be cached. There is a generic caching algorithm- the first parameter is a value or array of values that form a key. vB_Cache::instance()-&gt;write and vB_Cache::instance()-&gt;read() do this for you. <br />
   <br />
At the risk of repeating myself, let me explain the hierarchy.<br />
<br />
In the CMS system you define grids. Grids divide the page into columns, with optional header and sidebar settings.<br />
<br />
Then you create widgets. Widgets are a combination of a widget type (i.e. static html), plus a configuration. If you want ten different Youtube videos, that's ten instances of a statichtml type widget. If you want five different Google gadgets, that's five more instances of the statichtml type.<br />
<br />
Then you make layouts. Layouts put the primary content into a grid, and optionally place one or more widgets in specific places. You apply a layout and style to each section (section is the primary organization system in the CMS, but not the only one). All the pages in that section get that layout. <br />
<br />
Let's say you wanted to have a form-type widget where users could enter information about each article. You could create your own database table and use that. Or you could use the widget storage we designed. In that case you would want to use a per-page configuration. We haven't written any of those, yet, but the setConfig and getConfig calls will handle per-page configuration.<br />
<br />
I don't want to take credit for something I don't deserve. I didn't write the CMS system, but I've been working in it a lot for the last couple months. I think you'll find it powerful and well designed for extension. <br />
<font size="3"><br />
<b>Code Example</b></font><b><br />
<font size="3">Files</font></b>   <br />
  You will need at least two files. You will need to define a package and class. The package should be something unique. The class can be anything you like, but it’s generally something descriptive. You will need to create the following file structure. <br />
  &lt;vBulletin directory&gt;<br />
/packages (already there&gt;<blockquote>                           /&lt;Your package&gt;<br />
</blockquote><blockquote><blockquote>                                     /item<br />
</blockquote></blockquote><blockquote><blockquote><blockquote>                                                   /content<br />
</blockquote></blockquote></blockquote><blockquote><blockquote><blockquote><blockquote>                                                               /&lt;your class&gt;<br />
</blockquote></blockquote></blockquote></blockquote><blockquote><blockquote>                                       /content<br />
</blockquote></blockquote><blockquote><blockquote>                                                   /&lt;your class&gt;<br />
</blockquote></blockquote>Note that we use all lower case file and path names. The static HTML widget has package = vBCms, class=Static.  The files are<br />
              /packages/vbcms/item/content/static.php<br />
              /packages/vbcms/ content/static.php<br />
   <br />
  <font size="3"><b>Database</b> </font><br />
  You will need to create two database entries to use your widget. In the <b>TABLE_PREFIXpackage</b> table you need to insert a record with package= &lt;Your package&gt;.  In the <b>TABLE_PREFIXwidgettype</b> table you need to create an entry with class= &lt;your class&gt;, packageid = &lt;the id from the package table&gt;. <br />
   <br />
  <b><font size="3">Item/Content file</font></b><br />
  This file is simple. It’s just for the convenience of the CMS router. You declare a class, and define the package and class. If you have a default configuration setting you should put it here. Here is the file for Static HTML (I’ve removed the comments and licensing.)<br />
   <br />
   <font color="Red">&lt;?php </font>if (!defined('VB_ENTRY')) die('Access denied.');<br />
<br />
  class vBCms_Item_Widget_Static extends vBCms_Item_Widget<br />
  {<blockquote>               protected $package = 'vBCms';<br />
              protected $class = 'Static';<br />
              protected $config = array('html' =&gt; 'Enter HTML here.');<br />
</blockquote>}<br />
   <br />
<font size="3"><br />
  <b>Content file</b></font><br />
  This is the file that does the work. You need, at a minimum, to create two functions: getConfigView and getPageView. The first is called to configure your widget, and the second is called to render the view. With most widgets you’ll want to do some caching. For the static html widget it’s one query to get the data, and I couldn’t see executing a query to see if I needed to run one simple query.<br />
   <br />
  Below is the file.   <br />
<br />
    <br />
<br />
<font color="Blue">This php file should never be called directly, only from a properly initialized page. This call ensures that</font>.<br />
<br />
<font color="Red"><br />
  &lt;?php</font> if (!defined('VB_ENTRY')) die('Access denied.');<br />
<font color="Blue">licensing</font><br />
<br />
  /*=================================================  =====================*\<br />
  || ##################################################  ################## ||<br />
  || # vBulletin [#]version[#] - Licence Number [#]license[#]<br />
  || # ---------------------------------------------------------------- # ||<br />
  || # Copyright ©2000-[#]year[#] Jelsoft Enterprises Ltd. All Rights Reserved. ||<br />
  || # This file may not be redistributed in whole or significant part. # ||<br />
  || # ---------------- VBULLETIN IS NOT FREE SOFTWARE ---------------- # ||<br />
  || # <a href="http://www.vbulletin.com" target="_blank">http://www.vbulletin.com</a> | <a href="http://www.vbulletin.com/license.html" target="_blank">http://www.vbulletin.com/license.html</a> # ||<br />
  || ##################################################  ################## ||<br />
  \*================================================  ======================*/<br />
   <br />
  /**<br />
   * Static HTML Widget Controller<br />
   *<br />
   * @package vBulletin<br />
   * @author vBulletin Development Team<br />
   * @version $Revision: 31096 $<br />
   * @since $Date: 2009-06-03 08:42:31 -0700 (Wed, 03 Jun 2009) $<br />
   * @copyright Jelsoft Enterprises Ltd.<br />
   */<br />
   <font color="Blue">Declare the class</font><br />
  class vBCms_Widget_Static extends vBCms_Widget<br />
  {<blockquote>               /*Properties=======================================  =============================*/<br />
<br />
              /**<br />
               * A package identifier.<br />
               * This is used to resolve any related class names.<br />
               * It is also used by client code to resolve the class name of this widget.<br />
               *<br />
               * @var string<br />
               */<br />
<font color="Blue">Declare the package and class. You need to do this so the data managers and other components know how to handle inputs</font><br />
            protected $package = 'vBCms';<br />
<br />
              /**<br />
               * A class identifier.<br />
               * This is used to resolve any related class names.<br />
               * It is also used by client code to resolve the class name of this widget.<br />
               *<br />
               * @var string<br />
               */<br />
              protected $class = 'Static';<br />
<br />
<br />
              /*Render===========================================  =============================*/<br />
<br />
              /**<br />
               * Returns the config view for the widget.<br />
               *<br />
               * @return vBCms_View_Widget                                     - The view result<br />
               */<br />
<br />
<br />
<font color="Blue">Here's the first essential function. This creates the configuration interface and saves data. There is a template called vbcms_widget_static_config. </font><br />
<br />
              public function getConfigView()<br />
              {<blockquote><font color="Blue">Ensure we have been fully loaded. The classes use lazy loading</font><br />
<br />
                          $this-&gt;assertWidget();<br />
<br />
<font color="Blue">Verify and store the form variables we want.   </font><br />
                                      'do'      =&gt; vB_Input::TYPE_STR,<br />
                                      'html'    =&gt; vB_Input::TYPE_STR,,<br />
            'template_name'    =&gt; vB_Input::TYPE_STR<br />
                          ));<br />
<br />
<br />
<font color="Blue">Get the template view. This rendering of templates is new for the CMS system. You can use the old methods, but this will be a bit faster.</font><br />
<br />
                          $view = new vB_View_AJAXHTML('cms_widget_config');<br />
<font color="Blue">Set the title</font><br />
<br />
                          $view-&gt;title = new vB_Phrase('vbcms', 'configuring_widget_x', $this-&gt;widget-&gt;getTitle());<br />
<font color="Blue">load the configuration</font><br />
<br />
                          $config = $this-&gt;widget-&gt;getConfig();<br />
<br />
<br />
<font color="Blue">See if we have data to save. verifyPostId, together with the </font><font color="Blue"><font face="&amp;quot">addPostId</font> function, adds a security layer </font><br />
<br />
<br />
<br />
                          if (('config' == vB::$vbulletin-&gt;GPC['do']) AND $this-&gt;verifyPostId())<br />
                          {<blockquote><font color="Blue">get the data manager and set the values</font><br />
<br />
<font color="Blue">                                   <font color="Black">$config['html'] = str_replace('%u0025', '%' , vB::$vbulletin-&gt;GPC['html']);</font></font><br />
            if (vB::$vbulletin-&gt;GPC_exists['template_name'])<br />
            {<blockquote>                 $config['template_name'] = vB::$vbulletin-&gt;GPC['template_name'];<br />
</blockquote>}<br />
<br />
<font color="Black">                                    $widgetdm = $this-&gt;widget-&gt;getDM();</font><br />
<font color="Black">                                    $widgetdm-&gt;set('config', $config);</font><br />
<br />
<br />
<font color="Blue">We don't really need this call in this widget. We have the ability to define widgets which have a per-page configuration. For this widget we have a single configuration site-wide. If you want a different statichtml widget you make a new widget instance. We left it here in case we want to extend it lat</font>er.<br />
<br />
                                      if ($this-&gt;content)<br />
                                      {<blockquote>                                                   $widgetdm-&gt;setConfigNode($this-&gt;content-&gt;getNodeId());<br />
</blockquote>}<br />
<font color="Blue">Save it</font><br />
                                      $widgetdm-&gt;save();<br />
<font color="Blue">Check for errors, and display a message if we need to.</font><br />
                                      if (!$widgetdm-&gt;hasErrors())<br />
                                      {<blockquote>                                                   if ($this-&gt;content)<br />
                                                  {<blockquote>                                                               $segments = array('node' =&gt; $this-&gt;content-&gt;getNodeURLSegment(),<br />
                                                                                                                          'action' =&gt; vB_Router::getUserAction('vBCms_Controller_Content  ', 'EditPage'));<br />
                                                              $view-&gt;setUrl(vB_View_AJAXHTML::URL_FINISHED, vBCms_Route_Content::getURL($segments));<br />
                                                  }<br />
<br />
<font color="Blue"> Show we're finished            </font><br />
               $view-&gt;setStatus(vB_View_AJAXHTML::STATUS_FINISHED, new vB_Phrase('vbcms', 'configuration_saved'));<br />
  <br />
</blockquote></blockquote>}<br />
                                      else<br />
                                      {<blockquote>                                                   if (vB::$vbulletin-&gt;debug)<br />
                                                  {<blockquote>                                                               $view-&gt;addErrors($widgetdm-&gt;getErrors());<br />
</blockquote>}<br />
<br />
                                                  // <font color="Blue">only send a message</font><br />
                                                  $view-&gt;setStatus(vB_View_AJAXHTML::STATUS_MESSAGE, new vB_Phrase('vbcms', 'configuration_failed'));<br />
</blockquote>}<br />
</blockquote>}<br />
                          else<br />
                          {<blockquote><font color="Blue">Now let's create the configuration interface. First create the view</font><br />
<br />
                                      // add the config content<br />
                                      $configview = $this-&gt;createView('config');<br />
<br />
    <br />
            if (!isset($config['template_name']) or ('' == $config['template_name']) )<br />
            {<blockquote>                 $config['template_name'] = 'vbcms_widget_static_page';<br />
</blockquote>}<br />
<br />
<font color="Blue">Add the html code</font><br />
                                      $configview-&gt;html = $config['html'] ? htmlspecialchars_uni($config['html']) : '';<br />
<br />
                                      // item id to ensure form is submitted to us<br />
<font color="Blue">Set the form variables for security</font><br />
                                    $this-&gt;addPostId($configview);<br />
<br />
<font color="Blue">Load the configuration  and status  </font><br />
<br />
                                      // send the view<br />
                                      $view-&gt;setStatus(vB_View_AJAXHTML::STATUS_VIEW, new vB_Phrase('vbcms', 'configuring_widget'));<br />
</blockquote>}<br />
<font color="Blue">and return the view</font><br />
</blockquote>return $view;<br />
              }<br />
<br />
<br />
<br />
<br />
<font color="Blue">And the second function. This creates the widget.</font><br />
<br />
<br />
              /**<br />
               * Fetches the standard page view for a widget.<br />
               *<br />
               * @return vBCms_View_Widget                                     - The resolved view, or array of views<br />
               */<br />
              public function getPageView()<br />
              {<blockquote><font color="Blue">ensure the widget is properly loaded</font><br />
<br />
                          $this-&gt;assertWidget();<br />
<br />
<font color="Blue">get the configuration- in this case it's the html code and the template</font> <br />
<br />
                           $config = $this-&gt;widget-&gt;getConfig();<br />
 <br />
<br />
if (!isset($config['template_name']) or ('' == $config['template_name']) )<br />
        {<blockquote>             $config['template_name'] = 'vbcms_widget_static_page';<br />
</blockquote>}<br />
<br />
<font color="Blue">instantiate the view</font><br />
<br />
        // Create view<br />
        $view = new vBCms_View_Widget($config['template_name']);<br />
<br />
<br />
                          <font color="Blue">set the class, title, and description</font><br />
<br />
                          $view-&gt;class = $this-&gt;widget-&gt;getClass();<br />
                          $view-&gt;title = $this-&gt;widget-&gt;getTitle();<br />
                          $view-&gt;description = $this-&gt;widget-&gt;getDescription();<br />
<br />
<font color="Blue">load it into the view</font><br />
                          $view-&gt;static_html = $config['html'];<br />
<font color="Blue">and return the view</font><br />
                          return $view;<br />
</blockquote>}<br />
</blockquote>/*=================================================  =====================*\<br />
  || ##################################################  ##################<br />
  || # Downloaded: [#]zipbuilddate[#]<br />
  || # SVN: $Revision: 31096 $<br />
  || ##################################################  ##################<br />
  \*================================================  ======================*/</blockquote>

 ]]></content:encoded>
			<dc:creator>Edwin Brown</dc:creator>
			<guid isPermaLink="true">http://www.vbulletin.com/forum/blog.php?b=2370</guid>
		</item>
		<item>
			<title>vBulletin 3.8.4 Release Chaos</title>
			<link>http://www.vbulletin.com/forum/blog.php?b=2369</link>
			<pubDate>Tue, 11 Aug 2009 14:33:39 GMT</pubDate>
			<description><![CDATA[As many of you have no doubt noticed by now, we are running vBulletin 3.8.4 here on vbcom.  In fact, we've been running the code here since around 11AM Pacific yesterday.  But, this version is not...]]></description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">As many of you have no doubt noticed by now, we are running vBulletin 3.8.4 here on vbcom.  In fact, we've been running the code here since around 11AM Pacific yesterday.  But, this version is not available to the general public yet.  Here's a brief account for what happened, and why it is not ready yet.<br />
<br />
Originally, we planned to have the release out two weeks ago. However, because everyone with sufficient access was busy with working on 4.0 alpha, we did not had the resource to release it then.  As such, we had planned for it to be review our resources for release last Friday.  When we looked at it, we figured that it is best to release it on Monday, so if anything goes wrong, we can be around to fix the release as soon as we notice the problems, instead of leave things to go crazy all weekend.<br />
<br />
Monday, yesterday, armed with Kier's documentations on how to do a release, we tried to do the release at around 10AM.  We started to package the updated code, and upgrade scripts, only to realize that the upgrade script is not running as its intended to.  This lead us to discover that in the midst of 4.0 preparation and regretful departure of Kier, Scott, and Mike, we've forgotten about updating the software version.  As such, all changes we've made to that point was made for 3.8.3 release, not 3.8.4, so non of the template changes would kick in, and the any of the updated options/phrases we've added will not deploy proper. We sorted out the problems, did tests on our local environments, and pushed the code here -- it is always better to break our site than thousands of customers' site ;) <br />
<br />
Even though the upgrade went through properly, we figured that it is best to let the code sit a bit, and see if any problems creep up on us before releasing. And it did. At around noon, we were told that there is an issue with a fix we've put in.  Apparently, the diff placed the fix in a wrong place, causing all drop down menus to break.  We corrected that and pushed the code to the live server.<br />
<br />
Shortly after that, at around 1PM Pacific time, we start to get hit with DOS attack... No, it wasn't a swarm of happy clients hitting F5 in member's area looking for their download.  It started as a SYN-flood like attack, IB's net ops deployed some scripts to deflate it, and prevent it creep up on us again. The attackers then went and changed their tactics and targeted our databases.  This went back and forth until around 3PM or so.  By then, it was probably too late in the day to be doing a release.<br />
<br />
We also received words that there may be some potential problem which could be used to cause forum to stop working for some installations. So we took the time to investigate in this issue. Long story short, if your forum allows very very very long posts -- test data for reproducing the problem was 1.4MB or something in size -- the vbchop() function we use to make thread preview may eat up all the memory php is allowed to use. Going back and forth with the person who reported this problem to us for a bit, we were able to come up with a workable solution to this problem.<br />
<br />
After all these chaos, it was too late to do a release, so we are going to do a take 2 today after our daily meeting -- probably around 10AM Pacific again. Hopeful thinking is telling me that we've done enough stress test on this thing, and it shouldn't have any problems this time around... but hey, you never know what might <a href="http://www.vbulletin.com/forum/blog_attachment.php?attachmentid=360&amp;stc=1&amp;d=1250001000" target="_blank">explode in your hand</a> these days.<br />
<br />
PS: As noted in the blog title, I forget to blog; so don't be too surprised if I forget to reply to your comments, too.<br />
<br />
PS2: This is by no means a formal announcement. Just a running stream of thoughts.  Don't quote me for times, or alike.  And if the timezone's too vague, well, guess ;)<br />
<br />
Edit:<br />
.... And we are live (bit late).  The release is out, and things looks like its working.  Please do let us know if you find anything that is broken!</blockquote>

 ]]></content:encoded>
			<dc:creator>Andy Huang</dc:creator>
			<guid isPermaLink="true">http://www.vbulletin.com/forum/blog.php?b=2369</guid>
		</item>
		<item>
			<title>Nothing to Update</title>
			<link>http://www.vbulletin.com/forum/blog.php?b=2368</link>
			<pubDate>Wed, 01 Jul 2009 19:37:10 GMT</pubDate>
			<description>It has been almost 4 months since I posted a blog entry. Sorry about that. 
 
I have really had nothing concrete to post.  I have been heavily into creating mock ups of the existing templates for the...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">It has been almost 4 months since I posted a blog entry. Sorry about that.<br />
<br />
I have really had nothing concrete to post.  I have been heavily into creating mock ups of the existing templates for the new style.<br />
<br />
Presently, I am converting the mockups, along with some of the support team, and others at IB, into functional templates.<br />
<br />
I have just finished getting the WYSIWYG editor functioning in the new style. vB4 has a new menu system, which is used for the Fonts, Sizes, Colors, Smilies, and Attachments.  There was some pain involved in converting over to the new menu system.</blockquote>

 ]]></content:encoded>
			<dc:creator>Freddie Bingham</dc:creator>
			<guid isPermaLink="true">http://www.vbulletin.com/forum/blog.php?b=2368</guid>
		</item>
		<item>
			<title>vBulletin 4 - Style Variables</title>
			<link>http://www.vbulletin.com/forum/blog.php?b=2366</link>
			<pubDate>Tue, 16 Jun 2009 16:46:25 GMT</pubDate>
			<description>Since the beginning, vBulletin has had some way of inserting style-related variables into its templates. 
 
In vBulletin 1 and 2, replacement variables were used, and simple html-esque tags could be...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">Since the beginning, vBulletin has had some way of inserting style-related variables into its templates.<br />
<br />
In vBulletin 1 and 2, replacement variables were used, and simple html-esque tags could be inserted in order to re-style text etc. For example:<blockquote><font face="courier new">&lt;smallfont&gt;Here is some small text&lt;/smallfont&gt;</font><br />
</blockquote>would be replaced with<blockquote><font face="courier new">&lt;font size=&quot;1&quot; family=&quot;verdana, arial, helvetica, sans-serif&quot;&gt;Here is some small text&lt;/font&gt;</font><br />
</blockquote>The content of the replacement could be altered, so if you really wanted to, <font face="Courier New">&lt;smallfont&gt;</font> could be replaced with <font face="Courier New">&lt;span title=&quot;Something Useless&quot;&gt;&lt;font color=&quot;skyblue&quot; size=&quot;7&quot; face=&quot;arial&quot;&gt;&lt;b&gt;</font> or something like that...<br />
<br />
This system was necessarily simplistic and its scope for dramatically altering the appearance of the templates was strictly limited.<br />
<br />
For vBulletin 3 we wanted to make use of CSS, if only for reasons of bandwidth. After all, it requires a lot less text to be delivered to a client to have <font face="Courier New">&lt;span class=&quot;smallfont&quot;&gt;</font> than to have <font face="Courier New">&lt;smallfont&gt;</font> being translated into <font face="Courier New">&lt;font family=&quot;verdana, arial, helvetica, sans-serif&quot; size=&quot;1&quot;&gt;</font>. Yes, those considerations seem largely irrelevant now, but it was important back then...<br />
<br />
The use of CSS in vBulletin 3 is relatively light. Its primary purpose was to handle the specification of font sizes and families, and to manage the colours and backgrounds of commonly-used elements.<br />
<br />
It achieved this through the use of a relatively small number of CSS classes, such as .tborder, .tcat, .thead and .tfoot, each of which had predefined properties for which values could be specified, together with a free-form field in which extra CSS properties could be entered. All of these values were then automagically baked into a single CSS stylesheet, the precise content of which could not be (easily) altered.<br />
<br />
This system started to show its limitations when vBulletin 3.7 called for a CSS-driven layout for the user profile page (member.php). For the tab controller, I needed access to the colours and background attributes of the .tcat predefined vBulletin 3 class, and also the border attribute from the .tborder class, without all of their extra baggage. Unfortunately, this is not possible in vBulletin 3, so a kludge class had to be made that combined .tborder and .tcat, then <i>undid</i> various styling rules that were set up by those two. It was not pleasant to work with.<br />
<br />
For vBulletin 4, I wanted a system that was based on CSS and semantic XHTML, but it had to retain the simplicity of changing colours, backgrounds and fonts etc. that existed in previous versions. I also wanted to be able to access individual components of CSS classes in order to re-use them elsewhere, in a way that can not be done using vBulletin 3.<br />
<br />
The system I devised builds on another feature that appeared in vBulletin 3, namely the Style Variable or <i>Stylevar.</i> For vBulletin 3, used these for storing simple strings of data, such as the path to an image directory, or the amount of cell padding to apply to tables. These variables would then be available for use anywhere in the templates, so you could see things like <font face="Courier New">&lt;table cellpadding=&quot;$stylevar[cellpadding]&quot;&gt;</font> or <font face="Courier New">&lt;img src=&quot;$stylevar[imgdir_buttons]/newreply.gif&quot; /&gt;</font>. These values could be customized and had the same system of inheritance as the templates themselves.<br />
<br />
Therefore, the basis of the vBulletin 4 style system is freeform, editable CSS templates with the ability to call values from style variables.<br />
<br />
<font size="3"><b>Basic Style Variable Use</b></font><br />
<br />
Consider the following example:<br />
<font size="1"><i>this is not code from vB4</i></font><blockquote><font face="courier new">.tcat {</font><blockquote><font face="courier new">     color: <font color="RoyalBlue">#FFFFFF</font>;</font><br />
<font face="courier new">     font-size: <font color="RoyalBlue">10pt</font>;</font><br />
<font face="courier new">     font-weight: <font color="RoyalBlue">bold</font>;</font><br />
<font face="courier new">     font-family: <font color="RoyalBlue">verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif</font>;</font><br />
<font face="courier new">     background-color: <font color="RoyalBlue">#869BBF</font>;</font><br />
<font face="courier new">     background-image: <font color="RoyalBlue">url(../../images/gradients/gradient_tcat.gif)</font>;</font><br />
<font face="courier new">     background-repeat: <font color="RoyalBlue">repeat-x</font>;</font><br />
<font face="courier new">     padding: <font color="RoyalBlue">6px</font>;</font><br />
</blockquote><font face="courier new"> }</font><br />
</blockquote>In vBulletin 3, it would have been impossible to extract that <i>#869BBF</i> background colour for use in a different CSS class. Now let's have a look at how the same CSS <i>could</i> be written in vBulletin 4:<blockquote><font face="courier new">.tcat {</font><blockquote><font face="courier new">     color: {<font color="Red">vb</font>:stylevar <font color="RoyalBlue">tcat_color</font>};</font><br />
<font face="courier new">     font-size: {<font color="Red">vb</font>:stylevar <font color="RoyalBlue">tcat_fontSize</font>};</font><br />
<font face="courier new">     font-weight: {<font color="Red">vb</font>:stylevar <font color="RoyalBlue">tcat_fontWeight</font>};</font><br />
<font face="courier new">     font-family: {<font color="Red">vb</font>:stylevar <font color="RoyalBlue">tcat_fontFamily</font>};</font><br />
<font face="courier new">     background-color: {<font color="Red">vb</font>:stylevar <font color="RoyalBlue">tcat_backgroundColor</font>}</font><br />
<font face="courier new">     background-image: {<font color="Red">vb</font>:stylevar <font color="RoyalBlue">tcat_backgroundImage</font>}</font><br />
<font face="courier new">     background-repeat: {<font color="Red">vb</font>:stylevar <font color="RoyalBlue">tcat_backgroundRepeat</font>};</font><br />
<font face="courier new">     padding: {<font color="Red">vb</font>:stylevar <font color="RoyalBlue">tcat_padding</font>};</font><br />
</blockquote><font face="courier new"> }</font><br />
</blockquote>Using this new system, the various instances of <font face="Courier New">{</font><font face="Courier New"><font color="Red">vb</font></font><font face="Courier New">:stylevar </font><font face="Courier New"><font color="RoyalBlue">stylevarname</font></font><font face="Courier New">}</font> will be replaced with the value of the corresponding style variable. Therefore, if we want to create an entirely new class that just happens to have the same background colour as the .tcat class but the text styling from .thead, we can do so very easily:<font face="Courier New"><br />
</font><blockquote><font face="Courier New"> .whatever {</font><blockquote><font face="Courier New">     font-family: {<font color="Red">vb</font>:stylevar <font color="RoyalBlue">thead_fontFamily</font>};</font><br />
<font face="Courier New">     background-color: {<font color="Red">vb</font>:stylevar <font color="RoyalBlue">tcat_backgroundColor</font>};</font><br />
</blockquote><font face="Courier New"> }</font><br />
</blockquote>Style variables can be defined and edited through the new style variable editor, which is a little rough around the edges right now, but it's functional so I'll provide a screenshot of some simple style variable values being edited:<blockquote><img src="http://images.vbulletin.com/blog-content/kier/40-stylevars/sveditor-simple.png" border="0" alt="" /><br />
</blockquote>Here you can see three different colour variables being edited, together with a simple 'size' type, which will accept a value and a unit specification.<br />
<br />
<font size="3"><b>Compound Style Variables</b></font><br />
<br />
Further, one can have what we have called <i>compound</i> style variables.<br />
<br />
Those familiar with CSS will know that some CSS properties also have <i>shorthand</i> equivalents. Font and Background are two examples. Instead of writing the names and values of each CSS property, like this...<blockquote><font face="Courier New">.foo {</font><blockquote><font face="Courier New">    font-size: <font color="RoyalBlue">10pt</font>;</font><br />
<font face="Courier New">    font-weight: <font color="RoyalBlue">bold</font>;</font><br />
<font face="Courier New">     font-family: <font color="RoyalBlue">verdana</font>;</font><br />
<font face="Courier New">     background-color: <font color="RoyalBlue">red</font>;</font><br />
<font face="Courier New">     background-image: <font color="RoyalBlue">url(image.png)</font>;</font><br />
<font face="Courier New">     background-repeat: <font color="RoyalBlue">repeat-x</font>;</font><br />
</blockquote><font face="Courier New"> }</font><br />
</blockquote>One can instead write it like this:<blockquote><font face="Courier New">.foo {</font><blockquote><font face="Courier New">     font: <font color="RoyalBlue">10pt bold verdana</font>;</font><br />
<font face="Courier New">     background: <font color="RoyalBlue">red url(image.png) repeat-x</font>;</font><br />
</blockquote><font face="Courier New"> }</font><br />
</blockquote>Compound style variables take advantage of this ability in CSS, allowing specific shorthand properties to be employed. For example, one may define all background properties into a single compound style variable, or access the individual elements. Some code will illustrate this better than me trying to describe it...<blockquote><font face="Courier New">.foo {</font><blockquote><font face="Courier New">     font: {<font color="Red">vb</font>:stylevar <font color="RoyalBlue">foo_font</font>.<font color="Blue">fontSize</font>} {<font color="Red">vb</font>:stylevar <font color="RoyalBlue">foo_font</font>.<font color="Blue">fontWeight</font>} {<font color="Red">vb</font>:stylevar <font color="RoyalBlue">foo_font</font>.<font color="Blue">fontFamily</font>};</font><br />
<font face="Courier New">    background: {<font color="Red">vb</font>:stylevar <font color="RoyalBlue">foo_background</font>.<font color="Blue">backgroundColor</font>} {<font color="Red">vb</font>:stylevar <font color="RoyalBlue">foo_background</font>.<font color="Blue">backgroundImage</font>} {<font color="Red">vb</font>:stylevar <font color="RoyalBlue">foo_background</font>.<font color="Blue">backgroundRepeat</font>};</font><br />
</blockquote><font face="Courier New">}</font><br />
</blockquote>Can also be written as...<blockquote><font face="Courier New">.foo {</font><blockquote><font face="Courier New">     font: {<font color="Red">vb</font>:stylevar <font color="RoyalBlue">foo_font</font>};</font><br />
<font face="Courier New">     background: {<font color="Red">vb</font>:stylevar <font color="RoyalBlue">foo_background</font>};</font><br />
</blockquote><font face="Courier New"> }</font><br />
</blockquote>As can be seen from this example, when a compound style variable is called without specifying one of its component properties, it will return <i>all</i> of its component properties, in a fashion that is usable for shorthand CSS properties.<blockquote><img src="http://images.vbulletin.com/blog-content/kier/40-stylevars/sveditor-compound.png" border="0" alt="" /><br />
</blockquote>This screenshot shows compound style variables being edited - each set of values is saved into a single style variable that can be accessed either with the shorthand method (<font color="RoyalBlue">foo_font</font>), or specified as individual properties (<font color="Blue">foo_font</font>.<font color="RoyalBlue">fontSize</font>, <font color="Blue">foo_font</font>.<font color="RoyalBlue">fontFamily</font> etc.).<br />
<br />
<font size="3"><b>Style Variable Mathematics</b></font><br />
<br />
When using CSS, there are often times when an exact dimension is required for an element in order to fit into a particular place within a layout. Unfortunately however, CSS does not provide a method to specify an absolute size for elements. Consider the following example:<blockquote><font face="Courier New">&lt;style type=&quot;text/css&quot;&gt;</font><br />
<font face="Courier New">#mydiv {</font><blockquote><font face="Courier New">width: <font color="RoyalBlue">600px</font>;</font><br />
<font face="Courier New">height: <font color="RoyalBlue">400px</font>;</font><br />
</blockquote><font face="Courier New">}</font><br />
<font face="Courier New">&lt;/style&gt;</font><br />
<font face="Courier New">...</font><br />
<font face="Courier New">&lt;div id=&quot;mydiv&quot;&gt;My 600 x 400 div&lt;/div&gt;</font><br />
</blockquote>This will produce a box of exactly 600 x 400 pixels. However, if we now add a little extra CSS...<font face="Courier New"><br />
</font><blockquote><font face="Courier New">&lt;style type=&quot;text/css&quot;&gt;</font><br />
<font face="Courier New"> #mydiv {</font><blockquote><font face="Courier New"> width: <font color="RoyalBlue">600px</font>;</font><br />
<font face="Courier New"> height: <font color="RoyalBlue">400px</font>;<br />
padding: <font color="RoyalBlue">10px</font>;<br />
border: <font color="RoyalBlue">solid 1px black</font>;</font><br />
</blockquote><font face="Courier New"> }</font><br />
<font face="Courier New"> &lt;/style&gt;</font><br />
<font face="Courier New"> ...</font><br />
<font face="Courier New"> &lt;div id=&quot;mydiv&quot;&gt;My 622 x 422 div&lt;/div&gt;</font><br />
</blockquote>... we end up with a box measuring 622 x 422 pixels, because the border width and padding size are added to the dimensions of the box.<br />
<br />
When dealing with static pages, one can deal with this by manually subtracting the border width and padding size from the dimensions, in order to restore the intended 600 x 400 pixel size:<blockquote><font face="Courier New">&lt;style type=&quot;text/css&quot;&gt;</font><br />
<font face="Courier New"> #mydiv {</font><blockquote><font face="Courier New"> width: <font color="RoyalBlue">578px</font>;</font><br />
<font face="Courier New"> height: <font color="RoyalBlue">378px</font>;</font><br />
<font face="Courier New"> padding: <font color="RoyalBlue">10px</font>;</font><br />
<font face="Courier New"> border: <font color="RoyalBlue">solid 1px black</font>;</font><br />
</blockquote><font face="Courier New"> }</font><br />
<font face="Courier New"> &lt;/style&gt;</font><br />
<font face="Courier New"> ...</font><br />
<font face="Courier New"> &lt;div id=&quot;mydiv&quot;&gt;My 600 x 400 div&lt;/div&gt;</font><br />
</blockquote>However, in a dynamic page, where the border width and padding size are not fixed, this becomes impossible.<blockquote><font face="Courier New">&lt;style type=&quot;text/css&quot;&gt;</font><br />
<font face="Courier New">  #mydiv {</font><blockquote><font face="Courier New">  width: <font color="RoyalBlue">578px</font>;</font><br />
<font face="Courier New">  height: <font color="RoyalBlue">378px</font>;</font><br />
<font face="Courier New">  padding: {<font color="Red">vb</font>:stylevar <font color="RoyalBlue">mydiv_padding</font>}; /* set to <font color="RoyalBlue">30px</font> */</font><br />
<font face="Courier New">  border: solid {<font color="Red">vb</font>:stylevar <font color="Blue">mydiv_border</font>.<font color="RoyalBlue">borderWidth</font>} black; /* set to <font color="RoyalBlue">3px</font> */</font><br />
</blockquote><font face="Courier New">  }</font><br />
<font face="Courier New">  &lt;/style&gt;</font><br />
<font face="Courier New">  ...</font><br />
<font face="Courier New">  &lt;div id=&quot;mydiv&quot;&gt;Oh dear, a 644 x 444 div&lt;/div&gt;</font><br />
</blockquote>In the previous example, the result will not be the intended 600 x 400 box, as the padding size and border widths have been trebled from their original values.<br />
<br />
The solution? Style Variable Maths! We can now enter mathematical expressions into our templates in order to resolve this issue and provide precise element dimensions (or positioning, or anything else that might involve numbers) while still respecting the values entered for style variables.<blockquote><font face="Courier New">&lt;style type=&quot;text/css&quot;&gt;</font><br />
<font face="Courier New">  #mydiv {</font><blockquote><font face="Courier New">  width: {<font color="Red">vb</font>:math 600 - {<font color="Red">vb</font>:stylevar <font color="RoyalBlue">mydiv_padding</font>} * 2 - {<font color="Red">vb</font>:stylevar <font color="Blue">mydiv_border</font>.<font color="RoyalBlue">borderWidth</font>} * 2}px;<br />
<font color="SeaGreen"><i>/* assuming padding = 10, border = 1 -&gt; 600 - 10 * 2 - 1 * 2 = <b>578</b> */</i></font></font><br />
<font face="Courier New">  height: {<font color="Red">vb</font>:math 400 - {<font color="Red">vb</font>:stylevar <font color="RoyalBlue">mydiv_padding</font>} * 2 - {<font color="Red">vb</font>:stylevar <font color="Blue">mydiv_border</font>.<font color="RoyalBlue">borderWidth</font>} * 2}px;<br />
<font color="SeaGreen"><i>/* assuming padding = 10, border = 1 -&gt; 400 - 10 * 2 - 1 * 2 = <b>378</b> */</i></font></font><br />
<font face="Courier New">  padding: {<font color="Red">vb</font>:stylevar <font color="RoyalBlue">mydiv_padding</font>};</font><br />
<font face="Courier New">  border: solid {<font color="Red">vb</font>:stylevar <font color="Blue">mydiv_border</font>.<font color="RoyalBlue">borderWidth</font>} black;</font><br />
</blockquote><font face="Courier New">  }</font><br />
<font face="Courier New">  &lt;/style&gt;</font><br />
<font face="Courier New">  ...</font><br />
<font face="Courier New">  &lt;div id=&quot;mydiv&quot;&gt;My 600 x 400 div&lt;/div&gt;<br />
</font></blockquote><font size="3"><b>So What Does All This Get Me?</b></font><br />
<br />
All this wrangling means that there are now three distinct methods to edit the style of a vBulletin 4 installation, depending upon the expertise of the administrator and the degree of customization required.<br />
<br />
<b>1) Editing Style Variables</b><br />
<br />
The majority of administrators will not need to venture outside of the safe confines of the style variable editor to customize their sites. Access to colours, fonts, backgrounds, padding etc. can all be found within the style variable editor, and the use of Style Variable Maths in the templates means that (for the most part) administrators are free to change the variables' values as they choose without breaking the layout.<br />
<br />
<b>2) Editing CSS Templates</b><br />
<br />
Those administrators with a greater knowledge of CSS may want to delve into the CSS templates in order to make more extreme customization to their style.<br />
<br />
One may do this safe in the knowledge that at the worst they could break their layout by editing CSS, but they  will not prevent content from being delivered to the browser - all of that is controlled by the HTML, not the CSS.<br />
<br />
Further, the administrator no longer has CSS classes force-fed to them by the system. Under vBulletin 3, the .tborder, .thead, .tcat, .alt1 (etc.) classes were hard-coded to exist, and removing them involved code modifications and an abandonment of all style variables. This is no longer the case in vBulletin 4, where administrators may completely rewrite their CSS if they choose to do so, and in the process they may choose to employ all the default style variables in their CSS, ignore a few, or abandon their use completely. <i>It's your choice</i>.<br />
<br />
A bonus of this approach is that there should be very few occasions where as CSS template is flagged by an upgrade as 'revert required', because critical data is not stored in these tempates, so there should be no reason to require them to be updated.<br />
<br />
<b>3) Editing XHTML Templates</b><br />
<br />
The final method, and the one that will be most familiar to existing customers. Maybe you don't like or don't understand CSS. Maybe you want <i>massive</i> changes to your layout that CSS alone can't deliver. Either way, there is nothing to stop you editing the raw XHTML of the vBulletin templates, just as there has always been.<br />
<br />
Except that now there is the three-way-diff template upgrade method, which will attempt to compare your customized templates with their original version from when you customized them <i>and</i> the new version of the default template, and then apply your customizations to the new version...<br />
<br />
...which was the subject of a <a href="http://www.vbulletin.com/forum/blog.php?b=2350" target="_blank">previous blog entry by Mike</a>.<br />
<br />
<b><font size="3">Over And Out</font></b><br />
<br />
I think most people now know that I am working my last few days here at vBulletin. It's been almost nine years since I was brought into the vBulletin development team and eight since I took over John's role as lead developer and product manager. In that time I've made some great friends both of staff and customers and the decision to leave all of you, and the product to which I have dedicated so many years of my life, was one of the hardest I have ever made.<br />
<br />
I will miss vBulletin, its staff and its customers greatly.<br />
<br />
Thanks everyone.<br />
- <a href="http://twitter.com/KierDarby" target="_blank">Kier</a></blockquote>

 ]]></content:encoded>
			<dc:creator>Kier</dc:creator>
			<guid isPermaLink="true">http://www.vbulletin.com/forum/blog.php?b=2366</guid>
		</item>
		<item>
			<title>A Couple of Widget Screen Shots</title>
			<link>http://www.vbulletin.com/forum/blog.php?b=2367</link>
			<pubDate>Wed, 03 Jun 2009 15:19:41 GMT</pubDate>
			<description><![CDATA[I know it's hard to visualize the widgets when you can't see either what they look like or how you administer them. I've been holding off putting up screen shots, because none of the pages have been...]]></description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">I know it's hard to visualize the widgets when you can't see either what they look like or how you administer them. I've been holding off putting up screen shots, because none of the pages have been styled. The admin pages probably won't change much if at all, but the user-facing changes are getting a thorough facelift, both visually and in terms of the styling and templating. So please don't comment on how ugly the CMS page is. We know, and we've got all available hands working on it. But the screen shot does have the right elements in roughly the right order.<br />
<br />
So the first screen shot shows the page where you set up the CMS page layout. This is a 75%/25% layout grid. We give you a number of options, and it's possible to create your own. Here I've put the content on the left, and two widgets on the right, for navigation and &quot;my friends activity&quot;. This is all done with drag and drop. See the scrolling list of widgets on the left? You press the button to put one on the page, then drag it to the place you want it. You can have widgets on any of the columns, above or below the main content. <br />
<img src="http://www.vbulletin.com/forum/blog_attachment.php?attachmentid=359&amp;stc=1&amp;d=1244042123" border="0" alt="" /><br />
The second and third screen shots show widget configuration interfaces. Each widget type has it's own interface. To repeat, you create as many widgets as you want, each with it's own unique configuration. So for example you could have dozens of RSS feed widgets, each of is an RSSFeed widget type. Each has its own configuration, which for that widget is the URL of the feed. You then put each of those widgets onto one or more page layouts. Then when you create a CMS article you define the page layout.<br />
<img src="http://www.vbulletin.com/forum/blog_attachment.php?attachmentid=356&amp;stc=1&amp;d=1244041809" border="0" alt="" /><br />
<img src="http://www.vbulletin.com/forum/blog_attachment.php?attachmentid=357&amp;stc=1&amp;d=1244041809" border="0" alt="" /><br />
<br />
<br />
The fourth page shows a CMS page. For this page I have turned the commenting on and made a couple of comments. You see the content in the center and left, extracts of the comments on the bottom with links to the discussion thread, the navigation widget at the top right, and below that the output of the &quot;my friends&quot; activity widget. In any real article of course the content would be more than two short sentences, but I wanted you to see everything at once. <br />
<br />
<br />
<img src="http://www.vbulletin.com/forum/blog_attachment.php?attachmentid=358&amp;stc=1&amp;d=1244041809" border="0" alt="" /></blockquote>

 ]]></content:encoded>
			<dc:creator>Edwin Brown</dc:creator>
			<guid isPermaLink="true">http://www.vbulletin.com/forum/blog.php?b=2367</guid>
		</item>
		<item>
			<title>So Long, and Thanks for All the Fish</title>
			<link>http://www.vbulletin.com/forum/blog.php?b=2365</link>
			<pubDate>Mon, 11 May 2009 13:23:34 GMT</pubDate>
			<description>I originally got involved with vBulletin as one of the initial beta testers, way back in March/April 2000. I started writing some modifications for the vB 1.1 series (the member list and the PM...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">I originally got involved with vBulletin as one of the initial beta testers, way back in March/April 2000. I started writing some modifications for the vB 1.1 series (the member list and the PM system came from my code originally), and at the end of 2000, I was brought on to help with development of vB 2.0. Aside from a short period where I focused on my university studies, I've been involved in vB's development since then. Many of you probably know that I even relocated from the US to the UK 3 years ago to work with Kier, Scott, and Ashley in person.<br />
<br />
However, I've decided that it's time for me to move on and pursue other goals.<br />
<br />
I'd like to thank Jelsoft for giving me the opportunity to work on vBulletin. Generally, it's been a good 9 years. I've learned more things in that time than I could have imagined, and being able to see my work all over the internet in the shape of your websites is a very cool feeling indeed.<br />
<br />
I'm sure you'll still be able to find me online. I try to stay involved with the PHP community, and a few vB'ers have already found me on <a href="http://twitter.com/mike_sul" target="_blank">Twitter</a>... though I should get more involved with both.<br />
<br />
So to borrow a famous line, <a href="http://www.youtube.com/watch?v=ojydNb3Lrrs" target="_blank">so long and thanks for all the fish</a>. :)<br />
<br />
Mike</blockquote>

 ]]></content:encoded>
			<dc:creator>Mike Sullivan</dc:creator>
			<guid isPermaLink="true">http://www.vbulletin.com/forum/blog.php?b=2365</guid>
		</item>
		<item>
			<title>Near-Final List of Widgets</title>
			<link>http://www.vbulletin.com/forum/blog.php?b=2364</link>
			<pubDate>Thu, 07 May 2009 00:05:33 GMT</pubDate>
			<description><![CDATA[We've been doing a lot of work with widgets, and I have something that is close to the final list that will ship with vB 4.0. It's always possible something could change, but it looks right now like...]]></description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">We've been doing a lot of work with widgets, and I have something that is close to the final list that will ship with vB 4.0. It's always possible something could change, but it looks right now like we have.<br />
<br />
<ol style="list-style-type: decimal"><li>Static HTML: This allows you to enter any static html. That means you can put a remote page in an i-frame, or an image, or a google gadget, or a lot of other things.</li>
<li>Static BB Code: This gives you the BBCode editor and lets you put the results into a widget.</li>
<li>My Friends: You can specify a content type (posts, social groups, social group messages, visitor messages, CMS articles, or CMS static html), a maximum age, and a maximum count, and your users will see that content posted by their friends.</li>
<li>Recent Polls: You can specify either a specific poll or list of polls, or a specific user, and/or a forum, plus a maximum age and count, and you'll see a summary of matching polls.</li>
<li>RSS Feed: You can pull RSS content in RSS2 or atom format and see it in the widget.</li>
<li>Navigation: You can specify any combination of top-level nodes, parent nodes of the current page, and/or siblings of the current page. I find this on the right with all three options on, plus the breadcrumbs along the top, to be a good way to move around in cms. You may like something different.</li>
<li>Recent activity: This gives you threads which have had at least one post in the last X days (default is 1). You can set a maximum count (default is 10). Within that, you get the threads with:<ol style="list-style-type: decimal"><li>Most recent activity</li>
<li>Most views</li>
<li>Most responses</li>
</ol></li>
<li>Generalized Search Widget: This is by far the most powerful. You can specify<ol style="list-style-type: decimal"><li>A content type. Default is everything, which then ignores the type-specific options.</li>
<li>A Forum, with or without its children</li>
<li>A social group category</li>
<li>A social group</li>
<li>A user</li>
<li>All friends</li>
<li>Keywords</li>
<li>Tags</li>
<li>Prefixes</li>
<li>Maximum age</li>
<li>As always, maximum count</li>
</ol> </li>
</ol>The search widget gives you a lot of capability. You have to be a bit careful using it. You can't do any damage, but you can enter combinations of terms that will never return information. So for example if you enter a prefix and type &quot;Social Group Messages&quot;, you're never going to get a result. That's because prefixes only apply to threads. We've tried to catch the obvious inconsistencies, and what we do is ignore additional search parameters that would generate an impossible search. If you put your head to it you can certainly enter combinations we didn't block.<br />
<br />
Keep in mind that each of these is a widget <i><b>type</b></i>. You create widgets, each of which is one of these types with a specific set of parameters. So you could for example have ten statichtml widgets, each of which used a different google gadget. You could make five different search widgets, and myFriends widgets for visitor messages, posts, and social group messages. That would be eighteen widgets from three types. You then make eighteen page arrangements, and you can make multiple cms pages with each arrangement. If you have a hundred pages that use the same arrangement, you can change the widget on all 100 pages by changing it on the master arrangement. So although there are &quot;only&quot; eight widget types, you could easily find yourself creating dozens of widgets from the two or three types you find most useful.<br />
<br />
I'm intentionally not posting pictures. We're working hard on moving pages to the new styles, but there's a lot of work to do and we haven't done any of the widget or widget admin pages. The appearance at the moment is no different from my earlier post.<br />
<br />
Hope this helps.</blockquote>

 ]]></content:encoded>
			<dc:creator>Edwin Brown</dc:creator>
			<guid isPermaLink="true">http://www.vbulletin.com/forum/blog.php?b=2364</guid>
		</item>
		<item>
			<title>vBulletin 4.0 Template Syntax</title>
			<link>http://www.vbulletin.com/forum/blog.php?b=2362</link>
			<pubDate>Fri, 01 May 2009 14:05:37 GMT</pubDate>
			<description>With the style changes going into vBulletin 4.0 it is the ideal time to change the template syntax being used. The original syntax in vBulletin 3 is no longer supported and suitable replacements and...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">With the style changes going into vBulletin 4.0 it is the ideal time to change the template syntax being used. The original syntax in vBulletin 3 is no longer supported and suitable replacements and enhancements have been added.<br />
<br />
The first thing that has been is excessive eval, before in vBulletin 3 you would find eval peppered around the code everytime a template was being evaluated, this however has potential security implications and an overhead associated with it since none of the templates could be stored by opcode caches like APC and XCache.<br />
<br />
vBulletin 4 now requires variables to be registered prior to their use within templates, previously all variables available at the time the template was rendered were available but this was known to cause problems when a variable was overwritten or not available. For the moment eval is still used to render the template but only inside the method in the class, this could potentially be removed in a future release.<br />
<br />
The new code to render a template looks similar to below, while this may seem very verbose the registration method will allow more optimizations to be performed in the future.<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">PHP Code:</div>
	<div class="bbcode_code"><code><code><span style="color: #000000">
<span style="color: #0000BB">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$templater&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">vB_Template</span><span style="color: #007700">::</span><span style="color: #0000BB">create</span><span style="color: #007700">(</span><span style="color: #DD0000">'forumhome_event'</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$templater</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">register</span><span style="color: #007700">(</span><span style="color: #DD0000">'callink'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$callink</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$templater</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">register</span><span style="color: #007700">(</span><span style="color: #DD0000">'daysevents'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$daysevents</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$templater</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">register</span><span style="color: #007700">(</span><span style="color: #DD0000">'eventdate'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$eventdate</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$templater</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">register</span><span style="color: #007700">(</span><span style="color: #DD0000">'eventdates'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$eventdates</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$upcomingevents&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$templater</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">render</span><span style="color: #007700">();&nbsp;<br /></span><span style="color: #0000BB"></span>
</span>
</code></code></div>
</div> The templates themselves also use a new syntax themselves, these have been namespaced for performance reasons. During scanning we only need to look at tags that have the vb namespace. Due to the way the scanner is written to provide a new tag syntax a class has to be dropped in with a validate and compile method defined.<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<pre class="bbcode_code">&lt;vb:if condition=&quot;$var == 2&quot;&gt;
Value is 2
&lt;vb:elseif condition=&quot;$var == 3&quot;&gt;
Value is 3
&lt;vb:else /&gt;
Value is {$var}
&lt;/vb:if&gt;</pre>
</div> So as you can see we've added an elseif condition to templates, another commonly requested feature was a loop.<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<pre class="bbcode_code">&lt;vb:each from=&quot;$myarray&quot; value=&quot;foo&quot;&gt;
Hi {$foo}
&lt;/vb:each&gt;</pre>
</div> For content that helps describe the value of a template but has little use in being in the output we can use the new comment tag, when the templates are compiled these will be left out of the output. This can potentially help save in bandwidth.<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<pre class="bbcode_code">&lt;div class=&quot;someclass&quot;&gt;
Output: Test
&lt;vb:comment&gt;
This won't be printed as comments are stripped at compile time.
&lt;/vb:comment&gt;
&lt;/div&gt;</pre>
</div> For the cases in which we wish to print literal text and do no variable evaluation or tag parsing we can use the literal tag, everything will be printed exactly as it is within the tags.<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<pre class="bbcode_code">&lt;vb:literal&gt;
&lt;vb:if condition=&quot;$var == 'test'&quot;&gt;
Some test
&lt;/vb:if&gt;
&lt;/vb:literal&gt;</pre>
</div> In addition to the new tag syntax, we've also introduced a short hand curly syntax for simpler actions and some output formatting on variables. This moves the requirement to do formatting within the code to the template layer.<br />
<br />
Dates can be formatted based on a timestamp, the second parameter indicates the format, if left blank the default board format is used.<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<pre class="bbcode_code">{vb:date $var}
{vb:date $var, Z}
{vb:time $var}
{vb:time H:i}</pre>
</div> There is also a shorter if condition, when you only want a simple if, else.<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<pre class="bbcode_code">{vb:if 1+1 == 2, 'It does make 2', 'Ooops, maths fail!'}</pre>
</div> Number formatting<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<pre class="bbcode_code">{vb:number 1000.1234, 3}</pre>
</div> In an attempt to reduce the likelihood of XSS attacks there is now the concept of raw phrases and raw variables, anything without the raw prefix will automatically be escaped with htmlspecialchars_uni() before being evaluated.<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<pre class="bbcode_code">{vb:phrase phrasename, $var, '&lt;script&gt;alert(document.cookie);'}
{vb:rawphrase phrasename, $var, '&lt;script&gt;alert(document.cookie);'}</pre>
</div> The second example here will execute javascript, the first will print the escaped text.<br />
<br />
For variable access we have the regular kind, the raw variables and finally a short hand method.<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<pre class="bbcode_code">{vb:var username}
{$username}</pre>
</div> The above two curlys will provide the exact same output, the latter being a little less verbose.<br />
<br />
Finally to complete the new syntax we are now offering more detailed error messages, when an invalid syntax is used we can tell the user what line this occurred and what was malformed.</blockquote>

 ]]></content:encoded>
			<dc:creator>Scott MacVicar</dc:creator>
			<guid isPermaLink="true">http://www.vbulletin.com/forum/blog.php?b=2362</guid>
		</item>
		<item>
			<title>First Look: The vBulletin 4.0 Style</title>
			<link>http://www.vbulletin.com/forum/blog.php?b=2360</link>
			<pubDate>Thu, 23 Apr 2009 11:41:37 GMT</pubDate>
			<description>When I was hired by Jelsoft back in 2001, the first thing I did was to make some sweeping changes to the vBulletin 2 style in time for its fourth beta release, though many of the design elements were...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">When I was hired by Jelsoft back in 2001, the first thing I did was to make some sweeping changes to the vBulletin 2 style in time for its fourth beta release, though many of the design elements were already in place and could not be re-done without major changes to the PHP code.<br />
<br />
For vBulletin 3, the task of producing the style once again fell to me. My goal was to simplify the layout, produce consistent design rules, to make commonly-used controls more prominent and to take those less-frequently used buttons and links and do the opposite through the use of popup menus, collapsible elements etc.<br />
<br />
The vB3 blog and project tools add-ons were largely my design, and for these products we started to explore the use of tableless / CSS design in more depth than was in use for forum. With vBulletin 3.7, the new profile page, album/picture system and social groups were designed to be completely CSS-driven, but they clearly showed the limitations of trying to append additional CSS rules on top of the existing CSS written out by the vB3 style system, which is far from conducive to producing a completely CSS-driven design.<br />
<br />
For vBulletin 4.0, the original intention had been to produce a completely new, CSS-driven design, marked up with semantic XHTML together with an overhauled, much more modern user interface. All of this would be released in a single 4.0 version with a relatively long project timeline. However, the switch to the new iterative development strategy, together with the much shorter period to first release that came with it, has meant that the scope of this task has been pared back for 4.0. In the initial release, the requirement is to produce a new design using semantic XHTML and CSS on top of the improved style variable system and extended template syntax that has been developed. The more extensive user interface changes will be delivered in a later release, after 4.0.<br />
<br />
Producing this new style requires some unique considerations, over and above the obvious semantic XHTML/CSS requirements:<br />
<ul><li>It can't be so complex that novice administrators will never be able to edit their templates</li>
<li>It must be sufficiently flexible to allow restyling by administrators at many levels of proficiency</li>
<li>It must be capable of adapting to elements being conditionally available due to permissions, options etc.</li>
</ul>I have been working on this for some time now and have developed a CSS framework within which the new templates can be produced, together with several key pages to demonstrate how it all fits together.<br />
<br />
<font size="3">More Bodies to Lighten the Load...</font><br />
<br />
The process has reached the point now where some of the work can (and for reasons of time constraints, must) be handed off to people other than just me in order to complete everything that still needs to be done. I figured therefore that now would be good time to demonstrate some of what I have put together so far. :)<br />
<font size="3"><br />
<font size="4">Header, Navbar, Breadcrumb, Page Title</font></font><br />
<br />
Let's start with the top of the page, with the header, navbar, breadcrumb and page title.<br />
<br />
<img src="http://images.vbulletin.com/blog-content/kier/40-style-firstlook/hnbt.png" border="0" alt="" /><br />
<br />
Some things to mention right away: the tabs in the navbar are currently non-functional and the links underneath are just place-holders. The actual content for these has yet to be decided.<br />
<br />
Secondly, you'll notice that the colour scheme in use is not a million miles away from that of the existing, vBulletin 3.x style. This was a conscious decision in order to retain some visual familiarity with the scheme that has been in place for so long now.<br />
<br />
By default, we show a very small logo in the header, which can of course be replaced with something of equal or different size to fit in with the branding of your own site in the same way as was possible with all previous versions of vBulletin.<br />
<br />
Under the logo, we have (and hope to retain, given time to complete the PHP code that would allow it to function) a set of tabs that will allow the visitor to quickly navigate to a section of the system and know at a glance where they are. Below this we have a row of links similar to what runs along the bottom of the vB3 navbar, except that these links have the ability to switch depending upon the selected tab above.<br />
<br />
Moving down we see that the breadcrumb has moved out of its traditional position in the navbar to occupy its own space on the page background where it is less cluttered and less likely to wrap with small browser windows.<br />
<br />
Immediately below the breadcrumb is the page title. The size of this element has been vastly increased over the bold, 10pt text used in vBulletin 3 and is far more prominent in its placing on the page, as befits its importance. Under this is space for an optional page description, which can accept a forum description, help text or anything else that might be useful.<br />
<br />
The XHTML for all of this is remarkably simple...<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">HTML Code:</div>
	<pre class="bbcode_code"><span style="color:#000080">&lt;div id=<span style="color:#0000FF">&quot;header&quot;</span>&gt;</span>
	<span style="color:#000080">&lt;div&gt;</span><span style="color:#008000">&lt;a href=<span style="color:#0000FF">&quot;forumhome.php&quot;</span> id=<span style="color:#0000FF">&quot;logo-image&quot;</span>&gt;</span><span style="color:#800080">&lt;img src=<span style="color:#0000FF">&quot;images/logo.png&quot;</span> alt=<span style="color:#0000FF">&quot;&quot;</span> /&gt;</span><span style="color:#008000">&lt;/a&gt;</span><span style="color:#000080">&lt;/div&gt;</span>
	<span style="color:#000080">&lt;div id=<span style="color:#0000FF">&quot;toplinks&quot;</span>&gt;</span>
		<span style="color:#008000">&lt;a href=<span style="color:#0000FF">&quot;#&quot;</span>&gt;</span>Kier<span style="color:#008000">&lt;/a&gt;</span>
		<span style="color:#008000">&lt;a href=<span style="color:#0000FF">&quot;#&quot;</span>&gt;</span>Settings<span style="color:#008000">&lt;/a&gt;</span>
		<span style="color:#008000">&lt;a href=<span style="color:#0000FF">&quot;#&quot;</span>&gt;</span>Log-out<span style="color:#008000">&lt;/a&gt;</span>
	<span style="color:#000080">&lt;/div&gt;</span>
	<span style="color:#000080">&lt;hr /&gt;</span>
<span style="color:#000080">&lt;/div&gt;</span>

<span style="color:#000080">&lt;div id=<span style="color:#0000FF">&quot;navbar&quot;</span>&gt;</span>
	<span style="color:#000080">&lt;ul id=<span style="color:#0000FF">&quot;navtabs&quot;</span> class=<span style="color:#0000FF">&quot;floatcontainer&quot;</span>&gt;</span>
		<span style="color:#000080">&lt;li&gt;</span><span style="color:#008000">&lt;a class=<span style="color:#0000FF">&quot;navtab&quot;</span> href=<span style="color:#0000FF">&quot;#&quot;</span>&gt;</span>Site<span style="color:#008000">&lt;/a&gt;</span><span style="color:#000080">&lt;/li&gt;</span>
		<span style="color:#000080">&lt;li class=<span style="color:#0000FF">&quot;selected&quot;</span>&gt;</span><span style="color:#008000">&lt;a class=<span style="color:#0000FF">&quot;navtab&quot;</span> href=<span style="color:#0000FF">&quot;#&quot;</span>&gt;</span>Forum<span style="color:#008000">&lt;/a&gt;</span>
			<span style="color:#000080">&lt;ul class=<span style="color:#0000FF">&quot;floatcontainer&quot;</span>&gt;</span>
				<span style="color:#000080">&lt;li&gt;</span><span style="color:#008000">&lt;a href=<span style="color:#0000FF">&quot;#&quot;</span>&gt;</span>User CP<span style="color:#008000">&lt;/a&gt;</span><span style="color:#000080">&lt;/li&gt;</span>
				<span style="color:#000080">&lt;li&gt;</span><span style="color:#008000">&lt;a href=<span style="color:#0000FF">&quot;#&quot;</span>&gt;</span>New Posts<span style="color:#008000">&lt;/a&gt;</span><span style="color:#000080">&lt;/li&gt;</span>a
				<span style="color:#000080">&lt;li&gt;</span><span style="color:#008000">&lt;a href=<span style="color:#0000FF">&quot;#&quot;</span>&gt;</span>Today's Posts<span style="color:#008000">&lt;/a&gt;</span><span style="color:#000080">&lt;/li&gt;</span>
				<span style="color:#000080">&lt;li&gt;</span><span style="color:#008000">&lt;a href=<span style="color:#0000FF">&quot;#&quot;</span>&gt;</span>Mark all Forums Read<span style="color:#008000">&lt;/a&gt;</span><span style="color:#000080">&lt;/li&gt;</span>
				<span style="color:#000080">&lt;li&gt;</span><span style="color:#008000">&lt;a href=<span style="color:#0000FF">&quot;#&quot;</span>&gt;</span>Subscribed Threads<span style="color:#008000">&lt;/a&gt;</span><span style="color:#000080">&lt;/li&gt;</span>
				<span style="color:#000080">&lt;li&gt;</span><span style="color:#008000">&lt;a href=<span style="color:#0000FF">&quot;#&quot;</span>&gt;</span>Private Messages<span style="color:#008000">&lt;/a&gt;</span><span style="color:#000080">&lt;/li&gt;</span>
			<span style="color:#000080">&lt;/ul&gt;</span>
		<span style="color:#000080">&lt;/li&gt;</span>
		<span style="color:#000080">&lt;li&gt;</span><span style="color:#008000">&lt;a class=<span style="color:#0000FF">&quot;navtab&quot;</span> href=<span style="color:#0000FF">&quot;#&quot;</span>&gt;</span>Blog<span style="color:#008000">&lt;/a&gt;</span><span style="color:#000080">&lt;/li&gt;</span>
		<span style="color:#000080">&lt;li&gt;</span><span style="color:#008000">&lt;a class=<span style="color:#0000FF">&quot;navtab&quot;</span> href=<span style="color:#0000FF">&quot;#&quot;</span>&gt;</span>Projects<span style="color:#008000">&lt;/a&gt;</span><span style="color:#000080">&lt;/li&gt;</span>
		<span style="color:#000080">&lt;li&gt;</span><span style="color:#008000">&lt;a class=<span style="color:#0000FF">&quot;navtab&quot;</span> href=<span style="color:#0000FF">&quot;#&quot;</span>&gt;</span>Calendar<span style="color:#008000">&lt;/a&gt;</span><span style="color:#000080">&lt;/li&gt;</span>
	<span style="color:#000080">&lt;/ul&gt;</span>
<span style="color:#000080">&lt;/div&gt;</span>

<span style="color:#000080">&lt;div id=<span style="color:#0000FF">&quot;breadcrumb&quot;</span>&gt;</span>
	<span style="color:#000080">&lt;ul class=<span style="color:#0000FF">&quot;floatcontainer&quot;</span>&gt;</span>
		<span style="color:#000080">&lt;li class=<span style="color:#0000FF">&quot;navbit&quot;</span>&gt;</span><span style="color:#008000">&lt;a href=<span style="color:#0000FF">&quot;#&quot;</span> name=<span style="color:#0000FF">&quot;top&quot;</span>&gt;</span>My Site<span style="color:#008000">&lt;/a&gt;</span><span style="color:#000080">&lt;/li&gt;</span>
		<span style="color:#000080">&lt;li class=<span style="color:#0000FF">&quot;navbit&quot;</span>&gt;</span><span style="color:#008000">&lt;a href=<span style="color:#0000FF">&quot;#&quot;</span>&gt;</span>Forums<span style="color:#008000">&lt;/a&gt;</span><span style="color:#000080">&lt;/li&gt;</span>
		<span style="color:#000080">&lt;li class=<span style="color:#0000FF">&quot;navbit&quot;</span>&gt;</span><span style="color:#008000">&lt;a href=<span style="color:#0000FF">&quot;#&quot;</span>&gt;</span>General<span style="color:#008000">&lt;/a&gt;</span><span style="color:#000080">&lt;/li&gt;</span>
		<span style="color:#000080">&lt;li class=<span style="color:#0000FF">&quot;navbit&quot;</span>&gt;</span><span style="color:#008000">&lt;a href=<span style="color:#0000FF">&quot;#&quot;</span>&gt;</span>Off-Topic Stuff<span style="color:#008000">&lt;/a&gt;</span><span style="color:#000080">&lt;/li&gt;</span>
		<span style="color:#000080">&lt;li class=<span style="color:#0000FF">&quot;navbit&quot;</span>&gt;</span><span style="color:#008000">&lt;a href=<span style="color:#0000FF">&quot;#&quot;</span>&gt;</span>The Forumdisplay Example Forum<span style="color:#008000">&lt;/a&gt;</span><span style="color:#000080">&lt;/li&gt;</span>
	<span style="color:#000080">&lt;/ul&gt;</span>
	<span style="color:#000080">&lt;hr /&gt;</span>
<span style="color:#000080">&lt;/div&gt;</span>

<span style="color:#000080">&lt;div id=<span style="color:#0000FF">&quot;pagetitle&quot;</span>&gt;</span>
	<span style="color:#000080">&lt;h1&gt;</span>The New vBulletin Style Forums<span style="color:#000080">&lt;/h1&gt;</span>
	<span style="color:#000080">&lt;p class=<span style="color:#0000FF">&quot;description&quot;</span> id=<span style="color:#0000FF">&quot;welcomemessage&quot;</span>&gt;</span>Welcome to The New vBulletin Style Forums.<span style="color:#000080">&lt;/p&gt;</span>
	<span style="color:#000080">&lt;p class=<span style="color:#0000FF">&quot;description&quot;</span> id=<span style="color:#0000FF">&quot;firstvisitmessage&quot;</span>&gt;</span>If this is your first visit, be sure to check out the FAQ by clicking the link above. You may have to register before you can post: click the register link above to proceed. To start viewing messages, select the forum that you want to visit from the selection below.<span style="color:#000080">&lt;/p&gt;</span>
<span style="color:#000080">&lt;/div&gt;</span></pre>
</div> <font size="4">Forum Home</font><br />
<br />
The forum home page was the first complete page I built, and looking back at it now there are some bits of it that look a little out-of-place next to some of the more recent design elements I've built. Right now, it's using the same iconography as vBulletin 3, though I have produced new, larger versions of the images with alpha transparency from my original masters so they work a lot better on variable backgrounds.<br />
<br />
This is an example of how forumbits appear on the forum home page:<br />
<br />
<img src="http://images.vbulletin.com/blog-content/kier/40-style-firstlook/forumbits.png" border="0" alt="" /><br />
<br />
As you can see, the forumbits have moved on from their column-based layout that was used in vB1, vB2 and vB3. The new design is less rigid and allows whitespace to imply connections between data items rather than enforcing encapsulation with heavy borders or backgrounds.<br />
<br />
Forum titles and icons are made much larger and more prominent, as these are the primary points of reference for the forums. Information such as the number of contained threads and posts is demoted to a floating line of de-emphasized data to the right of the title while last post information gets a line all to itself in order to allow thread titles to be shown without the excessive wrapping that would invariably come from the small container available in vB3.<br />
<br />
<font size="4">What's Going On?</font><br />
<br />
As we look toward the bottom of the page, the <i>What's Going On</i> box has been given a make-over.<br />
<br />
<img src="http://images.vbulletin.com/blog-content/kier/40-style-firstlook/whats-going-on.png" border="0" alt="" /><br />
<br />
Once again, this design is accomplished with minimal markup (it's primarily a bunch of HTML list elements) and all the layout and styling is accomplished via CSS.<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">HTML Code:</div>
	<pre class="bbcode_code"><span style="color:#000080">&lt;div id=<span style="color:#0000FF">&quot;forum_info_options&quot;</span> class=<span style="color:#0000FF">&quot;block&quot;</span>&gt;</span>
	<span style="color:#000080">&lt;h4 class=<span style="color:#0000FF">&quot;blockhead&quot;</span>&gt;</span>Forum Information and Options<span style="color:#000080">&lt;/h4&gt;</span>
	<span style="color:#000080">&lt;div class=<span style="color:#0000FF">&quot;blockbody floatcontainer&quot;</span>&gt;</span>	
		<span style="color:#000080">&lt;div id=<span style="color:#0000FF">&quot;forum_info_block_1&quot;</span>&gt;</span>
			
			<span style="color:#000080">&lt;div id=<span style="color:#0000FF">&quot;forum_posting_rules&quot;</span>&gt;</span>
				<span style="color:#000080">&lt;h5 class=<span style="color:#0000FF">&quot;blocksubhead&quot;</span>&gt;</span>Posting Permissions<span style="color:#000080">&lt;/h5&gt;</span>
				<span style="color:#000080">&lt;ul class=<span style="color:#0000FF">&quot;blockrow&quot;</span>&gt;</span>
					<span style="color:#000080">&lt;li&gt;</span>You <span style="color:#000080">&lt;strong&gt;</span>may<span style="color:#000080">&lt;/strong&gt;</span> post new threads<span style="color:#000080">&lt;/li&gt;</span>
					<span style="color:#000080">&lt;li&gt;</span>You <span style="color:#000080">&lt;strong&gt;</span>may<span style="color:#000080">&lt;/strong&gt;</span> post replies<span style="color:#000080">&lt;/li&gt;</span>
					<span style="color:#000080">&lt;li&gt;</span>You <span style="color:#000080">&lt;strong&gt;</span>may<span style="color:#000080">&lt;/strong&gt;</span> post attachments<span style="color:#000080">&lt;/li&gt;</span>
					<span style="color:#000080">&lt;li&gt;</span>You <span style="color:#000080">&lt;strong&gt;</span>may<span style="color:#000080">&lt;/strong&gt;</span> edit your posts<span style="color:#000080">&lt;/li&gt;</span>
				<span style="color:#000080">&lt;/ul&gt;</span>
				<span style="color:#000080">&lt;ul class=<span style="color:#0000FF">&quot;blockrow&quot;</span>&gt;</span>
					<span style="color:#000080">&lt;li&gt;</span><span style="color:#008000">&lt;a href=<span style="color:#0000FF">&quot;#&quot;</span>&gt;</span>BB code<span style="color:#008000">&lt;/a&gt;</span> is enabled<span style="color:#000080">&lt;/li&gt;</span>
					<span style="color:#000080">&lt;li&gt;</span><span style="color:#008000">&lt;a href=<span style="color:#0000FF">&quot;#&quot;</span>&gt;</span>Smilies<span style="color:#008000">&lt;/a&gt;</span> is enabled<span style="color:#000080">&lt;/li&gt;</span>
					<span style="color:#000080">&lt;li&gt;</span><span style="color:#008000">&lt;a href=<span style="color:#0000FF">&quot;#&quot;</span>&gt;</span>&#91;IMG&#93;<span style="color:#008000">&lt;/a&gt;</span> code is enabled<span style="color:#000080">&lt;/li&gt;</span>
					<span style="color:#000080">&lt;li&gt;</span>HTML is disabled<span style="color:#000080">&lt;/li&gt;</span>
				<span style="color:#000080">&lt;/ul&gt;</span>
			<span style="color:#000080">&lt;/div&gt;</span>

		
			<span style="color:#000080">&lt;div id=<span style="color:#0000FF">&quot;forum_moderators&quot;</span>&gt;</span>
				<span style="color:#000080">&lt;h5 class=<span style="color:#0000FF">&quot;blocksubhead&quot;</span>&gt;</span>Moderators of this Forum<span style="color:#000080">&lt;/h5&gt;</span>
				<span style="color:#000080">&lt;ul class=<span style="color:#0000FF">&quot;blockrow commalist&quot;</span>&gt;</span>
					<span style="color:#000080">&lt;li&gt;</span><span style="color:#008000">&lt;a class=<span style="color:#0000FF">&quot;username&quot;</span> href=<span style="color:#0000FF">&quot;#&quot;</span>&gt;</span>Mickey<span style="color:#008000">&lt;/a&gt;</span><span style="color:#000080">&lt;/li&gt;</span>
					<span style="color:#000080">&lt;li&gt;</span><span style="color:#008000">&lt;a class=<span style="color:#0000FF">&quot;username&quot;</span> href=<span style="color:#0000FF">&quot;#&quot;</span>&gt;</span>Donald<span style="color:#008000">&lt;/a&gt;</span><span style="color:#000080">&lt;/li&gt;</span>
					<span style="color:#000080">&lt;li&gt;</span><span style="color:#008000">&lt;a class=<span style="color:#0000FF">&quot;username&quot;</span> href=<span style="color:#0000FF">&quot;#&quot;</span>&gt;</span>Goofy<span style="color:#008000">&lt;/a&gt;</span><span style="color:#000080">&lt;/li&gt;</span>
					<span style="color:#000080">&lt;li&gt;</span><span style="color:#008000">&lt;a class=<span style="color:#0000FF">&quot;username&quot;</span> href=<span style="color:#0000FF">&quot;#&quot;</span>&gt;</span>Pluto<span style="color:#008000">&lt;/a&gt;</span><span style="color:#000080">&lt;/li&gt;</span>
					<span style="color:#000080">&lt;li&gt;</span><span style="color:#008000">&lt;a class=<span style="color:#0000FF">&quot;username&quot;</span> href=<span style="color:#0000FF">&quot;#&quot;</span>&gt;</span>Daisy<span style="color:#008000">&lt;/a&gt;</span><span style="color:#000080">&lt;/li&gt;</span>
					<span style="color:#000080">&lt;li&gt;</span><span style="color:#008000">&lt;a class=<span style="color:#0000FF">&quot;username&quot;</span> href=<span style="color:#0000FF">&quot;#&quot;</span>&gt;</span>Minnie<span style="color:#008000">&lt;/a&gt;</span><span style="color:#000080">&lt;/li&gt;</span>
					<span style="color:#000080">&lt;li&gt;</span><span style="color:#008000">&lt;a class=<span style="color:#0000FF">&quot;username&quot;</span> href=<span style="color:#0000FF">&quot;#&quot;</span>&gt;</span>Pete<span style="color:#008000">&lt;/a&gt;</span><span style="color:#000080">&lt;/li&gt;</span>
				<span style="color:#000080">&lt;/ul&gt;</span>
			<span style="color:#000080">&lt;/div&gt;</span>
			
			<span style="color:#000080">&lt;div id=<span style="color:#0000FF">&quot;forum_icon_legend&quot;</span>&gt;</span>
				<span style="color:#000080">&lt;h5 class=<span style="color:#0000FF">&quot;blocksubhead&quot;</span>&gt;</span>Icon Legend<span style="color:#000080">&lt;/h5&gt;</span>
				<span style="color:#000080">&lt;dl class=<span style="color:#0000FF">&quot;blockrow&quot;</span>&gt;</span>
					<span style="color:#000080">&lt;dt&gt;</span><span style="color:#800080">&lt;img src=<span style="color:#0000FF">&quot;images/statusicon/thread_new-16.png&quot;</span> alt=<span style="color:#0000FF">&quot;&quot;</span> /&gt;</span><span style="color:#000080">&lt;/dt&gt;</span><span style="color:#000080">&lt;dd&gt;</span>Contains unread posts<span style="color:#000080">&lt;/dd&gt;</span>
					<span style="color:#000080">&lt;dt&gt;</span><span style="color:#800080">&lt;img src=<span style="color:#0000FF">&quot;images/statusicon/thread-16.png&quot;</span> alt=<span style="color:#0000FF">&quot;&quot;</span> /&gt;</span><span style="color:#000080">&lt;/dt&gt;</span><span style="color:#000080">&lt;dd&gt;</span>Contains no unread posts<span style="color:#000080">&lt;/dd&gt;</span>
					<span style="color:#000080">&lt;dt&gt;</span><span style="color:#800080">&lt;img src=<span style="color:#0000FF">&quot;images/statusicon/thread_hot_new-16.png&quot;</span> alt=<span style="color:#0000FF">&quot;&quot;</span> /&gt;</span><span style="color:#000080">&lt;/dt&gt;</span><span style="color:#000080">&lt;dd&gt;</span>Hot thread with unread posts<span style="color:#000080">&lt;/dd&gt;</span>
					<span style="color:#000080">&lt;dt&gt;</span><span style="color:#800080">&lt;img src=<span style="color:#0000FF">&quot;images/statusicon/thread_hot-16.png&quot;</span> alt=<span style="color:#0000FF">&quot;&quot;</span> /&gt;</span><span style="color:#000080">&lt;/dt&gt;</span><span style="color:#000080">&lt;dd&gt;</span>Hot thread with no unread posts<span style="color:#000080">&lt;/dd&gt;</span>
					<span style="color:#000080">&lt;dt&gt;</span><span style="color:#800080">&lt;img src=<span style="color:#0000FF">&quot;images/statusicon/thread_lock-16.png&quot;</span> alt=<span style="color:#0000FF">&quot;&quot;</span> /&gt;</span><span style="color:#000080">&lt;/dt&gt;</span><span style="color:#000080">&lt;dd&gt;</span>Thread is closed<span style="color:#000080">&lt;/dd&gt;</span>
					<span style="color:#000080">&lt;dt&gt;</span><span style="color:#800080">&lt;img src=<span style="color:#0000FF">&quot;images/statusicon/thread_dot-16.png&quot;</span> alt=<span style="color:#0000FF">&quot;&quot;</span> /&gt;</span><span style="color:#000080">&lt;/dt&gt;</span><span style="color:#000080">&lt;dd&gt;</span>You have posted in this thread<span style="color:#000080">&lt;/dd&gt;</span>
				<span style="color:#000080">&lt;/dl&gt;</span>
			<span style="color:#000080">&lt;/div&gt;</span>
			
		<span style="color:#000080">&lt;/div&gt;</span>
		
		<span style="color:#000080">&lt;div id=<span style="color:#0000FF">&quot;forum_info_block_2&quot;</span>&gt;</span>
		
			<span style="color:#000080">&lt;div id=<span style="color:#0000FF">&quot;forum_onlineusers&quot;</span>&gt;</span>
				<span style="color:#000080">&lt;h5 class=<span style="color:#0000FF">&quot;blocksubhead&quot;</span>&gt;</span>Users Browsing this Forum<span style="color:#000080">&lt;/h5&gt;</span>
				<span style="color:#000080">&lt;div class=<span style="color:#0000FF">&quot;blockrow&quot;</span>&gt;</span>
					<span style="color:#000080">&lt;p&gt;</span>There are currently <span style="color:#008000">&lt;a href=<span style="color:#0000FF">&quot;#wol&quot;</span>&gt;</span>22 users browsing this forum<span style="color:#008000">&lt;/a&gt;</span>. <span style="color:#000080">&lt;span class=<span style="color:#0000FF">&quot;shade&quot;</span>&gt;</span>(9 members and 13 guests)<span style="color:#000080">&lt;/span&gt;</span><span style="color:#000080">&lt;/p&gt;</span>
					<span style="color:#000080">&lt;ol class=<span style="color:#0000FF">&quot;commalist&quot;</span>&gt;</span>
						<span style="color:#000080">&lt;li&gt;</span><span style="color:#008000">&lt;a class=<span style="color:#0000FF">&quot;username&quot;</span> href=<span style="color:#0000FF">&quot;#&quot;</span>&gt;</span>Kier<span style="color:#008000">&lt;/a&gt;</span><span style="color:#000080">&lt;/li&gt;</span>
						<span style="color:#000080">&lt;li&gt;</span><span style="color:#008000">&lt;a class=<span style="color:#0000FF">&quot;username&quot;</span> href=<span style="color:#0000FF">&quot;#&quot;</span>&gt;</span>Altered<span style="color:#008000">&lt;/a&gt;</span><span style="color:#000080">&lt;/li&gt;</span>
						<span style="color:#000080">&lt;li&gt;</span><span style="color:#008000">&lt;a class=<span style="color:#0000FF">&quot;username&quot;</span> href=<span style="color:#0000FF">&quot;#&quot;</span>&gt;</span>ArcVox<span style="color:#008000">&lt;/a&gt;</span><span style="color:#000080">&lt;/li&gt;</span>
						<span style="color:#000080">&lt;li&gt;</span><span style="color:#008000">&lt;a class=<span style="color:#0000FF">&quot;username&quot;</span> href=<span style="color:#0000FF">&quot;#&quot;</span>&gt;</span>Bill Bickley<span style="color:#008000">&lt;/a&gt;</span><span style="color:#000080">&lt;/li&gt;</span>
						<span style="color:#000080">&lt;li&gt;</span><span style="color:#008000">&lt;a class=<span style="color:#0000FF">&quot;username&quot;</span> href=<span style="color:#0000FF">&quot;#&quot;</span>&gt;</span>bonkerspr<span style="color:#008000">&lt;/a&gt;</span><span style="color:#000080">&lt;/li&gt;</span>
						<span style="color:#000080">&lt;li&gt;</span><span style="color:#008000">&lt;a class=<span style="color:#0000FF">&quot;username&quot;</span> href=<span style="color:#0000FF">&quot;#&quot;</span>&gt;</span>BWJ<span style="color:#008000">&lt;/a&gt;</span><span style="color:#000080">&lt;/li&gt;</span>
						<span style="color:#000080">&lt;li&gt;</span><span style="color:#008000">&lt;a class=<span style="color:#0000FF">&quot;username&quot;</span> href=<span style="color:#0000FF">&quot;#&quot;</span>&gt;</span>Christine<span style="color:#008000">&lt;/a&gt;</span><span style="color:#000080">&lt;/li&gt;</span>
						<span style="color:#000080">&lt;li&gt;</span><span style="color:#008000">&lt;a class=<span style="color:#0000FF">&quot;username&quot;</span> href=<span style="color:#0000FF">&quot;#&quot;</span>&gt;</span>Mike Sullivan<span style="color:#008000">&lt;/a&gt;</span><span style="color:#000080">&lt;/li&gt;</span>
						<span style="color:#000080">&lt;li&gt;</span><span style="color:#008000">&lt;a class=<span style="color:#0000FF">&quot;username&quot;</span> href=<span style="color:#0000FF">&quot;#&quot;</span>&gt;</span>Solar<span style="color:#008000">&lt;/a&gt;</span><span style="color:#000080">&lt;/li&gt;</span>
					<span style="color:#000080">&lt;/ol&gt;</span>
				<span style="color:#000080">&lt;/div&gt;</span>
			<span style="color:#000080">&lt;/div&gt;</span>
			
			<span style="color:#FF8000">&lt;form id=<span style="color:#0000FF">&quot;forum_display_options&quot;</span> action=<span style="color:#0000FF">&quot;&quot;</span> method=<span style="color:#0000FF">&quot;post&quot;</span>&gt;</span>
				<span style="color:#000080">&lt;h5 class=<span style="color:#0000FF">&quot;blocksubhead&quot;</span>&gt;</span>Thread Display Options<span style="color:#000080">&lt;/h5&gt;</span>
				<span style="color:#000080">&lt;div class=<span style="color:#0000FF">&quot;formcontrols&quot;</span>&gt;</span>
				
					<span style="color:#000080">&lt;div class=<span style="color:#0000FF">&quot;blockrow&quot;</span>&gt;</span>
						<span style="color:#FF8000">&lt;label for=<span style="color:#0000FF">&quot;sel_daysprune&quot;</span>&gt;</span>Show threads from the...<span style="color:#FF8000">&lt;/label&gt;</span>
						<span style="color:#FF8000">&lt;select class=<span style="color:#0000FF">&quot;primary&quot;</span> id=<span style="color:#0000FF">&quot;sel_daysprune&quot;</span> name=<span style="color:#0000FF">&quot;daysprune&quot;</span>&gt;</span>
							<span style="color:#FF8000">&lt;option value=<span style="color:#0000FF">&quot;1&quot;</span>&gt;</span>Last Day<span style="color:#FF8000">&lt;/option&gt;</span>
							<span style="color:#FF8000">&lt;option value=<span style="color:#0000FF">&quot;2&quot;</span>&gt;</span>Last 2 Days<span style="color:#FF8000">&lt;/option&gt;</span>
							<span style="color:#FF8000">&lt;option value=<span style="color:#0000FF">&quot;7&quot;</span>&gt;</span>Last Week<span style="color:#FF8000">&lt;/option&gt;</span>
							<span style="color:#FF8000">&lt;option value=<span style="color:#0000FF">&quot;10&quot;</span>&gt;</span>Last 10 Days<span style="color:#FF8000">&lt;/option&gt;</span>

							<span style="color:#FF8000">&lt;option value=<span style="color:#0000FF">&quot;14&quot;</span>&gt;</span>Last 2 Weeks<span style="color:#FF8000">&lt;/option&gt;</span>
							<span style="color:#FF8000">&lt;option value=<span style="color:#0000FF">&quot;30&quot;</span>&gt;</span>Last Month<span style="color:#FF8000">&lt;/option&gt;</span>
							<span style="color:#FF8000">&lt;option value=<span style="color:#0000FF">&quot;45&quot;</span>&gt;</span>Last 45 Days<span style="color:#FF8000">&lt;/option&gt;</span>
							<span style="color:#FF8000">&lt;option value=<span style="color:#0000FF">&quot;60&quot;</span>&gt;</span>Last 2 Months<span style="color:#FF8000">&lt;/option&gt;</span>
							<span style="color:#FF8000">&lt;option value=<span style="color:#0000FF">&quot;75&quot;</span>&gt;</span>Last 75 Days<span style="color:#FF8000">&lt;/option&gt;</span>
							<span style="color:#FF8000">&lt;option value=<span style="color:#0000FF">&quot;100&quot;</span>&gt;</span>Last 100 Days<span style="color:#FF8000">&lt;/option&gt;</span>

							<span style="color:#FF8000">&lt;option selected=<span style="color:#0000FF">&quot;selected&quot;</span> value=<span style="color:#0000FF">&quot;365&quot;</span>&gt;</span>Last Year<span style="color:#FF8000">&lt;/option&gt;</span>
							<span style="color:#FF8000">&lt;option value=<span style="color:#0000FF">&quot;-1&quot;</span>&gt;</span>Beginning<span style="color:#FF8000">&lt;/option&gt;</span>
						<span style="color:#FF8000">&lt;/select&gt;</span>
						<span style="color:#000080">&lt;p class=<span style="color:#0000FF">&quot;description&quot;</span>&gt;</span>Use this control to limit the display of threads to those newer than the specified time frame.<span style="color:#000080">&lt;/p&gt;</span>
					<span style="color:#000080">&lt;/div&gt;</span>
					
					<span style="color:#000080">&lt;div class=<span style="color:#0000FF">&quot;blockrow&quot;</span>&gt;</span>
						<span style="color:#FF8000">&lt;label for=<span style="color:#0000FF">&quot;sel_sort&quot;</span>&gt;</span>Sort threads by:<span style="color:#FF8000">&lt;/label&gt;</span>
						<span style="color:#FF8000">&lt;select class=<span style="color:#0000FF">&quot;primary&quot;</span> id=<span style="color:#0000FF">&quot;sel_sort&quot;</span> name=<span style="color:#0000FF">&quot;sort&quot;</span>&gt;</span>
							<span style="color:#FF8000">&lt;option value=<span style="color:#0000FF">&quot;title&quot;</span>&gt;</span>Thread Title<span style="color:#FF8000">&lt;/option&gt;</span>
							<span style="color:#FF8000">&lt;option selected=<span style="color:#0000FF">&quot;selected&quot;</span> value=<span style="color:#0000FF">&quot;lastpost&quot;</span>&gt;</span>Last Post Time<span style="color:#FF8000">&lt;/option&gt;</span>
							<span style="color:#FF8000">&lt;option value=<span style="color:#0000FF">&quot;dateline&quot;</span>&gt;</span>Thread Start Time<span style="color:#FF8000">&lt;/option&gt;</span>
							<span style="color:#FF8000">&lt;option value=<span style="color:#0000FF">&quot;replycount&quot;</span>&gt;</span>Number of Replies<span style="color:#FF8000">&lt;/option&gt;</span>

							<span style="color:#FF8000">&lt;option value=<span style="color:#0000FF">&quot;views&quot;</span>&gt;</span>Number of Views<span style="color:#FF8000">&lt;/option&gt;</span>
							<span style="color:#FF8000">&lt;option value=<span style="color:#0000FF">&quot;postusername&quot;</span>&gt;</span>Thread Starter<span style="color:#FF8000">&lt;/option&gt;</span>
							<span style="color:#FF8000">&lt;option value=<span style="color:#0000FF">&quot;voteavg&quot;</span>&gt;</span>Thread Rating<span style="color:#FF8000">&lt;/option&gt;</span>
						<span style="color:#FF8000">&lt;/select&gt;</span>
						<span style="color:#000080">&lt;p class=<span style="color:#0000FF">&quot;description&quot;</span>&gt;</span>Allows you to choose the data by which the thread list will be sorted.<span style="color:#000080">&lt;/p&gt;</span>
					<span style="color:#000080">&lt;/div&gt;</span>
					
					<span style="color:#000080">&lt;div class=<span style="color:#0000FF">&quot;blockrow&quot;</span>&gt;</span>
						<span style="color:#000080">&lt;p class=<span style="color:#0000FF">&quot;label&quot;</span>&gt;</span>Order threads in...<span style="color:#000080">&lt;/p&gt;</span>
						<span style="color:#000080">&lt;ul class=<span style="color:#0000FF">&quot;checkradio group&quot;</span>&gt;</span>
							<span style="color:#000080">&lt;li&gt;</span><span style="color:#FF8000">&lt;label for=<span style="color:#0000FF">&quot;radio_asc&quot;</span>&gt;</span><span style="color:#FF8000">&lt;input type=<span style="color:#0000FF">&quot;radio&quot;</span> name=<span style="color:#0000FF">&quot;order&quot;</span> id=<span style="color:#0000FF">&quot;radio_asc&quot;</span> value=<span style="color:#0000FF">&quot;asc&quot;</span> /&gt;</span> Ascending order<span style="color:#FF8000">&lt;/label&gt;</span><span style="color:#000080">&lt;/li&gt;</span>
							<span style="color:#000080">&lt;li&gt;</span><span style="color:#FF8000">&lt;label for=<span style="color:#0000FF">&quot;radio_dsc&quot;</span>&gt;</span><span style="color:#FF8000">&lt;input type=<span style="color:#0000FF">&quot;radio&quot;</span> name=<span style="color:#0000FF">&quot;order&quot;</span> id=<span style="color:#0000FF">&quot;radio_dsc&quot;</span> value=<span style="color:#0000FF">&quot;desc&quot;</span> checked=<span style="color:#0000FF">&quot;checked&quot;</span> /&gt;</span> Descending order<span style="color:#FF8000">&lt;/label&gt;</span><span style="color:#000080">&lt;/li&gt;</span>
						<span style="color:#000080">&lt;/ul&gt;</span>
						<span style="color:#000080">&lt;p class=<span style="color:#0000FF">&quot;description&quot;</span>&gt;</span>Note: when sorting by date, 'descending order' will show the newest results first.<span style="color:#000080">&lt;/p&gt;</span>
					<span style="color:#000080">&lt;/div&gt;</span>
					
				<span style="color:#000080">&lt;/div&gt;</span>
				<span style="color:#000080">&lt;div class=<span style="color:#0000FF">&quot;blockfoot actionbuttons&quot;</span>&gt;</span>
					<span style="color:#000080">&lt;div class=<span style="color:#0000FF">&quot;group&quot;</span>&gt;</span>
						<span style="color:#FF8000">&lt;input type=<span style="color:#0000FF">&quot;submit&quot;</span> class=<span style="color:#0000FF">&quot;button&quot;</span> value=<span style="color:#0000FF">&quot;Show Threads&quot;</span> /&gt;</span>
					<span style="color:#000080">&lt;/div&gt;</span>
				<span style="color:#000080">&lt;/div&gt;</span>
			<span style="color:#FF8000">&lt;/form&gt;</span>
			
		<span style="color:#000080">&lt;/div&gt;</span>	
	<span style="color:#000080">&lt;/div&gt;</span>
<span style="color:#000080">&lt;/div&gt;</span></pre>
</div> <font size="4">Forum Display</font><br />
<br />
The threadbit element of forumdisplay has already been revealed in my <a href="http://www.vbulletin.com/forum/blog_callback.php?b=2352" target="_blank">previous blog</a>, so I won't go into it in much detail here, but there are a few new elements on this page that are worth a closer look.<br />
<br />
<img src="http://images.vbulletin.com/blog-content/kier/40-style-firstlook/threadbits.png" border="0" alt="" /><br />
<br />
<font size="3">Popup Menus</font><br />
<br />
Firstly, we have the new popup menu system. The menu system in vB4 has the distinct advantage over that of vB3 that it does not require Javascript to function. On browsers with only CSS available the menus still work, meaning that we no longer have to provide a no-javascript alternative for the contents of the menus.<br />
<br />
<img src="http://images.vbulletin.com/blog-content/kier/40-style-firstlook/popupmenu.png" border="0" alt="" /><br />
<br />
Additionally, these new menus keep their content associated with the control, meaning that one does not have to go hunting through the XHTML for the body of the menu.<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">HTML Code:</div>
	<pre class="bbcode_code"><span style="color:#000080">&lt;li class=<span style="color:#0000FF">&quot;popupmenu&quot;</span> id=<span style="color:#0000FF">&quot;imodsel&quot;</span>&gt;</span>
	<span style="color:#000080">&lt;h6&gt;</span><span style="color:#008000">&lt;a class=<span style="color:#0000FF">&quot;popupctrl&quot;</span> href=<span style="color:#0000FF">&quot;#&quot;</span>&gt;</span>Inline Mod<span style="color:#008000">&lt;/a&gt;</span><span style="color:#000080">&lt;/h6&gt;</span>
	<span style="color:#000080">&lt;ul class=<span style="color:#0000FF">&quot;popupbody popuphover&quot;</span>&gt;</span>					
		<span style="color:#000080">&lt;li&gt;</span><span style="color:#008000">&lt;a href=<span style="color:#0000FF">&quot;#&quot;</span> id=<span style="color:#0000FF">&quot;imodsel:all&quot;</span>&gt;</span>Select all<span style="color:#008000">&lt;/a&gt;</span><span style="color:#000080">&lt;/li&gt;</span>
		<span style="color:#000080">&lt;li&gt;</span><span style="color:#008000">&lt;a href=<span style="color:#0000FF">&quot;#&quot;</span> id=<span style="color:#0000FF">&quot;imodsel:none&quot;</span>&gt;</span>Deselect all<span style="color:#008000">&lt;/a&gt;</span><span style="color:#000080">&lt;/li&gt;</span>
		<span style="color:#000080">&lt;li&gt;</span><span style="color:#008000">&lt;a href=<span style="color:#0000FF">&quot;#&quot;</span> id=<span style="color:#0000FF">&quot;imodsel:invert&quot;</span>&gt;</span>Invert selection<span style="color:#008000">&lt;/a&gt;</span><span style="color:#000080">&lt;/li&gt;</span>
		<span style="color:#000080">&lt;li&gt;</span><span style="color:#008000">&lt;a href=<span style="color:#0000FF">&quot;#&quot;</span> id=<span style="color:#0000FF">&quot;imodsel:all:1&quot;</span>&gt;</span>Select unapproved threads<span style="color:#008000">&lt;/a&gt;</span><span style="color:#000080">&lt;/li&gt;</span>
		<span style="color:#000080">&lt;li&gt;</span><span style="color:#008000">&lt;a href=<span style="color:#0000FF">&quot;#&quot;</span> id=<span style="color:#0000FF">&quot;imodsel:all:2&quot;</span>&gt;</span>Select deleted threads<span style="color:#008000">&lt;/a&gt;</span><span style="color:#000080">&lt;/li&gt;</span>
		<span style="color:#000080">&lt;li&gt;</span><span style="color:#008000">&lt;a href=<span style="color:#0000FF">&quot;#&quot;</span> id=<span style="color:#0000FF">&quot;imodsel:all:4&quot;</span>&gt;</span>Select threads with attachments<span style="color:#008000">&lt;/a&gt;</span><span style="color:#000080">&lt;/li&gt;</span>
		<span style="color:#000080">&lt;li&gt;</span><span style="color:#008000">&lt;a href=<span style="color:#0000FF">&quot;#&quot;</span> id=<span style="color:#0000FF">&quot;imodsel:all:8&quot;</span>&gt;</span>Select threads from guests<span style="color:#008000">&lt;/a&gt;</span><span style="color:#000080">&lt;/li&gt;</span>
	<span style="color:#000080">&lt;/ul&gt;</span>
<span style="color:#000080">&lt;/li&gt;</span></pre>
</div> When Javascript is enabled, the menus go into their enhanced functionality mode, which allows them to reposition themselves to avoid dropping out of the viewport, to respond to a click on the control and stay open until explicitly closed, rather than the hover-to-open method they use in CSS-only mode.<br />
<br />
<font size="3">Text Buttons</font><br />
<br />
The button-bases that were produced for vBulletin 3 were never very popular. The fact that they were a fixed colour, and that they were anti-aliased to the default style's background colours meant that they were not particularly flexible, and required a trip to the image editor with the graphics developer toolkit in order to make them appear nicely on different coloured backgrounds.<br />
<br />
For vBulletin 4, I have abandoned image-based button-bases completely in favour of CSS-based styling of standard textual hyperlinks. Gecko (Firefox) and Webkit (Safari, Chrome) based browsers can benefit from CSS-driven corner rounding while all modern browsers can make use of alpha-transparent PNG button backgrounds for a polished appearance.<br />
<br />
<img src="http://images.vbulletin.com/blog-content/kier/40-style-firstlook/textbutton.png" border="0" alt="" /><br />
<br />
In some cases, graphics <i>will</i> still be used in buttons, but only to provide an iconic symbol in addition to the text, rather than to provide the entirety of the button. When these icons are used, they will be alpha-transparent PNGs so that they work on any coloured button background, meaning that it will be <i>far </i>easier to produce buttons and controls for varying colours of vB4 style than ever before.<br />
<br />
<img src="http://images.vbulletin.com/blog-content/kier/40-style-firstlook/iconbutton.png" border="0" alt="" /><br />
<br />
<font size="3">Inline Moderation Highlighting<br />
</font><br />
In vBulletin 3, there is a rather nasty Javascript function that handles highlighting content when it is marked for inline moderation. It does this by swapping alt1 and alt2 background colours for the inline moderation background. vBulletin 4 dispenses with the need for this complex code by simply attaching an additional class to the outer container of each content item to be highlighted. CSS rules achieve the actual visual change meaning that it's trivial (or unnecessary) to write highlighting code for new content types, and different content types can be highlighted in different ways simply by altering their CSS rules.<br />
<br />
<img src="http://images.vbulletin.com/blog-content/kier/40-style-firstlook/inlinemod-hilite.png" border="0" alt="" /><br />
<br />
<font size="3">Forum Jump</font><br />
<br />
Up to now, the forum jump device has always been a &lt;select&gt; menu, which imposes certain restrictions on how it can be styled. For vB4, the forum jump uses the new popup menu system so it offers far more flexibility of style. Clicking on a particular forum in the menu uses standard hyperlinking rather than form controls, so anyone with even a basic grasp of HTML will be able to add their own links to it easily (doing this in vB3 would require a PHP handler to be written for each new link).<br />
<br />
Closed...<br />
<img src="http://images.vbulletin.com/blog-content/kier/40-style-firstlook/quicknav.png" border="0" alt="" /><br />
<br />
and open...<br />
<img src="http://images.vbulletin.com/blog-content/kier/40-style-firstlook/quicknav-open.png" border="0" alt="" /><br />
<br />
<font size="3">Forum Information and Options</font><br />
<br />
The various bits and bobs from the bottom of the old forum display page have been neatly encapsulated into a single element combining the forum rules, icon legend, display options, list of browsing users and moderator list. The result is far cleaner than previous vBulletin versions.<br />
<br />
<img src="http://images.vbulletin.com/blog-content/kier/40-style-firstlook/forum-info-options.png" border="0" alt="" /><br />
<br />
<font size="4">Show Thread</font><br />
<br />
In my opinion, the most important page on a forum.<br />
<br />
<font size="3">Posts</font><br />
<br />
The goal of the page design should be to emphasise that which is important so that the visitor can get on with doing what the page is intended to allow them to do - read posts.<br />
<br />
Research suggests that people read content more easily if their eyes can traverse down a column without interruption from irrelevant (or less relevant) information. One of the biggest changes that I made for vB3 when redesigning from vB2 was to change the postbit from a [left-userinfo | right-posttext] layout to a top-userinfo, bottom-posttext layout. This layout has now been abandoned in favour of the more traditional two column approach. <br />
<br />
<img src="http://images.vbulletin.com/blog-content/kier/40-style-firstlook/postbit.png" border="0" alt="" /><br />
<br />
However, I have taken it a step further by stripping away a lot of extraneous bumpf that gets in the way of reading a thread. Most obviously, the reply / quote / edit controls now appear in a highly de-emphasised manner until the visitor moves their mouse onto a post, at which point they convert into full-fledged icon+text buttons. For a visitor who is only interested in reading a thread rather than interacting with it, this makes for a much more pleasant uninterrupted reading experience.<br />
<br />
<img src="http://images.vbulletin.com/blog-content/kier/40-style-firstlook/postbit-hover.png" border="0" alt="" /><br />
<br />
<font size="3">Thread Information</font><br />
<br />
As with the forumdisplay page, many of the extra bits and pieces from the bottom of the showthread page are now rolled up into a single box.<br />
<br />
<font size="4">Forms</font><br />
<br />
Since the first appearance of the vBulletin 3 style, many different pages have been put together that are at their root, lists of form controls. Examples would be all the &quot;post new x&quot; pages and the &quot;edit options&quot; page in the User CP. As time has gone on and more people have added to these forms, we have lost (if we ever had) a sense of design consistency in how to present form controls.<br />
<br />
With vBulletin 4, I have aimed to rectify this by producing a library of generic form control layouts from which just about all vBulletin forms can be built. Their HTML markup is extremely simple but the CSS rules attached to them make them (IMHO) very good-looking, accessible and easy to interact with.<br />
<br />
Here are a few examples:<br />
<br />
<a href="http://images.vbulletin.com/blog-content/kier/40-style-firstlook/newreply-upper.png" target="_blank"><img src="http://images.vbulletin.com/blog-content/kier/40-style-firstlook/newreply-upper-t.png" border="0" alt="" /></a> <a href="http://images.vbulletin.com/blog-content/kier/40-style-firstlook/newreply-lower.png" target="_blank"><img src="http://images.vbulletin.com/blog-content/kier/40-style-firstlook/newreply-lower-t.png" border="0" alt="" /></a> <a href="http://images.vbulletin.com/blog-content/kier/40-style-firstlook/register-upper.png" target="_blank"><img src="http://images.vbulletin.com/blog-content/kier/40-style-firstlook/register-upper-t.png" border="0" alt="" /></a> <a href="http://images.vbulletin.com/blog-content/kier/40-style-firstlook/register-lower.png" target="_blank"><img src="http://images.vbulletin.com/blog-content/kier/40-style-firstlook/register-lower-t.png" border="0" alt="" /></a> <a href="http://images.vbulletin.com/blog-content/kier/40-style-firstlook/newpm-lower.png" target="_blank"><img src="http://images.vbulletin.com/blog-content/kier/40-style-firstlook/newpm-lower-t.png" border="0" alt="" /></a><br />
<br />
<font size="3">Dependent Controls</font><br />
<br />
When looking through some of the existing vB3 forms, I found several examples of controls that were redundant unless another control was set to a particular state. One example of this is in the 'Delete Post' controls on the post editing page. Here, we have a three-way radio button and a text box. What is not immediately clear is that the text box is redundant and ignored unless the radio button is set to the 'Soft Delete' state.<br />
<br />
<img src="http://images.vbulletin.com/blog-content/kier/40-style-firstlook/depctrl-old.png" border="0" alt="" /><br />
<br />
In order to deal with this problem, I developed a system of 'Dependent Controls', where specific control can be instructed to only become active when a parent control is active or set to a particular state. Here is an example of a dependent control in use, in the vB4 version of the 'Delete Post' controls as described above.<br />
<br />
<img src="http://images.vbulletin.com/blog-content/kier/40-style-firstlook/depctrl.png" border="0" alt="" /><br />
<br />
The dependent control system is itself dependent upon Javascript to function, but if Javascript is disabled, the form will continue to function, it will just do so without dependent controls switching from enabled to disabled state.<br />
<br />
Here's a couple more dependent control examples:<br />
<br />
<img src="http://images.vbulletin.com/blog-content/kier/40-style-firstlook/depctrl-example2.png" border="0" alt="" /><br />
<br />
<font size="4">One More Thing...<br />
</font><br />
Just enough time to show off the design of a few more pages I've built. The calendar is one of the most recent, and now sports a tabbed interface to switch between year, month, week and day views.<br />
<br />
<font size="3">Month View</font><br />
<br />
<img src="http://images.vbulletin.com/blog-content/kier/40-style-firstlook/calendar-monthview.png" border="0" alt="" /><br />
<br />
<font size="3">Week View</font><br />
<br />
<img src="http://images.vbulletin.com/blog-content/kier/40-style-firstlook/calendar-weekview.png" border="0" alt="" /><br />
<br />
<font size="3">Add New Event</font><br />
<br />
<img src="http://images.vbulletin.com/blog-content/kier/40-style-firstlook/newevent.png" border="0" alt="" /><br />
<br />
As always, I look forward to reading your comments on anything I've posted today.</blockquote>

 ]]></content:encoded>
			<dc:creator>Kier</dc:creator>
			<guid isPermaLink="true">http://www.vbulletin.com/forum/blog.php?b=2360</guid>
		</item>
		<item>
			<title>VB 4.0 Widgets</title>
			<link>http://www.vbulletin.com/forum/blog.php?b=2359</link>
			<pubDate>Tue, 14 Apr 2009 23:55:39 GMT</pubDate>
			<description><![CDATA[I'm one of the developers here at VBulletin, and I've recently been building some widgets that are intended to be included with vB4.  We're still cleaning up the editor interface, but what I'm...]]></description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">I'm one of the developers here at VBulletin, and I've recently been building some widgets that are intended to be included with vB4.  We're still cleaning up the editor interface, but what I'm showing here should be reasonably close to what we deliver.<br />
<br />
I've done three widgets. These are <br />
<ul><li>static html. I've been testing with google gadgets, so you can encapsulate some significant functionality.</li>
<li>rss feed. I've tested with atom v2 and rss v2. Other versions should work but I haven't tested yet.</li>
<li>navigation widget. You'll see below</li>
</ul>Just to illustrate, let's say I want to have two different page layouts. I will use a two-column layout, with a narrow column on the right for the widget and the wider column on the left for content. On some pages I want the right column to be navigation, and on other pages I want to have a fishpond.<br />
<br />
Here's what I need to do:<br />
<font size="4"><b>Create Widgets</b></font><br />
The system will come with several widget types. Currently we're expecting to ship the three types above. You need to create an instance of the types you want to use with type-specific configuration information. So for a static html widget you need to give it html. For a rss widget you need to give it the location for the rss feed. You create a widget in this interface:<br />
<img src="http://www.vbulletin.com/forum/blog_attachment.php?attachmentid=339&amp;stc=1&amp;d=1239745175" border="0" alt="" /><br />
<br />
And once it's created, you set the widget-specific information like this. Each widget has a different interface with the appropriate settings. I went to google, found a fish pond gadget, configured it, copied the html, and pasted it into this interface.<br />
<img src="http://www.vbulletin.com/forum/blog_attachment.php?attachmentid=340&amp;stc=1&amp;d=1239745175" border="0" alt="" /><br />
<br />
So make one of these for whatever gadgets you like. I made one rss feed, one navigation widget, two static html (a calculator and a fishpond). <br />
<br />
<font size="4"><b>Create Grid and Layouts</b></font><br />
Now let's create the two layouts. We have a new CMS Option in admincp. That gives us a grid manager. Grids define the left-right column layout, some header information, etc. <br />
<img src="http://www.vbulletin.com/forum/blog_attachment.php?attachmentid=336&amp;stc=1&amp;d=1239745175" border="0" alt="" /><br />
and a layout manager, which looks like this.<br />
<img src="http://www.vbulletin.com/forum/blog_attachment.php?attachmentid=352&amp;stc=1&amp;d=1239817904" border="0" alt="" /><br />
<br />
Now I go to the content page. Here's my default page:<br />
<img src="http://www.vbulletin.com/forum/blog_attachment.php?attachmentid=342&amp;stc=1&amp;d=1239745175" border="0" alt="" /><br />
<br />
No, I don't like that. I'd rather have an RSS feed.  Back to the layout editor, change the right widget to &quot;Rss Feed&quot;<br />
<img src="http://www.vbulletin.com/forum/blog_attachment.php?attachmentid=353&amp;stc=1&amp;d=1239817904" border="0" alt="" /><br />
and the page looks like this.<br />
<img src="http://www.vbulletin.com/forum/blog_attachment.php?attachmentid=354&amp;stc=1&amp;d=1239817904" border="0" alt="" /><br />
<br />
Now when I created the pages, I created some with this template and some with the second template. The second template uses the navigation widget. There are three configuration parameters for this widget<br />
<ul><li> Show children</li>
<li> Show top-level (of the CMS) pages. I only have one top-level page, so I can't show you its' effect.</li>
<li> Show parent- this shows the tree up to the top.</li>
</ul> So here's a page with no children. Depending on the settings I can make it look like this.<br />
<img src="http://www.vbulletin.com/forum/blog_attachment.php?attachmentid=346&amp;stc=1&amp;d=1239747024" border="0" alt="" /><br />
or this<br />
<img src="http://www.vbulletin.com/forum/blog_attachment.php?attachmentid=348&amp;stc=1&amp;d=1239747024" border="0" alt="" /><br />
<br />
by checking the boxes in the configuration interface here.<br />
<img src="http://www.vbulletin.com/forum/blog_attachment.php?attachmentid=347&amp;stc=1&amp;d=1239747024" border="0" alt="" /><br />
<br />
Note that there is not a &quot;show children&quot; function. We always show the children of the displayed page.<br />
<br />
For those of you who are comfortable writing php code, we've written the class structure so you can add your own gadgets. Writing the widget may be difficult or easy, but hooking it into vBulletin will not be difficult.<br />
<br />
I hope you find this informative. <br />
<br />
<br />
Ed Brown</blockquote>

 ]]></content:encoded>
			<dc:creator>Edwin Brown</dc:creator>
			<guid isPermaLink="true">http://www.vbulletin.com/forum/blog.php?b=2359</guid>
		</item>
		<item>
			<title>vBulletin Asset Manager Demo #2</title>
			<link>http://www.vbulletin.com/forum/blog.php?b=2356</link>
			<pubDate>Tue, 24 Mar 2009 18:10:57 GMT</pubDate>
			<description>Here is the second demo of the asset manager. I was under a hurry so please bear with me. The screencast recorder seems to have a few issues as my audio was cut off in a few places. 
 
I also forgot...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">Here is the second demo of the asset manager. I was under a hurry so please bear with me. The screencast recorder seems to have a few issues as my audio was cut off in a few places.<br />
<br />
I also forgot to mention that you can resize each of the panels by dragging the borders.<br />
<br />
<iframe width="504" height="424" frameborder="0" scrolling="no" src="http://www.screencast-o-matic.com/embed?sc=cQeZXceqH&amp;w=500&amp;np=0&amp;v=2"></iframe><br />
<br />
<u><a href="http://www.screencast-o-matic.com/watch/cQeZXceqH" target="_blank">http://www.screencast-o-matic.com/watch/cQeZXceqH</a></u></blockquote>

 ]]></content:encoded>
			<dc:creator>Freddie Bingham</dc:creator>
			<guid isPermaLink="true">http://www.vbulletin.com/forum/blog.php?b=2356</guid>
		</item>
		<item>
			<title>vB4 Update</title>
			<link>http://www.vbulletin.com/forum/blog.php?b=2355</link>
			<pubDate>Sun, 22 Mar 2009 22:14:52 GMT</pubDate>
			<description>I have continued working on the asset management system that I previously demonstrated.  The system looks and behaves much differently than what you have seen so far.  I have applied a lot of polish...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">I have continued working on the asset management system that I previously demonstrated.  The system looks and behaves much differently than what you have seen so far.  I have applied a lot of polish to the interface, added a multiple upload system using flash, and added upload progress bars. Managing multiple attachments/assets at once is now possible as well by ctrl-clicking on a thumbnail.<br />
<br />
The blog is now working on vB4 as well.  I have integrated the new attachment system into Blog 2.1, which is what I am currently calling the version of the blog that supports vB4.  The release is not going to have many new features as the point of it is to release a version of the blog that will work on vB4. The integrated attachment system means that attachments in the blog are stored and served by the same scripts that store and serve forum attachments. It also means you can quickly reuse attachments from the blog on the forum, and vice versa.<br />
<br />
I will post a new demo of the asset management system on Monday the 23rd or Tuesday the 24th.</blockquote>

 ]]></content:encoded>
			<dc:creator>Freddie Bingham</dc:creator>
			<guid isPermaLink="true">http://www.vbulletin.com/forum/blog.php?b=2355</guid>
		</item>
		<item>
			<title>vBulletin Content Management Introduction</title>
			<link>http://www.vbulletin.com/forum/blog.php?b=2354</link>
			<pubDate>Tue, 24 Feb 2009 12:02:12 GMT</pubDate>
			<description><![CDATA[Distilling it into it's most basic functionality, the vB CMS allows content authors to create pages of content; categorize those pages into lists; and place widgets of functionality onto those pages...]]></description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">Distilling it into it's most basic functionality, the vB CMS allows content authors to create pages of content; categorize those pages into lists; and place widgets of functionality onto those pages to make them more interesting.  Although the first release will cover these principals, the CMS is being designed to be far more powerful, which will become more apparent in future development blogs.<br />
<br />
<br />
<b>Content Types</b><br />
<br />
One of the main goals with the CMS was to allow the creation of 'non static' pages.  This could be achieved in a number of ways.  From the outset, the simplest way would be to add the ability to create articles that can be listed and managed, in the style of some of the existing content in vBulletin.  However, we would eventually need to add other types of content.<br />
<br />
As an example, it's easy to compare social group discussions with threads and wonder why they aren't pretty much the same thing.  Unfortunately the code in vB3 for these (and other types of content) doesn't lend itself well to reuse.  Because of this, the code for things such as inline moderation, read marking and subscriptions of these two similar features is currently duplicated and modified to suit each as if they were almost entirely separate.  As vB3 has grown in functionality, the benefit of consolidating these separated features has grown too.<br />
<br />
The CMS is designed to be content agnostic, allowing all manner of content types in a way that allows us to create and implement features that can apply to all content equally; without the need to duplicate the effort for each supported type of content.  For example, if I wanted to create a user rating feature; it should be available for all content regardless of whether it is an article, gallery image or video.<br />
<br />
Conversely, it should also be much easier to create a new type of content and allow it to be used for pages, while automatically benefiting from all of the existing content orientated features without having to write lots of specific code just for the new type.<br />
<br />
Not only will the CMS allow the vBulletin developers to quickly create new content types for your pages, it should also be very exciting for mod developers to come up with their own content types and widgets.<br />
<br />
<br />
<b>Widgets</b><br />
<br />
Along with the main content, the vB CMS also allows you to place widgets on the pages.  Widgets are used to express non page content and allow you to liven up pages with related content, provide further navigation options to the user, to highlight other site content, or do pretty much whatever widget developers can think of.  Widgets are a very simple concept and are fairly standard to content management systems, but they should not be underestimated in terms of the features that they can provide.<br />
<br />
<br />
<b>What's Working Now</b><br />
<br />
In the future I'll be talking about some of the more technical aspects of the CMS and the framework that it's based on, for now I'll walk through some of the functionality that's currently up and running, and discuss features that should be included in the initial release.  However, there are a couple of caveats - <br />
<br />
Firstly it's important to bear in mind that most of the work done so far has been on the framework, and abstract features that will enable cool things to happen in the future.  I contemplated discussing some of these concepts and the design goals behind them in this blog but decided against it.  Not only can abstract concepts be overly technical, but describing them requires me to allude to examples and potentials that may never actually be developed.  I'd rather discuss concrete features in future blogs, but will be happy to go into more detail in the blog comments.<br />
<br />
Secondly, as most of you know, vBulletin 4.0 will be shipping with a new style.  As that isn't finished yet, the CMS isn't using it - but as it will be using it eventually I haven't wasted much effort in making it look pretty.<br />
<br />
<br />
<b>Creating a Page</b><br />
<br />
The design of CMS pages and the widgets that are included on them is defined by the Layout that the page uses.  Freddie published a <a href="http://www.vbulletin.com/forum/blog.php?b=2345" target="_blank">screen cast about Grid and Layout Management last month</a> that goes into a lot of detail.  Essentially, you need to create a layout before you can create a page; although the CMS should ship with a few default layouts.<br />
<br />
After the CMS is installed and running, a default page will be available.  Here's a development test page:<br />
<br />
<a href="http://www.vbulletin.com/forum/attachment.php?attachmentid=331" >Attachment 331</a><br />
<br />
From here you can enter Edit Mode by clicking Edit this Page.  In the future, there will be a nice toolbar UI for all of the page management tools, for now it's just a bunch of links.<br />
<br />
<a href="http://www.vbulletin.com/forum/attachment.php?attachmentid=332" >Attachment 332</a><br />
<br />
Once in edit mode, you can now edit the content on the page; configure the content; configure any widgets; add content or delete the page.<br />
<br />
Here you can see a text area for editing static html in a development content type.  There is also an edit link in the toolbar for the content, next to it's config link.  Depending on their individual behaviour, widgets and content may be edited inline while the page is in edit mode; or be edited with a dedicated UI by clicking the edit link on the widget or content.  The static html content type here has the edit link enabled for demo purposes only, as this particular content type is edited inline.<br />
<br />
Content and widgets may also allow you to configure how they behave on the page.  Clicking the config link in the widget toolbar opens the config UI.<br />
<br />
[ATTACH=full]333[/ATTACH]<br />
<br />
In this instance, clicking Config on a widget's toolbar while editing a page will allow you to configure the widget for that specific page.  However, widgets can also have a global config that can not only determine global settings, but also define what content authors can change per page.  In a future blog we will take a closer look at how widgets are created and configured.<br />
<br />
Clicking Add Content allows you to create a new page.<br />
<br />
[ATTACH=full]334[/ATTACH]<br />
<br />
When you create a new page you can select the type of content to use as well as the Style and Layout.  As mentioned before, the Layout is predefined and determines the layout and widgets that will be included on the page.<br />
<br />
Optionally you could add the title to the URL or allow it to be generated automatically.<br />
<br />
The location defaults to the page that you were viewing when you clicked 'Add Content'.  It specifies where the new page will be on the site as a whole. There will be a better UI to browse the site structure (a la <a href="http://www.vbulletin.com/forum/blog.php?b=2353" target="_blank">Freddie's asset management</a>), instead of a simple drop down.<br />
<br />
<a href="http://www.vbulletin.com/forum/attachment.php?attachmentid=335" >Attachment 335</a><br />
<br />
You can of course delete a page.  After a confirmation, the page will be removed and you will be redirected to the nearest parent content.<br />
<br />
<br />
The walkthrough above appears simple, but is just enough for basic content driven websites.  A lot of effort is being put into the code behind the CMS to ensure that it is flexible enough for many powerful features to evolve in the future.<br />
<br />
It's possible to create subsites with different styles and layouts; widgets can read the content on the page for more advanced and dynamic features such as content highlighting or automatic related content links.  Mod developers can develop content types and widgets in their own packages with minimal hooking required.<br />
<br />
There's a lot more to cover with the CMS, but for now comments, questions, below :)</blockquote>

 ]]></content:encoded>
			<dc:creator>Darren Gordon</dc:creator>
			<guid isPermaLink="true">http://www.vbulletin.com/forum/blog.php?b=2354</guid>
		</item>
	</channel>
</rss>
