Moving VirtueMart: Link path problem in admin console

Problem: Just now, I needed to move a website running Joomla 1.5 and VirtueMart 1.1.2 from the development server, to the live web space. After I had moved the data, and the files, and updated the path in Joomla’s ‘configuration.php’ file, it seemed to work ok, but all the links in the VirtueMart Admin area still pointed to my development server.

Fix: After doing a ‘find in files’ for my development server’s name, I found two more paths that need changing in VirtueMart’s own configuration file. This is the file:

/administrator/components/com_virtuemart/virtuemart.cfg.php

The following two paths need editing to point to the new server location (URL):

35
36
define( 'URL', 'http://my.devserver.com/joomla/' );
define( 'SECUREURL', 'https://secure.devserver.com/joomla/' );

A simple fix, but probably worth posting.

Select template by Section in Joomla 1.5

Problem: In Joomla 1.5, at present, there is no way to set the template applied to an article or category  based on the section that article is in. Templates can be set by menu item, but not by the overall section they reside in. This means that if multiple templates are being used, each time a new article is added, changes have to be made to the template setup too – very tedious. All I wanted was to be able to create an article or category, add it to a certain section, and know that it would be rendered/displayed using a particular template:

Fix: This took some searching and tweaking. I found a post in the Joomla developers forum about someone trying to do something similar, but their example code was broken. It was enough to get me started though.

What you need to do is: find and open application.php in the includes directory on the root of your Joomla 1.5 installation. Then find line 309 or thereabouts and look for this code:

309
310
311
// Allows for overriding the active template from the request
$template = JRequest::getCmd('template', $template);
$template = JFilterInput::clean($template, 'cmd'); // need to filter the default value as well

Insert AFTER the comment on line 309, but BEFORE line 310, add this code:

// Templates by Section hack - Begin
 
$eItemView = JRequest::getVar('view');
$eItemId = JRequest::getVar('id');
 
$sectionId = NULL;
 
$eItemId = (strpos($eItemId,":"))? substr($eItemId,0,strpos($eItemId,":")) : $eItemId;
 
switch ($eItemView) {
case "article":
$edb =& JFactory::getDBO();
$eQuery = 'SELECT sectionid FROM #__content WHERE id LIKE '.$eItemId.'';
$edb->setQuery($eQuery, 0, 1);
$sectionId = $edb->loadResult();
break;
case "category":
$edb =& JFactory::getDBO();
$eQuery = 'SELECT section FROM #__categories WHERE id LIKE '.$eItemId.'';
$edb->setQuery($eQuery, 0, 1);
$sectionId = $edb->loadResult();
break;
case "section":
$sectionId = $eItemId;
break;
}
 
// Edit the section id below, you can find it in the sections admin area.
if ($sectionId == "1") {
$template = "rhuk_milkyway_red"; // Use the full template name.
}
// Add more if clauses if there are other templates.
 
// Templates by Section hack - End

Hopefully you can see what this does. It looks for the section id to use in 3 ways, depending on whether joomla is currently displaying a section root page, a category root page, or an article. It then looks to see whether that section id has had a specific template specified for it by name.

This hack works well for me, I only need to add the different template data once in application.php for a given site. Ideally someone needs to make an admin mod for this, so that sections and categories can be assigned different templates in the backend. Maybe one day I’ll make one, but not unless there’s demand 🙂

Any questions, corrections or thoughts, please comment below (no need to create an account or anything!)