Forum ZitePLUS

La communauté des utilisateurs du CMS ZitePLUS

Vous n'êtes pas identifié(e).

#51 16/02/2010 18:21:22

davyk
Membre
Inscription : 09/09/2008
Messages : 819
Site Web

Re : module pour menu hierarchique

j'ai bien essayé évidement mais il semple (semple? a heu non, semble) que c'est codé de la même manière.
standard:
<a href="'.(($s[cPageType]&pgbitType)!=5?$base.$f:$s[cPageIdent].(isset($s[cPageOpt]['target'])?'" target="'.$s[cPageOpt]['target']:'')).'">'.$s[cPageTitre].'</a>

déroulé:
<a href="'.(($s[cPageType]&pgbitType)!=5?$base.$f:$s[cPageIdent].(isset($s[cPageOpt]['target'])?'" target="'.$s[cPageOpt]['target']:'')).'">'.$s[cPageTitre].'</a>

standard, le premier:
<a href="'.$base.($rewrite ? $s[cPageIdent].'.html' : $s[cPageIdent]).'" '.((($s[cPageType]&pgbitType)==5)&&(isset($s[cPageOpt]['target']))?'target="_blank"':'').'>

tous "fonctionnent" dans le sens où, si l'on renseigne un nom à la page (dans la source) on a un lien du type perma=ma-page.
si on enlève le nom, on a un lien du type perma= (comme avant) mais qui fonctionne, lui

donc, pour l'instant les cocos, je vais vous poster ce que j'ai mais ATTENTION AU DUPLICATE CONTENT!
en ce qui me concerne, je vais créer mon menu à la main, à l'ancienne, roulé sous les aisselles, bien sûr

Dernière modification par davyk (16/02/2010 18:35:28)


Quand Chuck Norris utilise Windows, il ne plante pas.
ChuckNorrisN'aimePasWindows

Hors ligne

#52 16/02/2010 18:39:45

davyk
Membre
Inscription : 09/09/2008
Messages : 819
Site Web

Re : module pour menu hierarchique

pour que ce soit simple, éditez xmenu.php, remplacez la fonction dojob() de doekia par celle-ci:

function dojob()
	{
	  parent::dojob();
	  $xmnu = '';
	  $isadmin = (int)$_SESSION['zite_admin']>0;
	  $rewrite = self::$cms->rewrite && !$isadmin;
	  $uri     = dirname($_SERVER['REQUEST_URI']);
	  $uri    .= ($uri[strlen($uri)-1]!='/')?'/':'';
	  $uri    .= $rewrite ? '' : self::$cms->basep;
	  $sufx    = $rewrite ? '.html' : '';


	
	  for($count=0, reset(self::$cms->struct), $level=0; list($key, $pg) = each(self::$cms->struct); $count++)
	  {
		$base = self::$cms->rewrite ? ($isadmin ? self::$cms->basep.self::$cms->get_data('navig_admin') : (self::$cms->rewrite===2?self::$cms->config['files_index']:' ')) : self::$cms->basep;
		$f = $rewrite ? $pg[cPageIdent].'.html' : $pg[cPageIdent];
		$s = self::$cms->struct[$i];
	    $noli = '</li>';
	    $activ = (self::$cms->truepage == $key)?' xzon':'';  // Nous sommes sur cette page
	    $child = (@self::$cms->struct[$key+1][cPageRang] > @$pg[cPageRang])?' xnest':'';  // Nous avons des pages enfants - FIXME
	    if ($pg[cPageType]>pgbitType)               continue;  // La page est un panneau lateral - FIXME       à voir
	    if (!($pg[cPageOn] || $isadmin))            continue;  // La page est désactivée
	    $tgt = ((($pg[cPageType]&pgbitType)==5)&&(isset($pg[cPageOpt]['target']))?' target="_blank"':'');
	
	    if ($pg[cPageRang]!=$level) // Testons le niveau et (dés)imbriquons si besoin
	    {
	      while($level > ($pg[cPageRang]+0)) { $xmnu .=$noli.'</ul>'; $level--; }
	      while($level < ($pg[cPageRang]+0)) { $xmnu .='<ul class="xzul'.++$level.'">'; $noli = ''; }
	    }
	    if (self::$cms->isPageAuth($key))
	    {
$xmnu .= $noli.'<li class="xzli'.$level.$activ.$child.'"><a class="xzli'.$level.$activ.$child.'" href="'.$base.($rewrite ? $pg[cPageIdent].'.html' : $pg[cPageIdent]).'" '.((($pg[cPageType]&pgbitType)==5)&&(isset($pg[cPageOpt]['target']))?'target="_blank"':'').'>'.$pg[cPageTitre].'</a>';
	    }
	  }
	  for($noli = '</li>';$level > 0; $level--) { $xmnu .=$noli.'</ul>'; $noli=''; }
	  self::$cms->content['xmenu']=$xmnu;
	}

essayez aussi le rewriting, sur un malentendu, ça peut marcher
++ vYk

Dernière modification par davyk (16/02/2010 18:45:51)


Quand Chuck Norris utilise Windows, il ne plante pas.
ChuckNorrisN'aimePasWindows

Hors ligne

#53 16/02/2010 18:53:38

jpg
Administrateurs
Inscription : 19/11/2008
Messages : 2 086
Site Web

Re : module pour menu hierarchique

davyk a écrit :

j'ai bien essayé évidement mais il semple (semple? a heu non, semble) que c'est codé de la même manière.

Tu as lu trop vite le code du menu standard wink

la, j'ai pas le temps ... mais je regarderais le code du module xmenu de doekia pour voir comment le modifier pour appliquer la même gestion que le menu standard de ziteplus

a+
jean-paul

Hors ligne

#54 16/02/2010 19:21:45

davyk
Membre
Inscription : 09/09/2008
Messages : 819
Site Web

Re : module pour menu hierarchique

jpg a écrit :
davyk a écrit :

j'ai bien essayé évidement mais il semple (semple? a heu non, semble) que c'est codé de la même manière.

Tu as lu trop vite le code du menu standard wink

la, j'ai pas le temps ... mais je regarderais le code du module xmenu de doekia pour voir comment le modifier pour appliquer la même gestion que le menu standard de ziteplus

a+
jean-paul

en fin une bonne nouvelle, ça c'est génial wink !


Quand Chuck Norris utilise Windows, il ne plante pas.
ChuckNorrisN'aimePasWindows

Hors ligne

#55 16/02/2010 20:16:39

davyk
Membre
Inscription : 09/09/2008
Messages : 819
Site Web

Re : module pour menu hierarchique

par contre tu crois que ça serait possible de créer une arborescence "standard" genre:
<ul>
    <li>
    <li>
       <ul>
          <li>
          <li>
          <li>
       </ul>
    <li>
    <li>
</ul>


Quand Chuck Norris utilise Windows, il ne plante pas.
ChuckNorrisN'aimePasWindows

Hors ligne

#56 17/02/2010 16:08:10

laurent39
Membre
Inscription : 21/03/2008
Messages : 148

Re : module pour menu hierarchique

Bonjour tout le monde

(d)oekia a trouvé le bug de l'index qui buggait !

il faut dans xmenu.php  :
Remplacer la ligne 44
$uri     = dirname($_SERVER['REQUEST_URI']);
par
$uri     = dirname($_SERVER['REQUEST_URI'].'x');

et là ça roule !!

A essayer pour vous si ça marche..

Merci (d)oekia !

Hors ligne

#57 17/02/2010 17:08:30

davyk
Membre
Inscription : 09/09/2008
Messages : 819
Site Web

Re : module pour menu hierarchique

en tout cas, pas pour moi (en local)

++


Quand Chuck Norris utilise Windows, il ne plante pas.
ChuckNorrisN'aimePasWindows

Hors ligne

#58 17/02/2010 20:30:28

jpg
Administrateurs
Inscription : 19/11/2008
Messages : 2 086
Site Web

Re : module pour menu hierarchique

davyk a écrit :

en tout cas, pas pour moi (en local)

++

Peut-être avec ce code.
la modification est en ligne 66, la ligne:

	      	$xmnu .= $noli.'<li class="xzli'.$level.$activ.$child.'"><a class="xzli'.$level.$activ.$child.'" href="'.($count?($uri.$pg[cPageIdent].((($pg[cPageType]&pgbitType)==5)?'':$sufx)):preg_replace('/\/[^\/]*$/','',$_SERVER['REQUEST_URI']).'/').'"'.$tgt.'>'.$pg[cPageTitre].'</a>';

Soit le code complet du module en version 1.7:

<?php
/*
 * module: xmenu - extended menu
 * Extra Menu for Ziteplus
 * 
 * Ce module permet la génération de menu hierarchique
 * dans ziteplus
 *
 * Copyright - (d)oekia 2009
 * Licence : CeCILL-B, http://www.cecill.info
  v1.6  14/10/2009  FIXUP: href de la page d'acceuil http://serveur/
  v1.6  14/10/2009  FIXUP: pas de '.html' pour cPageTyp == 5
  v1.6  14/10/2009  FIXUP: prise en charge du target=_blank 
  v1.5  09/10/2009  FIXUP: manque un </li> à la fin du menu
  v1.5  09/10/2009  FIXUP: manque un / dans l'url quand l'install est en sous-répetoire
  v1.5  09/10/2009  FIXUP: 1ere page parent de toutes les autres (=>? bug zite)
  v1.0  08/10/2009  version initiale

Copyright Jean-Paul GIAUSSRAND 2009
Site: http://www.giausserand.fr/index.php?perma=ziteplus
Licence : CeCILL-B, http://www.cecill.info
  v1.7  17/02/2010  Correction adressage 1ère page (suppression ?perma=)
  v1.4  09/10/2009  simplification du code (identification des pages enfants)
  v1.3  09/10/2009  prise en compte des droits sur les pages
  v1.2  08/10/2009  Adaptation pour meilleure intégration dans ziteplus
  v1.1  08/10/2009  Passage du module en code objet
*/

define('XMENU_LOCATOR', '$zite->builder();');
define('XMENU_ENGINE','$zite->page_module(\'xmenu\');');

class Txmenu extends Tmodule {

  function xmenu_isOn(&$indexfile) {
    $indexfile = file_get_contents(self::$cms->ipath.'/'.self::$cms->config['files_index']);
    return strpos($indexfile,XMENU_ENGINE) !== false;
  }

	function dojob()
	{
	  parent::dojob();
	  $xmnu = '';
	  $isadmin = (int)$_SESSION['zite_admin']>0;
	  $rewrite = self::$cms->rewrite && !$isadmin;
	  $uri     = dirname($_SERVER['REQUEST_URI']);
	  $uri    .= ($uri[strlen($uri)-1]!='/')?'/':'';
	  $uri    .= $rewrite ? '' : self::$cms->basep;
	  $sufx    = $rewrite ? '.html' : '';
	
	  for( $count = 0, reset(self::$cms->struct), $level=0; list($key, $pg) = each(self::$cms->struct); $count++)
	  {
	    $noli = '</li>';
	    $activ = (self::$cms->truepage == $key)?' xzon':'';  // Nous sommes sur cette page
	    $child = (@self::$cms->struct[$key+1][cPageRang] > @$pg[cPageRang])?' xnest':'';  // Nous avons des pages enfants - FIXME
	    if ($pg[cPageType]>pgbitType)               continue;  // La page est un panneau lateral - FIXME       à voir
	    if (!($pg[cPageOn] || $isadmin))            continue;  // La page est désactivée
	    $tgt = ((($pg[cPageType]&pgbitType)==5)&&(isset($pg[cPageOpt]['target']))?' target="_blank"':'');
	
	    if ($pg[cPageRang]!=$level) // Testons le niveau et (dés)imbriquons si besoin
	    {
	      while($level > ($pg[cPageRang]+0)) { $xmnu .=$noli.'</ul>'; $level--; }
	      while($level < ($pg[cPageRang]+0)) { $xmnu .='<ul class="xzul'.++$level.'">'; $noli = ''; }
	    }
	    if (self::$cms->isPageAuth($key))
			{
	      	$xmnu .= $noli.'<li class="xzli'.$level.$activ.$child.'"><a class="xzli'.$level.$activ.$child.'" href="'.($count?($uri.$pg[cPageIdent].((($pg[cPageType]&pgbitType)==5)?'':$sufx)):preg_replace('/\/[^\/]*$/','',$_SERVER['REQUEST_URI']).'/').'"'.$tgt.'>'.$pg[cPageTitre].'</a>';
	    }
	  }
	  for($noli = '</li>';$level > 0; $level--) { $xmnu .=$noli.'</ul>'; $noli=''; }
	  self::$cms->content['xmenu']=$xmnu;
	}

  function On()  {
    parent::On();
    if (!$this->xmenu_isOn($indexfile)) {
      $indexfile=str_replace(XMENU_LOCATOR,XMENU_LOCATOR.XMENU_ENGINE,$indexfile);
      file_put_contents(self::$cms->ipath.'/'.self::$cms->config['files_index'],$indexfile);
    }
  }

  function Off() {
    parent::off();
    if ($this->xmenu_isOn($indexfile)) {
      $indexfile=str_replace(XMENU_ENGINE,'',$indexfile);
      file_put_contents(self::$cms->ipath.'/'.self::$cms->config['files_index'],$indexfile);
    }
  }
}
?>

a+
jean-paul

Hors ligne

#59 17/02/2010 22:21:41

davyk
Membre
Inscription : 09/09/2008
Messages : 819
Site Web

Re : module pour menu hierarchique

bonne nouvelle: pour la page d'accueil, ça fonctionne
mauvaise nouvelle: pour toutes les autres pages, on recule d'un répertoire

sad

un mix des 2? smile

Dernière modification par davyk (17/02/2010 22:22:09)


Quand Chuck Norris utilise Windows, il ne plante pas.
ChuckNorrisN'aimePasWindows

Hors ligne

#60 17/02/2010 22:32:41

davyk
Membre
Inscription : 09/09/2008
Messages : 819
Site Web

Re : module pour menu hierarchique

Bon j'ai trouvé (en fin pas vraiment puisque j'ai effectivement fait un mix des 2
(d'où le copywrite tout le monde peut le faire wink)

<?php
/*
 * module: xmenu - extended menu
 * Extra Menu for Ziteplus
 * 
 * Ce module permet la génération de menu hierarchique
 * dans ziteplus
 *
 * Copyright - (d)oekia 2009
 * Licence : CeCILL-B, http://www.cecill.info
  v1.6  14/10/2009  FIXUP: href de la page d'acceuil http://serveur/
  v1.6  14/10/2009  FIXUP: pas de '.html' pour cPageTyp == 5
  v1.6  14/10/2009  FIXUP: prise en charge du target=_blank 
  v1.5  09/10/2009  FIXUP: manque un </li> à la fin du menu
  v1.5  09/10/2009  FIXUP: manque un / dans l'url quand l'install est en sous-répetoire
  v1.5  09/10/2009  FIXUP: 1ere page parent de toutes les autres (=>? bug zite)
  v1.0  08/10/2009  version initiale

Copyright Jean-Paul GIAUSSRAND 2009
Site: http://www.giausserand.fr/index.php?perma=ziteplus
Licence : CeCILL-B, http://www.cecill.info
  v1.7  17/02/2010  Correction adressage 1ère page (suppression ?perma=)
  v1.4  09/10/2009  simplification du code (identification des pages enfants)
  v1.3  09/10/2009  prise en compte des droits sur les pages
  v1.2  08/10/2009  Adaptation pour meilleure intégration dans ziteplus
  v1.1  08/10/2009  Passage du module en code objet

Copyright tout le monde peut le faire 2010
Licence : CeCILL-B, http://www.cecill.info
 v1.8 17/02/2010  Correction adressage 1ère page (suppression ?perma=)qui fonctionne, en fin j'espère
*/

define('XMENU_LOCATOR', '$zite->builder();');
define('XMENU_ENGINE','$zite->page_module(\'xmenu\');');

class Txmenu extends Tmodule {

  function xmenu_isOn(&$indexfile) {
    $indexfile = file_get_contents(self::$cms->ipath.'/'.self::$cms->config['files_index']);
    return strpos($indexfile,XMENU_ENGINE) !== false;
  }

    function dojob()
    {
      parent::dojob();
      $xmnu = '';
      $isadmin = (int)$_SESSION['zite_admin']>0;
      $rewrite = self::$cms->rewrite && !$isadmin;
      $uri     = dirname($_SERVER['REQUEST_URI'].'x');
      $uri    .= ($uri[strlen($uri)-1]!='/')?'/':'';
      $uri    .= $rewrite ? '' : self::$cms->basep;
      $sufx    = $rewrite ? '.html' : '';
    
      for( $count = 0, reset(self::$cms->struct), $level=0; list($key, $pg) = each(self::$cms->struct); $count++)
      {
        $noli = '</li>';
        $activ = (self::$cms->truepage == $key)?' xzon':'';  // Nous sommes sur cette page
        $child = (@self::$cms->struct[$key+1][cPageRang] > @$pg[cPageRang])?' xnest':'';  // Nous avons des pages enfants - FIXME
        if ($pg[cPageType]>pgbitType)               continue;  // La page est un panneau lateral - FIXME       à voir
        if (!($pg[cPageOn] || $isadmin))            continue;  // La page est désactivée
        $tgt = ((($pg[cPageType]&pgbitType)==5)&&(isset($pg[cPageOpt]['target']))?' target="_blank"':'');
    
        if ($pg[cPageRang]!=$level) // Testons le niveau et (dés)imbriquons si besoin
        {
          while($level > ($pg[cPageRang]+0)) { $xmnu .=$noli.'</ul>'; $level--; }
          while($level < ($pg[cPageRang]+0)) { $xmnu .='<ul class="xzul'.++$level.'">'; $noli = ''; }
        }
        if (self::$cms->isPageAuth($key))
            {
              $xmnu .= $noli.'<li class="xzli'.$level.$activ.$child.'"><a class="xzli'.$level.$activ.$child.'" href="'.($count?($uri.$pg[cPageIdent].((($pg[cPageType]&pgbitType)==5)?'':$sufx)):preg_replace('/\/[^\/]*$/','',$_SERVER['REQUEST_URI']).'/').'"'.$tgt.'>'.$pg[cPageTitre].'</a>';
        }
      }
      for($noli = '</li>';$level > 0; $level--) { $xmnu .=$noli.'</ul>'; $noli=''; }
      self::$cms->content['xmenu']=$xmnu;
    }

  function On()  {
    parent::On();
    if (!$this->xmenu_isOn($indexfile)) {
      $indexfile=str_replace(XMENU_LOCATOR,XMENU_LOCATOR.XMENU_ENGINE,$indexfile);
      file_put_contents(self::$cms->ipath.'/'.self::$cms->config['files_index'],$indexfile);
    }
  }

  function Off() {
    parent::off();
    if ($this->xmenu_isOn($indexfile)) {
      $indexfile=str_replace(XMENU_ENGINE,'',$indexfile);
      file_put_contents(self::$cms->ipath.'/'.self::$cms->config['files_index'],$indexfile);
    }
  }
}
?>

++ vYk

Dernière modification par davyk (17/02/2010 22:33:34)


Quand Chuck Norris utilise Windows, il ne plante pas.
ChuckNorrisN'aimePasWindows

Hors ligne

#61 17/02/2010 23:27:36

jpg
Administrateurs
Inscription : 19/11/2008
Messages : 2 086
Site Web

Re : module pour menu hierarchique

Si tu veux essayer cette version
Normalement elle règle les différents cas: le code de génération de l'url du menu est quasiment repris de la fonction navbuilder de ziteplus

<?php
/*
 * module: xmenu - extended menu
 * Extra Menu for Ziteplus
 * 
 * Ce module permet la génération de menu hierarchique
 * dans ziteplus
 *
 * Copyright - (d)oekia 2009
 * Licence : CeCILL-B, http://www.cecill.info
  v1.6  14/10/2009  FIXUP: href de la page d'acceuil http://serveur/
  v1.6  14/10/2009  FIXUP: pas de '.html' pour cPageTyp == 5
  v1.6  14/10/2009  FIXUP: prise en charge du target=_blank 
  v1.5  09/10/2009  FIXUP: manque un </li> à la fin du menu
  v1.5  09/10/2009  FIXUP: manque un / dans l'url quand l'install est en sous-répetoire
  v1.5  09/10/2009  FIXUP: 1ere page parent de toutes les autres (=>? bug zite)
  v1.0  08/10/2009  version initiale

Copyright Jean-Paul GIAUSSRAND 2009
Site: http://www.giausserand.fr/index.php?perma=ziteplus
Licence : CeCILL-B, http://www.cecill.info
	v1.7.1  17/02/2010  Correction adressage 1ère page (suppression ?perma=)
  v1.4  09/10/2009  simplification du code (identification des pages enfants)
  v1.3  09/10/2009  prise en compte des droits sur les pages
  v1.2  08/10/2009  Adaptation pour meilleure intégration dans ziteplus
  v1.1  08/10/2009  Passage du module en code objet
*/

define('XMENU_LOCATOR', '$zite->builder();');
define('XMENU_ENGINE','$zite->page_module(\'xmenu\');');

class Txmenu extends Tmodule {

  function xmenu_isOn(&$indexfile) {
    $indexfile = file_get_contents(self::$cms->ipath.'/'.self::$cms->config['files_index']);
    return strpos($indexfile,XMENU_ENGINE) !== false;
  }

	function dojob()
	{
	  parent::dojob();
	  $xmnu = '';
	  $isadmin = (int)$_SESSION['zite_admin']>0;
	  $rewrite = self::$cms->rewrite && !$isadmin;
		$base = self::$cms->rewrite ? ($isadmin ? self::$cms->basep.self::$cms->get_data('navig_admin') : (self::$cms->rewrite===2?self::$cms->config['files_index']:' ')) : self::$cms->basep;
	  for( $count = 0, reset(self::$cms->struct), $level=0; list($key, $pg) = each(self::$cms->struct); $count++)
	  {
	    $noli = '</li>';
	    $activ = (self::$cms->truepage == $key)?' xzon':'';  // Nous sommes sur cette page
	    $child = (@self::$cms->struct[$key+1][cPageRang] > @$pg[cPageRang])?' xnest':'';  // Nous avons des pages enfants - FIXME
	    if ($pg[cPageType]>pgbitType)               continue;  // La page est un panneau lateral - FIXME       à voir
	    if (!($pg[cPageOn] || $isadmin))            continue;  // La page est désactivée
	    $tgt = ((($pg[cPageType]&pgbitType)==5)&&(isset($pg[cPageOpt]['target']))?' target="_blank"':'');
	
	    if ($pg[cPageRang]!=$level) // Testons le niveau et (dés)imbriquons si besoin
	    {
	      while($level > ($pg[cPageRang]+0)) { $xmnu .=$noli.'</ul>'; $level--; }
	      while($level < ($pg[cPageRang]+0)) { $xmnu .='<ul class="xzul'.++$level.'">'; $noli = ''; }
	    }
	    if (self::$cms->isPageAuth($key))
			{
				$f = $rewrite ? $pg[cPageIdent].'.html' : $pg[cPageIdent];
      	$xmnu .= $noli.'<li class="xzli'.$level.$activ.$child.'"><a class="xzli'.$level.$activ.$child.'" href="'.($count?(($pg[cPageType]&pgbitType)!=5?$base.$f:$pg[cPageIdent].(isset($pg[cPageOpt]['target'])?'" target="'.$s[cPageOpt]['target']:'')):preg_replace('/\/[^\/]*$/','',$_SERVER['REQUEST_URI']).'/').'"'.$tgt.'>'.$pg[cPageTitre].'</a>';
	    }
	  }
	  for($noli = '</li>';$level > 0; $level--) { $xmnu .=$noli.'</ul>'; $noli=''; }
	  self::$cms->content['xmenu']=$xmnu;
	}

  function On()  {
    parent::On();
    if (!$this->xmenu_isOn($indexfile)) {
      $indexfile=str_replace(XMENU_LOCATOR,XMENU_LOCATOR.XMENU_ENGINE,$indexfile);
      file_put_contents(self::$cms->ipath.'/'.self::$cms->config['files_index'],$indexfile);
    }
  }

  function Off() {
    parent::off();
    if ($this->xmenu_isOn($indexfile)) {
      $indexfile=str_replace(XMENU_ENGINE,'',$indexfile);
      file_put_contents(self::$cms->ipath.'/'.self::$cms->config['files_index'],$indexfile);
    }
  }
}
?>

Hors ligne

#62 18/02/2010 22:51:30

davyk
Membre
Inscription : 09/09/2008
Messages : 819
Site Web

Re : module pour menu hierarchique

merci


Quand Chuck Norris utilise Windows, il ne plante pas.
ChuckNorrisN'aimePasWindows

Hors ligne

Pied de page des forums