2013-06-14 3 views
1

Je dois faire un menu sans aucun lien mais avec l'url dans un attribut.
L'URL doit être dans data-href = "|" mais maintenant seul le titre sera imprimé dans l'attribut.
Existe-t-il un moyen de renvoyer uniquement l'URL et non le lien. c'est à dire. http://example.com au lieu de ExampleMettez le lien de menu url dans un attribut

Ou est-ce que quelqu'un connaît une solution différente?

lib.mainMenu = HMENU 
lib.mainMenu { 
    entryLevel = 1 
    wrap = <ul id="dropDownMenu">|</ul> 

    1 = TMENU 
    1 { 
     noBlur = 1 
     expAll = 1 

     NO = 1 
     NO { 
      wrapItemAndSub = <li class="nochildren">|</li> 
      stdWrap2.wrap = <span>|</span> 
     } 

     ACT < .NO 
     ACT.wrapItemAndSub = <li class="active nochildren">|</li> 

     # if has children 
     IFSUB < .NO 
     IFSUB.wrapItemAndSub = <li class="haschildren">|</li> 
     IFSUB.allWrap = | 

     # if has children and is active 
     ACTIFSUB < .IFSUB 
     ACTIFSUB.wrapItemAndSub = <li class="active haschildren">|</li> 
     ACTIFSUB.allWrap = | 
    } 

    2 < .1  
    2 { 
     wrap = <ul id="subMenu">|</ul> 
     NO.ATagParams = rel="nofollow" 
     NO.stdWrap2.insertData = 1 
     NO.stdWrap2.wrap = <span data-href="|" class="link">{field:title}</span> 
     NO.doNotLinkIt = 1 

     IFSUB < .NO 
     ACTIFSUB < .IFSUB 
    } 

    3 < .2 
} 
+1

Le lien doit-il être retiré uniquement du 2ème et 3ème niveau du menu ou du 1er niveau? – tmt

+0

@cascaval Seulement le deuxième et le troisième niveau – Patrik

Répondre

2

Essayez ce (code non testé):

lib.mainMenu = HMENU 
lib.mainMenu { 
    entryLevel = 1 
    wrap = <ul id="dropDownMenu">|</ul> 

    1 = TMENU 
    1 { 
     noBlur = 1 
     expAll = 1 

     NO = 1 
     NO { 
      wrapItemAndSub = <li class="nochildren">|</li> 
      stdWrap2.wrap = <span>|</span> 
     } 

     ACT < .NO 
     ACT.wrapItemAndSub = <li class="active nochildren">|</li> 

     # if has children 
     IFSUB < .NO 
     IFSUB.wrapItemAndSub = <li class="haschildren">|</li> 
     IFSUB.allWrap = | 

     # if has children and is active 
     ACTIFSUB < .IFSUB 
     ACTIFSUB.wrapItemAndSub = <li class="active haschildren">|</li> 
     ACTIFSUB.allWrap = | 
    } 

    2 < .1  
    2 { 
     wrap = <ul id="subMenu">|</ul> 
     NO { 
      doNotShowLink = 1 
      stdWrap2 { 
       wrap > 
       cObject = TEXT 
       cObject { 
        typolink { 
         parameter.field = uid 
         returnLast = url 
        } 
        insertData = 1 
        wrap = <span data-href="|" class="link">{field:nav_title//field:title}</span> 
       } 
      } 
     } 

     IFSUB < .NO 
     ACTIFSUB < .IFSUB 
    } 

    3 < .2 
} 
+1

Nice ça marche. Je devais juste changer nav_title // titre juste titre et ajouter NO.doNotShowLink = 1. Merci! – Patrik

+0

Eh bien, je mets 'nav_title // title' parce que vous voulez probablement que l'élément utilise" Navigation title "s'il est défini pour la page donnée. – tmt

+0

J'ai changé la réponse par votre commentaire. – tmt

1

La réponse ci-dessus ne fonctionne que tant que vous n'avez pas mountpoints. Dès que vous avez des points de montage dans votre arborescence de pages, ces liens ne seront pas générés correctement.

Pour forcer un HMENU à afficher des URL simples sans balise a et nom de page environnants, même lorsque vous utilisez des points de montage, vous devez définir la propriété IProcFunc de HMENU.

J'ai écrit une petite méthode qui peut être appelée via IProcFunc qui va supprimer les balises a et remplacer le titre de la page par l'URL du lien.

<?php 

class UserFuncUtils { 

    /** 
    * Modifies sitemap links. Whith this modification, a menu will only generate a plain url instead of an <a>-Tag 
    * 
    * This is an IProcFunc for a HMENU. The only parameter supplied by this method call is $this->I from the 
    * Menu ContentObject. The function call expects a modified $I array to be returned. 
    */ 
    function IProcFunc_plainURL($I) { 
     // Show what $I has to offer 
     // print \TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($I, NULL, 8, FALSE, FALSE, FALSE, array(), array()); 

     // Remove opening and closing tags and replace title with href attribute. This results in a plain URL being rendered by the menu 
     $I['parts']['ATag_begin'] = ''; 
     $I['parts']['ATag_end'] = ''; 
     $I['parts']['title'] = $I['linkHREF']['HREF']; 

     return $I; 
    } 
} 

?> 

Il suffit d'enregistrer cette petite classe quelque part (par exemple /fileadmin/libs/class.userFuncUtils.php) et l'inclure avec

includeLibs.userFuncUtils = fileadmin/libs/class.userFuncUtils.php 

puis définissez la propriété IProcFunc de HMENU pour pointer vers cet utilisateur fonction

lib.mainMenu = HMENU 
lib.mainMenu.IProcFunc = UserFuncUtils->IProcFunc_plainURL 

Cela devrait faire l'affaire.

Questions connexes