<?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>Sun, 08 Nov 2009 03:02:23 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>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">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"><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">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">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">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></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">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</blockquote>


<!-- attachments -->
	<div class="blogattachments">
		
			<fieldset class="blogcontent">
				<legend>Attached Thumbnails</legend>
				
			</fieldset>
		
		
		
		
			<fieldset class="blogcontent">
				<legend>Attached Files</legend>
				<ul>
					
				</ul>
			</fieldset>
		

	</div>
<!-- / attachments -->
 ]]></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">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 />
</blockquote>


<!-- attachments -->
	<div class="blogattachments">
		
		
			<fieldset class="blogcontent">
				<legend>Attached Images</legend>
				
			</fieldset>
		
		
		

	</div>
<!-- / attachments -->
 ]]></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">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">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">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">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">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">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">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">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">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">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">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">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">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>
		<item>
			<title>vBulletin Asset (or Attachment) Management Demo</title>
			<link>http://www.vbulletin.com/forum/blog.php?b=2353</link>
			<pubDate>Sat, 07 Feb 2009 00:15:30 GMT</pubDate>
			<description>As I have mentioned previously, a big change in vBulletin 4 involves the attachment system.  I am currently working on a system that allows you to quickly reuse attachments through vBulletin and...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent">As I have mentioned previously, a big change in vBulletin 4 involves the attachment system.  I am currently working on a system that allows you to quickly reuse attachments through vBulletin and vBulletin products.  <br />
<br />
.. and so I have done a run through of the current state of the system for you to view.<br />
<br />
<iframe width="504" height="424" frameborder="0" scrolling="no" src="http://www.screencast-o-matic.com/embed?sc=cQn1o7nPG&amp;w=500&amp;np=0&amp;v=2"></iframe><br />
<br />
<a href="http://www.screencast-o-matic.com/watch/cQn1o7nPG" target="_blank">http://www.screencast-o-matic.com/watch/cQn1o7nPG</a><br />
<br />
If you didn't notice, this uses javascript, a lot of javascript, so if you don't have javascript enabled, then you will fall back to the familiar vB3 upload form.</blockquote>

 ]]></content:encoded>
			<dc:creator>Freddie Bingham</dc:creator>
			<guid isPermaLink="true">http://www.vbulletin.com/forum/blog.php?b=2353</guid>
		</item>
		<item>
			<title>De-tabulating vBulletin Forumdisplay</title>
			<link>http://www.vbulletin.com/forum/blog.php?b=2352</link>
			<pubDate>Fri, 06 Feb 2009 15:56:47 GMT</pubDate>
			<description>A major feature slated to debut with vBulletin 4.0 is a new front-end style marked-up with semantic XHTML and styled with CSS. 
The task of producing the new templates using this scheme has thrown up...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent">A major feature slated to debut with vBulletin 4.0 is a new front-end style marked-up with semantic XHTML and styled with CSS.<br />
The task of producing the new templates using this scheme has thrown up all manner of questions, challenges and show-stopping problems, one of which I will discuss here.<br />
<br />
<font size="4">Background</font><br />
<br />
In vBulletin 3.x, the primary markup vehicle was the HTML &lt;table&gt; tag and almost all elements on vBulletin pages could be summarized as having the following basic structure:<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">HTML Code:</div>
	<pre class="bbcode_code"><span style="color:#008080">&lt;table class=<span style="color:#0000FF">&quot;tborder&quot;</span>&gt;</span>
<span style="color:#008080">&lt;tr&gt;</span>
	<span style="color:#008080">&lt;td class=<span style="color:#0000FF">&quot;tcat&quot;</span>&gt;</span>Main heading<span style="color:#008080">&lt;/td&gt;</span>
<span style="color:#008080">&lt;/tr&gt;</span>
<span style="color:#008080">&lt;tr&gt;</span>
	<span style="color:#008080">&lt;td class=<span style="color:#0000FF">&quot;thead&quot;</span>&gt;</span>Sub-heading<span style="color:#008080">&lt;/td&gt;</span>
<span style="color:#008080">&lt;/tr&gt;</span>
<span style="color:#008080">&lt;tr&gt;</span>
	<span style="color:#008080">&lt;td class=<span style="color:#0000FF">&quot;alt1&quot;</span>&gt;</span>Some content<span style="color:#008080">&lt;/td&gt;</span>
<span style="color:#008080">&lt;/tr&gt;</span>
<span style="color:#008080">&lt;tr&gt;</span>
	<span style="color:#008080">&lt;td class=<span style="color:#0000FF">&quot;alt2&quot;</span>&gt;</span>Some more content<span style="color:#008080">&lt;/td&gt;</span>
<span style="color:#008080">&lt;/tr&gt;</span>
<span style="color:#008080">&lt;tr&gt;</span>
	<span style="color:#008080">&lt;td class=<span style="color:#0000FF">&quot;tfoot&quot;</span>&gt;</span>Block footer<span style="color:#008080">&lt;/td&gt;</span>
<span style="color:#008080">&lt;/tr&gt;</span>
<span style="color:#008080">&lt;/table&gt;</span>
<span style="color:#000080">&lt;br /&gt;</span></pre>
</div> Using this scheme, there is semantically no more <i>value</i> to the main heading than to any other tag in the block. Furthermore, the &lt;table&gt; tag and its contents strictly dictate how the element will appear; CSS has only a limited scope to change the fundamental structure of &lt;table&gt; elements.<br />
<br />
It’s worth noting at this point that the use of the &lt;table&gt; tag for this (or any other) purpose does <i>not</i> mean that the markup is not valid XHTML. In fact, the majority of pages in vBulletin 3.x validate against the standard to which they are built, namely XHTML 1.0 Transitional.<br />
<br />
However, it’s clear that a major part of a move to <i>semantic</i> XHTML will involve using more suitable markup for page elements, making use of tags that more accurately describe their content and contextualize it on the page.<br />
<br />
<font size="4">Threadbit</font><br />
<br />
One page that presents quite a conundrum is <i>forumdisplay.php</i>: the page that shows the list of threads in a forum. Let’s take a look at how the thread list has been presented in past versions.<br />
<br />
Firstly, we have vBulletin 1.x.<br />
<br />
<a href="http://images.vbulletin.com/blog-content/kier/detabulating/threadbit-vb1.png" target="_blank"><img src="http://images.vbulletin.com/blog-content/kier/detabulating/threadbit-vb1-450.png" border="0" alt="" /></a><br />
<br />
 Here, the thread data is presented in classic tabular fashion, with a single data point in each column, with the exception of the ‘Last Post’ column, where we show both the time and the writer of the most recent post to the thread in question.<br />
 <br />
This is how the thread list looked in vBulletin 2.x.<br />
<br />
<a href="http://images.vbulletin.com/blog-content/kier/detabulating/threadbit-vb2.png" target="_blank"><img src="http://images.vbulletin.com/blog-content/kier/detabulating/threadbit-vb2-450.png" border="0" alt="" /></a><br />
 <br />
The data is still <i>largely</i> tabular, though we are starting to see content other than just the title in the ‘Thread’ column, namely the icon to represent a thread containing attachments and the ‘Poll:’ prefix.<br />
<br />
With vBulletin 3.x, there was an attempt to cut down the number of columns.<br />
<br />
<a href="http://images.vbulletin.com/blog-content/kier/detabulating/threadbit-vb3.png" target="_blank"><img src="http://images.vbulletin.com/blog-content/kier/detabulating/threadbit-vb3-450.png" border="0" alt="" /></a><br />
<br />
We can see that the name of the thread starter has moved into the same column as the thread title, placed on a new line. The rating stars have also migrated into the same column and there are several more icons representing different attributes of the thread.<br />
<br />
The question is:<br />
<i>Is the vBulletin 3 thread list still tabular data?</i><br />
<br />
At first sight, yes it is. We have a number of columns each containing data and the arrangement looks like a grid. But do we consider the thread list to be tabular data simply because it is arranged in this way?<br />
<br />
If we extract all the data and put each individual item into its own column, as should arguably be the case in order for the use of &lt;table&gt; to be semantically correct, we would end up with the following columns:<ol style="list-style-type: decimal"><li>Status icon (read/unread, hot, moved, locked, posted-by-viewer)</li>
<li>Post icon</li>
<li>Prefix</li>
<li>Title</li>
<li>Thread poster</li>
<li>Replies</li>
<li>Views</li>
<li>Rating</li>
<li>Last post date / time</li>
<li>Last poster</li>
<li>Poll indicator</li>
<li>Sticky indicator</li>
<li>Attachment indicator</li>
<li>Tag indicator</li>
<li>Subscription indicator</li>
<li>Deleted thread indicator</li>
<li>Contains deleted posts indicator</li>
</ol>A table with this many columns is not going to win any design awards. It would be fine to view in <i>Excel</i>, but as an immediately accessible, visually attractive web page, it’s going to look pretty terrible.<br />
<br />
<font size="4">The Requirements</font><br />
<br />
The basic structure I require <i>visually</i> is that of a table. I need a liquid column (one that stretches to occupy available space) followed by a number of fixed-width columns. Each column must be capable of supporting a background colour or image that will fill the cells.<br />
<br />
The old way to achieve this would be to use a &lt;table&gt; tag with rows styled in the following way:<div class="bbcode_container">
	<div class="bbcode_description">HTML Code:</div>
	<pre class="bbcode_code"><span style="color:#008080">&lt;tr&gt;</span>
	<span style="color:#008080">&lt;td bgcolor=<span style="color:#0000FF">&quot;#FF9999&quot;</span>&gt;</span>(liquid column)<span style="color:#008080">&lt;/td&gt;</span>
	<span style="color:#008080">&lt;td bgcolor=<span style="color:#0000FF">&quot;#99FF99&quot;</span> width=<span style="color:#0000FF">&quot;50&quot;</span>&gt;</span>(fixed 1)<span style="color:#008080">&lt;/td&gt;</span>
	<span style="color:#008080">&lt;td bgcolor=<span style="color:#0000FF">&quot;#9999FF&quot;</span> width=<span style="color:#0000FF">&quot;100&quot;</span>&gt;</span>(fixed 2)<span style="color:#008080">&lt;/td&gt;</span>
	...
<span style="color:#008080">&lt;/tr&gt;</span></pre>
</div> Of course, we want to avoid using a &lt;table&gt; tag if at all possible, given that our thread list is not strictly tabular data. Happily, most modern browsers give us an alternative that offers all the benefits of a &lt;table&gt; but without the semantic ambiguity, namely the CSS attribute <i>display:table-cell</i>. This would allow us to produce a layout visually identical to a table, but using semantic mark-up, such as this:<div class="bbcode_container">
	<div class="bbcode_description">HTML Code:</div>
	<pre class="bbcode_code"><span style="color:#800080">&lt;style type&quot;text/css&quot;&gt;</span>
.table { display:table; width:400px; }
.row   { display:table-row; }
.cell  { display:table-cell; }
.liquid { background:#FF9999; }
.fixed50 { background:#99FF99; width:50px; }
.fixed100 { background:#9999FF; width:100px; }
<span style="color:#800080">&lt;/style&gt;</span>
...
<span style="color:#000080">&lt;li class=<span style="color:#0000FF">&quot;row&quot;</span>&gt;</span>
	<span style="color:#000080">&lt;h3 class=<span style="color:#0000FF">&quot;cell liquid&quot;</span>&gt;</span>(liquid column)<span style="color:#000080">&lt;/h3&gt;</span>
	<span style="color:#000080">&lt;div class=<span style="color:#0000FF">&quot;cell fixed50&quot;</span>&gt;</span>(fixed 1)<span style="color:#000080">&lt;/div&gt;</span>
	<span style="color:#000080">&lt;div class=<span style="color:#0000FF">&quot;cell fixed100&quot;</span>&gt;</span>(fixed 2)<span style="color:#000080">&lt;/div&gt;</span>
	...
<span style="color:#000080">&lt;/li&gt;</span></pre>
</div> This screengrab shows how Firefox 3 renders the two different HTML snippets. It’s obvious that they are visually identical.<br />
<br />
<img src="http://images.vbulletin.com/blog-content/kier/detabulating/example-ff3.png" border="0" alt="" /><br />
<br />
This markup allows radical restyling of the appearance of the thread listing and completely avoids the problematic &lt;table&gt; element. So, problem solved? Unfortunately not. There is one teeny tiny problem that is getting in the way of our goal. It’s called Microsoft Internet Explorer.<br />
<br />
<font size="4">Making IE Work</font><br />
<br />
Although support for <i>display:table-cell</i> has been introduced in Internet Explorer 8, the reality of the situation is that IE8 is not yet out of beta, leaving IE7 as the current primary version. What’s more, a significant portion of the web-browsing population is still using (shudder) IE6. Prior to IE8, <i>display:table-cell</i> is not supported <i>at all</i> in Internet Explorer. Given that Internet Explorer’s market share still represents a significant majority, there must be a workaround so that Internet Explorer users are not presented with a disastrous mess when they visit sites running vBulletin.<br />
<br />
If we feed IE7 with the same CSS as we present to other browsers, IE7 will ignore the <i>display:table-cell</i> instruction, resulting in the cells being represented as horizontal blocks.<br />
<br />
<img src="http://images.vbulletin.com/blog-content/kier/detabulating/example-ie7.png" border="0" alt="" /><br />
 <br />
<font size="3">Inline-Block</font><br />
<br />
Internet Explorer 7 does implement a CSS property that can offer some help in this instance, namely <i>display:inline-block</i>. We don’t want other browsers to see the <i>inline-block</i> instruction, so we will create a new stylesheet surrounded by Internet Explorer conditional comments.<br />
<br />
Unfortunately, IE7 seems to have some bugs related to <i>inline-block</i> that need to be carefully prodded to make the system work. For some reason, a simple declaration of <i>display:inline-block</i> seems to have no effect, but it can be made to work by following it with a <i>display:inline</i> call. Yes, it’s that weird.<div class="bbcode_container">
	<div class="bbcode_description">HTML Code:</div>
	<pre class="bbcode_code"><span style="color:#000080">&lt;--&#91;if lt IE 8&#93;&gt;</span>
<span style="color:#800080">&lt;style type=<span style="color:#0000FF">&quot;text/css&quot;</span>&gt;</span>
.cell {
	display:inline-block;
}
.cell {
	display:inline;
}
<span style="color:#800080">&lt;/style&gt;</span>
<span style="color:#000080">&lt;!&#91;endif&#93;--&gt;</span></pre>
</div> <img src="http://images.vbulletin.com/blog-content/kier/detabulating/example-ie7-inlineblock.png" border="0" alt="" /><br />
<br />
We can see from the preceding screengrab that IE is now attempting to place the blocks next to each other rather than stacking them vertically, but the liquid column is expanding to fill the whole width of the container, rather than only occupying the space left by the fixed columns. For the time being, we’ll fix this by specifying a fixed width for the liquid column. We’ll come back to the liquid problem later.<br />
<br />
<img src="http://images.vbulletin.com/blog-content/kier/detabulating/example-ie7-inlineblock-fixedwidth.png" border="0" alt="" /><br />
 <br />
Finally, IE7 is displaying all the blocks horizontally in table fashion, but unlike a true table, the cells are not all of equal height.<br />
<br />
<font size="3">Equal Height Cells</font><br />
<br />
We start by specifying <i>vertical-align:top</i> for all cells, which will cause them to be aligned along a single top edge rather than the bottom edge.<br />
<br />
The next task is to make all the cells of equal height – all must expand or contract automatically according to the natural height of the highest cell in the row.<br />
<br />
We start by adding a massive amount of padding (9999px) to the bottom of all cells, such that it will extend well past the bottom of the browser window. We then reign that back in with a negative value (-9999px) for the bottom margin. This will look extremely strange and drop all the cells of the bottom of the page, until we instruct the row to hide any overflowed content.<div class="bbcode_container">
	<div class="bbcode_description">HTML Code:</div>
	<pre class="bbcode_code"><i><span style="color:#000080">&lt;!--&#91;if lt IE 8&#93;&gt;</span>
<span style="color:#800080">&lt;style type=<span style="color:#0000FF">&quot;text/css&quot;</span>&gt;</span>
.row {
	overflow:hidden;
}
.cell {
	display:inline-block;
	vertical-align:top;
	padding-bottom:9999px;
	margin-bottom:-9999px;
}
.cell {
	display:inline;
}
<span style="color:#800080">&lt;/style&gt;</span>
<span style="color:#000080">&lt;!&#91;endif&#93;--&gt;</span></i></pre>
</div> <img src="http://images.vbulletin.com/blog-content/kier/detabulating/example-ie7-inlineblock-fixedwidth-fixedheight.png" border="0" alt="" /><br />
<br />
<font size="3">Single Liquid Cell</font><br />
<br />
We now have (what looks like) cells of equal sizes, which expand and contract vertically as they should. The last thing that remains is to get our liquid column working.<br />
<br />
Internet Explorer supports <i>expressions</i> in CSS, which is a very powerful system allowing CSS values to be generated by Javascript. We will make use of this system to calculate the amount of space left in the row container after the fixed width cells have been inserted. The remaining width will be applied to the liquid column. I wrote a little function called <i>liquid_td</i> to handle this.<div class="bbcode_container">
	<div class="bbcode_description">HTML Code:</div>
	<pre class="bbcode_code">.liquid {
	width:expression(liquid_td(this));
}</pre>
</div> <img src="http://images.vbulletin.com/blog-content/kier/detabulating/example-ie7-inlineblock-expressionwidth.png" border="0" alt="" /><br />
<br />
<font size="3">No-Javascript Failsafe</font><br />
<br />
Everything now looks correct, though our use of <i>expression</i> falls over if we encounter a visitor running Internet Explorer with Javascript disabled.<br />
<br />
To handle this worst-case scenario, we must abandon our liquid-fixed-fixed layout and switch to a completely liquid system, specifying all the widths in percentages. This will require a further stylesheet, this time surrounded by &lt;noscript&gt; tags to hide it from browsers that don’t need it.<br />
<br />
Unfortunately, this flings us headlong into Internet Explorer’s lack of common sense when it comes to math calculations. One might expect that 60% + 15% + 25% = 100%, but Internet Explorer disagrees from time to time. The problem appears to be one of unintelligent rounding. Here are a pair of examples that illustrate the problem.<br />
<br />
Example 1: Container width = 400px.<ul><li>60% of 400 = 240</li>
<li>15% of 400 = 60</li>
<li>25% of 400 = 100</li>
<li>240 + 60 + 100 = 400.</li>
<li>Result: all columns fit.</li>
</ul>Example 2: Container width = 399px.<ul><li>60% of 399 = 239.4, rounds to 240</li>
<li>15% of 399 = 59.85, rounds to 60</li>
<li>25% of 399 = 99.75, rounds to 100</li>
<li>240 + 60 + 100 =400</li>
<li>Result: last column drops because 400 pixels do not fit into 399 pixels.</li>
</ul>To deal with this problem, we need to set the width of the first cell to 0.1% less than the desired value. This appears to instruct IE to round down instead of up, resulting in the correct number of pixels being calculated.<br />
<br />
<font size="4">Conclusion and Discussion</font><br />
<br />
Our final system works like this:<div class="bbcode_container">
	<div class="bbcode_description">HTML Code:</div>
	<pre class="bbcode_code"><span style="color:#800080">&lt;style type&quot;text/css&quot;&gt;</span>
.table { display:table; width:400px; }
.row   { display:table-row; }
.cell  { display:table-cell; }
.liquid { background:#FF9999; }
.fixed50 { background:#99FF99; width:50px; }
.fixed100 { background:#9999FF; width:100px; }
<span style="color:#800080">&lt;/style&gt;</span>
<i><span style="color:#000080">&lt;!--if lt IE 8&#93;&gt;</span>
<span style="color:#800080">&lt;style type=<span style="color:#0000FF">&quot;text/css&quot;</span>&gt;</span>
.row {
	overflow:hidden;
}
.cell {
	display:inline-block;
	vertical-align:top;
	padding-bottom:9999px;
	margin-bottom:-9999px;
}
.cell {
	display:inline;
}
.liquid {
	width:expression(liquid_td(this));
}
<span style="color:#800080">&lt;/style&gt;</span>
<span style="color:#000080">&lt;noscript&gt;</span>
<span style="color:#800080">&lt;style type=<span style="color:#0000FF">&quot;text/css&quot;</span>&gt;</span>
.liquid { width:59.9%; /* we actually want 60% */ }
.fixed50 { width:15%; }
.fixed100 { width:25%; }
<span style="color:#800080">&lt;/style&gt;</span>
<span style="color:#000080">&lt;/noscript&gt;</span>
<span style="color:#000080">&lt;!&#91;endif&#93;--&gt;</span></i></pre>
</div> So, now we have a working system to emulate table cell behavior in our target browsers. <br />
<br />
<a href="http://images.vbulletin.com/blog-content/kier/detabulating/threadbit-vb4-draft.png" target="_blank"><img src="http://images.vbulletin.com/blog-content/kier/detabulating/threadbit-vb4-draft-450.png" border="0" alt="" /></a><br />
<br />
The question now is:<br />
<i>Was it all worth it, just to avoid using a &lt;table&gt; tag?</i></blockquote>

 ]]></content:encoded>
			<dc:creator>Kier</dc:creator>
			<guid isPermaLink="true">http://www.vbulletin.com/forum/blog.php?b=2352</guid>
		</item>
		<item>
			<title>Java Java Java</title>
			<link>http://www.vbulletin.com/forum/blog.php?b=2351</link>
			<pubDate>Fri, 30 Jan 2009 21:45:37 GMT</pubDate>
			<description><![CDATA[There is something distinctly refreshing about re-visiting a past tool that you've used; much like finding an old install of Diablo 1 and losing 5 hours as you remember exactly how much fun it is to...]]></description>
			<content:encoded><![CDATA[<blockquote class="blogcontent">There is something distinctly refreshing about re-visiting a past tool that you've used; much like finding an old install of Diablo 1 and losing 5 hours as you remember exactly how much fun it is to play. I dare say I'll experince the same with StarCraft2 and Diablo 3 at some point.<br />
<br />
Though for now it's the rekindled fun of programming with Java (no no not for vBulletin, don't fret), the Sun Microsystems variety.<br />
<br />
It's been near 6-7 years now, so getting back up to speed in version 6 for an upcoming (series of) certification goal(s) I've set myself has been interesting. As well as a fun side project.<br />
<br />
As with learning anything that has cross over (i.e. an OO language, when coding for vBulletin in PHP) can only benefit you as a developer to have a more all-round approach. No person is an island, and no one technology is a cure-all. <br />
<br />
I had a thought this year that I wanted to learn a new language, though I thought it was going to be French with my partner ........ not Java (which she dosen't really have an interest in !). <br />
<br />
The change in development perspective has been a welcome addition to the day.<br />
<br />
As for vBulletin, the work is progressing well (as I'm more so on the main team now opposed to just ImpEx) and I'm impressed by what I'm seeing the team produce.<br />
<br />
As for now .......... time for a cup of Java, a few pages of Java and checking out a holiday that might take me though Java.</blockquote>

 ]]></content:encoded>
			<dc:creator>Jerry</dc:creator>
			<guid isPermaLink="true">http://www.vbulletin.com/forum/blog.php?b=2351</guid>
		</item>
		<item>
			<title>vB 4.0: Template Merging and 3-Way Comparison</title>
			<link>http://www.vbulletin.com/forum/blog.php?b=2350</link>
			<pubDate>Fri, 30 Jan 2009 14:12:13 GMT</pubDate>
			<description><![CDATA[One of the most common complaints about vBulletin's upgrade process is applying the template changes. While the template history feature helped a little bit, it didn't go far enough. vBulletin 4.0...]]></description>
			<content:encoded><![CDATA[<blockquote class="blogcontent">One of the most common complaints about vBulletin's upgrade process is applying the template changes. While the template history feature helped a little bit, it didn't go far enough. vBulletin 4.0 will introduce a feature to make applying template changes much easier: automatic merging and 3-way comparison.<br />
<br />
Whenever you upgrade, we will automatically look for templates that have changed and see if you customized those templates. If you have, we will automatically try to merge the changes in. If this succeeds, you won't have anything else to do (in most cases). If it fails, your customized template won't be updated--like in vBulletin 3--and you'll have to apply the changes yourself. However, that process is improved as well. More on that later.<br />
<br />
Roughly, the merging process goes like this:<ul><li>Find the differences between the old default and the new default. (&quot;old-new&quot;)</li>
<li>Find the differences between the old default and your customized version. (&quot;old-custom&quot;)</li>
<li>Start walking through the template. If we find a changed spot in old-new but it's not changed in old-custom, use the old-new version. If we find a change in old-custom but not old-new, use the old-custom version. If neither changed, use either. If both changed, that's a conflict and we can't do the merge.</li>
</ul>If you're interested in more technical details, check out <a href="http://revctrl.org/ThreeWayTextMergeImplementation" target="_blank">this page</a> or this <a href="http://www.cis.upenn.edu/~bcpierce/papers/diff3-short.pdf" target="_blank">university paper</a>.<br />
<br />
Most of this happens behind the scenes. However, you'll see some changes to the &quot;Find Update Templates&quot; screen:<br />
<a href="http://www.vbulletin.com/forum/attachment.php?attachmentid=330" >Attachment 330</a><br />
<br />
The &quot;View Highlighted Changes&quot; link will take you to this page:<br />
<a href="http://www.vbulletin.com/forum/attachment.php?attachmentid=328" >Attachment 328</a><br />
This lets you view the 3-way merge results visually. The yellow lines indicate areas changed by merging, while the red blocks indicate conflicts. The conflicting areas show you the values in all 3 versions of the template (old, new, customized) to let you choose how to resolve it.<br />
<br />
Of course, trying to do the edit from this page would be a challenge, so if you click the &quot;Edit Merged Text&quot; link, you'll be taken to a normal looking template editor:<br />
<a href="http://www.vbulletin.com/forum/attachment.php?attachmentid=329" >Attachment 329</a><br />
However, the text that you're editing is slightly different from the norm. Any unchanged or merged areas are as you'd expect, but the output from a conflict is very different. All 3 possible values for a conflict will be shown, so you can resolve it correct. And don't worry, if you try to save it while there's still a conflict, it will warn you.<br />
<br />
<br />
<br />
I should note that the automatic merging is pretty conservative. &quot;Adjacent updates&quot; (when a customized version adds a line immediately after a line that was changed) will trigger a conflict. In some cases, it'd be ok for this merge to go through, but there are other situations where things would break if the change were applied. Regardless, the new conflict management system should allow you to resolve the problem more quickly.<br />
<br />
Hopefully this feature will make upgrading a customized vBulletin easier! :)</blockquote>

 ]]></content:encoded>
			<dc:creator>Mike Sullivan</dc:creator>
			<guid isPermaLink="true">http://www.vbulletin.com/forum/blog.php?b=2350</guid>
		</item>
		<item>
			<title>Blog Update and vB4 Attachment Management</title>
			<link>http://www.vbulletin.com/forum/blog.php?b=2349</link>
			<pubDate>Fri, 23 Jan 2009 17:55:27 GMT</pubDate>
			<description>I am still on target to release Blog 2.0.1 next week.  You may notice quite a few bugs in the bug tracker, but none of them look serious and so I hope to knock them out in short order. 
 
As for the...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent">I am still on target to release Blog 2.0.1 next week.  You may notice quite a few bugs in the bug tracker, but none of them look serious and so I hope to knock them out in short order.<br />
<br />
As for the vB4 Attachment Management demo, I am hoping I have something to show you next week but to be realistic, it won't be ready until the week of Feb 2nd.<br />
<br />
I will give you a screenshot of its current state, as long as you realize that it is still in development and missing controls.<br />
<br />
[ATTACH=full]327[/ATTACH]</blockquote>

 ]]></content:encoded>
			<dc:creator>Freddie Bingham</dc:creator>
			<guid isPermaLink="true">http://www.vbulletin.com/forum/blog.php?b=2349</guid>
		</item>
		<item>
			<title>vB 4.0 SEO Features</title>
			<link>http://www.vbulletin.com/forum/blog.php?b=2348</link>
			<pubDate>Thu, 22 Jan 2009 17:46:47 GMT</pubDate>
			<description>vBulletin 4.0 will include a few features that will help your community content be better indexed by search engines. 
 
Search engine optimisation is an inexact science, and when putting together the...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent">vBulletin 4.0 will include a few features that will help your community content be better indexed by search engines.<br />
<br />
Search engine optimisation is an inexact science, and when putting together the slate of features we spent time researching the latest thinking around what factors lead to positive benefits, including absorbing existing research on sites such as <a href="http://www.seomoz.org" target="_blank">seomoz.org</a>.<br />
<br />
The features that have been created for vBulletin 4.0 are the main factors that we consider will have the greatest positive impact in terms of search engine ranking.  Instead of including hundreds of options that can be infinitely tweaked, the features chosen consist of semantic HTML packed with content meta-data, the reduction in the amount of duplicate content and search engine friendly URLS for forums, threads and member profile pages.<br />
<br />
<font size="4">Built in features</font><br />
<br />
<b>Keyword Use in Title Tag</b> - The HTML title of the key vBulletin pages now better represents the content within the page, and extraneous information (such as &quot;Page x&quot;) have now been removed.<br />
<br />
<b>NOFOLLOW tag</b> for all external links.<br />
<br />
<b>Duplicate content reduced</b> - by altering the operation of the showpost.php file to redirect cleanly to showthread.php.<br />
<br />
<b>Meta description and keywords</b> - now populated with relevant, meaningful page level content, including tag data and content snippets.<br />
<br />
<font size="4">Friendly URL options</font><br />
<br />
For 4.0, there is a new area within the admin control panel that will allow you to switch on friendly URLs that will work in conjunction with server redirects (.htaccess) where supported.<br />
<br />
[ATTACH=full]326[/ATTACH]<br />
<br />
For threads, the following URL structures for threads, member profiles and forums are created for each of the options:<br />
<br />
<b>Standard URLs</b> - as exists at present:<ul><li>showthread.php?t=12345</li>
<li>member.php?u=12345</li>
<li>forumdisplay.php?f=123</li>
</ul><br />
<b>Basic Friendly URLs:</b><ul><li>showthread.php?1234-Thread-Title</li>
<li>member.php?1234-Username</li>
<li>forumdisplay.php?12-Forum-Title</li>
</ul><br />
<b>Advanced Friendly URLs</b><ul><li>showthread.php/1234-Thread-Title</li>
<li>member.php/1234-Username</li>
<li>forumdisplay.php/12-Forum-Title</li>
</ul><br />
<b>Mod Rewrite Friendly URLs</b><ul><li>threads/1234-Thread-Title</li>
<li>members/1234-Username</li>
<li>forums/1234-Forum-Title</li>
</ul><br />
<font size="4">Search Engine Sitemap</font><br />
<br />
vBulletin 4.0 will include a built in XML site map system that provides a machine readable index of forum posts and threads.<br />
<br />
Google and other supported search engines will be able to access the sitemap, which will facilitate a greater amount of site content being included within the search engine index.<br />
<br />
<br />
If you have any questions, suggestions or thoughts on the planned SEO functionality for vBulletin 4.0, please post a comment.  Thanks!<br />
<br />
More development blog posts coming soon.<br />
<br />
-James</blockquote>

 ]]></content:encoded>
			<dc:creator>James</dc:creator>
			<guid isPermaLink="true">http://www.vbulletin.com/forum/blog.php?b=2348</guid>
		</item>
		<item>
			<title>vBulletin 3.8.1 due on Tuesday, January 27th</title>
			<link>http://www.vbulletin.com/forum/blog.php?b=2347</link>
			<pubDate>Wed, 21 Jan 2009 14:39:52 GMT</pubDate>
			<description>To address various issues that have been reported with vBulletin 3.8.0, we will be releasing vBulletin 3.8.1 on Tuesday, January 27th. This follows our scheduled release policy...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent">To address various issues that have been reported with vBulletin 3.8.0, we will be releasing vBulletin 3.8.1 on Tuesday, January 27th. This follows our <a href="http://www.vbulletin.com/forum/showthread.php?t=273299" target="_blank">scheduled release policy</a>.</blockquote>

 ]]></content:encoded>
			<dc:creator>Mike Sullivan</dc:creator>
			<guid isPermaLink="true">http://www.vbulletin.com/forum/blog.php?b=2347</guid>
		</item>
		<item>
			<title>Blog 2.0.1 Release Schedule</title>
			<link>http://www.vbulletin.com/forum/blog.php?b=2346</link>
			<pubDate>Wed, 07 Jan 2009 17:06:48 GMT</pubDate>
			<description>Since there have been a fair number of minor bugs in the 2.0.0 release, I want to push out 2.0.1 in a timely manner. I have set a tentative date to release 2.0.1 on January 28th. 
 
On another note,...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent">Since there have been a fair number of minor bugs in the 2.0.0 release, I want to push out 2.0.1 in a timely manner. I have set a tentative date to release 2.0.1 on January 28th.<br />
<br />
On another note, I have started work on the new method by which you will manage and share attachments (or assets) in vB4, CMS, Blog, and other areas. Hopefully it all goes well and I'll have another video presentation to give you near the end of the month.</blockquote>

 ]]></content:encoded>
			<dc:creator>Freddie Bingham</dc:creator>
			<guid isPermaLink="true">http://www.vbulletin.com/forum/blog.php?b=2346</guid>
		</item>
		<item>
			<title>CMS Grid and Layout Management</title>
			<link>http://www.vbulletin.com/forum/blog.php?b=2345</link>
			<pubDate>Fri, 02 Jan 2009 18:37:42 GMT</pubDate>
			<description>I have recorded a Screencast  (http://www.screencast-o-matic.com/watch/cQVn6inpa)of a quick run through of the current grid and layout management systems of the CMS. The two areas are simply building...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent">I have recorded a <a href="http://www.screencast-o-matic.com/watch/cQVn6inpa" target="_blank">Screencast </a>of a quick run through of the current grid and layout management systems of the CMS. The two areas are simply building blocks to creating a page. A page consumes a layout and a layout consumes a grid.<br />
<br />
These areas are the only items that I have worked on for the CMS so my comments are going to be limited to this subject.<br />
<br />
<iframe width="504" height="424" frameborder="0" scrolling="no" src="http://www.screencast-o-matic.com/embed?sc=cQVn6inpa&amp;w=500&amp;np=0&amp;v=2"></iframe><br />
<br />
<a href="http://www.screencast-o-matic.com/watch/cQVn6inpa" target="_blank">http://www.screencast-o-matic.com/watch/cQVn6inpa</a><br />
<br />
Remember, these are just components of building a page and I have not included the method by which a page is created. I have not included the method by which widgets are configured.</blockquote>

 ]]></content:encoded>
			<dc:creator>Freddie Bingham</dc:creator>
			<guid isPermaLink="true">http://www.vbulletin.com/forum/blog.php?b=2345</guid>
		</item>
		<item>
			<title>Christmas Break</title>
			<link>http://www.vbulletin.com/forum/blog.php?b=2344</link>
			<pubDate>Tue, 30 Dec 2008 23:04:00 GMT</pubDate>
			<description><![CDATA[While most Jelsoft developers are on break over the Christmas holiday, I have only taken a few days off.   
 
I have spent this "down time" taking care of Blog 2.0.0 bugs as well as implementing some...]]></description>
			<content:encoded><![CDATA[<blockquote class="blogcontent">While most Jelsoft developers are on break over the Christmas holiday, I have only taken a few days off.  <br />
<br />
I have spent this &quot;down time&quot; taking care of Blog 2.0.0 bugs as well as implementing some of the simpler blog suggestions.<br />
<br />
Later this week I will post some details about the CMS Layout and Grid administration managers.</blockquote>

 ]]></content:encoded>
			<dc:creator>Freddie Bingham</dc:creator>
			<guid isPermaLink="true">http://www.vbulletin.com/forum/blog.php?b=2344</guid>
		</item>
	</channel>
</rss>
