Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5

Nombre d'enfants d'une page et position dans sa hiérarchie
#1

Citation :#~~~~~ NE PAS SUPPRIMER CE BLOC ~~~~~
#~ Version du CMS: 1.7.x
#~ Nom de l'hébergeur : OVH
#~ Informations Système :
#~ ----------------------------------------------
#~ Cms Version: 1.7.1
#~ Installed Modules:
#~ CMSMailer: 2.0
#~ FileManager: 1.0.2
#~ MenuManager: 1.6.3
#~ ModuleManager: 1.3.3
#~ nuSOAP: 1.0.1
#~ Printing: 1.0.4
#~ Search: 1.6.3
#~ ThemeManager: 1.1.1
#~ TinyMCE: 2.7.0
#~ babel: 0.3.4
#~ Config Information:
#~ php_memory_limit:
#~ process_whole_template: false
#~ max_upload_size: 64000000
#~ default_upload_permission: 664
#~ assume_mod_rewrite: true
#~ page_extension: .html
#~ internal_pretty_urls: false
#~ use_hierarchy: true
#~ Php Information:
#~ phpversion: 5.2.13
#~ md5_function: On (Vrai)
#~ gd_version: 2
#~ tempnam_function: On (Vrai)
#~ magic_quotes_runtime: Off (Faux)
#~ E_STRICT: 0
#~ memory_limit: 128M
#~ max_execution_time: 30
#~ safe_mode: Off (Faux)
#~ session_save_path: /tmp (1777)
#~ session_use_cookies: On (Vrai)
#~ Server Information:
#~ Server Api: cgi
#~ Server Db Type: MySQL (mysql)
#~ Server Db Version: 5.0.90
#~ ----------------------------------------------
#~~~~~ NE PAS SUPPRIMER CE BLOC ~~~~~

Bonjour,

Je souhaiterais adapter l'utilisation de la balise cms_selflink afin que lors de l'utilisation des attributs dir="previous" et dir="next", la navigation soit cantonnée au niveau hiérarchique de la page en cours. J'ai pour cela besoin d'obtenir deux informations sur la page : si elle a des enfants (ou ce qui revient au même, combien elle en a), et si elle est la dernière page de son niveau hiérarchique (par exemple, dans le cas où l'on considère la sous-section 1.7.1 ; 1.7.2, 1.7.3, si la page chargée est la 1.7.3, je dois pouvoir savoir qu'elle est la dernière de son niveau). Comment pourrais-je obtenir ces informations ?

Merci beaucoup !

P.S. : ce n'est pas la peine de me demander d'abord de mettre à jour ma version de CMSMS puisqu'il n'existe pas de mise-à-jour à partir d'une installation complète 1.7.1
Répondre
#2

CGSimpleSmarty avec get_children() renvoie un tableau avec les enfants et leur id (voir la doc du module). Un test "supérieur à" te permettra de trouver le dernier (il y a aussi des udt pour ce faire).
PS : puisque ça n'en vaut pas la peine pour la mise à jour, on te laissera dans l'ignorance Wink
Répondre
#3

Je ne comprends pas très bien... Qu'est-ce que je devrais comparer ? Le nombre d'enfants avec la position de la page actuelle dans la hiérarchie ? Mais dans ce cas-là, il faut trouver ladite position, ce qui n'est pas chose aisée puisque l'on a accès qu'à la hiérarchie (une chaîne de caractères du style "1.7.3"), si je ne m'abuse...
Si tu sais où ce trouve l'udt qui renvoie l'id (ou l'alias, peut importe) du dernier enfant, je suis preneur !

Sinon CGSimpleSmarty avec has_children() me permet également de savoir si la page a des enfants.
Répondre
#4

Il y a un truc tout simple : tu écris "dernier" dans Attribut supplémentaire 1 de la page où tu ne veux pas de lien next.
et dans le gabarit, tu ajoutes {if $content_obj->mProperties->mPropertyValues.extra1 != "dernier"} balise pour afficher le lien next {/if}
Répondre
#5

ninoaderri a écrit :Je ne comprends pas très bien... Qu'est-ce que je devrais comparer ? Le nombre d'enfants avec la position de la page actuelle dans la hiérarchie ? Mais dans ce cas-là, il faut trouver ladite position, ce qui n'est pas chose aisée puisque l'on a accès qu'à la hiérarchie (une chaîne de caractères du style "1.7.3"), si je ne m'abuse...
Si tu sais où ce trouve l'udt qui renvoie l'id (ou l'alias, peut importe) du dernier enfant, je suis preneur !

Sinon CGSimpleSmarty avec has_children() me permet également de savoir si la page a des enfants.
Il me semblait avoir lu un post avec le last_child mais je n'ai pas pu remettre la main dessus.

Je pense qu'il faudrait tester la page root (get_root_alias('',$pageRoot) ) avec get_children($pageRoot), et vérifier si la page actuelle est le dernier élément de l'array.

Si ces solutions ne te conviennent pas, tu pourrais passer par le menumanager (car il lit tous les nodes, par besoin de recommencer l'opération).
Assigner le node du foreach précédant un node->depth==0 (+conditions) à une variable (dont le nom devra être incrémenté pour ne pas l'écraser).
Répondre
#6

Il y a une erreur dans la doc de CGSimpleSmarty, ce qui empêchait d'afficher le résultat et qui m'a fait partir vers d'autres solutions. Voir http://forum.cmsmadesimple.org/index.php...#msg197243

Voilà donc le code permettant d'afficher ou pas le lien next en utilisant CGSimpleSmarty :
Code :
<div class="left49 core-float-left">
    <span>
    {cms_selflink  lang='fr'  dir="previous" }&nbsp;
    </span>
    {$cgsimple->get_parent_alias('','root')}
    {$cgsimple->get_children($root,false,'children')}
    {if count($children)}
        {foreach from=$children item='child' name='enfant'}
            {if $smarty.foreach.enfant.last}
                {if $cgsimple->get_page_title() != $child.title}
                    <span>
                    {cms_selflink  lang='fr'  dir="next"}&nbsp;
                    </span>
                 {else}est le dernier enfant
                {/if}
            {/if}
        {/foreach}
    {/if}
</div>
Pour le nombre d'enfants, utiliser $smarty.foreach.enfant.total
Pour le premier enfant, utiliser $smarty.foreach.enfant.first
Doc du foreach : http://www.smarty.net/manual/fr/language...oreach.php
Répondre
#7

Résolu ? Normalement oui Wink
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 4 visiteur(s)