Hace un par de posts contabamos como modificar el módulo ‘mod_k2_tools’ para hacer un listado de categorias dinámico de forma que muestre las categorías hijas de la actual.
Ahora, os enseñamos las modificaciones que tendríamos que hacer si lo que queremos es que se muestren siempre las categorias hijas de la categoría padre de la categoría actual.
Supongo que me entendeis, sinó, almejor viendo el codigo del helper de nuestro ‘mod_k2_tools’ personalizado, lo podreis entender mejor.
Lo primero que tenemos que hacer es añadir una función para recuperar el padre de una categoría como esta:
function _getCatParent($id) {
$user = &JFactory::getUser();
$aid = (int) $user->get('aid');
$id = (int) $id;
$db = &JFactory::getDBO();
$query = "SELECT * FROM #__k2_categories WHERE id={$id} AND published=1 AND trash=0 AND access<={$aid} ";
$db->setQuery($query);
$rows = $db->loadObjectList();
if ($db->getErrorNum()) {
echo $db->stderr();
return false;
}
if (count($rows)) {
return $rows[0]->parent;
} else {
return false;
}
}
Después tendremos que modificar el método ‘treerecurse’ sutituyendo:
if (($root_id != 0) && ($level == 0)) {
$query = "SELECT * FROM #__k2_categories WHERE parent={$root_id} AND published=1 AND trash=0 AND access<={$aid} ORDER BY {$orderby}";
} else {
$query = "SELECT * FROM #__k2_categories WHERE parent={$id} AND published=1 AND trash=0 AND access<={$aid} ORDER BY {$orderby}";
}
Por:
$catParentid = $catid;
while (modK2ToolsHelper::_getCatParent($catParentid) > 0) { $catParentid = modK2ToolsHelper::_getCatParent($catParentid); }
if (($root_id != 0) && ($level == 0)) {
$query = "SELECT * FROM #__k2_categories WHERE parent={$root_id} AND published=1 AND trash=0 AND access<={$aid} ORDER BY {$orderby}";
} else if ($catParentid != 0) {
$query = "SELECT * FROM #__k2_categories WHERE parent={$catParentid} AND published=1 AND trash=0 AND access<={$aid} ORDER BY {$orderby}";
} else {
$query = "SELECT * FROM #__k2_categories WHERE parent={$id} AND published=1 AND trash=0 AND access<={$aid} ORDER BY {$orderby}";
}