Seite 1 von 1

Mod_rewrite und Nutzung von articleLanguageCollection

Verfasst: Mi 17. Dez 2014, 14:23
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?

Re: Mod_rewrite und Nutzung von articleLanguageCollection

Verfasst: Di 6. Jan 2015, 10:08
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