Wednesday, 09 September 2009 12:20

I was in need of a fix for the Joomla! component SOBI2, as a client wanted the title to reflect the current category and listing, instead of always having the name of the directory. After searching the web, I found an older post on the Sigsiu forums dealing with this. After rewriting a portion to reflect changes in SOBI2 since this was posted and applying this fix, however, I found that my copy of IE6 was throwing a very strange error: 80004004.

As it turns out, the error was related to the code posted at the Sigsiu forums:

...
static $cheadChanged = false;
if( !$cheadChanged ) {
  $cid = sobi2Config::request( $_REQUEST, 'catid', 0 );
        $cheadChanged = true;
  if( $cid ) {
    sobi2Config::import( 'category.class' );
    $cat = new sobi2Category( $cid );
    ?>
    <script>
      var elements = document.getElementsByTagName( "div" );
        for (var i = 0; i < elements.length; i++) {
            if ( elements[i].className == "componentheading" ) {
                elements[i].innerHTML = "<?php echo htmlentities($cat->name); ?>";
                break;
            }
        }
    </script>
    <?php
  }
}
...

Since this code was executing before IE6 had even finished loading the page, IE6 had no idea how many divs there were going to be, and threw that error.

What I ended up doing is rewriting the JavaScript portion using MooTools markup, as the site I was doing this for always loaded MooTools for its operation. I also added this as a window load event, instead of firing immediately. Now IE6 renders the page as expected, without error.

...
static $cheadChanged = false;
if( !$cheadChanged ) {
  $cid = sobi2Config::request( $_REQUEST, 'catid', 0 );
        $cheadChanged = true;
  if( $cid ) {
    sobi2Config::import( 'category.class' );
    $cat = new sobi2Category( $cid );
    // original posted code causes weird ie6 error 80004004
    // added to domready using mootools &amp; using mootools selectors
    $this->listing .= '
    <script type="text/javascript">
    window.addEvent( "load", function()
    {
      $$(".componentheading").each( function( el )
      {
        el.setHTML( "'.htmlentities($cat->name).'" );
      });
    });
    </script>';
  }
}
...

Unfortunately, this doesn't really help as far as SEO is concerned, but it looks better to the end user. Hopefully at some point in the future SOBI2 will support this as a configurable option.

Last Updated on Wednesday, 09 September 2009 12:40
 

Add your comment

Your name:
Comment:
  The word for verification. Lowercase letters only with no spaces.
Word verification:

The Joomla!® name is used under a limited license from Open Source Matters in the United States and other countries. Jeff Channell is not affiliated with or endorsed by Open Source Matters or the Joomla!® Project.

Santorum
Joomla Extensions