Nom de l'utilisateur en tant que titre de menu Topic is solved

Support et assistance pour l'utilisation de Joomla! 3.0, 3.1 et 3.5 : administration, gestion du contenu, des menus et des extensions natives... et toutes les autres questions qui n'ont pas de place ailleurs

Moderators: sarki, Aidan38

Forum rules
Règles du forum
Post Reply
corentin51
Joomla! Apprentice
Joomla! Apprentice
Posts: 29
Joined: Mon Jan 21, 2019 4:53 pm

Nom de l'utilisateur en tant que titre de menu

Post by corentin51 » Thu Jan 31, 2019 3:16 pm

J'aimerais pouvoir remplacer le nom du lien "Profil" par le nom de l'utilisateur connecté.
Profil étant un lien uniquement visible par les utilisateur connecté.
You do not have the required permissions to view the files attached to this post.

User avatar
pmleconte
Joomla! Explorer
Joomla! Explorer
Posts: 351
Joined: Fri Mar 17, 2017 12:55 pm
Location: France

Re: Nom de l'utilisateur en tant que titre de menu

Post by pmleconte » Fri Feb 01, 2019 8:49 am

Bonjour,

Je pense que cela doit pouvoir se faire avec une surcharge du module mod_menu, plus particulièrement du fichier default_component.php.

Je viens de faire un essai avec la surcharge suivante

Code: Select all

<?php
/**
 * @package     Joomla.Site
 * @subpackage  mod_menu
 *
 * @copyright   Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;
// ------------- Recup informations utilisateur --------------------//
use Joomla\CMS\Factory;
$user = Factory::getUser();
// ------------- ------------------------------------- --------------------//
$attributes = array();

if ($item->anchor_title)
{
	$attributes['title'] = $item->anchor_title;
}

if ($item->anchor_css)
{
	$attributes['class'] = $item->anchor_css;
}

if ($item->anchor_rel)
{
	$attributes['rel'] = $item->anchor_rel;
}
// Surcharge pour afficher nom utilisateur au lieu de Profil dans le Menu
// ----------------------------Attention au nom du menu-------------------------
if (($item->title == "Votre profil") && ($user->id)) {
    $linktype = $user->get("name");
} else {
    $linktype = $item->title;
}
//--------------------------------------------------------------------------------------- 
if ($item->menu_image)
{
	if ($item->menu_image_css)
	{
		$image_attributes['class'] = $item->menu_image_css;
		$linktype = JHtml::_('image', $item->menu_image, $item->title, $image_attributes);
	}
	else
	{
		$linktype = JHtml::_('image', $item->menu_image, $item->title);
	}
	if ($item->params->get('menu_text', 1))
	{
		$linktype .= '<span class="image-title">' . $item->title . '</span>';
	}
}
if ($item->browserNav == 1)
{
	$attributes['target'] = '_blank';
}
elseif ($item->browserNav == 2)
{
	$options = 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes';

	$attributes['onclick'] = "window.open(this.href, 'targetWindow', '" . $options . "'); return false;";
}
echo JHtml::_('link', JFilterOutput::ampReplace(htmlspecialchars($item->flink, ENT_COMPAT, 'UTF-8', false)), $linktype, $attributes);
et cela semble fonctionner.

Attention au nom de votre menu, j'ai mis "Votre profil" qui correspond au nom défini dans mon menu.

Pascal
Last edited by pmleconte on Fri Feb 01, 2019 8:53 am, edited 1 time in total.
If anything can go wrong, it will.
https://www.conseilgouz.com/en

User avatar
pmleconte
Joomla! Explorer
Joomla! Explorer
Posts: 351
Joined: Fri Mar 17, 2017 12:55 pm
Location: France

Re: Nom de l'utilisateur en tant que titre de menu

Post by pmleconte » Fri Feb 01, 2019 8:52 am

En complément, en regardant votre exemple, "Profil" semble être un séparateur, donc vous pouvez apporter ce même type de surcharge sur le fichier default_separator.php.

Pascal
If anything can go wrong, it will.
https://www.conseilgouz.com/en

corentin51
Joomla! Apprentice
Joomla! Apprentice
Posts: 29
Joined: Mon Jan 21, 2019 4:53 pm

Re: Nom de l'utilisateur en tant que titre de menu

Post by corentin51 » Fri Feb 01, 2019 1:33 pm

Merci, je vais tester ça.

corentin51
Joomla! Apprentice
Joomla! Apprentice
Posts: 29
Joined: Mon Jan 21, 2019 4:53 pm

Re: Nom de l'utilisateur en tant que titre de menu

Post by corentin51 » Fri Feb 01, 2019 1:41 pm

J'ai déja mod_menu dans le html de mon template je me suis donc contenté de remplacer le contenu par votre code, sans sucés malheureusement.
Le terme "Profil" de mon menu n'a pas changé.

User avatar
pmleconte
Joomla! Explorer
Joomla! Explorer
Posts: 351
Joined: Fri Mar 17, 2017 12:55 pm
Location: France

Re: Nom de l'utilisateur en tant que titre de menu

Post by pmleconte » Fri Feb 01, 2019 2:29 pm

Avez-vous bien changé "Mon profil" par "Profil", comme expliqué en commentaire ?
If anything can go wrong, it will.
https://www.conseilgouz.com/en

corentin51
Joomla! Apprentice
Joomla! Apprentice
Posts: 29
Joined: Mon Jan 21, 2019 4:53 pm

Re: Nom de l'utilisateur en tant que titre de menu

Post by corentin51 » Fri Feb 01, 2019 2:32 pm

Oui, c'est fait

User avatar
pmleconte
Joomla! Explorer
Joomla! Explorer
Posts: 351
Joined: Fri Mar 17, 2017 12:55 pm
Location: France

Re: Nom de l'utilisateur en tant que titre de menu

Post by pmleconte » Fri Feb 01, 2019 4:32 pm

Le site est-il visible ? utilisez-vous bien le module menu standard de Joomla ou utilisez-vous une extension pour gérer votre menu (style maximenu) ?

La modification proposée fonctionne si vous passez par le menu standard et que le libellé du menu a bien été modifiée aussi bien pour default_component.php (code php fourni) que pour default_separator.php (où il faut que vous intégriez vous-même la modification en ligne 15).

Pascal
If anything can go wrong, it will.
https://www.conseilgouz.com/en

corentin51
Joomla! Apprentice
Joomla! Apprentice
Posts: 29
Joined: Mon Jan 21, 2019 4:53 pm

Re: Nom de l'utilisateur en tant que titre de menu

Post by corentin51 » Mon Feb 04, 2019 10:51 am

pmleconte wrote:
Fri Feb 01, 2019 4:32 pm
Le site est-il visible ?
Oui il est visible, c'est un site intranet

pmleconte wrote:
Fri Feb 01, 2019 4:32 pm
utilisez-vous bien le module menu standard de Joomla ou utilisez-vous une extension pour gérer votre menu (style maximenu) ?
Oui j'utilise le module standard.

Ce que j'ai fais exactement :
Je me suis rendu dans : \templates\etfashion\html\mod_menu(qui existait déja)
Ensuite j'ai remplacé le contenu des deux fichiers en question par votre code, et j'ai remplacé Votre profil par Profil.

Ce menu profil est accessible et visible que par les utilisateurs connecté "Registered".

User avatar
pmleconte
Joomla! Explorer
Joomla! Explorer
Posts: 351
Joined: Fri Mar 17, 2017 12:55 pm
Location: France

Re: Nom de l'utilisateur en tant que titre de menu

Post by pmleconte » Mon Feb 04, 2019 1:52 pm

Bonjour,

Ce que j'entendais par "site visible", c'est visible/accessible par internet. S'agissant d'un intranet, il est donc invisible. Cela m'aurait permis de voir exactement le fichier appellé qui diffère en fonction du type de menu utilisé pour afficher votre "Profil".

Il y a 4 type de menu : separator, component, heading ou url et un autre type "divers" pour les autres menus.

Chacun de ces types appel un fichier php différent :
default_separator.php, default_component.php, default_heading.php, default_url.php et default.php (pour le divers).

Dans mon cas, "Mon profile" est un type "Modification du profil", et l'url du lien généré va vers com_user: il s'agit d'un composant, d'où ma modification dans le fichier default_component.php.

Donc, il faut trouver dans quel fichier il faut faire la modification et c'est déterminé par rapport à votre paramètrage.

Donc, quel est le type du menu "profil" ?

Pascal
If anything can go wrong, it will.
https://www.conseilgouz.com/en

corentin51
Joomla! Apprentice
Joomla! Apprentice
Posts: 29
Joined: Mon Jan 21, 2019 4:53 pm

Re: Nom de l'utilisateur en tant que titre de menu

Post by corentin51 » Mon Feb 04, 2019 2:39 pm

Bonjour,

Merci pour ces explications je comprends mieux
pmleconte wrote:
Mon Feb 04, 2019 1:52 pm
Dans mon cas, "Mon profile" est un type "Modification du profil",
Dans mon cas "Profil" est un type "Profil de l'utilisateur".
Dans la configuration de mon template, via Helix 3 Framework, je vois que le menu est dans le "Header"
Mais pour avoir essayer avec chaque ficher (url, heading, component et separator) rien ne fonctionne

User avatar
pmleconte
Joomla! Explorer
Joomla! Explorer
Posts: 351
Joined: Fri Mar 17, 2017 12:55 pm
Location: France

Re: Nom de l'utilisateur en tant que titre de menu

Post by pmleconte » Mon Feb 04, 2019 3:42 pm

Helix 3 Framework : je viens de faire un test avec Helix Ultimate et, au niveau de la navigation, il utilise soit mega-menu soit off-canvas, soit les deux, mais, il n'utilise pas le module menu standard Joomla.

Est-ce que vous avez aussi ces choix au niveau du template ?

Pascal
If anything can go wrong, it will.
https://www.conseilgouz.com/en

corentin51
Joomla! Apprentice
Joomla! Apprentice
Posts: 29
Joined: Mon Jan 21, 2019 4:53 pm

Re: Nom de l'utilisateur en tant que titre de menu

Post by corentin51 » Mon Feb 04, 2019 3:47 pm

Oui effectivement, j'ai choisi l'option "Mega menu". (pour que l'icône "hamburger" s'affiche uniquement sur mobile).
(J'ai vérifié dans la base de données, le menu Profil est bien de type Component.)

User avatar
pmleconte
Joomla! Explorer
Joomla! Explorer
Posts: 351
Joined: Fri Mar 17, 2017 12:55 pm
Location: France

Re: Nom de l'utilisateur en tant que titre de menu

Post by pmleconte » Mon Feb 04, 2019 4:18 pm

Le problème est qu'il s'agit d'un menu spécifique Helix qui utilise sa propre logique.

Dans le cas d'Helix Ultimate, c'est géré par le fichier menu.php dans le répertoire plugin/system/helixutilimate/core/classes. J'ai réussi à modifier le fichier et cela fonctionne comme prévu, cependant, il s'agit d'un fichier Helix qui sera remis à jour à chaque mise à jour Helix.

Je n'ai pas trouvé de moyen de faire en sorte que la modification soit permanente (comme celle qui était proposée en passant par une surcharge).

Je regarde si je trouve une solution.

Pascal
If anything can go wrong, it will.
https://www.conseilgouz.com/en

User avatar
pmleconte
Joomla! Explorer
Joomla! Explorer
Posts: 351
Joined: Fri Mar 17, 2017 12:55 pm
Location: France

Re: Nom de l'utilisateur en tant que titre de menu

Post by pmleconte » Mon Feb 04, 2019 7:07 pm

Bonsoir,

Avec Helix Ultimate, il est possible d'utiliser des "predefined headers". Ils sont dans un répertoire templates/shaper_helixultimate/header. Il s'agit de répertoires style-1, style2. Il est alors possible de copier un de ces répertoires et de le renommer en style-perso par exemple, puis de faire les adaptations nécessaires.

Je n'ai pas encore trouvé si cela s'applique à Helix 3.

Pascal
If anything can go wrong, it will.
https://www.conseilgouz.com/en

corentin51
Joomla! Apprentice
Joomla! Apprentice
Posts: 29
Joined: Mon Jan 21, 2019 4:53 pm

Re: Nom de l'utilisateur en tant que titre de menu

Post by corentin51 » Tue Feb 05, 2019 8:08 am

Bonjour,

Avec Helix3 je n'ai pas de répertoire correspondant dans templates/

corentin51
Joomla! Apprentice
Joomla! Apprentice
Posts: 29
Joined: Mon Jan 21, 2019 4:53 pm

Re: Nom de l'utilisateur en tant que titre de menu

Post by corentin51 » Tue Feb 05, 2019 10:48 am

J'ai trouvé un fichier componentarea.php dans le dossier helix3. Voici son contenu :
\plugins\system\helix3\layouts\frontend\componentarea.php

Code: Select all

 <?php
/**
* @package Helix3 Framework
* @author JoomShaper http://www.joomshaper.com
* @copyright Copyright (c) 2010 - 2017 JoomShaper
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPLv2 or Later
*/
defined('_JEXEC') or die('Restricted Access');

//Helix3
helix3::addLess('frontend-edit', 'frontend-edit');
helix3::addJS('frontend-edit.js');

$data = $displayData;

$output ='';

$output .= '<div id="sp-component" class="' . $data->className . '">';

$output .= '<div class="sp-column ' . ($data->settings->custom_class) . '">';
$output .= '<jdoc:include type="message" />';
$output .= '<jdoc:include type="component" />';
$output .= '</div>';

$output .= '</div>';


echo $output;

J'ai essayé de remplacer le contenu par votre code, sans succés de nombreuses erreurs s'affiche à l'écran. Peut être une modification de se fichier pourrait réponde à mon sujet ?

User avatar
pmleconte
Joomla! Explorer
Joomla! Explorer
Posts: 351
Joined: Fri Mar 17, 2017 12:55 pm
Location: France

Re: Nom de l'utilisateur en tant que titre de menu

Post by pmleconte » Tue Feb 05, 2019 1:01 pm

Je viens de retrouver un template sous helix 3.

Le fichier à modifier est plugins/system/core/classes/menu.php où vous devriez retrouver la zone $item->title (chez moi c'est en ligne 119). C'est ce fichier qu'il conviendrait de modifier.

Cependant, comme écrit précédemment, votre modification sera effacée à chaque mise à jour Helix.

Je n'ai pas trouvé de moyen de le faire "proprement" en helix 3, pour l'instant.

Pascal
If anything can go wrong, it will.
https://www.conseilgouz.com/en

corentin51
Joomla! Apprentice
Joomla! Apprentice
Posts: 29
Joined: Mon Jan 21, 2019 4:53 pm

Re: Nom de l'utilisateur en tant que titre de menu

Post by corentin51 » Tue Feb 05, 2019 1:13 pm

D'accord merci pour la précision effectivement c'est ce fichier qu'il faut modifier.(juste vous avez oubliez de mettre plugins/system/helix3/ dans le chemin du fichier.)
Je test des modifications en intégrer votre code, pour l'instant sans succès mais des changements apparaissent ce qui confirme que je modifie bien le bon fichier.

User avatar
pmleconte
Joomla! Explorer
Joomla! Explorer
Posts: 351
Joined: Fri Mar 17, 2017 12:55 pm
Location: France

Re: Nom de l'utilisateur en tant que titre de menu

Post by pmleconte » Tue Feb 05, 2019 1:25 pm

Je viens de faire un test et cela semble fonctionner avec le code suivant:

Code: Select all

<?php
/**
* @package Helix3 Framework
* @author JoomShaper http://www.joomshaper.com
* @copyright Copyright (c) 2010 - 2018 JoomShaper
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPLv2 or Later
*/

//no direct accees
defined ('_JEXEC') or die ('resticted aceess');
// ------------- Recup informations utilisateur --------------------//
use Joomla\CMS\Factory;
// ------------- Recup informations utilisateur --------------------//
class Helix3Menu {

	protected $_items = array();
	protected $active = 0;
	protected $active_tree = array();
	protected $menu = '';
	public $_params 	= null;
	public $menuname	= 'mainmenu';

	function __construct($class = '', $name = ''){
		$this->app = JFactory::getApplication();
		$this->template = $this->app->getTemplate(true);
		$this->_params = $this->template->params;
		$this->extraclass = $class;
		if($name) {
			$this->menuname = $name;
		} else {
			$this->menuname = $this->_params->get('menu');
		}
		$this->initMenu();
		$this->render();
	}

	public function initMenu(){
		$app 	= JFactory::getApplication();
		$menu  	= $app->getMenu('site');

		$attributes 	= array('menutype');
		$menu_name     	= array($this->menuname);

		$items 			= $menu->getItems($attributes, $menu_name);
		$active_item 	= ($menu->getActive()) ? $menu->getActive() : $menu->getDefault();

		$this->active   	= $active_item ? $active_item->id : 0;
		$this->active_tree 	= $active_item->tree;

		foreach ( $items as &$item ) {
			if($item->level >= 2 && !isset($this->_items[$item->parent_id])){
				continue;
			}

			$parent                           = isset($this->children[$item->parent_id]) ? $this->children[$item->parent_id] : array();
			$parent[]                         = $item;
			$this->children[$item->parent_id] = $parent;
			$this->_items[$item->id]          = $item;
		}
// ------------- Recup informations utilisateur --------------------//
$user = Factory::getUser();
/*------------------------------*/
		foreach ($items as &$item) {

			$class = '';
			if ($item->id == $this->active) {
				$class .= ' current-item';
			}

			if (in_array($item->id, $this->active_tree)) {
				$class .= ' active';
			}elseif ($item->type == 'alias') {
				$aliasToId = $item->params->get('aliasoptions');
				if (count($this->active_tree) > 0 && $aliasToId == $this->active_tree[count($this->active_tree) - 1]) {
					$class .= ' active';
				} elseif (in_array($aliasToId, $this->active_tree)) {
					$class .= ' alias-parent-active';
				}
			}

			$item->class   = $class;
			$item->dropdown =0;
			if (isset($this->children[$item->id])) {
				$item->dropdown = 1;
			}
			$item->megamenu = ($item->params->get('megamenu')) ? $item->params->get('megamenu') : 0;
			$item->flink 		= $item->link;

			switch ($item->type) {
				case 'separator':
				case 'heading':
				// No further action needed.
				continue;

				case 'url':
				if ((strpos($item->link, 'index.php?') === 0) && (strpos($item->link, 'Itemid=') === false)) {
					$item->flink = $item->link . '&Itemid=' . $item->id;
				}
				break;

				case 'alias':
				$item->flink = 'index.php?Itemid=' . $item->params->get('aliasoptions');
				break;

				default:
				$router = JSite::getRouter();
				if ($router->getMode() == JROUTER_MODE_SEF) {
					$item->flink = 'index.php?Itemid=' . $item->id;
				} else {
					$item->flink .= '&Itemid=' . $item->id;
				}
				break;
			}

			if (strcasecmp(substr($item->flink, 0, 4), 'http') && (strpos($item->flink, 'index.php?') !== false)) {
				$item->flink = JRoute::_($item->flink, true, $item->params->get('secure'));
			} else {
				$item->flink = JRoute::_($item->flink);
			}

			// We prevent the double encoding because for some reason the $item is shared for menu modules and we get double encoding
			// when the cause of that is found the argument should be removed

// Surcharge pour afficher nom utilisateur au lieu de Profil dans le Menu
// ----------------------------Attention au nom du menu-------------------------
if (($item->title == "Profil") && ($user->id)) {
			$item->title = htmlspecialchars($user->get("name"), ENT_COMPAT, 'UTF-8', false);
} else {
			$item->title = htmlspecialchars($item->title, ENT_COMPAT, 'UTF-8', false);
}
//--------------------------------------------------------------------------------------- 
			
			$item->anchor_css   = htmlspecialchars($item->params->get('menu-anchor_css', ''), ENT_COMPAT, 'UTF-8', false);
			$item->anchor_title = htmlspecialchars($item->params->get('menu-anchor_title', ''), ENT_COMPAT, 'UTF-8', false);
			$item->menu_image   = $item->params->get('menu_image', '') ? htmlspecialchars($item->params->get('menu_image', ''), ENT_COMPAT, 'UTF-8', false) : '';
		}
	}

	public function render()
	{
		$this->menu = '';
		$keys = array_keys($this->_items);

		if (count($keys)) {
			$this->navigation(null,$keys[0]);
		}
		echo $this->menu;
	}

	public function navigation($pitem, $start = 0, $end = 0, $class = '')
	{
		if ( $start > 0 ) {
			if (!isset($this->_items[$start]))
			return;
			$pid     = $this->_items[$start]->parent_id;
			$items   = array();
			$started = false;

			foreach ($this->children[$pid] as $item) {
				if ($started) {
					if ($item->id == $end)
					break;
					$items[] = $item;
				} else {
					if ($item->id == $start) {
						$started = true;
						$items[] = $item;
					}
				}
			}
			if (!count($items))
			return;
		}else if( $start === 0 ){
			$pid = $pitem->id;
			if (!isset($this->children[$pid]))
			return;
			$items = $this->children[$pid];
		}else{
			return;
		}

		//Parent class
		if($pid==1) {

			if($this->_params->get('menu_animation') != 'none') {
				$animation = ' ' . $this->_params->get('menu_animation');
			} else {
				$animation = '';
			}

			$class = 'sp-megamenu-parent' . $animation;

			if($this->extraclass) $class = $class . ' ' . $this->extraclass;

			$this->menu .= $this->start_lvl($class);
		} else {
			$this->menu .= $this->start_lvl($class);
		}


		foreach ($items as $item) {
			$this->getItem($item);
		}

		$this->menu .= $this->end_lvl();
	}

	private function getItem($item) {

		$this->menu .= $this->start_el(array('item' => $item));
		$this->menu .= $this->item($item); // get item url

		if ( $item->megamenu ) {
			$this->mega($item);
		} else if ( $item->dropdown ) {
			$this->dropdown( $item );
		}
		else if ( ( $item->parent_id == 1 ) && ($item->megamenu == 0 ))
		{
			$menulayout = json_decode($this->_items[$item->id]->params->get('menulayout'));

			if ($menulayout) {
				$layout = $menulayout->layout;
				$attr 	= $layout[0]->attr;

				if ( $attr[0]->moduleId !== '' ) {
					$this->mega($item);
				}
			}

		}

		$this->menu .= $this->end_el();
	}

	private function dropdown($item) {
		$items     = isset($this->children[$item->id]) ? $this->children[$item->id] : array();
		$firstitem = count($items) ? $items[0]->id : 0;

		//Dropdown
		$class = ($item->level==1) ? 'sp-dropdown sp-dropdown-main' : 'sp-dropdown sp-dropdown-sub';

		$dropdown_width = $this->_params->get('dropdown_width');

		if(!$dropdown_width) {
			$dropdown_width = 240;
		}

		$dropdown_style = 'width: '. $dropdown_width .'px;';

		$layout = json_decode($this->_items[$item->id]->params->get('menulayout'));
		$sub_alignment = $this->_items[$item->id]->params->get('dropdown_position', 'right');

		if(isset($layout->menuAlign) && $layout->menuAlign) {
			$alignment = $layout->menuAlign;
		} else {
			$alignment = 'right';
		}

		if($alignment=='center') {
			$dropdown_style .= 'left: -'. ($dropdown_width/2) .'px;';
		} else if( $sub_alignment == 'left' ) {
			$dropdown_style .= 'left: -'. $dropdown_width .'px;';
		}

		$this->menu .= '<div class="' . $class . ' sp-menu-'. $alignment .'" style="' . $dropdown_style . '">';
		$this->menu .= '<div class="sp-dropdown-inner">';
		$this->navigation($item, $firstitem, 0,  'sp-dropdown-items');

		$mega_json = $item->params->get('menulayout');
		if ($mega_json)
		{
			$mega = json_decode($mega_json);
			$layout = $mega->layout;

			$layout = $layout[0];
			$col = $layout->attr[0];
			$mod_ids = ($col->moduleId)? explode(',', $col->moduleId):array();

			if (count($mod_ids))
			{
				foreach ($mod_ids as $mod_id)
				{
					$this->menu .= $this->load_module($mod_id);
				}
			}
		}

		$this->menu .= '</div>';
		$this->menu .= '</div>';
	}

	private function mega($item)
	{
		$items     = isset($this->children[$item->id]) ? $this->children[$item->id] : array();
		$firstitem = count($items) ? $items[0]->id : 0;

		$mega_json = $item->params->get('menulayout');
		$mega = json_decode($mega_json);
		$layout = $mega->layout;

		$mega_style = 'width: '. $mega->width .'px;';

		if($mega->menuAlign=='center') {
			$mega_style .= 'left: -' . ($mega->width/2) . 'px;';
		}

		if($mega->menuAlign=='full') {
			$mega_style = '';
			$mega->menuAlign = $mega->menuAlign . ' container';
		}

		$this->menu .='<div class="sp-dropdown sp-dropdown-main sp-dropdown-mega sp-menu-'. $mega->menuAlign .'" style="' . $mega_style . '">';
		$this->menu .='<div class="sp-dropdown-inner">';
		foreach ($layout as $row)
		{

			$this->menu .='<div class="row">';
			foreach ($row->attr as $col)
			{
				$this->menu .='<div class="col-sm-'.$col->colGrid.'">';

				if (count($items))
				{
					$item_ids = ($col->menuParentId)? explode(',', $col->menuParentId):array();

					if (count($item_ids))
					{
						$this->menu .= $this->start_lvl('sp-mega-group');

						foreach ($item_ids as $item_id)
						{
							if (!empty($this->_items[$item_id]))
							{
								$item 	= $this->_items[$item_id];
								$items  = isset($this->children[$item_id]) ? $this->children[$item_id] : array();

								$firstitem = count($items) ? $items[0]->id : 0;

								$this->menu .= $this->start_el(array('item' => $item));

								//Mega Group Title
								if(isset($this->children[$item_id])) {
									$this->menu .= $this->item($item, 'sp-group-title');
								} else {
									$this->menu .= $this->item($item);
								}
								if ($firstitem) {
									$this->navigation(null, $firstitem, 0, 'sp-mega-group-child sp-dropdown-items');
								}

								$this->menu .= $this->end_el();
							}
						}

						$this->menu .= $this->end_lvl();
					}

				}

				$mod_ids = ($col->moduleId)? explode(',', $col->moduleId):array();

				if (count($mod_ids))
				{
					foreach ($mod_ids as $mod_id)
					{
						$this->menu .= $this->load_module($mod_id);
					}
				}

				$this->menu .='</div>';
			}
			$this->menu .='</div>';
		}

		$this->menu .='</div>';
		$this->menu .='</div>';
	}

	private function start_lvl($cls = '')
	{
		$class = trim($cls);
		return '<ul class="'.$class.'">';
	}

	private function end_lvl(){

		return '</ul>';
	}

	private function start_el( $args = array() )
	{
		$item 	= $args['item'];
		$class 	= 'sp-menu-item';

		if( !empty( $this->children[$item->id] ) ) {
			$class .= ' sp-has-child';
		} else if( isset( $item->megamenu ) && ( $item->megamenu ) ) {
			$class .= ' sp-has-child';
		}
		else if ( ( $item->parent_id == 1 ) && ( $item->megamenu == 0 ) )
		{
			$menulayout = json_decode( $this->_items[$item->id]->params->get('menulayout') );

			if ( $menulayout ) {
				$layout = $menulayout->layout;
				$attr 	= $layout[0]->attr;

				if ( $attr[0]->moduleId !== '' ) {
					$class .= ' sp-has-child';
				}
			}
		}

		if( $custom_class = $item->params->get( 'class' ) ) {
			$class .= ' ' . $custom_class;
		}

		$class .= $item->class;

		return '<li class="'.$class.'">';
	}

	private function end_el(){
		return '</li>';
	}

	private function item($item, $extra_class=''){
		$class = $extra_class;
		$title = $item->anchor_title ? 'title="' . $item->anchor_title . '" ' : '';

		$class .= ($item->anchor_css && $class) ? ' ' . $item->anchor_css : $item->anchor_css;
		$class = ($class) ? 'class="' . $class . '"' : '';

		if ($item->menu_image)
		{
			$item->params->get('menu_text', 1) ?
			$linktitle = '<img src="' . $item->menu_image . '" alt="' . $item->title . '" /><span class="image-title">' . $item->title . '</span> ' :
			$linktitle = '<img src="' . $item->menu_image . '" alt="' . $item->title . '" />';
		}
		else
		{
			$linktitle = $item->title;
		}


		//Hide Link Title
		if(!$showmenutitle = $item->params->get('showmenutitle', 1)) {
			$linktitle = '';
		}

		//Add Menu Icon
		if($icon = $item->params->get('icon')) {
			if($showmenutitle) {
				$linktitle = '<i class="fa ' . $icon . '"></i> ' . $linktitle;
			} else {
				$linktitle = '<i class="fa ' . $icon . '"></i>';
			}
		}

		$flink = $item->flink;
		$flink = str_replace('&amp;', '&', JFilterOutput::ampReplace(htmlspecialchars($flink)));

		$output = '';
		$options ='';
		if ($item->params->get('menu_show', 1) != 0) {
			switch ($item->browserNav) {
				default:
				case 0:
					$link_rel = ($item->params->get('menu-anchor_rel', '')) ? 'rel="' . $item->params->get('menu-anchor_rel') . '"' : '' ;
					$flink = ($flink) ? $flink : 'javascript:void(0);' ;
					$output .= '<a '.$class.' href="'. $flink .'" '. $link_rel .' '.$title.'>'.$linktitle.'</a>';
				break;
				case 1:
					$link_rel = ($item->params->get('menu-anchor_rel', '') == 'nofollow') ? 'noopener noreferrer nofollow' : 'noopener noreferrer';
					$output .= '<a '. $class .' href="'. $flink .'" rel="'. $link_rel .'" target="_blank" '. $title .'>'. $linktitle .'</a>';
				break;
				case 2:
					$options .= 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,' . $item->params->get('window_open');
					$output .= '<a '. $class .' href="'. $flink .'" onclick="window.open(this.href,\'targetWindow\',\''. $options. '\');return false;" '. $title .'>'. $linktitle .'</a>';
				break;
			}
		}

		return $output;

	}

	//Load Module by id or position
	private function load_module($mod)
	{
		$app		= JFactory::getApplication();
		$user		= JFactory::getUser();
		$groups		= implode(',', $user->getAuthorisedViewLevels());
		$lang 		= JFactory::getLanguage()->getTag();
		$clientId 	= (int) $app->getClientId();

		$db	= JFactory::getDbo();
		$query = $db->getQuery(true);
		$query->select('id, title, module, position, content, showtitle, params');
		$query->from('#__modules AS m');
		$query->where('m.published = 1');

		if (is_numeric($mod)) {
			$query->where('m.id = ' . $mod);
		} else {
			$query->where('m.position = "' . $mod . '"');
		}

		$date = JFactory::getDate();
		$now = $date->toSql();
		$nullDate = $db->getNullDate();
		$query->where('(m.publish_up = '.$db->Quote($nullDate).' OR m.publish_up <= '.$db->Quote($now).')');
		$query->where('(m.publish_down = '.$db->Quote($nullDate).' OR m.publish_down >= '.$db->Quote($now).')');

		$query->where('m.access IN ('.$groups.')');
		$query->where('m.client_id = '. $clientId);

		// Filter by language
		if ($app->isSite() && $app->getLanguageFilter()) {
			$query->where('m.language IN (' . $db->Quote($lang) . ',' . $db->Quote('*') . ')');
		}

		$query->order('position, ordering');

		// Set the query
		$db->setQuery($query);

		$modules = $db->loadObjectList();

		if (!$modules) return null;

		$options = array('style' => 'sp_xhtml');
		$output = '';
		ob_start();
		foreach ($modules as $module) {
			$file				= $module->module;
			$custom				= substr($file, 0, 4) == 'mod_' ?  0 : 1;
			$module->user		= $custom;
			$module->name		= $custom ? $module->title : substr($file, 4);
			$module->style		= null;
			$module->position	= strtolower($module->position);
			$clean[$module->id]	= $module;
			echo JModuleHelper::renderModule($module, $options);
		}
		$output = ob_get_clean();
		return $output;
	}
}
Cependant, n'oubliez pas qu'il s'agit dune modification temporaire qui sera à refaire à chaque mise à jour tant que l'on n'a pas trouvé le moyen de la "pérenniser".

Pascal
If anything can go wrong, it will.
https://www.conseilgouz.com/en

corentin51
Joomla! Apprentice
Joomla! Apprentice
Posts: 29
Joined: Mon Jan 21, 2019 4:53 pm

Re: Nom de l'utilisateur en tant que titre de menu

Post by corentin51 » Tue Feb 05, 2019 1:41 pm

Ça fonctionne!

Effectivement si comme vous le dites, ça disparaîtra après chaque mise à jour cela peut poser problème.
Mais bon pour le moment ce n'est pas grave, je vais voir avec le futur propriétaire du site et on verra.

Un grand merci à vous Pascal pour votre patience et votre aide!
J’espère que ce post aidera d'autres personnes :)

-Corentin


Post Reply

Return to “3.x - Questions générales, nouvel utilisateur”