di Agostino Zanutto
Joomla! HACK mod_mainmenu: visualizzare un sottomenù.
| Joomla! & Extensions |
Il sistema dei menù di Joomla! ha molte funzioni ma non quella di visualizzare solo una parte (o sottomenù) di un menù di sistema.
Con un piccolo HACK è possibile implementare questa funzionalità senza dover installare altre estensioni e continuando a mantenere le personalizzazioni tipiche dei template evoluti che modificano la visualizzazione di mod_mainmenu.
PATCH / HACK
Nota: ogni upgrade che dovessse modificare i file in oggetto rendera` nullo il funzionamento del HACK in oggetto.
Nel file: 'modules/mod_mainmenu/mod_mainmenu.php'
Aggiungere le seguenti righe:
41 42 43 44 |
// Added by HACK SFS.it - Submenus $params->def('parentId', 0); |
Nel file: 'modules/mod_mainmenu/mod_mainmenu.xml'
Aggiungere le seguenti righe:
24 |
<param name="parentId" type="text" default="0" size="5" label="Parent ItemId" description="PARENTITEM" />
|
Nel file: 'modules/mod_mainmenu/helper.php'
Modificare i seguenti blocchi aggiungendo le righe di codice se necessario
(il numero di riga deriva dal file originale con le modifiche precedentemente descritte):
38 39 |
$maxdepth = $params->get('maxdepth',10); |
con
38 39 40 |
$maxdepth = $params->get('maxdepth',10); $parentId = $params->get('parentId',0); |
e
44 |
$ids[0] = true;
|
con
44 |
$ids[!empty($parentId)?$parentId:0] = true;
|
e
77 78 79 80 81 82 83 84 85 86 87 88 |
static $xmls; if (!isset($xmls[$type])) { $cache =& JFactory::getCache('mod_mainmenu'); $string = $cache->call(array('modMainMenuHelper', 'buildXML'), $params); $xmls[$type] = $string; } // Get document $xml = JFactory::getXMLParser('Simple'); $xml->loadString($xmls[$type]); $doc = &$xml->document; |
con
77 78 79 80 81 82 83 84 85 86 87 88 89 |
static $xmls; $parentId = $params->get('parentId',0); $parentId = empty($parentId)?'':$parentId; if (!isset($xmls[$typ.$parentId])) { $cache =& JFactory::getCache('mod_mainmenu'); $string = $cache->call(array('modMainMenuHelper', 'buildXML'), $params); $xmls[$type.$parentId] = $string; } // Get document $xml = JFactory::getXMLParser('Simple'); $xml->loadString($xmls[$type.$parentId]); |
e
203 |
$this->_root = new JMenuNode(0, 'ROOT');
|
con
203 |
$this->_root = new JMenuNode($params->get('parentId',0), 'ROOT');
|
a questo punto la patch è completata.
Utilizzo:
L'utilizzo comune di mod_mainmenu non cambierà dato che l'impatto della modifica avviene solo nel caso in cui impostiate l'ItemId del padre del sottomenù.
Itemid lo potrete agilmente catturare nella pagina 'Gestione voci di menu' per il menù da cui estrerre il sottomenù. (come visualizzato nella prima immagine, che mette in evidenza le voci del sottomenù di "Il Software-> Joomla! Extensions con Itemid = 53 nel sito SFS.it)

Andremo quindi a creare un mod_mainmenu per il menù padre del sottomenù, main configurandolo come richiesto e settando il Parent Itemid raccolto nella schermata precedente (53) nel nostro caso.

Attivare il menù, assegnarlo al modulo di riferimento e in che pagine visualizzarlo... e il nostro sottomenù sarà "servito".
Ultimo aggiornamento (Giovedì 01 Settembre 2011 11:14)

Commenti
grazie per l'articolo, ma, dopo aver fatto le modifiche richieste, mi dà un errore (500 orphan error, non riesce a trovare il parente della voce di menù che inserisco) alla riga:
$string = $cache->call(array('modMainMenuHelp er', 'buildXML'), $params);
mi puoi aiutare?
RSS feed dei commenti di questo post.