Mod_rewrite und Nutzung von articleLanguageCollection

Fragen zur Installation von CONTENIDO 4.9? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
Antworten
rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Mod_rewrite und Nutzung von articleLanguageCollection

Beitrag von rethus »

Ich habe folgenden Language-Switcher:

Code: Alles auswählen

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

$checkedCatArt = false;
$idcatAuto = cRegistry::getCategoryId();
$artRetItem = NULL;
$currentLanguage = NULL;
$clientId = cRegistry::getClientId();
$data = array();

// 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(array(
        'active' => '1',
        'idlang' => $clientLang
    ));
    if ($languageInstance->get('idlang')) {
        $allLanguages[] = $languageInstance->get('idlang');
    }
    $languageInstance = new cApiLanguage();
}

if (empty($allLanguages)) {

    // if no languages present do nothing
    echo "No languages present";
    exit();

} else if (count($allLanguages) != 1) {

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

    // set next language and id
    foreach ($allLanguages as $langs) {

            $catCheck = $catCollection->select("idcat = " . $idcatAuto . " AND " . " idlang = " . $langs . " AND " . "startidartlang != 0", NULL, NULL, NULL);
            $catRetItem = new cApiCategoryLanguage();
            $catRetItem->loadByCategoryIdAndLanguageId($idcatAuto, $langs);

        if ($catCheck === true && $catRetItem) {
            $artRetItem = $artCollection->fetchById($catRetItem->get('startidartlang'));

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



// ####   PLATZMARKER  ###



    // if check is true then set url, otherwise check for next language
            if ($checkedCatArt === true) {
                $url = $catRetItem->getLink($langs);
            } else {
                $config = cRegistry::getClientConfig(cRegistry::getClientId());
                $url = cRegistry::getFrontendUrl() . 'front_content.php?idart='.$idart.'&changelang=' . $langs;
            }
            $lang_name=$languageCollectionInstance->getLanguageName($langs);
            if($langs==1 |$langs==3 | $langs==4 | $langs==5){
                        array_push($data, array('langID' => $langs,
                                                'label' => $lang_name,
                                                'title' => $lang_name,
                                                'url' => $url));
            }
        }
    }
}

function split_lang($langN){

    $data = preg_split('/ /', $langN, -1);
    return $data;
}

function map_lang($lang){
    $default = $lang;
    $lang = strtolower($lang);
    echo $lang;
    switch($lang){
        case "german":
            $data="Deutsch";
        break;
        case "english":
            $data="English";
        break;
        case "russian":
            $data="Русский";
        break;
        case "chinese":
            $data="中";
        break;
        default:
            $data = $default;

        return $data;
    }
}
if($_GET['sasu_debug']) print_r($data);

// use template to display navigation
$smarty = cSmartyFrontend::getInstance();
$smarty->assign('languages', $data);
$smarty->display('get.tpl');
?>
Soweit so gut. Dieser Lang-Switcher hat aber das Problem, wenn eine Kategorie ein Startartikel hat, aber der gesuchte artikel in der Sprache nicht am Start ist, zeigt er dennoch oben die Sprachwahl an und switcht halt zu dem Startartikel.

Um das zu verhindern habe ich folgendes an der Stelle des ### PLATZMARKER### eingefügt:

Code: Alles auswählen

    $articleLanguageCollection = new cApiArticleLanguageCollection();
            $articleLanguageCollection -> select("idlang=$langs AND idart=$idart AND online=1");
            while (false !== $articleLanguage = $articleLanguageCollection -> next()) {
                $checkedCatArt = false;
            }
 

Sobald ich jedoch dieses articleLanguageCollection nutze, werden die URL für den Language-Switcher nicht mehr von AMR umgeschrieben.
Warum? Wie kann ich das beheben?
Zuletzt geändert von rethus am Di 6. Jan 2015, 12:22, insgesamt 1-mal geändert.
Could I help you... you can help me... buy me a coffee . (vielen ❤ Dank an: Seelauer, Peanut, fauxxami )

xstable.com: - HighSpeed Hosting, Domains, DomainReselling, Linux-Administration
suther.de: - App-Programierung, High-Performance-Webpages, MicroServices, API-Anbindungen & Erstellung

Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType
xmurrix
Beiträge: 3215
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 4 Mal
Danksagung erhalten: 17 Mal
Kontaktdaten:

Re: Mod_rewrite und Nutzung von articleLanguageCollection

Beitrag von xmurrix »

Hallo rethus,

habe mir nur grob den Code angesehen, aber ich denke du möchtest ja in folgendem Codeblock den Artikel in der aktuellen Sprache finden

Code: Alles auswählen

    $articleLanguageCollection = new cApiArticleLanguageCollection();
         $articleLanguageCollection -> select("idlang=$langs AND idart=$idart AND online=1");
         while (false !== $articleLanguage = $articleLanguageCollection -> next()) {
            $checkedCatArt = false;
         }
Wenn die Prüfung in der while-Bedingung erfolgreich ist, also ein Artikel in der Sprache gefunden wird, sollte doch die Variable $checkedCatArt den Wert true bekommen oder? Dann wird auch weiter unten die entsprechende URL generiert.

Gruß
xmurrix
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