Forum ZitePLUS

La communauté des utilisateurs du CMS ZitePLUS

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

#1 16/02/2014 20:59:40

Super_chemist
Membre
Inscription : 27/05/2011
Messages : 417

menu en liste déroulante

Salut à tous (et particulièrement jpg)

Je cherche à générer un menu de mon site en liste déroulante (pour un affichage sur smartphones), donc via un formulaire, et je galère pas mal car je n'ai pas trouvé dans ziteplus de moyen simple de générer une liste des pages (je sais, c'est en développement...).
Du coup je bricole à grand coups de regex dans la sortie de xmenu, mais c'est moche car comme je renvoie le formulaire à index.php, je passe par les adresses ?perma=, or xmenu me renvoie les adresses multiview ou url_rewriting selon le réglage.
Je vais me débrouiller cela dit, ce n'est pas le sujet.

Ma proposition est la suivante : est-ce envisageable de créer
- un nouveau type de menu "liste déroulante"
- et surtout une fonction $this->menu() qui prendrait en paramètre une option pour générer à la demande dans le template le type de menu voulu.

Pour ceux qui se demanderaient où je veux en venir, c'est simple : mon site a un menu horizontal avec les sous menus qui apparaissent au hover. Ca marche très bien sur ordi, mais pas du tout sur smartphone !
Je cherche donc à faire du responsive design et proposer un menu alternatif sous forme de liste déroulante pour ce type de navigateur.


Avant il fallait s'adapter à IE6, maintenant c'est pour les smartphones qu'il faut hacker nos sites... (j'ai abandonné l'idée de m'adapter aux deux !)

Adrien

Hors ligne

#2 17/02/2014 09:32:00

snypi
Moderateurs
Inscription : 11/03/2008
Messages : 1 235
Site Web

Re : menu en liste déroulante

salut
+1 pour l'idée de super chemist
et peut être que cette piste peu fonctionné pour ton projet
http://ziteplus.giausserand.fr/forum/vi … 9603#p9603

tu te retrouve avec deux menu généré 1 déroulé fixe et 1 déroulé


un zite+ associatif http://asso.gard.a.toi.free.fr
création de site internet dans le Gard et Ardèche http://www.creation-site-internet-gard.com/

Hors ligne

#3 17/02/2014 09:40:36

Super_chemist
Membre
Inscription : 27/05/2011
Messages : 417

Re : menu en liste déroulante

Effectivement, je n'avais pas pensé à modifier ziteplus.php.
La modification ne survivra pas à une mise à jour de ziteplus, mais c'est une bonne idée je vais regarder ce soir.

Merci
Adrien

Hors ligne

#4 17/02/2014 09:56:34

Stefpei
Membre
Lieu : Nantes
Inscription : 12/06/2009
Messages : 354
Site Web

Re : menu en liste déroulante

Plutot que transformer le coeur de ZitePlus, pourquoi pas faire un module (en partant du module Xmenu ?)
Le travail serai le meme, mais moins risqué pour les mises-à-jour ?


Stéphane
Webdesign AvantageWeb

Hors ligne

#5 17/02/2014 19:40:04

Super_chemist
Membre
Inscription : 27/05/2011
Messages : 417

Re : menu en liste déroulante

C'est également une possibilité. Merci à tous pour vos conseils.
A vrai dire, le but de ce message était plus de signaler à jpg un petit manque dans son bébé! A lui de voir si il souhaite le réaliser.

A+

Hors ligne

#6 18/02/2014 12:12:08

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

Re : menu en liste déroulante

Bonjour,

Super_chemist a écrit :

Salut à tous (et particulièrement jpg)

Je cherche à générer un menu de mon site en liste déroulante (pour un affichage sur smartphones), donc via un formulaire, et je galère pas mal car je n'ai pas trouvé dans ziteplus de moyen simple de générer une liste des pages (je sais, c'est en développement...).
Du coup je bricole à grand coups de regex dans la sortie de xmenu, mais c'est moche car comme je renvoie le formulaire à index.php, je passe par les adresses ?perma=, or xmenu me renvoie les adresses multiview ou url_rewriting selon le réglage.
Je vais me débrouiller cela dit, ce n'est pas le sujet.

juste pour info, c'est quoi le coup du formulaire renvoyé à index.php ?

Super_chemist a écrit :

Ma proposition est la suivante : est-ce envisageable de créer
- un nouveau type de menu "liste déroulante"

Oui, si je suis convaincu de l'utilité wink

Super_chemist a écrit :

- et surtout une fonction $this->menu() qui prendrait en paramètre une option pour générer à la demande dans le template le type de menu voulu.

J'ai une fonction makeMenu() avec divers paramètres dans la 1.0, mais il faudra que je vérifie ce qu'elle fait exactement.
Ceci étant, le but n'est pas de le mettre dans le template, mais dans un panneau, même si au final le résultat visuel est le même.

Super_chemist a écrit :

Pour ceux qui se demanderaient où je veux en venir, c'est simple : mon site a un menu horizontal avec les sous menus qui apparaissent au hover. Ca marche très bien sur ordi, mais pas du tout sur smartphone !
Je cherche donc à faire du responsive design et proposer un menu alternatif sous forme de liste déroulante pour ce type de navigateur.

Tu as une petite image de ce que tu cherches à obtenir ?

a+
Jean-Paul

Hors ligne

#7 18/02/2014 21:02:29

Super_chemist
Membre
Inscription : 27/05/2011
Messages : 417

Re : menu en liste déroulante

jpg a écrit :

juste pour info, c'est quoi le coup du formulaire renvoyé à index.php ?

Je veux un menu dans un <select>, donc je ne peux pas mettre de simples liens <a href> car <select> ne fonctionne que dans un formulaire. Donc j'avais pensé à envoyer une variable perma à index.php... Mais finalement je vais passer par un module qui intègre tout...

Super_chemist a écrit :

Tu as une petite image de ce que tu cherches à obtenir ?

Dans ma tête, oui !
Plus sérieusement, le site que je conçoit ressemble à ça sur un ordinateur : http://adrien.poreaux.perso.sfr.fr/ . Le menu passe très bien à la souris, mais en tactile, on ne peux accéder qu'aux pages de 1er niveau !
Du coup, sur un écran de téléphone, j'aimerai afficher un truc comme ça : http://adrien.poreaux.perso.sfr.fr/test_menu.htm (à tester avec une largeur de fenêtre étroite). Le menu n'est pas fonctionnel, c'est juste un bricolage pour te montrer.

Adrien

Hors ligne

#8 19/02/2014 01:00:59

Super_chemist
Membre
Inscription : 27/05/2011
Messages : 417

Re : menu en liste déroulante

Work in progress...

Hors ligne

#9 20/02/2014 23:49:15

Super_chemist
Membre
Inscription : 27/05/2011
Messages : 417

Re : menu en liste déroulante

Et donc comme promis, voici mon oeuvre fonctionnelle : http://adrien.poreaux.perso.sfr.fr/
Donc via un ordi, il affiche un menu avec hover à la souris, et via un smartphone il affiche un menu drop-down.

A noter que la sélection se fait par media query css (à rajouter manuellement dans votre skin donc), sur la largeur du device, donc les ipad et autres tablettes sont reconnues comme des ordis. Mais je n'ai pas trouvé comment discriminer les écrans tactiles des écrans non tactiles... Si quelqu'un a une idée propre (autrement que via une liste exaustive de user-agent en javascript...).

ET donc le code du module :

[== PHP ==]
<?php
/* module: menu_deroulant
auteur: Super_chemist

Ce module permet la création d'un menu sous forme d'une liste déroulante

v1.0 version initiale
*/
class Tmenu_deroulant extends Tmodule {
	function dojob($opt="") {
		parent::dojob();
		//var_dump (self::$cms);
		
		if (isset($_POST['menu_deroulant'])){
			//rediriger la page vers la page demandée
			header('Location: '.self::$cms->rewritebase.self::$cms->basep.$_POST['menu_deroulant']);
		}else{
			//générer le menu
			$out='<form id="menu_deroulant_form" name="menu_deroulant_form" method="post" action="index.php?z=menu_deroulant"><p><label for="menu_deroulant">Menu </label>'.
			'<select name="menu_deroulant" id="menu_deroulant" onchange="document.forms[\'menu_deroulant_form\'].submit();">';
			
			foreach (self::$cms->struct as $id => $item) {
				if ($item[4] && self::$cms->isPageAuth($id) && ($item[0][0]!='_') && !(($item[3]&pgbitPosSide)==pgbitPosSide)) {
					$out.="<option value=\"$item[0]\"";
					if ($id==self::$cms->truepage) $out.=' selected';
					$out.='>';
					for ($i = $item[2]; $i>1 ; $i--) {
						$out.="&nbsp;&nbsp;&nbsp;";
					}
					$out.="$item[1]</option>\r";
				}
			}
			$out.='</select><input id="submit_button" type="submit" /></p></form><script>document.getElementById("submit_button").style.display="none";</script>';
			return $out;
		}
	}
}

?>

Donc le module parcourt $cms->struct et génère le menu en fonction des pages autorisées (enfin je pense : je me suis inspiré de xmenu et de la gestion du menu de ziteplus, et je n'ai pas tout compris...). Si il y a une méthode plus simple pour avoir direct la liste des pages autorisées par ziteplus, je prend !
Au clic (ou si javascript est désactivé, à la validation du formulaire), il se renvoie un formulaire à lui même, et redirige vers la bonne page.

A noter que je n'ai testé qu'avec l'url rewriting désactivé car je ne parviens pas à l'activer sur mon wamp, ni chez sfr... Si quelqu'un peux tester.

Adrien

Hors ligne

Pied de page des forums