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)

HACK-mod_mainmenu-1-screenshot-mainmenu-list

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.

HACK-mod_mainmenu-1-screenshot-mainmenu-params

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  

 
0 # Maurizio 2011-06-18 16:06
ciao,
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?
Rispondi | Rispondi con citazione | Citazione
 
 
0 # Agostino Zanutto 2011-06-18 18:31
Hai applicato tutte le patch indicate? che versione di Joomla hai installato?
Rispondi | Rispondi con citazione | Citazione
 

Aggiungi commento


Codice di sicurezza
Aggiorna