Problem mit dem Modul navigation_lang_changer

Alles rund um Module und Plugins in CONTENIDO 4.10.
Antworten
lunsen_de
Beiträge: 300
Registriert: Mo 17. Okt 2005, 20:26
Wohnort: Weimar
Kontaktdaten:

Problem mit dem Modul navigation_lang_changer

Beitrag von lunsen_de »

Hallo, ich sehe ein Problem beim Modul navigation_lang_changer.

System neueste Dev 4.10 mit PHP 8.1
mit Modrewrite

Bei meiner Seite gibt es zwei Sprachen: de und en

Existiert der Artikel (synchronisiert) in beiden Sprachen kann ich mittels klick auf de oder en zwischen den Sprachen im Artikel wechseln.

Existiert der Artikel in der 2. Sprache (z.B. en) nicht, wird der Link en trotzdem angezeigt und es wird ein Link zur IDart des Artikels in der 2. Sprache generiert, obwohl diesen nicht gibt.
War das früher nicht so, dass der Link (also das en) nur angezeigt wurde, wenn der Artikel und die Kategorie in der 2. Sprache vorhanden und online sind?

Beispiel:
In de ist der Artikel "Start", in en synchronisert "Home" da und online, also wird im Sprachmodul en angezeigt und der Link lautet www.domain.de/en/home.html

In de ist der Artikel "Start", in en gibt es diesen nicht!!! Trotzdem wird im Sprachmodul en angezeigt und der Link lautet www.doman.de/cms/front_content.php?idart=1&changelang=2
Diesen Artikel gibt es nicht und es führt auf die Fehlerseite.

Was muss hier geändert werden, damit der Sprachlink, also das de oder en, nur angezeigt wird, wenn es den Artikel in der 2. Sprache gibt und er online ist?

Hier nochmal der Modulcode:

Code: Alles auswählen

<?php

/**
 * Description: Language changer
 *
 * @package    Module
 * @subpackage NavigationLangChanger
 * @author     alexander.scheider@4fb.de
 * @copyright  four for business AG <www.4fb.de>
 * @license    https://www.contenido.org/license/LIZENZ.txt
 * @link       https://www.4fb.de
 * @link       https://www.contenido.org
 */

// create instances and init vars
$catCollection = new cApiCategoryLanguageCollection();
$artCollection = new cApiArticleLanguageCollection();
$catArtCollection = new cApiCategoryArticleCollection();
$languageCollectionInstance = new cApiLanguageCollection();
$clientsLangInstance = new cApiClientLanguageCollection();
$languageInstance = new cApiLanguage();

$tpl = new cTemplate();
$nextLang = false;
$selectedLang = NULL;
$checkedCatArt = false;
$idcatAuto = cRegistry::getCategoryId();
$artRetItem = NULL;
$urlSet = false;
$currentLanguage = NULL;
$clientId = cRegistry::getClientId();
$catCheck = false;
$artCheck = false;
$startart = NULL;

// get all client language id's
$clientsLangInstance->select("idclient= " . $clientId);
$resultClientLangs = $clientsLangInstance->fetchArray('idlang', 'idlang');

// get all active languages of a client
foreach ($resultClientLangs as $clientLang) {
    $languageInstance->loadByMany(
        [
            'active' => '1',
            'idlang' => $clientLang,
        ]
    );
    if ($languageInstance->get('idlang')) {
        $allLanguages[] = $languageInstance->get('idlang');
    }
    $languageInstance = new cApiLanguage();
}

if (empty($allLanguages)) {
    // no active languages. handling was moved to include.front_content.php (lines 433 - 439).
} else if (count($allLanguages) != 1) {

    $langName = '';

    // else check if there more as one language
    $currentLanguage = cRegistry::getLanguageId();

    // set next language if exists
    foreach ($allLanguages as $langs) {
        if ($langs > $currentLanguage) {
            $langName = conHtmlSpecialChars($languageCollectionInstance->getLanguageName((int) $langs));
            if ('' === trim($langName)) {
                $langName = mi18n("LANGUAGE_NAME_EMPTY");
            }
            $tpl->set('s', 'label', $langName);
            $tpl->set('s', 'title', $langName);

            $selectedLang = $langs;
            $nextLang = true;
            break;
        }
    }

    // otherwise set first language
    if ($nextLang === false) {
        $languageName = conHtmlSpecialChars($languageCollectionInstance->getLanguageName(reset($allLanguages)));
        if ('' === trim($langName)) {
            $langName = mi18n("LANGUAGE_NAME_EMPTY");
        }

        $tpl->set('s', 'label', $languageName);
        $tpl->set('s', 'title', $languageName);
        $selectedLang = reset($allLanguages);
    }

    // check articles, if article exists and is online and not locked set the check to true
    $artCheck = $artCollection->select("idart = '" . cSecurity::toInteger($idart) . "' AND idlang = '" . cSecurity::toInteger($selectedLang) . "' AND online = '1' AND locked = '0'", NULL, NULL, NULL);

    // check if this article is an startarticle
    $startart = $catCollection->getStartIdartByIdcatAndIdlang($idcatAuto, $selectedLang);

    if ($artCheck !== true || ($startart == $idart)) {

        // check category and articles, if category exists and has start article
        // which is online and not locked the set check to true
        $catCheck = $catCollection->select("idcat = '" . cSecurity::toInteger($idcatAuto) . "' AND idlang = '" . cSecurity::toInteger($selectedLang) . "' AND startidartlang != '0'", NULL, NULL, NULL);

        $catRetItem = new cApiCategoryLanguage();
        $catRetItem->loadByCategoryIdAndLanguageId(cSecurity::toInteger($idcatAuto), cSecurity::toInteger($selectedLang));

        if ($catCheck === true && $catRetItem) {
            $artRetItem = $artCollection->fetchById($catRetItem->get('startidartlang'));
        }
        if ($artRetItem) {
            if ($artRetItem->get('online') == 1 && $artRetItem->get('locked') == 0) {
                $checkedCatArt = true;
            }
        }
    }

    // if check is true then set url, otherwise check for next language
    if ($checkedCatArt === true) {
        $url = $catRetItem->getLink($selectedLang);
    } else {
        $config = cRegistry::getClientConfig(cRegistry::getClientId());
        $url = cRegistry::getFrontendUrl() . 'front_content.php?idart='.cSecurity::toInteger($idart).'&changelang=' . cSecurity::toInteger($selectedLang);
    }

    $tpl->set('s', 'url', conHtmlSpecialChars($url));
    $tpl->generate('get.tpl');

}

?>
Grüße Lars
xmurrix
Beiträge: 3200
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 1 Mal
Danksagung erhalten: 9 Mal
Kontaktdaten:

Re: Problem mit dem Modul navigation_lang_changer

Beitrag von xmurrix »

Hallo Lars,

im Modulcode ist folgender Block dafür zuständig, dass der Link zum Startartikel der Kategorie in der anderen Sprache erstellt wird, wenn es den aktuellen Artikel in der anderen Sprache nicht gibt, es nicht online und nicht gesperrt ist.

Code: Alles auswählen

    if ($artCheck !== true || ($startart == $idart)) {
        // check category and articles, if category exists and has start article
        // which is online and not locked the set check to true
        $catCheck = $catCollection->select("idcat = '" . cSecurity::toInteger($idcatAuto) . "' AND idlang = '" . cSecurity::toInteger($selectedLang) . "' AND startidartlang != '0'", NULL, NULL, NULL);

        $catRetItem = new cApiCategoryLanguage();
        $catRetItem->loadByCategoryIdAndLanguageId(cSecurity::toInteger($idcatAuto), cSecurity::toInteger($selectedLang));

        if ($catCheck === true && $catRetItem->isLoaded()) {
            $artRetItem = $artCollection->fetchById($catRetItem->get('startidartlang'));
        }
        if ($artRetItem) {
            if ($artRetItem->get('online') == 1 && $artRetItem->get('locked') == 0) {
                $checkedCatArt = true;
            }
        }
    }

Du kannst den ganzen Block auskommentieren, dann sollte für den Fall, das es den Artikel in der anderen Sprache nicht gibt, die Variable $url mit dem Wert '#' gesetzt werden.

Weiter unten wird die Variable $url im Template gesetzt und das Template ausgegeben. Das kannst du in wie folgt ändern, wenn du den Sprachwechsler für die andere Sprache nicht anzeigen willst:

Code: Alles auswählen

    if ($url !== '#') {
        $tpl->set('s', 'url', conHtmlSpecialChars($url));
        $tpl->generate('get.html');
    }
Ich habe das alles zwar nicht getestet, aber so sollte das funktionieren.

Gruß
Murat
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
lunsen_de
Beiträge: 300
Registriert: Mo 17. Okt 2005, 20:26
Wohnort: Weimar
Kontaktdaten:

Re: Problem mit dem Modul navigation_lang_changer

Beitrag von lunsen_de »

Hallo Murat,

leider hht das nicht funktioniert. Nach dem auskommentieren des ganzen Blocks. geht das AMR nicht mehr und alle Links haben den Aufbau:

https://www.domain.de/cms/front_content ... angelang=2

Egal ob online oder nicht. Und da keine # daraus wird, wenn der Artikel nicht online ist hilft auch der Teil mit derVariable $url im Template nicht.

Das Problem ist also immernoch dasselbe, Artikel in anderer Sprache nicht online und trotzdem ein Link der zur Fehlerseite führt und zusätzlich funktioniert das AMR im Sprachwechsel nicht mehr.

Ich hoffe du kannst Dir das Modul nochmal anschauen, da es ja früher so funktioniert hat und in der aktuellsten Version sicher funktionieren soll.

Grüße Lars
xmurrix
Beiträge: 3200
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 1 Mal
Danksagung erhalten: 9 Mal
Kontaktdaten:

Re: Problem mit dem Modul navigation_lang_changer

Beitrag von xmurrix »

Morgen,

der Änderungsvorschlag von mir hat so nicht funktioniert, daher habe ich mir das Modul etwas näher angesehen. Hier ist ein Beispiel, in der der Artikel-Link in anderer Sprache nur dann angezeigt wird, wenn es den Artikel in der anderen Sprache gibt (Artikel existiert, ist online und ist nicht gesperrt):

Code: Alles auswählen

<?php

/**
 * Description: Language changer
 *
 * @package    Module
 * @subpackage NavigationLangChanger
 * @author     alexander.scheider@4fb.de
 * @copyright  four for business AG <www.4fb.de>
 * @license    https://www.contenido.org/license/LIZENZ.txt
 * @link       https://www.4fb.de
 * @link       https://www.contenido.org
 */

// create instances and init vars
$catCollection = new cApiCategoryLanguageCollection();
$artCollection = new cApiArticleLanguageCollection();
$catArtCollection = new cApiCategoryArticleCollection();
$languageCollectionInstance = new cApiLanguageCollection();
$clientsLangInstance = new cApiClientLanguageCollection();
$languageInstance = new cApiLanguage();

$tpl = new cTemplate();
$nextLang = false;
$selectedLang = NULL;
$checkedCatArt = false;
$idcatAuto = cRegistry::getCategoryId();
$artRetItem = NULL;
$urlSet = false;
$currentLanguage = NULL;
$clientId = cRegistry::getClientId();
$catCheck = false;
$artCheck = false;
$startart = NULL;

// get all client language id's
$clientsLangInstance->select("idclient= " . $clientId);
$resultClientLangs = $clientsLangInstance->fetchArray('idlang', 'idlang');

// get all active languages of a client
foreach ($resultClientLangs as $clientLang) {
    $languageInstance->loadByMany(
        [
            'active' => '1',
            'idlang' => $clientLang,
        ]
    );
    if ($languageInstance->get('idlang')) {
        $allLanguageIds[] = cSecurity::toInteger($languageInstance->get('idlang'));
    }
}

if (count($allLanguageIds) != 1) {
    $idart = cSecurity::toInteger(cRegistry::getArticleId());
    $langName = '';

    // else check if there is more than one language
    $currentLanguage = cSecurity::toInteger(cRegistry::getLanguageId());

    // set next language if exists
    foreach ($allLanguageIds as $languageId) {
        if ($languageId > $currentLanguage) {
            $langName = conHtmlSpecialChars($languageCollectionInstance->getLanguageName($languageId));
            if ('' === trim($langName)) {
                $langName = mi18n("LANGUAGE_NAME_EMPTY");
            }
            $tpl->set('s', 'label', $langName);
            $tpl->set('s', 'title', $langName);

            $selectedLang = $languageId;
            $nextLang = true;
            break;
        }
    }

    // otherwise set first language
    if ($nextLang === false) {
        $languageName = conHtmlSpecialChars($languageCollectionInstance->getLanguageName(reset($allLanguageIds)));
        if ('' === trim($langName)) {
            $langName = mi18n("LANGUAGE_NAME_EMPTY");
        }

        $tpl->set('s', 'label', $languageName);
        $tpl->set('s', 'title', $languageName);
        $selectedLang = reset($allLanguageIds);
    }

    // check articles, if article exists and is online and not locked set the check to true
    $artCheck = $artCollection->select("idart = '" . $idart . "' AND idlang = '" . cSecurity::toInteger($selectedLang) . "' AND online = '1' AND locked = '0'", NULL, NULL, NULL);

    // check if this article is an startarticle
    $startart = $catCollection->getStartIdartByIdcatAndIdlang($idcatAuto, $selectedLang);

    if ($artCheck !== true || ($startart == $idart)) {
        // check category and articles, if category exists and has start article
        // which is online and not locked the set check to true
        $catCheck = $catCollection->select("idcat = '" . cSecurity::toInteger($idcatAuto) . "' AND idlang = '" . cSecurity::toInteger($selectedLang) . "' AND startidartlang != '0'", NULL, NULL, NULL);

        $catRetItem = new cApiCategoryLanguage();
        $catRetItem->loadByCategoryIdAndLanguageId(cSecurity::toInteger($idcatAuto), cSecurity::toInteger($selectedLang));

        if ($catCheck === true && $catRetItem) {
            $artRetItem = $artCollection->fetchById($catRetItem->get('startidartlang'));
        }
        if ($artRetItem) {
            if ($artRetItem->get('online') == 1 && $artRetItem->get('locked') == 0) {
                $checkedCatArt = true;
            }
        } else {
            $checkedCatArt = true;
            $catRetItem = null;
        }
    }

    // if check is true then set url, otherwise check for next language
    if ($checkedCatArt === true) {
        $url = isset($catRetItem) ? $catRetItem->getLink($selectedLang) : '#';
    } else {
        $config = cRegistry::getClientConfig(cRegistry::getClientId());
        $url = cRegistry::getFrontendUrl() . 'front_content.php?idart=' . cSecurity::toInteger($idart) . '&changelang=' . cSecurity::toInteger($selectedLang);
    }

    if ($url !== '#') {
        $tpl->set('s', 'url', $url);
        $tpl->generate('get.html');
    }

}

?>
Übrigens, beim Modul 'navigation_lang_changer' sehe ich noch etwas Optimierungsbedarf, es generiert nicht Links zu allen Sprachen -sofern es mehr als zwei Sprachen gibt- auch verwendet es die alte Templatelogik, das sollte auf Smarty umgestellt werden. Ich erstelle mal in GitHub einen Task dafür.

Gruß
Murat
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
lunsen_de
Beiträge: 300
Registriert: Mo 17. Okt 2005, 20:26
Wohnort: Weimar
Kontaktdaten:

Re: Problem mit dem Modul navigation_lang_changer

Beitrag von lunsen_de »

Hallo Murat,

mit deinem neuen Code kann ich einen Teilerfolg vermelden. Aber es gibt noch einige selsame Varianten. Ich versuche es mal Stück für Stück vorzutragen. Dabei schein es noch eine Rolle zu spieen, ob es die Kategrie oder den Artikel schon mal gab und er gelöscht wurde oder ob noch gar keine Synchronisation stattgefunden hat.

Fall 1: Artikel in Sprache 1 - kein synchronisierte/r Kategorie/Artikel in Sprache 2
Es wird kein Sprachlink angezeigt (funktioniert also)

Fall 2: man synchronisert den Artikel zum ersten mal und er ist Offline UND kein Startartikel
Es wird kein Sprachlink angezeigt (funktioniert also)

Fall 3: man stellt Ihn in Sprache 2 Online und er ist NICHT Startartikel
Es wird ein Sprachlink angezeigt, der zum Ziel führt, allerdings geht das ModRewrite nicht un der Link sieht so aus: www.domain.de/cms/front_content.php?ida ... angelang=2

Fall 4: Artikel in Sprache 2 ist Online UND Startartikel
Es wird ein Sprachlink angezeigt, der zum Ziel führt, ModRewrite funktioniert: www.domain.de/english/test/inhaltspflege.html

Fall 5: man schaltet ihn Offline, er ist aber noch als Startartikel markiert
Es wird ein Sprachlink angezeigt, der zur Fehlerseite führt, Link sieht so aus: www.domain.de/cms/front_content.php?ida ... angelang=2

Der Artikel in Sprache 2 muss also Offline UND kein Startartikel sein damit der Sprachlink in Sprache 1 wieder verschwindet.

Und jetzt wird es ganz verrückt: ist der Artikel in Sprache 2 Offline und kein Startartikel (es wird kein Link angezeigt) und man löscht Ihn wird danach auch kein Link angezeigt, also wie in Fall 1. Löscht man allerdings den Artikel in Sprache 2 während er Online und Startartikel war und ein Link wurde angezeit, bleibt der Link da und führt natürlich wieder zur Fehlerseite.

Es funktioniert also nur richtig, wenn der 2. Artikel nie da war, er nach dem Synchronieren Off und nicht Startartikel ist, oder er gelöscht wird, wenn er nicht online und kein Startartikel war.

Ich habe jetzt 1 Stunde alle Varianten mehrfach durchgespielt und bin etwas verwirrt. Vielleicht kannst du das bestätigen oder hast eine Idee was hier falsch laufen könnte.

Grüße Lars
xmurrix
Beiträge: 3200
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 1 Mal
Danksagung erhalten: 9 Mal
Kontaktdaten:

Re: Problem mit dem Modul navigation_lang_changer

Beitrag von xmurrix »

Hallo Lars,

danke dir für die detaillierte Beschreibung der Probleme.

Auf die Schnelle habe ich dir leider keine Lösung dafür. So wie es aussieht, muss man sich mit dem Modul etwas genauer beschäftigen.

Viele Grüße

Murat
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
Faar
Beiträge: 1945
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Hat sich bedankt: 6 Mal
Kontaktdaten:

Re: Problem mit dem Modul navigation_lang_changer

Beitrag von Faar »

xmurrix hat geschrieben: Sa 27. Apr 2024, 07:17 Übrigens, beim Modul 'navigation_lang_changer' sehe ich noch etwas Optimierungsbedarf, es generiert nicht Links zu allen Sprachen -sofern es mehr als zwei Sprachen gibt- auch verwendet es die alte Templatelogik, das sollte auf Smarty umgestellt werden.
Wenn ich das richtig verstehe, müsste das Modul mit diesem Code nicht nur alle aktiven Sprachen des Clients suchen, sondern auch, ob es in dieser Sprache einen Artikel gibt, der online und öffentlich ist?
Was der Code in Zeile 89 wohl auch tut.
Ich vermisse im Nachgang eine Schleife, wo alle Artikel in verschiedenen Sprachen aufgelistet und im Template dargestellt werden.
Ist das die Schleife im Zeile 61?
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.
xmurrix
Beiträge: 3200
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 1 Mal
Danksagung erhalten: 9 Mal
Kontaktdaten:

Re: Problem mit dem Modul navigation_lang_changer

Beitrag von xmurrix »

Faar hat geschrieben: Fr 10. Mai 2024, 16:44 ...Wenn ich das richtig verstehe, müsste das Modul mit diesem Code nicht nur alle aktiven Sprachen des Clients suchen, sondern auch, ob es in dieser Sprache einen Artikel gibt, der online und öffentlich ist?...
Ja, für alle aktiven Sprachen des Kunden müsste man das machen.
Faar hat geschrieben: Fr 10. Mai 2024, 16:44 ...Ich vermisse im Nachgang eine Schleife, wo alle Artikel in verschiedenen Sprachen aufgelistet und im Template dargestellt werden.
Ist das die Schleife im Zeile 61?...
Diese Schleife holt die Sprache mir der nächsthöheren Sprach-Id danach wird mit dieser Sprach-Id ein Artikel in der anderen Sprache gesucht.
Getestet habe ich das nicht, aber aus dem Code entnehme ich, dass es immer einen Sprachwechsel zum Artikel in der nächsten Sprache macht.
Hat man also mehr als zwei Sprachen, würde es von Sprache A in Sprache B wechseln, dann von Sprache B in Sprache C, usw...
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
Faar
Beiträge: 1945
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Hat sich bedankt: 6 Mal
Kontaktdaten:

Re: Problem mit dem Modul navigation_lang_changer

Beitrag von Faar »

xmurrix hat geschrieben: Sa 11. Mai 2024, 12:35 Diese Schleife holt die Sprache mir der nächsthöheren Sprach-Id danach wird mit dieser Sprach-Id ein Artikel in der anderen Sprache gesucht.
Getestet habe ich das nicht, aber aus dem Code entnehme ich, dass es immer einen Sprachwechsel zum Artikel in der nächsten Sprache macht.
Hat man also mehr als zwei Sprachen, würde es von Sprache A in Sprache B wechseln, dann von Sprache B in Sprache C, usw...
Wäre ich also in der höchsten Sprach-ID, würde es mir keine andere Sprache mehr anzeigen?
Grundsätzlich wäre ein Drop-Down Menü sinnvoll, wo alle Sprachen aufgelistet sind, in denen der Artikel vorkommt (was nur bei synchronisierter Sprache funktioniert). Alle Sprachen in denen kein synchroner Artikel zu finden ist, werden nicht angezeigt.
Das würde sich dann aber nur als Sprachumschalter in einem Artikel bewähren.

Ganz anders als eine generelle Sprachumschaltung für die gesamte Webseite, wo man sinnvollerweise alle Sprachen sieht und auf die Startseite-Homepage der jeweiligen Sprache umgeleitet wird.
Also bräuchte es zwei Module oder eine eierlegende Wollmilchsau.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.
xmurrix
Beiträge: 3200
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 1 Mal
Danksagung erhalten: 9 Mal
Kontaktdaten:

Re: Problem mit dem Modul navigation_lang_changer

Beitrag von xmurrix »

Faar hat geschrieben: Sa 11. Mai 2024, 14:21 ...Wäre ich also in der höchsten Sprach-ID, würde es mir keine andere Sprache mehr anzeigen?...
Ja, so sieht es aus.
Bei Beispielmandanden kann man z. B. zum englischen Artikel wechseln. Danach gibt es kein Weg zurück zur vorherigen (deutschen) Sprache, außer man löscht die Cookies. Das sind zwar nur Beispielmodule, aber auch da würde ich mir eine gewisse Grundfunktionalität wünschen.
Faar hat geschrieben: Sa 11. Mai 2024, 14:21 ...Grundsätzlich wäre ein Drop-Down Menü sinnvoll, wo alle Sprachen aufgelistet sind...
Sehe ich auch so. Man kann ja einen Link, wie bisher zur anderen Sprache erstellen, sofern es nur zwei Sprachen gibt.
Hat man aber mehr als zwei Sprachen, wäre ein Dropdown sinnvoll.
Faar hat geschrieben: Sa 11. Mai 2024, 14:21 ...Ganz anders als eine generelle Sprachumschaltung für die gesamte Webseite, wo man sinnvollerweise alle Sprachen sieht und auf die Startseite-Homepage der jeweiligen Sprache umgeleitet wird.
Also bräuchte es zwei Module oder eine eierlegende Wollmilchsau....
Ich würde hier zwei verschiedene Module bevorzugen. Andererseits kenne ich jetzt auch keine Webseite, bei der es zwei Sprachwechsler (einen für die ganze Seite und einen für den Artikel) gibt. Meistens gibt es einen Sprachwechsler. Existiert ein Artikel in der anderen Sprache, wird sie angezeigt. Falls nicht, wird eine Fehlerseite in der anderen Sprache angezeigt oder man landet direkt auf der Startseite in der anderen Sprache, das kann die Startseite der Unterkategorie sein oder gar die Homepage der Seite.

Wir könnten uns also überlegen, das jetzige Modul so anzupassen, dass man das Verhalten über die Konfiguration steuern kann.
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
Oldperl
Beiträge: 4315
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Hat sich bedankt: 3 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Problem mit dem Modul navigation_lang_changer

Beitrag von Oldperl »

Servus,
xmurrix hat geschrieben: Sa 11. Mai 2024, 16:17 Existiert ein Artikel in der anderen Sprache, wird sie angezeigt. Falls nicht, wird eine Fehlerseite in der anderen Sprache angezeigt
Ist das nicht schon momentan so? Wenn ich einen Artikel in einer anderen Sprache aufrufe, welcher nicht vorhanden oder online ist, sollte da nicht sowieso die eingestellte Fehlerseite, ansonsten die Standard-Fehlerseite, aufgerufen werden?

Gruß Ortwin
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
xmurrix
Beiträge: 3200
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 1 Mal
Danksagung erhalten: 9 Mal
Kontaktdaten:

Re: Problem mit dem Modul navigation_lang_changer

Beitrag von xmurrix »

Oldperl hat geschrieben: Mo 13. Mai 2024, 14:48 ...
xmurrix hat geschrieben: Sa 11. Mai 2024, 16:17 Existiert ein Artikel in der anderen Sprache, wird sie angezeigt. Falls nicht, wird eine Fehlerseite in der anderen Sprache angezeigt
Ist das nicht schon momentan so? Wenn ich einen Artikel in einer anderen Sprache aufrufe, welcher nicht vorhanden oder online ist, sollte da nicht sowieso die eingestellte Fehlerseite, ansonsten die Standard-Fehlerseite, aufgerufen werden?...
Ja, in CONTENIDO würde sich die Logik im Frontend um die Anzeige der Fehlerseite (konfiguriert oder Standard) kümmern.
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
Antworten