[Frage] Sprachenmenü und hreflang und tx_news TYPO3-Version: 7.6.23

  • 0 x
    11 Beiträge
    0 Hilfreiche Beiträge
    22. 02. 2018, 19:27

    Hallo die Experten,
    ich habe ein Problem mit der Indexierung der News (tX_news) auf einer meiner Websites. Habe herausgefunden dass es unter anderem am hreflang Tag und am Sprachenmenü liegt. Und zwar bei jenen (älteren) News, die nicht in allen Sprachen verfasst worden waren.

    Obwohl zB diese News nur auf Deutsch geschrieben ist sehen die hreflang Tags so aus:
    [code]<link rel="alternate" hreflang="de" href="https://example.com/de/artikel/die-ueberraschungen-gehen-weiter/" />
    <link rel="alternate" hreflang="it" href="https://example.com/it/articolo/die-ueberraschungen-gehen-weiter/" />
    <link rel="alternate" hreflang="en" href="https://example.com/en/article/die-ueberraschungen-gehen-weiter/" />
    <link rel="alternate" hreflang="fr" href="https://example.com/fr/article/die-ueberraschungen-gehen-weiter/" />
    [/code]

    Und das Sprachmenü so:
    [code]<a href="/de/artikel/die-ueberraschungen-gehen-weiter/" title="Deutsch">De</a>
    <a href="/it/articolo/die-ueberraschungen-gehen-weiter/" title="Italiano">It</a>
    <a href="/en/article/die-ueberraschungen-gehen-weiter/" title="English">En</a>
    <a href="/fr/article/die-ueberraschungen-gehen-weiter/" title="Français">Fr</a>
    [/code]

    Laut meiner Recherchen habe ich herausgefunden, dass das TYPO3 in diesem Falle nicht automatisch erkennt ob der News-Record übersetzt worden ist und daher das Sprachmenü bzw die hreflang Tags "so tun als ob es eine Übersetzung gäbe".

    Habe dann diesen Script gefunden: https://gist.github.com/birger-fuehne/a8a97c94ec9346d691174462ccbfcfcc und habe die Datei MenuUtility.php in diesen Ordner gespeichert: typo3conf/ext/news/Classes/ViewHelpers/
    Ist das der richtige Ort zum speichern dieser Datei?

    Hier noch das Typoscript für mein Sprachmenü und zwischen den #Silverback Kommentaren habe ich den Script eingebaut (wie in MenuUtility.php vorgegeben) :
    [code]lib.language-menu = HMENU
    lib.language-menu {
    special = language
    special.value = 0,1,2,3
    special.normalWhenNoLanguage = 0

    wrap.insertData = 1
    #wrap = <nav class="language-menu"><ul>|</ul></nav>
    wrap = |

    1 = TMENU
    1 {
    # Silverback
    itemArrayProcFunc = BGM\BgmTheme\Utility\MenuUtility->checkForRecordTranslations
    itemArrayProcFunc.getParameters {
    # GET.PARAMETER.WITH.RECORD.UID = TABLENAME
    tx_news_pi1.news = tx_news_domain_model_news
    }
    # Silverback

    NO = 1
    NO {
    additionalParams.cObject = TEXT
    additionalParams.cObject {
    data = GP:tx_news_pi1|news
    stdWrap.wrap = &tx_news_pi1[news]=|
    stdWrap.required = 1
    }
    ATagTitle = Deutsch || Italiano || English || Français
    allWrap = <li>|</li>
    stdWrap {
    setCurrent = De || It || En || Fr
    current = 1
    }
    }

    ACT = 1
    ACT <.NO
    ACT.allWrap = <li class="active">|</li>

    USERDEF1 = 1
    USERDEF1{
    doNotLinkIt = 1
    stdWrap.override = <li><span>De</span></li> || <li><span>It</span></li> || <li><span>En</span></li> || <li><span>Fr</span></li>
    }
    }
    }
    [/code]

    Hier mein Typoscript für die hreflang Tags und und zwischen den #Silverback Kommentaren habe ich den Script eingebaut:
    [code]lib.alt-lang = HMENU
    lib.alt-lang {
    special = language
    #Sprach IDs eintragen
    special.value = 0,1,2,3
    1 = TMENU
    1 {
    # Silverback
    itemArrayProcFunc = BGM\BgmTheme\Utility\MenuUtility->checkForRecordTranslations
    itemArrayProcFunc.getParameters {
    # GET.PARAMETER.WITH.RECORD.UID = TABLENAME
    tx_news_pi1.news = tx_news_domain_model_news
    }
    # Silverback

    NO = 1
    NO {
    stdWrap.cObject = TEXT
    stdWrap.cObject {
    value = de || it || en || fr
    }
    linkWrap = <link rel="alternate" hreflang="|
    doNotLinkIt = 1
    after.cObject = TEXT
    after.cObject {
    stdWrap {
    wrap = " href="|" />
    typolink {
    parameter.data = page:uid
    additionalParams = &L=0 || &L=1 || &L=2 || &L=3
    returnLast = url
    #inkl baseurl
    forceAbsoluteUrl = 1
    #z.b. tt_news
    addQueryString = 1
    addQueryString.method = GET
    addQueryString.exclude = gclid,L,id,cHash,no_cache
    }
    }
    }
    }
    CUR = 1
    CUR.doNotShowLink = 1

    USERDEF1 = 1
    USERDEF1.doNotShowLink = 1

    USERDEF2 < .CUR
    }
    }
    [/code]

    Leider kireg ich es nicht zum Laufen.
    Ist das die richtige Art und Weise den Script einzubauen? Hab damit kaum Erfahrung vll könnt ihr mir kurz einen Tipp geben oder eine gänzlich andere Lösung empfehlen?

    Besten Dank und schönen Abend


  • 1
  • pstranghoener pstrangho...
    Die Macht
    0 x
    531 Beiträge
    24 Hilfreiche Beiträge
    26. 02. 2018, 07:48

    Hey Silverback,
    gute Frage...Ich pinne Sie mal oben mit an und hoffe du bekommst schnell eine Antwort.

    Gruß
    Philipp

  • 0 x
    11 Beiträge
    0 Hilfreiche Beiträge
    26. 02. 2018, 08:56

    Vielen Dank. Hofentlich kennt jemand eine Lösung.

  • freeatweb freeatweb
    Jedi-Meister
    0 x
    267 Beiträge
    4 Hilfreiche Beiträge
    27. 02. 2018, 13:50

    Hallo,

    wie hast du den Content-Fallback in den Sprachkonfigurationen definiert?

    In folgendem Beispiel wird z.B. die sys_language_uid = 0 (meinstens deutsch) ausgegeben, wenn keine Übersetzung vorhanden ist:

    Entscheidend dabei ist config.sys_language_mode

    [globalVar = GP:L = 1]
    config.sys_language_uid = 1
    config.sys_language_mode = content_fallback ; 0
    config.language = en
    config.locale_all = english
    config.htmlTag_langKey = en
    [global]

    Werden die News-Details auf einer eigenen Seite angezeigt?

    Wenn ja - lösche oder deaktiviere die Seitenübersetzungen der News-Detailseite.

    Lg

  • 0 x
    11 Beiträge
    0 Hilfreiche Beiträge
    02. 03. 2018, 08:24

    Hi,
    danke für die Antwort.
    Meine Sprachen-Konfiguration sieht so aus:

    [code]config.sys_language_mode = strict
    config.sys_language_overlay = hideNonTranslated

    # Hauptsprache festlegen: Deutsch
    config {
    sys_language_uid = 0
    language = de
    locale_all = de_DE.UTF-8
    }

    # Italiano
    [globalVar = GP:L = 1]
    config {
    sys_language_uid = 1
    language = it
    locale_all = it_IT.UTF-8
    }
    [/code]

    Und ja, die News-Details werden auf einer eigenen Seite ausgegeben.

  • 0 x
    11 Beiträge
    0 Hilfreiche Beiträge
    02. 03. 2018, 08:28

    Die Sache ist,
    ich möchte nicht, dass auf die Standardsprache zurückgegriffen wird. Ich möchte dass das Sprachenmenü keinen Link zu einer nicht übersetzen News ausgibt, selbiges möchte ich für die hreflang Meta-Tags.

  • 1