Zum Inhalt springen

Fehlersuche: Menupunkte direkt auf nicht http:// Ziele

Erstellt am 15. Juni 2012 · 1 Antwort · letzte Antwort am 15. Juni 2012

Tags: TCA, Links, Frage

rlp_immigrant ·

Hallo zusammen,

ich arbeite gerade an unserem Intranet. Vom Intranet aus sollen verschiedene lokale Ziele verlinkt werden. Diese sind teilweise über ftp://, file:// und dms:// zu erreichen.

Nun möchte ich Typo3 dazu bringen diese Linkziele im Menu auch direkt zu verlinken.
Dazu habe ich zuerst das TCA erweitert damit man im Backend die entsprechenden Schemen (Protokolle) auswählen kann.

$GLOBALS['TCA']['pages']['columns']['urltype']['config']['items']['5']['0'] = 'file://';
$GLOBALS['TCA']['pages']['columns']['urltype']['config']['items']['5']['1'] = 5;
$GLOBALS['TCA']['pages']['columns']['url_scheme']['config']['items']['3']['0'] = 'file://';
$GLOBALS['TCA']['pages']['columns']['url_scheme']['config']['items']['3']['1'] = 5;
$GLOBALS['TCA']['pages']['columns']['urltype']['config']['items']['6']['0'] = 'dms://';
$GLOBALS['TCA']['pages']['columns']['urltype']['config']['items']['6']['1'] = 6;
$GLOBALS['TCA']['pages']['columns']['url_scheme']['config']['items']['4']['0'] = 'dms://';
$GLOBALS['TCA']['pages']['columns']['url_scheme']['config']['items']['4']['1'] = 6;

Funktioniert auch wunderbar. Ich kann auf der DB sehen das die entsprechende Werte auch gespeichert werden.

Das Typoscript für unser Menu habe ich leicht angepasst:

  1 {
    wrap = <ul>|</ul>
    expAll = 0
    noBlur = 1
    
    NO = 1
    NO {
      ATagTitle {
        field = title
        fieldRequired = nav_title
      }
      wrapItemAndSub = <li>|</li>
      field = title
      #Je nach URL Type Schema (Protokoll) wechseln
      stdWrap.cObject = CASE
      stdWrap.cObject {
        key.field = urltype
        1 = COA
        # 1. Element enthält die direkte Verlinkung für den fall das keine URL gesetzt wurde
        1.1 = TEXT
        1.1{
          field = title
          doNotLinkIt = 1
          if {
           isFalse.field = url
          }
        }
        # 2. Element enthält indirekte Verlinkung wenn URL vorhanden        
        1.2 = TEXT
        1.2{
          field = title
          typolink.parameter.field = url
          typolink.extTarget.field = target
          typolink.forceAbsoluteUrl=1
          typolink.forceAbsoluteUrl.scheme = http
          doNotLinkIt = 1
          if {
           isFalse.field = url
           negate = 1
          }
        }
      
        2 < .1
        2.2.typolink.forceAbsoluteUrl.scheme = ftp
        3 < .2
        3.2.typolink.forceAbsoluteUrl.scheme = mailto
        4 < .2
        4.2.typolink.forceAbsoluteUrl.scheme = https
        5 < .2
        5.2.typolink.forceAbsoluteUrl.scheme = file
        6 < .2
        6.2.typolink.forceAbsoluteUrl.scheme = dms
        }
      }       
    }

Das merkwürdige ist nun das nur die Umschaltung von http:// auf file:// funktioniert. Alle anderen nicht.
Ich habe auch festgestellt das in 5.2 das Schema auf irgendwas anpassen kann und es funktioniert (z.b. test://). Alle anderen Elemente funktionieren nicht.

Sieht jemand den Fehler?

Danke und Grüße
Alex

rlp_immigrant ·

Ok, selber googeln macht schlau 😉
Bin über eine Nachricht in ner Mailinglist gestolpert welche mir als Grundlage gedient hat.

Der Vollständigkeit halber hier die Lösung.

    NO {
      ATagTitle {
        field = title
        fieldRequired = nav_title
      }
      wrapItemAndSub = <li>|</li>
      stdWrap.cObject = CASE
      stdWrap.cObject {
        key.field = doktype
        default = TEXT
        default{
          field = title
          typolink.parameter.data = field:uid
        }
        # Doktype 3 = externer Link
        3=COA
        3 {
          # Textblock für HTTP-Links (Wert 1)
          10 = TEXT
          10 {
            field = title
            typolink.parameter.data >
            typolink.parameter.dataWrap = http://{field:url}
            typolink.ATagBeforeWrap=1
            stdWrap.htmlSpecialChars = 1
            if {
              value=1
              equals.field=urltype
            }
          }
          # Textblock für HTTPS-Links (Wert 4)
          20 < .10
          20 {
            typolink.parameter.dataWrap = https://{field:url}
            if.value = 4 
          }
          # Textblock für FTP-Links (Wert 2)
          30 < .10
          30 {
            typolink.parameter.dataWrap = ftp://{field:url}
            if.value = 2 
          }
          # Textblock für Mailto-Links (Wert 3)
          40 < .10
          40 {
            typolink.parameter.dataWrap = mailto://{field:url}
            if.value = 3 
          }
          # Textblock für file-Links (Wert 5)
          50 < .10
          50 {
            typolink.parameter.dataWrap = file://{field:url}
            if.value = 5 
          }
          # Textblock für DMS-Links (Wert 6)
          60 < .10
          60 {
            typolink.parameter.dataWrap = dms://dmsexplorer/idlist=I{field:url}
            if.value =    6 
          }
        }      
      }
      doNotLinkIt = 1       
     }

Vielleicht kann es ja jemand gebrauchen