Seite 1 von 1

w3concepts_alist_v1: Problem mit mehrsprachiger Seite

Verfasst: Mo 17. Jan 2005, 01:51
von mquadrat
Hallo,

ich nutze die w3concepts_alist_v1 und bin damit ganz zufrieden.

Allerdings habe ich jetzt das Problem bei einem aktuellen Projekt, dass das Modul bei mehreren Sprachen zwar jeweiligen Artikel ausliest, aber nicht so wie ich es benötige.

Ich habe in jeder Sprache die Seiten angelegt. Für Deutsch und Englisch. In der Artikelliste werden aber alle Seiten aus der DB gelesen, und zwar zuerst die englischen und dann die deutschen. Kennt jemand das Problem bzw. hat einen Tipp für mich? Sicher kann man im Modul Output den Sprachwechsel auch festlegen, ich weiß nur nicht wo und wie??

Ich setzte das Modul übrigens zweimal ein. EInmal mit deustchen und einmal mit englischen Texten (vor / zurück).

Hier der Code:

Code: Alles auswählen

<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname   :     w3concepts_alist_v1
* Author      :     Andreas Kummer
* Copyright   :     mumprecht & kummer w3concepts
* Created     :     06-05-2004
* Modified    :     06-05-2004
************************************************/

    // konfiguration

    $categorie = "CMS_VALUE[0]";

    $angezeigte_anzahl = "CMS_VALUE[1]";
    if ($angezeigte_anzahl == '') $angezeigte_anzahl = 10;

    $startartikel = "CMS_VALUE[2]";
    if ($startartikel == '') $startartikel = false;

    $subheadline = "CMS_VALUE[3]";
    if ($subheadline == '') $subheadline = 200;

    $navigationslink['previous'] = "CMS_VALUE[4]";
    if ($navigationslink['previous'] == '') $navigationslink['previous'] = '[:: rückwärts ]';

    $navigationslink['next'] = "CMS_VALUE[5]";
    if ($navigationslink['next'] == '') $navigationslink['next'] = '[ vorwärts ::]';

    $ebene = "CMS_VALUE[6]";

    $limit = (isset($_GET['displaylimit']) && $_GET['displaylimit'] > 0)?($_GET['displaylimit']):(0);

    $db = new DB_Contenido;
    $db2 = new DB_Contenido;

    // wenn startartikel true ist, werden die startartikel dargestellt, sonst nicht
    $nurstartartikel = ($startartikel)?(''):('AND d.is_start = 0');

    // liest die anzahl betroffener artikel aus der datenbank
    switch ($ebene) {
        case -2:
            $sql_1 = "
                SELECT count(*) AS anzahl
                FROM {$cfg['tab']['cat']} AS a,
                     {$cfg['tab']['cat']} AS b,
                     {$cfg['tab']['cat']} AS c
                LEFT JOIN {$cfg['tab']['cat_art']} AS d ON c.idcat = d.idcat
                LEFT JOIN {$cfg['tab']['art_lang']} AS e ON d.idart = e.idart
                WHERE
                    (
                        (
                            c.parentid = b.idcat
                            AND b.parentid = a.idcat
                        )
                        OR
                        (
                            c.idcat = b.idcat
                            AND b.parentid = a.idcat
                        )
                        OR
                        (
                            c.idcat = b.idcat
                            AND b.idcat = a.idcat
                        )
                    )
                    AND a.idcat = $categorie
                    AND e.online = 1
                    AND e.redirect = 0
                    AND e.external_redirect = 0
                    $nurstartartikel
                ";
            $sql_2 = "
                SELECT c.idcat, d.idart, e.idartlang, e.created, DATE_FORMAT(e.created,'%d.%m.%y') AS erstellungsdatum
                FROM {$cfg['tab']['cat']} AS a,
                {$cfg['tab']['cat']} AS b,
                {$cfg['tab']['cat']} AS c
                LEFT JOIN {$cfg['tab']['cat_art']} AS d ON c.idcat = d.idcat
                LEFT JOIN {$cfg['tab']['art_lang']} AS e ON d.idart = e.idart
                WHERE
                    (
                        (
                            c.parentid = b.idcat
                            AND b.parentid = a.idcat
                        )
                        OR
                        (
                            c.idcat = b.idcat
                            AND b.parentid = a.idcat
                        )
                        OR
                        (
                            c.idcat = b.idcat
                            AND b.idcat = a.idcat
                        )
                    )
                    AND a.idcat = $categorie
                    AND e.online = 1
                    AND e.redirect = 0
                    AND e.external_redirect = 0
                    $nurstartartikel
                ORDER BY e.created DESC
                LIMIT $limit, $angezeigte_anzahl
                ";
            break;
        case -1:
            $sql_1 = "
                SELECT count(*) AS anzahl
                FROM {$cfg['tab']['cat']} AS a,
                     {$cfg['tab']['cat']} AS b,
                     {$cfg['tab']['cat']} AS c
                LEFT JOIN {$cfg['tab']['cat_art']} AS d ON b.idcat = d.idcat
                LEFT JOIN {$cfg['tab']['art_lang']} AS e ON d.idart = e.idart
                WHERE
                    (
                        (
                            c.idcat = b.idcat
                            AND b.parentid = a.idcat
                        )
                        OR
                        (
                            c.idcat = b.idcat
                            AND b.idcat = a.idcat
                        )
                    )
                    AND a.idcat = $categorie
                    AND e.online = 1
                    AND e.redirect = 0
                    AND e.external_redirect = 0
                    $nurstartartikel
                ";
            $sql_2 = "
                SELECT c.idcat, d.idart, e.idartlang, e.created, DATE_FORMAT(e.created,'%d.%m.%y') AS erstellungsdatum
                FROM {$cfg['tab']['cat']} AS a,
                {$cfg['tab']['cat']} AS b,
                {$cfg['tab']['cat']} AS c
                LEFT JOIN {$cfg['tab']['cat_art']} AS d ON c.idcat = d.idcat
                LEFT JOIN {$cfg['tab']['art_lang']} AS e ON d.idart = e.idart
                WHERE
                    (
                        (
                            c.idcat = b.idcat
                            AND b.parentid = a.idcat
                        )
                        OR
                        (
                            c.idcat = b.idcat
                            AND b.idcat = a.idcat
                        )
                    )
                    AND a.idcat = $categorie
                    AND e.online = 1
                    AND e.redirect = 0
                    AND e.external_redirect = 0
                    $nurstartartikel
                ORDER BY e.created DESC
                LIMIT $limit, $angezeigte_anzahl
                    ";
            break;
        case 0:
            $sql_1 = "
                SELECT count(*) AS anzahl
                FROM {$cfg['tab']['cat']} AS a,
                     {$cfg['tab']['cat']} AS b,
                     {$cfg['tab']['cat']} AS c
                LEFT JOIN {$cfg['tab']['cat_art']} AS d ON b.idcat = d.idcat
                LEFT JOIN {$cfg['tab']['art_lang']} AS e ON d.idart = e.idart
                WHERE
                    (
                        (
                            c.idcat = b.idcat
                            AND b.idcat = a.idcat
                        )
                    )
                    AND a.idcat = $categorie
                    AND e.online = 1
                    AND e.redirect = 0
                    AND e.external_redirect = 0
                    $nurstartartikel
                ";
            $sql_2 = "
                SELECT c.idcat, d.idart, e.idartlang, e.created, DATE_FORMAT(e.created,'%d.%m.%y') AS erstellungsdatum
                FROM {$cfg['tab']['cat']} AS a,
                {$cfg['tab']['cat']} AS b,
                {$cfg['tab']['cat']} AS c
                LEFT JOIN {$cfg['tab']['cat_art']} AS d ON c.idcat = d.idcat
                LEFT JOIN {$cfg['tab']['art_lang']} AS e ON d.idart = e.idart
                WHERE
                    (
                        (
                            c.idcat = b.idcat
                            AND b.idcat = a.idcat
                        )
                    )
                    AND a.idcat = $categorie
                    AND e.online = 1
                    AND e.redirect = 0
                    AND e.external_redirect = 0
                    $nurstartartikel
                ORDER BY e.created DESC
                LIMIT $limit, $angezeigte_anzahl
                    ";
            break;
    }

    $db->query($sql_1);
    $db->next_record();
    $anzahl_artikel = $db->f("anzahl");

    $db->query($sql_2);

    while ($db->next_record()) {

        $sql = "
            SELECT value FROM {$cfg['tab']['content']}
            WHERE
            idartlang = ".$db->f("idartlang")."
            AND idtype = 1
            ORDER BY typeid ASC
            ";

        $db2->query($sql);
        $db2->next_record();

        $link = $sess->url("front_content.php?client=$client&lang=$lang&idcat=".$db->f("idcat")."&idart=".$db->f("idart"));
		
		echo "<h1>".urldecode($db2->f("value"))."</h1>";

        $db2->next_record();

        // die subheadline auf die gewünschte länge reduzieren (trennung nur
        // nach bzw. vor einem ganzen wort
        if (strlen($db2->f("value")) > $subheadline) {
            $newsubheadline = '';
            $worte = explode (" ",strip_tags(urldecode($db2->f("value"))));
            $zulang = false;
            foreach ($worte as $wort) {
                if (strlen($newsubheadline." ".$wort) >= $subheadline) $zulang = true;
                $newsubheadline = (!$zulang)?($newsubheadline." ".$wort):($newsubheadline);
            }
            $newsubheadline .= "...";
        } else {
            $newsubheadline = strip_tags(urldecode($db2->f("value")));
        }

        //echo "<p>$newsubheadline";
        echo "<p>&raquo <a href=\"$link\" title=\"weiter\">weitere Infos</a> ...</p>";

    }

    if ($limit > 0 || $anzahl_artikel > $limit + $angezeigte_anzahl) {
         //echo '<br>';
        if ($limit > 0) {
            $displaylimit = ($limit - $angezeigte_anzahl >= 0)?($limit - $angezeigte_anzahl):(0);
            echo "<p style=\"text-align:left\"><a href=\"".$sess->url("front_content.php?client=$client&lang=$lang&idcat=$idcat&idart=$idart&displaylimit=$displaylimit")."\">{$navigationslink['previous']}</a></p>";
        } else {
            echo '';
        }
        if ($anzahl_artikel > $limit + $angezeigte_anzahl) {
            $displaylimit = $limit + $angezeigte_anzahl;
            echo "<p style=\"text-align:right\"><a href=\"".$sess->url("front_content.php?client=$client&lang=$lang&idcat=$idcat&idart=$idart&displaylimit=$displaylimit")."\">{$navigationslink['next']}</a></p>";
        } else {
            echo '';
        }
        //echo '<br />';
    }
?>
Hier die Seite, wo man das sehen kann. EInfach mal im rechten Kasten auf vor klicken, dann kommt Ihr weiter. Zuerst werden die Produkte mit englischen Bezeichnungen angezeigt (Headlines), dann gegen ENde kommen die deutschen Bezeichnungen.

http://www.martens-elektronik.de/marten ... hp?idcat=5

Verfasst: Mo 17. Jan 2005, 18:16
von emergence
ich kenne das modul zwar nicht (sprich ich habs noch nie benötigt), aber nen tipp hätt ich

die sql abfragen selektieren ohne die sprache zu berücksichtigen...

da fehlt was wie .idlang='$lang' AND

vielleicht hilft dir das etwas weiter

Verfasst: Mo 17. Jan 2005, 21:04
von mquadrat
Hallo emergence,

leider bin ich mit im Scripten nicht so bewandert. Kannst Du mir vielleicht einen Tipp geben, wo ich das ergänzen sollte?

Verfasst: Di 18. Jan 2005, 15:53
von Hagbard
Das gleiche Problem beschäftigt mich auch gerade :) Wäre über eine Lösung mehr als nur dankbar!

Verfasst: Di 25. Jan 2005, 12:05
von Hagbard
Kann hier niemand helfen? Ich komme da nicht weiter.

Sobald ich eine zweite Sprache oder einen zweiten Mandanten habe, zeigt er mir alle Artikel doppelt... Also von jeder Sprache/Mandant.

Kann man das selektieren?! Bzw. kann das jemand von euch?

Verfasst: Di 25. Jan 2005, 18:29
von Halchteranerin
versuch's (ohne Gewaehr!) mit einer Aenderung der SQL-Anweisungen: ausser bei SELECT COUNT (*) die Anweisung SELECT in SELECT DISTINCT (Rest bleibt) aendern. DISTINCT bewirkt normalerweise, dass Duplikate nicht ausgegeben werden.

Verfasst: Mi 26. Jan 2005, 12:16
von Hagbard
Leider hat das bei mir gar nichts gebracht. Egal ob ich alle SELECT oder alle ausser den SELECT COUNT durch SELECT DISTINCT ersetzte.
Er zeigt mir nach wie vor die Aktuelles-Meldung vom z.b. 14-10-05 zweimal an. Einmal deutsch, einmal englisch.

Mein Output ist:
<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname : w3concepts_alist_v1
* Author : Andreas Kummer
* Copyright : mumprecht & kummer w3concepts
* Created : 06-05-2004
* Modified : 06-05-2004
************************************************/

// konfiguration

$categorie = "CMS_VALUE[0]";

$angezeigte_anzahl = "CMS_VALUE[1]";
if ($angezeigte_anzahl == '') $angezeigte_anzahl = 10;

$startartikel = "CMS_VALUE[2]";
if ($startartikel == '') $startartikel = false;

$subheadline = "CMS_VALUE[3]";
if ($subheadline == '') $subheadline = 200;

$navigationslink['previous'] = "CMS_VALUE[4]";
if ($navigationslink['previous'] == '') $navigationslink['previous'] = '[:: rückwärts ]';

$navigationslink['next'] = "CMS_VALUE[5]";
if ($navigationslink['next'] == '') $navigationslink['next'] = '[ vorwärts ::]';

$ebene = "CMS_VALUE[6]";

$limit = (isset($_GET['displaylimit']) && $_GET['displaylimit'] > 0)?($_GET['displaylimit']):(0);

$db = new DB_Contenido;
$db2 = new DB_Contenido;

// wenn startartikel true ist, werden die startartikel dargestellt, sonst nicht
$nurstartartikel = ($startartikel)?(''):('AND d.is_start = 0');

// liest die anzahl betroffener artikel aus der datenbank
switch ($ebene) {
case -2:
$sql_1 = "
SELECT count(*) AS anzahl
FROM {$cfg['tab']['cat']} AS a,
{$cfg['tab']['cat']} AS b,
{$cfg['tab']['cat']} AS c
LEFT JOIN {$cfg['tab']['cat_art']} AS d ON c.idcat = d.idcat
LEFT JOIN {$cfg['tab']['art_lang']} AS e ON d.idart = e.idart
WHERE
(
(
c.parentid = b.idcat
AND b.parentid = a.idcat
)
OR
(
c.idcat = b.idcat
AND b.parentid = a.idcat
)
OR
(
c.idcat = b.idcat
AND b.idcat = a.idcat
)
)
AND a.idcat = $categorie
AND e.online = 1
AND e.redirect = 0
AND e.external_redirect = 0
$nurstartartikel
";
$sql_2 = "
SELECT c.idcat, d.idart, e.idartlang, e.created, DATE_FORMAT(e.created,'%d.%m.%y') AS erstellungsdatum
FROM {$cfg['tab']['cat']} AS a,
{$cfg['tab']['cat']} AS b,
{$cfg['tab']['cat']} AS c
LEFT JOIN {$cfg['tab']['cat_art']} AS d ON c.idcat = d.idcat
LEFT JOIN {$cfg['tab']['art_lang']} AS e ON d.idart = e.idart
WHERE
(
(
c.parentid = b.idcat
AND b.parentid = a.idcat
)
OR
(
c.idcat = b.idcat
AND b.parentid = a.idcat
)
OR
(
c.idcat = b.idcat
AND b.idcat = a.idcat
)
)
AND a.idcat = $categorie
AND e.online = 1
AND e.redirect = 0
AND e.external_redirect = 0
$nurstartartikel
ORDER BY e.created DESC
LIMIT $limit, $angezeigte_anzahl
";
break;
case -1:
$sql_1 = "
SELECT count(*) AS anzahl
FROM {$cfg['tab']['cat']} AS a,
{$cfg['tab']['cat']} AS b,
{$cfg['tab']['cat']} AS c
LEFT JOIN {$cfg['tab']['cat_art']} AS d ON b.idcat = d.idcat
LEFT JOIN {$cfg['tab']['art_lang']} AS e ON d.idart = e.idart
WHERE
(
(
c.idcat = b.idcat
AND b.parentid = a.idcat
)
OR
(
c.idcat = b.idcat
AND b.idcat = a.idcat
)
)
AND a.idcat = $categorie
AND e.online = 1
AND e.redirect = 0
AND e.external_redirect = 0
$nurstartartikel
";
$sql_2 = "
SELECT c.idcat, d.idart, e.idartlang, e.created, DATE_FORMAT(e.created,'%d.%m.%y') AS erstellungsdatum
FROM {$cfg['tab']['cat']} AS a,
{$cfg['tab']['cat']} AS b,
{$cfg['tab']['cat']} AS c
LEFT JOIN {$cfg['tab']['cat_art']} AS d ON c.idcat = d.idcat
LEFT JOIN {$cfg['tab']['art_lang']} AS e ON d.idart = e.idart
WHERE
(
(
c.idcat = b.idcat
AND b.parentid = a.idcat
)
OR
(
c.idcat = b.idcat
AND b.idcat = a.idcat
)
)
AND a.idcat = $categorie
AND e.online = 1
AND e.redirect = 0
AND e.external_redirect = 0
$nurstartartikel
ORDER BY e.created DESC
LIMIT $limit, $angezeigte_anzahl
";
break;
case 0:
$sql_1 = "
SELECT count(*) AS anzahl
FROM {$cfg['tab']['cat']} AS a,
{$cfg['tab']['cat']} AS b,
{$cfg['tab']['cat']} AS c
LEFT JOIN {$cfg['tab']['cat_art']} AS d ON b.idcat = d.idcat
LEFT JOIN {$cfg['tab']['art_lang']} AS e ON d.idart = e.idart
WHERE
(
(
c.idcat = b.idcat
AND b.idcat = a.idcat
)
)
AND a.idcat = $categorie
AND e.online = 1
AND e.redirect = 0
AND e.external_redirect = 0
$nurstartartikel
";
$sql_2 = "
SELECT c.idcat, d.idart, e.idartlang, e.created, DATE_FORMAT(e.created,'%d.%m.%y') AS erstellungsdatum
FROM {$cfg['tab']['cat']} AS a,
{$cfg['tab']['cat']} AS b,
{$cfg['tab']['cat']} AS c
LEFT JOIN {$cfg['tab']['cat_art']} AS d ON c.idcat = d.idcat
LEFT JOIN {$cfg['tab']['art_lang']} AS e ON d.idart = e.idart
WHERE
(
(
c.idcat = b.idcat
AND b.idcat = a.idcat
)
)
AND a.idcat = $categorie
AND e.online = 1
AND e.redirect = 0
AND e.external_redirect = 0
$nurstartartikel
ORDER BY e.created DESC
LIMIT $limit, $angezeigte_anzahl
";
break;
}

$db->query($sql_1);
$db->next_record();
$anzahl_artikel = $db->f("anzahl");

$db->query($sql_2);

echo '<p><table cellpadding="0" cellspacing="0" style="width:100%">';

while ($db->next_record()) {

$sql = "
SELECT value FROM {$cfg['tab']['content']}
WHERE
idartlang = ".$db->f("idartlang")."
AND idtype = 1
ORDER BY typeid ASC
";

$db2->query($sql);
$db2->next_record();

$link = $sess->url("front_content.php?client=$client&lang=$lang&idcat=".$db->f("idcat")."&idart=".$db->f("idart"));

echo "<tr align=\"left\" valign=\"top\"><td width=\"16%\" class=\"fliesstext\"><strong>".$db->f("erstellungsdatum")."</strong></td>";
echo "<td width=\"84%\"><a href=\"$link\" class=\"zwischenueberschrift\">".urldecode($db2->f("value"))."</a><p></td></tr>";

$db2->next_record();

// die subheadline auf die gewünschte länge reduzieren (trennung nur
// nach bzw. vor einem ganzen wort
if (strlen($db2->f("value")) > $subheadline) {
$newsubheadline = '';
$worte = explode (" ",strip_tags(urldecode($db2->f("value"))));
$zulang = false;
foreach ($worte as $wort) {
if (strlen($newsubheadline." ".$wort) >= $subheadline) $zulang = true;
$newsubheadline = (!$zulang)?($newsubheadline." ".$wort):($newsubheadline);
}
$newsubheadline .= "...";
} else {
$newsubheadline = strip_tags(urldecode($db2->f("value")));
}

echo "<tr><td colspan=\"2\">$newsubheadline</td></tr>";

}

echo '</table>';

if ($limit > 0 || $anzahl_artikel > $limit + $angezeigte_anzahl) {
echo '<table cellpadding="0" cellspacing="0" style="width:100%"><tr>';
if ($limit > 0) {
$displaylimit = ($limit - $angezeigte_anzahl >= 0)?($limit - $angezeigte_anzahl):(0);
echo "<td style=\"text-align:left\"><a href=\"".$sess->url("front_content.php?client=$client&lang=$lang&idcat=$idcat&idart=$idart&displaylimit=$displaylimit")."\">{$navigationslink['previous']}</a></td>";
} else {
echo '<td>&nbsp;</td>';
}
if ($anzahl_artikel > $limit + $angezeigte_anzahl) {
$displaylimit = $limit + $angezeigte_anzahl;
echo "<td style=\"text-align:right\"><a href=\"".$sess->url("front_content.php?client=$client&lang=$lang&idcat=$idcat&idart=$idart&displaylimit=$displaylimit")."\">{$navigationslink['next']}</a></td>";
} else {
echo '<td>&nbsp;</td>';
}
echo '</tr></table></p>';
}
?>
Es wäre super wenn mir da jemand helfen könnte. Es muß doch möglich sein, eine Artikelliste zu haben, die nur die jeweilige Sprache ausliest.

Soll ich ein anderes System benutzten? Wenn ja, welches? ;)

Vielen Dank für eure Hilfe!

Verfasst: Mi 26. Jan 2005, 12:44
von kummer
ich werde mich darum kümmern. aber nicht heute und nicht morgen. aber eine lösung kommt. gebt mir zwei drei tage. bin im moment etwas im stress.

gruss,
andreas

Verfasst: Mi 26. Jan 2005, 13:03
von Hagbard
Super, vielen Dank!

Verfasst: Do 3. Feb 2005, 11:18
von Hagbard
Hallo Andreas,

ich will sicher nicht drängeln! :) Möchte mich nur kurz in Erinnerung rufen.

Aber nur die Ruhe ;) Ich bin ja froh, daß eine Lösung in Aussicht gestellt wird.

Verfasst: Fr 11. Feb 2005, 10:03
von Hagbard
Hallo zusammen,

kann mir jemand das Script anpassen? Für folgendes Problem:
Sobald ich eine zweite Sprache oder einen zweiten Mandanten habe, zeigt er mir alle Artikel doppelt... Also von jeder Sprache/Mandant.
Ich komme einfach nicht weiter. Gibt es kein Modul, welches mehrsprachige Seiten berücksichtigt?

Ich kann es leider nicht selber und nerve euch deswegen damit :/

Danke vielmals.

Verfasst: Fr 11. Feb 2005, 10:06
von kummer
habe es noch pendent. bin leider noch nicht dazu gekommen... 8)

Verfasst: Do 3. Mär 2005, 13:46
von Cyclist
Ist das Problem denn mittlerweile gelöst? Ich beabsichtige eine mehrsprachige Seite zu erstellen und da ich auch dieses Modul einsetze wäre es gut wenn es eine Lösung gäbe.

Thumbnail-Erzeugung bei mehrsprachigkeit fehlerhauft

Verfasst: Sa 23. Jul 2005, 12:52
von tsommer
Hallo,

nach langer Suche im Forum habe ich leider für das bekannte Problem beim Artikellistenmodul w3concepts.alist.mod3 keine Lösung gefunden.
Bei meiner Site habe ich das Problem, dass die Thumbnails in der deutschen Version angezeigt werden, in der englischen jedoch nicht.

Anzusehen ist das ganze unter

http://www.tax-munich.de/cms/front_cont ... =1&idcat=9 (deutsch)
http://www.tax-munich.de/cms/front_cont ... =3&idcat=9 (englisch)

Bin für jeden Tipp dankbar.

Gruß,

Thomas