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