Necesitábamos una función para cargar las posiciones disponibles en un template. Al no encontrar mucha información al respecto hemos decidido publicar la función resultante para ahorrar tiempo a quien pueda necesitarla.

/**
* Parse templateDetails.xml and get available positions
* @author Jiden - Digital Disseny, S.L.
* @version 04/04/2012
*
* @param string $tplPath - path of the current theme
* @param boolean $nameAsKey - set position name as output array key?
*
* @return array of positions
*/
function getTplPositions($tplPath, $nameAsKey = false) {
$outputArray = array();
$templateXML = $tplPath.'/templateDetails.xml';
// try to load positions from template XML file
$xml = JFactory::getXML($templateXML);
if (is_object($xml)) {
$positions = $xml->xpath('positions/position');
if ($positions) {
foreach ($positions as $position) {
$name = (string)$position->data();
// clean name
$name = preg_replace("/(\-a|\-b|\-c|\-d|\-e|\-f)$/i", "", $name);
// do not add duplicates
if(!in_array($name, $outputArray)) {
// use position name as array key?
if($nameAsKey) $outputArray[$name] = $name;
else $outputArray[] = $name;
}
}
}
}
return $outputArray;
}

Usaríamos la función así:

$tplPath = JPATH_SITE . '/templates/' . $this->template;
$positions = getTplPositions();
print_r($positions);

Y obtendríamos algo parecido a:

Array
(
    [0] => debug
    [1] => header-top
    [2] => header
    [3] => header-bottom
    [4] => topmenu
    [5] => rsidebar-top
    [6] => rsidebar
    [7] => rsidebar-bottom
    [8] => lsidebar-top
    [9] => lsidebar
    [10] => lsidebar-bottom
    [11] => main-top
    [12] => main
    [13] => main-bottom
    [14] => component-top
    [15] => component
    [16] => component-bottom
    [17] => footer-top
    [18] => footer
    [19] => footer-bottom

Esperamos haberte ahorrado algo de tiempo.