Data Recovery Status Report

Well, it looks like all of the code from the testbed was recoverable off of Mtekktux’s hard drive. As was most of the temporary “pass around” folder. However, everything backed up from the laptop before one reinstalled Vista last fall is gone. The entire /home directory is what was corrupted. Everything else seems to be fine. Now off to resuscitate Mtekktux.

-John Havlik

[end of transmission, stay tuned]

RIP Mtekktux

Well, last night the local file server and development testbed had a hard drive failure. Like always, one did not keep good backups of its data, and may have lost some semi important code. Mtekktux was slated for retirement this summer, had one completed the summer project. The funny thing is, it wasn’t the actual hard drive that died this time, it was due to an unexpected loss of power while performing a disk check. Tonight, the process of data recovery of the Ext3 partition will probably begin. Depending on how that goes, this weekend may see some development work on Breadcrumb NavXT take place.

The real downer is that Mtekktux was one’s local WordPress testbed. With it down, testing of Breadcrumb NavXT must be done on this blog. Due to this, the release of 3.4.0 will be pushed off until at least the 26th of October.

-John Havlik

[end of transmission, stay tuned]

Product Coherency

One of the leading reasons, other than it’s the de facto standard, to use Microsoft Office is its coherency between member products. Work, Excel, Powerpoint, etc. all have a similar look and feel. When Microsoft released Office 2007 with the ribbon interface, they chose not to migrate to this interface for all of the member products. In particular Visio, which makes it feel like an outsider. In a way it is, Visio 2007 is not included in any of the Office 2007 packages. However, the old interface makes it look dated in a Windows 7 environment, where all of the included applications use ribbon. If Microsoft seriously want’s everyone to migrate to the ribbon interface, they should use it on all of their new products (well, maybe where it works, Visual Studio may not be a good candidate for it, but who knows).

Notice the lack of content in the peek view?

Notice the lack of content in the peek view?

Powerpoint 2007 seems to have a few bugs in Windows 7. The first is that if there are two documents open, it will not open two concurrently open windows. Thus, it’s impossible to do a “two up” with two different presentations, which is possible in Word and Excel. The second bug, illustrated in the above image, is Powerpoint does not render a scene for the Windows Taskbar peek feature. This makes it a royal pain for switching between two open presentations. Again, the other Office products exhibit the correct behavior.

-John Havlik

[end of transmission, stay tuned]

Breadcrumb Patent

Want a breadcrumb trail on your website that behaves like the Windows 7 Explorer breadcrumb trail? If you live within the United States, or any of its territories, then you may need a patent use license.

w7breadcrumb

US Patent Application No. 20080282199 covers all breadcrumb arrangements used on the internet that resemble those in Windows 7. This patent was filed in late 2008, and seems to be pending USPTO approval. While some of its claims cover features of Breadcrumb NavXT, Breadcrumb NavXT qualifies as prior art (Breadcrumb NavXT has supported hierarchical categories since 2.0.0 Beta 1, way back in November 2007).

This was found in the midst of research for implementing custom taxonomy support in Breadcrumb NavXT. In the next release, 3.4.0, taxonomy support will be completely reworked. This will enable support any flat and hierarchical taxonomy for post organization and archives. The former was implemented and in the SVN Trunk, the latter is a work in progress at the moment. Note that the SVN Trunk should be considered volatile at this time, and may contain code that does not fully work.

-John Havlik

[end of transmission, stay tuned]

Keep the Current Page Out of the Breadcrumb Trail

Note: This guide is only valid for versions of Breadcrumb NavXT prior to 4.0. Since Breadcrumb NavXT 4.0 the bcn_after_fill action should be used to remove breadcrumbs from the breadcrumb trail.

Over the past year, several individuals have inquired on the feasibility of removing the current item (page, post, etc) from the Breadcrumb trail. While this is not good form, every page in the hierarchy should be represented in the breadcrumb trail, one will discuss how to remove the current item from the breadcrumb trail.

As in the Keep a Page Out of the Breadcrumb Trail guide, the method discussed herein differs from earlier methods provided in response to comments elsewhere. Likewise, this method uses the OOP principle of inheritance and requires PHP5–as does Breadcrumb NavXT so that should not be a problem.

Previously, removing the current item from the breadcrumb trail was the suggested method of implementation. While this works great, it does have some flexibility issues. And, it will not work if the bcn_breadcrumb_trail::trail array is a private or protected member variable (which may happen in the future). Instead, this guide will override the bcn_breadcrumb_trail::display() member function.

First, open the functions.php file of your theme. Within it we are going to create a new class named ext_breadcrumb_trail, and tell PHP that it is an extension of the bcn_breadcrumb_trail class. We will place the skeleton for the class constructor in at this time as well.

class ext_breadcrumb_trail extends bcn_breadcrumb_trail
{
	//Default constructor
	function __construct()
	{
		//Need to make sure we call the constructor of bcn_breadcrumb_trail
		parent::__construct();
	}
}

Now, onto overriding bcn_breadcrumb_trail::display(). If you do not use bcn_breadcrumb_trail::display_trail() then this is all you will need:

class ext_breadcrumb_trail extends bcn_breadcrumb_trail
{
	//Default constructor
	function __construct()
	{
		//Need to make sure we call the constructor of bcn_breadcrumb_trail
		parent::__construct();
	}
	/**
	 * display
	 *
	 * Breadcrumb Creation Function
	 *
	 * This functions outputs or returns the breadcrumb trail in string form.
	 *
	 * @return void Void if Option to print out breadcrumb trail was chosen.
	 * @return string String-Data of breadcrumb trail.
	 * @param bool $return Whether to return data or to echo it.
	 * @param bool $linked[optional] Whether to allow hyperlinks in the trail or not.
	 * @param bool $reverse[optional] Whether to reverse the output or not.
	 */
	function display($return = false, $linked = true, $reverse = false)
	{
		//Set trail order based on reverse flag
		$this->order($reverse);
		//Initilize the string which will hold the assembled trail
		$trail_str = '';
		//The main compiling loop
		foreach($this->trail as $key=>$breadcrumb)
		{
			//Must branch if we are reversing the output or not
			if($reverse)
			{
				//Add in the separator only if we are the 2nd or greater element
				if($key > 0)
				{
					$trail_str .= $this->opt['separator'];
				}
			}
			else
			{
				//Only show the separator when necessary
				if($key > count($this->trail) - 2)
				{
					$trail_str .= $this->opt['separator'];
				}
			}
			//Trim titles, if needed
			if($this->opt['max_title_length'] > 0)
			{
				//Trim the breadcrumb's title
				$breadcrumb->title_trim($this->opt['max_title_length']);
			}
			//We want to output everything but the current item
			if($key === 0)
			{
				break;
			}
			//Place in the breadcrumb's assembled elements
			$trail_str .= $breadcrumb->assemble($linked);
		}
		//Should we return or echo the assembled trail?
		if($return)
		{
			return $trail_str;
		}
		else
		{
			//Giving credit where credit is due, please don't remove it
			$tag = "<!-- Breadcrumb NavXT " . $this->version . " -->\n";
			echo $tag . $trail_str;
		}
	}
}

The above code has only minor changes from the distributed bcn_breadcrumb_trail::display() code. One line was adjusted so that one less breadcrumb separator would be output. The other change involved replacing $this->current_item($breadcrumb); with break;, ending the loop execution. Note, if you want the “extra” breadcrumb separator to still display, change the line:

if($key < count($this->trail) - 2)

to:

if($key < count($this->trail) - 1)

If you need bcn_breadcrumb_trail::display_trail() instead of bcn_breadcrumb_trail::display() you will want to use the following code:

class ext_breadcrumb_trail extends bcn_breadcrumb_trail
{
	//Default constructor
	function __construct()
	{
		//Need to make sure we call the constructor of bcn_breadcrumb_trail
		parent::__construct();
	}
	/**
	 * display_list
	 *
	 * Breadcrumb Creation Function
	 *
	 * This functions outputs or returns the breadcrumb trail in list form.
	 *
	 * @return void Void if Option to print out breadcrumb trail was chosen.
	 * @return string String-Data of breadcrumb trail.
	 * @param bool $return Whether to return data or to echo it.
	 * @param bool $linked[optional] Whether to allow hyperlinks in the trail or not.
	 * @param bool $reverse[optional] Whether to reverse the output or not.
	 */
	function display_list($return = false, $linked = true, $reverse = false)
	{
		//Set trail order based on reverse flag
		$this->order($reverse);
		//Initilize the string which will hold the assembled trail
		$trail_str = '';
		//The main compiling loop
		foreach($this->trail as $key=>$breadcrumb)
		{
			$trail_str .= '
<li>';
			//Trim titles, if needed
			if($this->opt['max_title_length'] > 0)
			{
				//Trim the breadcrumb's title
				$breadcrumb->title_trim(
					$this->opt['max_title_length']);
			}
			//We want to output everything but the current item
			if($key === 0)
			{
				break;
			}
			//Place in the breadcrumb's assembled elements
			$trail_str .= $breadcrumb->assemble($linked);
			$trail_str .= "</li>

\n";
		}
		//Should we return or echo the assembled trail?
		if($return)
		{
			return $trail_str;
		}
		else
		{
			//Giving credit where credit is due, please don't remove it
			$tag = "<!-- Breadcrumb NavXT " . $this->version . " -->\n";
			echo $tag . $trail_str;
		}
	}
}

The only change in this code from the distributed bcn_breadcrumb_trail::display_trail() involved modifying the branch statement used for the current item. This involved replacing $this->current_item($breadcrumb); with break;. Now onto calling our new class. For users of the normal, sting output breadcrumb trail, you will use something on the lines of:

if(class_exists('ext_breadcrumb_trail'))
{
	//Make new instance of the ext_breadcrumb_trail object
	$breadcrumb_trail = new ext_breadcrumb_trail();
	//Setup options here if needed
	//Fill the breadcrumb trail
	$breadcrumb_trail->fill();
	//Display the trail
	$breadcrumb_trail->display();
}

While users of the HTML list output form of the breadcrumb trail will want to use:

if(class_exists('ext_breadcrumb_trail'))
{
	//Make new instance of the ext_breadcrumb_trail object
	$breadcrumb_trail = new ext_breadcrumb_trail();
	//Setup options here if needed
	//Fill the breadcrumb trail
	$breadcrumb_trail->fill();
	//Display the trail
	$breadcrumb_trail->display_list();
}

This is a quite simple method for removing the current item from the breadcrumb trail output. Since the display functions will not be modified in the foreseeable future, this is quite safe to use. Again, for usability reasons, one recommends you do not actually remove the current item from the breadcrumb trail.

-John Havlik

[end of transmission, stay tuned]