IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Autres Java Discussion :

[XWiki] Gestion des panels et / ou tree navigation


Sujet :

Autres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 5
    Par défaut [XWiki] Gestion des panels et / ou tree navigation
    Bonjour,

    Je suis actuellement dans la mise en place d'un XWiki (XWiki Enterprise 1.7.1.21800).
    Dans la page d'acceuil des divers espaces créés je souhaiterais voir apparaitre une arborescence de l'espace dans lequel l'utilisateur est.

    N'ayant pas trouvé de snippet approprié dans la documentation de ce wiki, je me suis servi du code de base du panel "navigation", en le modifiant de manière à ce qu'il n'affiche que l'arborescence de l'espace en cours.

    Mon problème consiste dans l'incorporation de ce panel au sein de la page d'acceuil de l'espace. Il est ici question de faire en sorte que le code fonctionne, non plus sous forme de panel mais directement au sein de la page.
    J'ai réussi jusqu'a maintenant à obtenir un fonctionnement similaire, à l'exception près que les lignes de l'arborescence ne sont pas cliquable. J'ai donc une arborescence fixe, sans lien.

    Ma question est donc la suivante, y a-t-il un moyen d'avoir à nouveau les liens dans le passage du panel à la page ? Ou bien, connaitriez vous un moyen d'obtenir une arborescence (ou une liste des pages) de l'espace en cours.

    Je m'explique pour être sur d'avoir été clair. Lorsque je me trouve dans l'espace (space) "Espace1", je souhaite voir apparaitre uniquement les pages de cette espaces là.


    Code de la panel "navigation" adapté à mes besoins :
    #panelheader($msg.get('xe.panels.navigation'))
    #set ($hiddenSpaces = ['XWiki', 'Admin', 'Panels'])
    #set ($hiddenPages = ['Main.WebRss', 'Main.WebSearch', 'Main.LuceneSearch', 'Main.WebSearchRss', 'Main.BlogRss', 'Blog.Macros', 'Main.TagsRss', 'Main.RegisterNewUserAction', 'Main.SpaceIndex', 'Blog.Category'])
    #set ($blackListedPages = ['WebPreferences'])
    <div id="xwikinavcontainer">
    #set($spaces = $xwiki.spaces)
    #set($i = 0)
    #set($spacecount = 0)
    <div id="xwikinav" class="accordion">
    #foreach($space in $spaces)
    #if ($doc.space == $space)
    #if ($hasAdmin || ($xwiki.hasAccessLevel('view', "${space}.WebHome") && !$hiddenSpaces.contains($space)))

    #set ($spacecount = $i)
    #end
    #set($i = $i + 1)
    <div id="xwikinav${space}">
    <div id="xwikinav${space}Header" class="accordionTabTitleBar"><h6>$space</h6></div>
    <div id="xwikinav${space}Content" class="accordionTabContentBox">
    #set ($escapedSpace = $space.replaceAll("'", "''"))
    #set($hql = $xwiki.searchDocuments("doc.space='$escapedSpace' order by doc.name"))
    #foreach($page in $hql)
    #if (!$hiddenPages.contains($page) || $hasAdmin)
    #set($dotIndex = $page.indexOf('.')+1)
    #set($pageName = $page.substring($dotIndex, $page.length()))
    #if (!$blackListedPages.contains($pageName) || $hasAdmin)
    #if ($doc.fullName == $page)
    - *${doc.name}*
    #else
    - [$page]
    #end
    #end
    #end
    #end
    </div>
    </div>
    #end
    #end
    </div>
    </div>
    $xwiki.jsfx.use("js/scriptaculous/scriptaculous.js")
    $xwiki.jsfx.use("js/xwiki/accordion/accordion.js")
    <script type="text/javascript">
    var obj = {div:'xwikinav',no:$spacecount,height:250};
    var acc = createAccordion(obj);
    </script>
    #panelfooter()
    Code que j'utilise pour intégrer la panel à la page (menu d'édition : EDITOR WIKI)
    {{velocity}}
    {{html}}
    #panelheader($msg.get('xe.panels.navigation'))
    #set ($hiddenSpaces = ['XWiki', 'Admin', 'Panels'])
    #set ($hiddenPages = ['Main.WebRss', 'Main.WebSearch', 'Main.LuceneSearch', 'Main.WebSearchRss', 'Main.BlogRss', 'Blog.Macros', 'Main.TagsRss', 'Main.RegisterNewUserAction', 'Main.SpaceIndex', 'Blog.Category'])
    #set ($blackListedPages = ['WebPreferences'])
    <div id="xwikinavcontainer">
    #set($spaces = $xwiki.spaces)
    #set($i = 0)
    #set($spacecount = 0)
    <div id="xwikinav" class="accordion">
    #foreach($space in $spaces)
    #if ($doc.space == $space)
    #if ($hasAdmin || ($xwiki.hasAccessLevel('view', "${space}.WebHome") && !$hiddenSpaces.contains($space)))

    #set ($spacecount = $i)
    #end
    #set($i = $i + 1)
    <div id="xwikinav${space}">
    <div id="xwikinav${space}Header" class="accordionTabTitleBar"><h6>$space</h6></div>
    <div id="xwikinav${space}Content" class="accordionTabContentBox">
    #set ($escapedSpace = $space.replaceAll("'", "''"))
    #set($hql = $xwiki.searchDocuments("doc.space='$escapedSpace' order by doc.name"))
    #foreach($page in $hql)
    #if (!$hiddenPages.contains($page) || $hasAdmin)
    #set($dotIndex = $page.indexOf('.')+1)
    #set($pageName = $page.substring($dotIndex, $page.length()))
    #if (!$blackListedPages.contains($pageName) || $hasAdmin)
    #if ($doc.fullName == $page)
    - *${doc.name}*
    #else
    - [$page]
    #end
    #end
    #end
    #end
    </div>
    </div>
    #end
    #end
    </div>
    </div>
    $xwiki.jsfx.use("js/scriptaculous/scriptaculous.js")
    $xwiki.jsfx.use("js/xwiki/accordion/accordion.js")
    <script type="text/javascript">
    var obj = {div:'xwikinav',no:$spacecount,height:250};
    var acc = createAccordion(obj);
    </script>
    #panelfooter()
    {{/html}}
    {{/velocity}}
    J'ai farfouillé du coté des balises html et de leur position dans le corps du code, mais celà n'as pas vraiment résolu mon problème.

    Merci par avance.

  2. #2
    Membre averti
    Profil pro
    Développeur C#, Python, dans la carte à puce
    Inscrit en
    Mars 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C#, Python, dans la carte à puce
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 46
    Par défaut
    J'espère que je ne réponds pas trop tard, je viens de voir le message.

    Pour tout te dire, je suis dans le même cas que toi (vouloir lister les documents d'un espace), sauf que j'ai une solution (mais qui me pose des problèmes).

    Il suffit d'intégrer la page Main.Dashboard à ta page d'accueil, ou au moins la partie qui liste les documents.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #includeInContext("Main.Dashboard")
    En effet, dans l'espace Main, cette page affiche la liste des espaces, alors que dans un autre espace, elle affichera la liste des documents.

    Ce sont ces deux lignes qui vont afficher tous les documents de l'espace courant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #set($docNames = $xwiki.getSpaceDocsName($doc.space))
    #displayDocumentList($docNames false $blacklistedSpaces)
    Si tu veux voir comment fonctionne la fonction displayDocumentList, elle se trouve normalement ici (pour xwiki 1.9.2) : xwiki/templates/macros.vm

    Le problème que j'ai actuellement (j'ai posté sur la mailing-list de xwiki), c'est que seul l'admin est capable de voir les documents listés, peu importe les droits des utilisateurs. Ce qui est étrange, c'est qu'un utilisateur lambda peut accéder à une page (il en a donc le droit), mais ne peut pas voir cette liste.
    Je comprends pas

    J'espère avoir pu t'aider et si t'arrives à résoudre mon problème par la même occasion, n'hésite pas

  3. #3
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 5
    Par défaut
    Effectivement je n'avais pas vu cette fonctionnalité de la dashboard si inclue à un emplacement autre que la page d'acceuil. Ca a au moins l'avantage d'afficher les titres des pages (quelque soit la langue) plutôt que les noms techniques. En gros c'est plus efficace que la modification d'un panel comme ce que j'avais fais.
    Merci bien pour cette précision

    Pour ce qui est des personnes pouvant voir les documents présents, ce qui me gène le plus dans le code reste le

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    false $blacklistedSpaces
    Dans une perspective de sommaire (c'est comme celà que je le vois) je ne vois pas trop l'interêt de faire un tri dans l'affichage. A condition bien sur d'avoir bien spécifié qui pouvait faire quoi.

    Je vais regarder de ce côté là et te donner de plus ample information sur ton problème si j'arrive à en obtenir une solution.

    Je vais également regarder pour voir s'il est possible d'avoir une présentation des pages contenues dans l'espace faisant apparaitre les niveaux mères / filles. (Un petit peu comme le menu WYSIWYG => files => from wiki => all pages).

    EDIT : Il y a effectivement un comportement bizarre de ce côté là. Pour un utilisateur lambda, la dashboard fonctionne sans problème dans l'espace main (donc avec affichage des différents espaces) mais dès qu'il s'agit d'afficher le contenu d'un espace la section répertoriant les pages se masque. Quelque soit les droits donner à la personne. Je dois bien admettre que je ne comprend pas trop pourquoi, étant donné qu'il n'y a pas de tests avant l'appel des fonctions.

  4. #4
    Membre averti
    Profil pro
    Développeur C#, Python, dans la carte à puce
    Inscrit en
    Mars 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C#, Python, dans la carte à puce
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 46
    Par défaut
    Le deuxième argument, ici à false, permet de grouper ou non les documents par espace.

    Il me semble qu'on peut passer outre le dernier argument en passant en paramètre [].

    Pour en savoir plus, le code de la macro se trouve dans le fichier macro.vm.

    Par contre faire apparaître le lien mère/fille peut en effet être intéressant ; je n'y avais pas pensé.

    As-tu le même problème que moi, à savoir que seuls les admins retournent les docs contenus dans l'espace courant en utilisant la macro displayDocumentList, alors que tous les utilisateurs ont le droit "view" sur tout cet espace ?

  5. #5
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 5
    Par défaut
    Oui oui pour le code et l'utilité des arguments, je soulignais juste que dans cette utilisation ils ne sont pas forcement utile.

    Et j'ai effectivement le même problème que toi au niveau de l'affichage pour un utilisateur non-admin, quelque soit les droits qui lui sont donné.
    Problème que ce même utilisateur ne rencontre pas lors de l'affichage de la dashboard à partir de la page d'acceuil.

  6. #6
    Membre averti
    Profil pro
    Développeur C#, Python, dans la carte à puce
    Inscrit en
    Mars 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C#, Python, dans la carte à puce
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 46
    Par défaut
    J'ai testé quelques utilisations de la fonction hasAccessLevel (celle qui pose problème) et je reste perplexe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #if($xwiki.hasAccessLevel("view", $context.getUser(), "Outils"))
    "Outils" est une page de mon espace ; les utilisateurs ont le droit "view" sur cet espace, donc sur toutes les pages de cet espace.

    Cette fonction me retourne false lorsque je suis connecté en user normal, true en admin.
    Changer les droits sur cette page ne change rien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #if($xwiki.hasAccessLevel("view", $context.getUser(), "Conception.Outils"))
    En précisant ici l'espace ("Conception"), la fonction retourne true peu importe qui est connecté (comportement souhaité).

    J'ai pas dû tout comprendre...

    Ce qui est étonnant, c'est je ne vois pas de sujets remontant ce problème sur la mailing-list de xwiki (à part moi ).

    D'autant plus que ça n'a pas l'air d'un bug, ça m'étonnerais que tel bug n'ait pas été remonté de la version 1.7.1 à la version 1.9.2 !

    Concernant les arguments, ils peuvent être utiles au contraire (le deuxième en tout cas ; le troisième effectivement, je ne vois pas trop...). Tu peux avoir des sous-espaces dans l'espace courant et donc vouloir trier ton sommaire par sous-espace.

Discussions similaires

  1. Gestion des erreurs dans un Tree
    Par benoxy dans le forum Odoo (ex-OpenERP)
    Réponses: 4
    Dernier message: 21/01/2015, 19h43
  2. Gestion des panels dans une JFrame
    Par Keyzounet dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 25/01/2013, 12h33
  3. Gestion des panels/form
    Par arslaine dans le forum Visual Studio
    Réponses: 1
    Dernier message: 13/08/2012, 13h52
  4. [RichFaces] Modal Panel , gestion des erreurs
    Par Jexou dans le forum JSF
    Réponses: 28
    Dernier message: 07/01/2010, 10h15
  5. [C#] Gestion dynamique des panel
    Par toflofr dans le forum Windows Forms
    Réponses: 3
    Dernier message: 17/07/2006, 11h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo