Skip to main content Help Control Panel

J.Juraver


on Jan. 8 2010
from Entre chaise et clavier...

Yacs team - Modération, Communication, Documentation
Share
Post to Facebook
Tweet about this
Share at LinkedIn
Invite participants
Reference this page
Monitor
Recent files
support »
See also
 

support «   Besoin d'aide «  

Script d'affichage de l'arborescence d'une section [Solved]

PreviousNextIndex

Recherche la bonne fonction ...

WorkflowSupport request
StatusA solution has been made available
OwnerJ.Juraver
Progress80%

Bonjour,

je cherche la variable qui permet d'afficher dynamiquement l'arborescence des sous-sections d'une section.

Le but du jeu est tout simplement de fabriquer un menu horizontal déroulant contenant ces sous-rubriques (aucun skin yacs ne possède actuellement ce genre d'affichage)

Comments

JJ - on Jan. 8 2010

Je me rends compte qu'avec les histoire de sections restreintes ou pas, ça complique un peu le problème

En tout cas dans sections/section.php j'ai trouvé peut-être un début de réponse vers la ligne 394, mais ça sent la galère pour intégrer tout ça avec l'effet déroulant en plus idiot

    function count_for_anchor($anchor) {
        global 
$context;

        
// sanity check
        
if(!$anchor)
            return 
NULL;

        
// profiling mode
        
if($context['with_profile'] == 'Y')
            
logger::profile('sections::count_for_anchor');

        
// limit the query to one level
        
if($anchor)
            
$where "(sections.anchor LIKE '".SQL::escape($anchor)."')";
        else
            
$where "(sections.anchor='' OR sections.anchor is NULL)";

        
// display active and restricted items
        
$where .= "AND (sections.active='Y'";

        
// list restricted sections to authenticated surfers
        
if(Surfer::is_logged())
            
$where .= " OR sections.active='R'";

        
// list hidden sections to associates, editors and readers
        
if(Surfer::is_empowered('S'))
            
$where .= " OR sections.active='N'";

        
// include managed sections
        
if(count($my_sections Surfer::assigned_sections())) {
            
$where .= " OR sections.id = ".join(" OR sections.id = "$my_sections);
            
$where .= " OR sections.anchor LIKE 'section:".join("' OR sections.anchor LIKE 'section:"$my_sections)."'";
        }

        
$where .= ")";

        
// hide sections removed from index maps
        
$where .= " AND ((sections.index_map IS NULL) OR (sections.index_map != 'N'))";

        
// non-associates will have only live sections
        
$now gmstrftime('%Y-%m-%d %H:%M:%S');
        if(
$anchor && !Surfer::is_empowered()) {
            
$where .= " AND ((sections.activation_date is NULL)"
                
."    OR (sections.activation_date <= '".$now."'))"
                
." AND ((sections.expiry_date is NULL)"
                
."    OR (sections.expiry_date <= '".NULL_DATE."') OR (sections.expiry_date > '".$now."'))";
        }

        
// list sections
        
$query "SELECT COUNT(*) as count"
            
." FROM ".SQL::table_name('sections')." AS sections"
            
." WHERE ".$where;

        return 
SQL::query_scalar($query);
    }



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 |
Alexis Raimbault - on Jan. 8 2010

tu veux donc un menu horizontal déroulant dont tu ne connais pas à priori les entrées à l'avance ? Ton idée est donc de reprendre le code du menu contextuel pour en faire un menu déroulant ?

Cela va te faire descendre profond dans le code. J'ai néanmoins une solution plus facile à te proposer mais pour un menu de une profondeur seulement.

> crée une page globale pour contenir ton menu.

> établie la liste de entrées de menu niveau 1 : les entrées horizontales. utilise la liste classique.

  • menu 1
  • menu 2
  • menu 3
  • menu 4
Note que "menu 1" peut être aussi un lien vers une page

> puis dans chaque entrée de liste, appel par code yacs la liste des sections à utiliser comme entrées. Cela va construire dynamiquement les listes à dérouler verticalement

  • menu 1 [sections.compact=section:id1]
  • menu 2 [sections.compact=section:id2]
  • etc.

exemple avec les sections yacs.fr

> après il faudra appeler la description de cette page globale par le template pour positionner le menu. Ensuite un boulot de css pour mettre horizontal et afficher au survol, à moins que tu veuilles du jvscript.

Moi aussi je prépare un site avec menu horizontal, mais les entrées sont statiques.

Bien à toi,

Alexis




Alexis Raimbault webmaster free-lance
JJ - on Jan. 8 2010

Pas mal du tout comme technique !

L'avantage c'est de passer par une page propre à yacs déjà crée et de la réexploiter à l'envie. Le désavantage, c'est que celà utilise beaucoup les codes yacs, et qu'au moindre changement par Bernard de ceux-ci, tout le menu va foirer. Je vais quand même essayer ta technique par curiosité.

J'aurais cru pouvoir réutiliser :

  • soit le menu d'affichage contextuel en arborescence, natif dans yacs (encore faut-il que je le trouve)
  • soit une simple requête SQL

Mais dans tous les cas la question des rubriques restreintes reste majeure




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 |
JJ - on Jan. 8 2010

Note : ton commentaire sur le groupe de 9.8 RC 3 semblait déjà se pencher sur le sujet, me trompe-je ?.. Positionner un composant via le template.php




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 |
Alexis Raimbault - on Jan. 8 2010

JJ :

" et qu'au moindre changement par Bernard de ceux-ci, tout le menu va foirer "

Un changement dans le code yacs [sections] ? j'y crois pas trop. Par contre le layout pourrait changer. dans mon exemple j'appelle le layout compact, mais tu peux appeler un layout perso qui ne bougera pas (qui peut être une simple copie du 'compact' existant).

" Mais dans tous les cas la question des rubriques restreintes reste majeure "

tu veux quel comportement ? Avec la solution ci-dessus les entrées restreinte s'affichent à ceux qui ont les droits pour les voir.

 




Alexis Raimbault webmaster free-lance
Alexis Raimbault - on Jan. 8 2010

JJ :

la solution donnée par bernard permet de positionner le texte d'une page dans le template. c'est comme ça que je fais un menu horizontal dans un projet en cours, je peux te donner un lien en page privée.




Alexis Raimbault webmaster free-lance
JJ - on Jan. 8 2010
"

tu veux quel comportement ? Avec la solution ci-dessus les entrées restreinte s'affichent à ceux qui ont les droits pour les voir.

"

Tout à fait ! Je m'en suis rendu compte en m'identifiant pour te répondre... aupravant je naviguais sans session perso.

Quant au layout, je pensais effectivement à celui des codes section.compact

Le code sections n'aurait pas de raison de bouger sans crier gare, mais on a bien déjà vu le code [ login ] disparaître de cette façon..

"

 

la solution donnée par bernard permet de positionner le texte d'une page dans le template. c'est comme ça que je fais un menu horizontal dans un projet en cours, je peux te donner un lien en page privée.

"

Oui ça m'intéresse !

Si je comprends bien, dans le fil de discussion avec Bernard tu fais avec un component exactement la même chose que ce que tu fais avec un appel php dans le template de la description d'un article comme tu l'indiques plus haut ici même.




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 |
Alexis Raimbault - on Jan. 8 2010

JJ :

" tu fais avec un component exactement la même chose que ce que tu fais avec un appel php dans le template "

oui mais finalement je préfère la solution via le template car avec le componnent cela induit un 'enrobage' html de mon menu.




Alexis Raimbault webmaster free-lance
Alain Lesage - on Jan. 8 2010

Super intéressant, les gars ! J'ai hâte de voir le résultat. On va pouvoir en bénéficier, n'est-ce pas ?

Pour la portion CSS, vous trouverez peut-être cette ressource utile : http://aext.net/2009/12/incred...-with-css-only/

Bon succès !

-----
On a si peu d'idée de ce qui est possible...

JJ - on Jan. 8 2010

En ce qui me concerne, si je parviens à mes fins ce sera en production sur mes deux plus gros projets importants sous yacs...

Je pense depuis un moment que l'arborescence affichée dès le survol reste probablement la solution ergonomiquement la plus efficace pour guider l'internaute, favoriser la mémorisation des thèmes, inciter la curiosité, tout en restant élégant dans l'affichage et réduisant la pénibilité de navigation.




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 |
Alexis Raimbault - on Jan. 9 2010

Tes essais avec page::tabs me font penser qu'on pourrait enrichir cette fonction pour construire la liste horizontale et chaque liste verticale, de sorte que tout soit automatique.




Alexis Raimbault webmaster free-lance
J.Juraver - on Jan. 11 2010
"

J'ai néanmoins une solution plus facile à te proposer mais pour un menu de une profondeur seulement.

"
Et hop l'astuce est illico dans la doc ! Afficher un menu déroulant de sections et sous-sections


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 |
Alexis Raimbault - on Jan. 11 2010

ah t'es rapide.

bon j'ai corrigé une erreur : t'avais oublié de génerer le div #menuderoulant dans ton exemple.




Alexis Raimbault webmaster free-lance

PreviousNextIndex