TypoLink zu MountPoint

  • scripper scripper
    R2-D2
    0 x
    91 Beiträge
    0 Hilfreiche Beiträge
    14. 04. 2011, 11:08

    Hallo zusammen,

    bin kurz vorm verzweifeln. Ich habe ein Typo3 Menü gebaut, bei dem ich über stdwrap und typolink ein Menü Element verlinke.

    Das funktioniert auch toll jedoch nicht bei Mount Points.

    Hier mal mein TS Code

    1. NO {
    2. doNotLinkIt =1
    3. wrap = <div class="level3-menu-item">|</div>
    4. 10 = TEXT
    5. 10.typolink.parameter.field = uid
    6. 10.field = title

    ich denke statt parameter.field = uid sollte vielleicht da etwas anderes stehen oder vielleicht kann ich das per additional parameters noch hinzufügen ...

    Ich danke euch mal im vorraus falls einer eine Idee hat.

    Viele Grüße


  • 1
  • pinerski pinerski
    T3PO
    0 x
    12 Beiträge
    0 Hilfreiche Beiträge
    11. 01. 2012, 14:37

    Hallo snipper und auch gerne alle Anderen,

    stehe hier gerade vor dem selben Problem.
    Gibt es hierzu schon eine Lösung?

    Kleine Anmerkung:
    Wenn ich "doNotLinkIt =1" entferne, dann bekomme ich den gewünschten link, jedoch wird er um das ganze Element gesetzt.
    Was zu keinen Validen Code führt

    Gruß

  • dachande dachande
    T3PO
    0 x
    10 Beiträge
    1 Hilfreiche Beiträge
    02. 12. 2013, 17:54

    Hi,

    genau vor dem gleichen Problem stehe ich auch gerade. Ich habe eine sitemap.xml mit TypoScript gebaut (mittels TMENU, welches ein COA enthält um die einzelnen Abschnitte der XML Struktur abzubilden). Auf meiner Website gibt es einige Seiten, die als MountPoint eingerichtet sind und sich den Inhalt einer anderen Seite hineinziehen.

    Nun werden allerdings in der Sitemap die Links der gemounteten Seite ausgeben und nicht, wie eigentlich gewünscht, die des MountPounts selbst. Ich nutze ebenfalls den Schalter doNotShowLink = 1, da ich die XML Struktur selber zusammenbauen muss und hier nicht auf die generierten <a> Tags aus dem TMENU zurückgreifen kann.

    Schalte ich doNotLinkIt auf 0, werden die korrekten Links generiert, jedoch, wie schon oben erwähnt, kann ich diese generierten <a>-Tags nicht richtig weiter verwenden.

    Interessant an der ganzen Sache ist folgendes:
    ich nutze, wie scripper auch, typolink.parameter.field = uid. Die UID ist die des MountPounts. In der Datenbank gibt es noch ein Feld mount_uid, d.h. typolink.parameter.field = mount_uid müsste eigentlich zu dem aktuell falschen Verhalten führen, jedoch nicht die Verwendung von uid.

    Hat hier jemand vielleicht eine Lösung parat?

  • dachande dachande
    T3PO
    0 x
    10 Beiträge
    1 Hilfreiche Beiträge
    03. 12. 2013, 12:18

    Ich habe hierzu mittlerweile ein wenig rausgefunden.

    wenn HMENU durch die Navigation läuft, baut es intern Typolinks zusammen und nutzt für den Typolink als additionalParams Wert so etwas wie ?MP=xx-yy wobei xx die UID der eingebundenen Einstiegsseite und yy die UID der als MountPoint definierten Seite enthält. Wo HMENU diese Werte bisher herbekommt, konnte ich noch nicht rausfinden.

    Fakt ist, möchte man so etwas nachbilden, muss man diesen MP Parameter irgendwie selbst zusammenbauen.

  • dachande dachande
    T3PO
    0 x
    10 Beiträge
    1 Hilfreiche Beiträge
    03. 12. 2013, 14:56

    Ok, ich habe es nun letztendlich, nach ein wenig hacking hinbekommen. Und das Ganze, ohne den Core anfassen zu müssen. Es ist also wunderbar Update-Kompatibel.

    Das Zauberwort meines letztendlichen Erfolgs lautet 'IProcFunc'.

    Wie ich oben ja bereits erwähnt habe, enthalten die, durch das TMENU (oder besser gesagt HMENU) generierten Links den korrekten Pfad, da diese den MP-Parameter enthalten, welcher dann beispielsweise von RealURL zum richtigen Pfad umgewandelt wird.

    HMENU besitzt die Typoscript-Option IProcFunc. Hier kann man eine Funktion angeben, welche den von HMENU generierten Link bearbeiten kann, bevor dieser gerendert wird. Letztendlich ging ich soweit, dass meine IProcFunc nichts weiter macht, als den öffnenden sowie den schließenden a-Tag entfernt und den Linktitel durch das href-Attribut ersetzt.

    1. <?php
    2.  
    3. class UserFuncUtils {
    4.  
    5. /**
    6. * Modifies sitemap links. Whith this modification, a menu will only generate a plain url instead of an <a>-Tag
    7. *
    8. * This is an IProcFunc for a HMENU. The only parameter supplied by this method call is $this->I from the
    9. * Menu ContentObject. The function call expects a modified $I array to be returned.
    10. */
    11. function IProcFunc_plainURL($I) {
    12. // Show what $I has to offer
    13. // print \TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($I, NULL, 8, FALSE, FALSE, FALSE, array(), array());
    14.  
    15. // Remove opening and closing tags and replace title with href attribute. This results in a plain URL being rendered by the menu
    16. $I['parts']['ATag_begin'] = '';
    17. $I['parts']['ATag_end'] = '';
    18. $I['parts']['title'] = $I['linkHREF']['HREF'];
    19.  
    20. return $I;
    21. }
    22. }
    23.  
    24. ?>

    Und so sieht dann letztendlich mein Typoscript Code zum Generieren der Sitemap aus. Diesen Code habe ich mir aus verschiedenen Quellen zusammengesucht und nachträglich für meine Bedürfnisse etwas angepasst:

    1. includeLibs.userFuncUtils = fileadmin/ratec/libs/class.userFuncUtils.php
    2.  
    3. temp.cr = TEXT
    4. temp.cr.char = 10
    5.  
    6. temp.tab = TEXT
    7. temp.tab.char = 9
    8.  
    9. sitemap = PAGE
    10. sitemap {
    11. typeNum = 101
    12.  
    13. config {
    14. no_cache = 1
    15. disableAllHeaderCode = 1
    16. additionalHeaders = Content-Type: application/xml
    17. }
    18.  
    19. wrap (
    20. <?xml version="1.0" encoding="UTF-8"?>
    21. <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">|
    22. </urlset>
    23. )
    24.  
    25. 4 < temp.cr
    26.  
    27. # Home
    28. 9 {
    29. # 6 = ID of home page
    30. datum.data = DB : pages:6:lastUpdated // DB : pages:6:SYS_LASTCHANGED // DB : pages:6:tstamp // DB : pages:6:crdate
    31. datum.date = c
    32. }
    33. 10 = TEXT
    34. 10 {
    35. value (
    36. <url>
    37. <loc>{$BASEURL}</loc>
    38. <lastmod>{register:datum}</lastmod>
    39. <changefreq>weekly</changefreq>
    40. <priority>1.0</priority>
    41. </url>
    42. )
    43. }
    44.  
    45.  
    46. 12 < temp.cr
    47.  
    48. # The MENU
    49. 30 = HMENU
    50. 30 {
    51. special = directory
    52. special.value = 6
    53.  
    54. # Hide Upcrete Shortcut
    55. excludeUidList = 19
    56.  
    57. 1 = TMENU
    58. 1 {
    59. expAll = 1
    60. noBlur = 1
    61. IProcFunc = UserFuncUtils->IProcFunc_plainURL
    62.  
    63. NO = 1
    64. NO {
    65. before.cObject = COA
    66. before.cObject {
    67. 10 = TEXT
    68. 10.noTrimWrap = | <url>|
    69.  
    70. 20 < temp.cr
    71.  
    72. 30 = TEXT
    73. 30.noTrimWrap = | <loc>|
    74. }
    75.  
    76. after.cObject = COA
    77. after.cObject {
    78. 10 = TEXT
    79. 10.value = </loc>
    80.  
    81. 20 < temp.cr
    82.  
    83. 30 = TEXT
    84. 30 {
    85. noTrimWrap = | <lastmod>|</lastmod>
    86. data = field:lastUpdated // field:SYS_LASTCHANGED // field:tstamp // field:crdate
    87. date = c
    88. }
    89.  
    90. 40 < temp.cr
    91.  
    92. 50 = TEXT
    93. 50 {
    94. noTrimWrap = | <changefreq>|</changefreq>
    95. # always / hourly / daily / weekly / monthly / yearly / never
    96. value = weekly
    97. }
    98.  
    99. 60 < temp.cr
    100.  
    101. 70 = TEXT
    102. 70 {
    103. noTrimWrap = | <priority>|</priority>
    104. # 0.1 - 1.0
    105. value = 1.0
    106. }
    107.  
    108. 80 < temp.cr
    109.  
    110. 90 = TEXT
    111. 90.noTrimWrap = | </url>|
    112.  
    113. 100 < temp.cr
    114. }
    115. }
    116. }
    117.  
    118. 2 < .1
    119. 2.NO.after.cObject.70.value = 0.9
    120.  
    121. 3 < .1
    122. 3.NO.after.cObject.70.value = 0.8
    123.  
    124. 4 < .1
    125. 4.NO.after.cObject.70.value = 0.7
    126.  
    127. 5 < .1
    128. 5.NO.after.cObject.70.value = 0.6
    129. }
    130.  
    131. 40 < .30
    132. 40.special.value = 40
    133. 40.excludeUidList >
    134.  
    135. 50 < .40
    136. 50.special.value = 45
    137.  
    138. 60 < .40
    139. 60.special.value = 35
    140. }

    Wie man sehen kann nutze ich also keine typolinks mehr sondern lediglich den Link, der von dem Menu generiert wird und schleuse diesen vor dem Rendern durch meine eigene Funktion.

    Ich hoffe, ich konnte damit ein bischen weiterhelfen.

    Schöne Grüße und gebt mal Bescheid, ob's geklappt hat.

  • 1