Skip to main content Help Control Panel

 

Projets «   Horizontal drop-down menu «  

Analyse fonctionnelle

J'ai commencé à m'y atteler, voici les solutions vers lesquelles je m'oriente.

  • création d'une nouvelle fonction page::hdd_menu() dans page.php pour réaliser le menu.
  • le code pourra cependant se placer dans le skin.php de notre thème pour les anciens serveurs.
  • Le canevas de la fonction ressemble fortement à page::tabs().
  • j'ai seulement en plus un argument $layout qui permet de choisir la mise en forme du listage des sous-sections. (avec ou sans vignette, layout personnalisé, etc...)
  • la fonction utilise les outils yacs existant sections::list_by_titles_for_anchor() et skin::build_list()
  • le lien vers une sections mère (en onglet) n'est actif que si elle ne possède pas de sous-sections (donc pas de menu déroulant).
  • le nb d'onglets affichés est limité par le nb de sections affichées à la raçine.
  • le nb de sections listées en sous-menu est défini par la constante HDDM_LIST_SIZE. (peut être surchargé dans skin.php)

J.Juraver

Alexis Raimbault : je parlais bien sûr d'un affichage des vignettes de sections racines.




Je ne m'attarde pas, j'ai mon yacs en double file...

Yacs on my blog | Suivez le blog Yacs | Yacs Showroom | Plugin Firefox de recherche dans Yetanoz |

inspired from Alexis Raimbault on June 3 2011


Alexis Raimbault

J.Juraver : si tu parles d'image statiques avec le texte dedans (comme la version précédente de yacs.fr) n'est-ce pas un peu une régression au niveau gestion de contenu ?

si par contre les images proviennent par exemple des vignettes associées aux sections, ce serait déjà plus sympa. Pour ce faire il faudrait dans le skin.php de ton thème surcharger les fonctions de base de skin_skeleton.php, en l'occurence build_list ainsi que finalize_list avec chacune l'argument de variation "tabs". La nouvelle version court-circuite la fonction de base pour le cas "tabs" et se chargerait de récupérer les vignettes des sections plutôt que leur titres.

une autre solution pure CSS avec des images de fond devrait pouvoir fonctionner.

Mais pour ma part je n'envisage pas de faire ce boulot pour la référence, du moins tant que je n'en ai pas besoin moi-même pour un client.




Alexis Raimbault webmaster free-lance

inspired from J.Juraver on June 3 2011


J.Juraver
Question : y a-t-il une solution envisagée pour remplacer aussi chaque onglet de section racine (donc, le menu horizontal principal) avec une image ? Et si oui, avec un positionnement du titre intelligent ou laissé à la liberté de l'associé ?


Je ne m'attarde pas, j'ai mon yacs en double file...

Yacs on my blog | Suivez le blog Yacs | Yacs Showroom | Plugin Firefox de recherche dans Yetanoz |

on June 3 2011


Alexis Raimbault
" j'ai hate de tester "

oui il faut que je vous fasse un paquet et une notice. ça vient bounce

" ..trop étendue... "

non je limite par CSS la taille des vignettes et par skin::strip la taille de l'intro. Chacun pourra adapter.




Alexis Raimbault webmaster free-lance

inspired from Jmarc on June 24 2010


Jmarc

Alexis a écrit:

" ajout d'un layout layout_sections_as_smartlist.php qui contient dans une liste non ordonnée l'icone, le titre et l'intro (et aussi les new,updated, private...) de chaque section (icon alignée à gauche comme une colonne séparée) "

ça fait beaucouo d'info... Visuellement, cela ne fait pas des listes déroulantes trop étendues en surface ?

j'ai hate de tester...


inspired from Alexis Raimbault on June 24 2010


Alexis Raimbault

J'ai quasiment terminé de quoi vous livrer une beta.

J'ai testé sur skeleton, differentb et 1 skin "vide", avec pour le dropdown des sous-sections un layout "compact" ainsi qu'un nouveau "smartlist".

note : le layout pour lister les sous-sections doit fournir une liste non-ordonnée.

j'ai encore des interférence CSS avec le "youarehere" des tabs.

voici les éléments impactés dans le code :

  • modifications sur page::tabs. Ajout d'un argument optionnel (un nom de layout) qui déclenche la recherche et l'affichage des sous-sections (avec le layout indiqué)
  • modifications sur yacs.css. Ajout de régles minimales pour un bon fonctionnement du dropdown.
  • ajout d'un layout layout_sections_as_smartlist.php qui contient dans une liste non ordonnée l'icone, le titre et l'intro (et aussi les new,updated, private...) de chaque section (icon alignée à gauche comme une colonne séparée)
  • modifications sur skin_skeleton::finalize_list() : ajout d'un "case: smartlist" pour la mise en forme finale du layout indiqué au dessus.

pouvez déjà réagir sur l'impact, les noms employés, etc.

pour smartlist j'aurais pu faire toute la mise en forme dans le layout mais en appelant skin::build_list il me fait tout le boulot. Comme il s'agit de mettre ce travail dans la référence, j'en profite.




Alexis Raimbault webmaster free-lance

on June 22 2010


Jmarc

Alexis : excellent !


inspired from Alexis Raimbault on June 22 2010


Alexis Raimbault

Jmarc : bonne nouvelle pour toi : j'affiche encore le lien vers la section mère, et sans me prendre la tête.

bounce




Alexis Raimbault webmaster free-lance

inspired from Jmarc on June 22 2010


Jmarc

Alexis a écrit :

" à partir du moment où le menu se déroule, les utilisateurs se rendent rarement compte qu'ils peuvent cliquer sur l'onglet lui-même. "

Mais si l'utilisateur ne sais pas quelle sous-section choisir, il voudra alors cliquer sur l'onglet de la section mère...

" La vision de la section mère proposera rien de plus que le menu déroulant "

c'est une bonne remarque !

" sinon ... je dois remanier plus de code "

Fainéant !

" je ferais ainsi dans un premier temps, on verra après essai sur béta si cet accès manque. "

Ok.


inspired from Alexis Raimbault on June 15 2010


Alexis Raimbault

Jmarc : très bonne question Jmarc !

j'ai cogité dessus et même experimenté sur un site avec des usagers (en préparation)

  • à partir du moment où le menu se déroule, les utilisateurs se rendent rarement compte qu'ils peuvent cliquer sur l'onglet lui-même.
  • si on propose un menu déroulant, c'est pour gagner du temps. La vision de la section mère proposera rien de plus que le menu déroulant (surtout que l'on pourra afficher les vignettes, titres et intros des sous-sections dans le menu déroulant)
  • Et enfin et surtout, au niveau HTML produit par les fonctions, Je peux facilement utiliser le framework yacs existant en procédant ainsi (sinon le code me place une balise ul dans un span, je dois remanier plus de code pour l'en empecher)

C'est à débattre bien sur. Mais je ferais ainsi dans un premier temps, on verra après essai sur béta si cet accès manque.

La section mère est toujours accessible en remontant via le fil d'ariane ou bien via la carte du site.




Alexis Raimbault webmaster free-lance

inspired from Jmarc on June 15 2010


Jmarc
" le lien vers une sections mère (en onglet) n'est actif que si elle ne possède pas de sous-sections (donc pas de menu déroulant). "

Dans ce cas, on ne peut plus utiliser l'onglet pour accéder à la section mère... on fait comment alors ?

N'est-il pas possible de dérouler la liste des sous-section en laissant le curseur de la souris dans l'onglet de la section mère ? (pour pouvoir continuer de cliquer dessus pour accéder à la section mère).


on June 15 2010


Alexis Raimbault

Christophe Battarel : effectivement, qui peut le plus peut le moins ! aussi le menu horizontal devrait être capable d'afficher les onglets actuels.

Je vais donc considérer d'enrichir page::tabs plutôt que de faire une nouvelle fonction quasi identique.

Note qu'à l'intérieur de tabs il y aura quelques changements, car pour chaque item renvoyé par un premier list_by_title_for_anchor il faut recommencer la même requette pour trouver les sous-sections.

Le premier appel se fait toujours avec le layout tabs, et les suivants avec celui en paramètre de la fonction.




Alexis Raimbault webmaster free-lance

inspired from Christophe Battarel on June 15 2010


Christophe Battarel
Je me demandais si il était vraiment nécessaire de rajouter une fonction à la classe Page ?

un simple layout passé en paramètre à la fonction Page::tabs ne serait-il pas suffisant ?

Il suffirait ensuite d'utiliser ce layout au lieu de "tabs" (que l'on garde en valeur par défaut) lors de l'appel à la fonction Sections::list_by_title_for_anchor.

Nous aurions comme modif de page.php :
function tabs($with_home=TRUE$with_reverse=FALSE$prefix=NULL$suffix=NULL [b],$layout='tabs'[/b]) {
        global 
$context;

        
// only for live servers
        
if(!file_exists($context['path_to_root'].'parameters/switch.on'))
            return;

        
// we have no database back-end
        
if(!is_callable(array('sql''query')))
            return;

        
// cache this across requests
        
$cache_id 'skins/page.php#tabs';
        if(!
$text =& Cache::get($cache_id)) {

            
// an array of tabs
            
$site_bar = array();

            
// prefix tabs, if any
            
if(is_array($prefix) && count($prefix))
                
$site_bar array_merge($site_bar$prefix);

            
// the first tab links to the front page
            
if($with_home && is_callable(array('i18n''s')))
                
$site_bar array_merge($site_bar, array($context['url_to_root'] => array(''i18n::s('Home'), '''home')));

            
// default number of sections to list
            
if(!isset($context['root_sections_count_at_home']) || ($context['root_sections_count_at_home'] < 1))
                
$context['root_sections_count_at_home'] = 5;

            
// query the database to get dynamic tabs
            
if(is_callable(array('Sections''list_by_title_for_anchor')) && ($items =& Sections::list_by_title_for_anchor(NULL0$context['root_sections_count_at_home'], [b]$layout[/b])))
                
$site_bar array_merge($site_bar$items);

            
// suffix tabs, if any
            
if(is_array($suffix) && count($suffix))
                
$site_bar array_merge($site_bar$suffix);

            
// the skin will reverse the order
            
if($with_reverse)
                
$site_bar array_reverse($site_bar);

            
// shape tabs
            
$text =& Skin::build_list($site_bar'tabs')."\n";
            
Cache::put($cache_id$text'sections');
        }
        echo 
$text;

    }



Christophe Battarel - Société altairis -

on June 15 2010