Seite 1 von 1

w3c alist.mod6 gibt falschen Artikeltext in der Liste aus

Verfasst: So 29. Jan 2006, 16:53
von Benki
Moin,

benutze die Modifikation 6 der w3concepts-artikelliste. Mein Ziel ist es, die Subheadline, das 1. Bild des Artikels und die ersten x Zeichen des Artikeltextes auszugeben.

Dies funktioniert auch so bis auf den Text. Dort erscheint bei jedem Artikel der Text des ursprünglich ersten Artikels, den ich mal zu Testzwecken eingegeben habe (obwohl dieser mittlerweile schon gelöscht ist!) UND direkt vor dem Artikeltext wird auch noch die Subhead dieses falschen Artikels angezeigt.

Ich vermute, dass ich nicht auf den richtigen Datensatz oder den richtigen Bereich des DS zeige. Der Link funktioniert dann übrigens trotzdem.

Da ich leider kaum Kenntnisse habe von SQL-Abfragen, wäre es super, wenn jemand von euch sich das anschaut. Ist bestimmt nur eine Klitzekleinigkeit.

Code: Alles auswählen

<?php 
/*********************************************** 
* CONTENIDO MODUL - OUTPUT 
* 
* Modulname   :     w3concepts.alist.mod6.v1 
* Author          :     Andreas Kummer 
* Copyright     :     mumprecht & kummer w3concepts 
* Created        :     08-07-2004 
* Modified       :     08-07-2004 
************************************************/ 

    // manuelle konfiguration des moduls 
    $uploadpfad = "/cms/upload/"; // relativ zum root-verzeichnis (mit slash am anfang und am ende) 
    $thumbnailpfad = "/cms/upload/bilder/auto_thumbnails/"; //relativ zum root-verzeichnis (mit slash am anfang und am ende) 
    $thumbnailpfadausgabe = "/cms/cms/upload/bilder/auto_thumbnails/"; //relativ zum root-verzeichnis (mit slash am anfang und am ende) 


    // modulinterne vorkonfiguration, werte können geändert werden 

    $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'] = '[vorherige...]'; 

    $navigationslink['next'] = "CMS_VALUE[5]"; 
    if ($navigationslink['next'] == '') $navigationslink['next'] = '[...weitere]'; 

    $ebene = "CMS_VALUE[6]"; 

    $bildbreite = "CMS_VALUE[7]"; 

    $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)?(''):('WHERE 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 
                    AND e.idlang = $lang 
                    AND e.artsort = 5
                    $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 
                    AND e.idlang = $lang
                    AND e.artsort = 5
                    $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 
                    AND e.idlang = $lang 
                    AND e.artsort = 5
                    $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 
                    AND e.idlang = $lang 
                    AND e.artsort = 5
                    $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 
                    AND e.idlang = $lang 
                    AND e.artsort = 5
                    $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 
                    AND e.idlang = $lang 
                    AND e.artsort = 5
                    $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 '<div id=artikel> 
             <table> 
              <tr> 
               <td> 
             <table width="450" class="artlist" align="left" cellpadding="0" cellspacing="0">'; 

    while ($db->next_record()) { 

        $sql = " 
            SELECT a.value, a.typeid, b.type, c.filename, c.dirname FROM {$cfg['tab']['content']} AS a 
            LEFT JOIN {$cfg['tab']['type']} AS b ON a.idtype = b.idtype 
            LEFT JOIN {$cfg['tab']['upl']} AS c ON a.value = c.idupl 
            WHERE 
            a.idartlang = ".$db->f("idartlang")." 
            AND ( 
                b.type = 'CMS_HTMLHEAD' 
            ) 
            ORDER BY b.type, a.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")); 
        //$link = $sess->url("/$client/$lang/".$db->f("idcat")."/".$db->f("idart").".html"); 

        echo " <tr><td colspan=6 height=\"10\" class=\"artlistdate\">".$db->f("erstellungsdatum")."</td></td>
               <tr><td colspan=6 height=\"10\" class=\"artlisthead\"><a href=\"$link\">".urldecode($db2->f("value"))."</a></td></tr>
               <tr><td colspan=6 height=\"10\"></td></tr> "; 

        $sql = " 
            SELECT a.value, a.typeid, b.type, c.filename, c.dirname FROM {$cfg['tab']['content']} AS a 
            LEFT JOIN {$cfg['tab']['type']} AS b ON a.idtype = b.idtype 
            LEFT JOIN {$cfg['tab']['upl']} AS c ON a.value = c.idupl 
            WHERE 
            a.idartlang = ".$db->f("idartlang")." 
            AND ( 
                b.type = 'CMS_HTML' 
            ) 
            ORDER BY b.type, a.typeid ASC 
            "; 

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



        // den artikel 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"))); 
        } 

        $sql = " 
            SELECT a.value, a.typeid, b.type, c.filename, c.dirname FROM {$cfg['tab']['content']} AS a 
            LEFT JOIN {$cfg['tab']['type']} AS b ON a.idtype = b.idtype 
            LEFT JOIN {$cfg['tab']['upl']} AS c ON a.value = c.idupl 
            WHERE 
            a.idartlang = ".$db->f("idartlang")." 
            AND ( 
                b.type = 'CMS_IMG' 
            ) 
            ORDER BY b.type, a.typeid ASC 
            "; 

        $db2->query($sql); 
        $bild_vorhanden = false; 
        while ($db2->next_record()) { 
            if ($db2->f("type") == 'CMS_IMG' && $db2->f("typeid") == 1) { 
                $bilddateiname = "{$thumbnailpfad}{$bildbreite}_".$db2->f("filename").""; 
                $bilddateinameausgabe = "{$thumbnailpfadausgabe}{$bildbreite}_".$db2->f("filename").""; 
                if (!file_exists($cfg['path']['frontend'].$bilddateiname)) { 

                    $src_image_size = getimagesize($cfg['path']['frontend'].$uploadpfad.$db2->f("dirname").$db2->f("filename")); 

                    $bildhoehe = round($src_image_size[1] * $bildbreite / $src_image_size[0]); 
                    if ($bildhoehe > $bildbreite) { 
                        $bildhoehe = $bildbreite; 
                        $bildbreite = round($src_image_size[0] * $bildhoehe / $src_image_size[1]); 
                    } 

                    $dst_im = imagecreatetruecolor($bildbreite,$bildhoehe); 

                    if ($src_image_size[2] == 1) { 
                        $src_im = imagecreatefromGIF($cfg['path']['frontend'].$uploadpfad.$db2->f("dirname").$db2->f("filename")); 
                    } elseif ($src_image_size[2] == 2) { 
                        $src_im = @ImageCreateFromJPEG($cfg['path']['frontend'].$uploadpfad.$db2->f("dirname").$db2->f("filename")); 
                    } else { 
                        $src_im = imagecreatefromgd($cfg['path']['frontend'].$uploadpfad.$db2->f("dirname").$db2->f("filename")); 
                    } 

                    imagecopyresampled ($dst_im,$src_im,0,0,0,0,$bildbreite,$bildhoehe,$src_image_size[0],$src_image_size[1]); 
                    imagejpeg ($dst_im,$cfg['path']['frontend'].$bilddateiname,100); 
                } 
                $bild_vorhanden = true; 
            } 
        } 

// nachfolgend die Ausgaberoutine


        if ($bild_vorhanden) { 
            $width = "CMS_VALUE[7]"; 
            $width += 5; 
            $src_image_size = getimagesize($cfg['path']['frontend'].$bilddateiname); 
            echo "<tr> 
                      <td width=\"102\" class=\"artlistthumb\"><a href=\"$link\"><img style=\"border:solid white 1px\" src=\"$bilddateinameausgabe\" {$src_image_size[3]}/></a></td> 
                      <td width=\"10\">&nbsp;</td>
                      <td width=\"1\" bgcolor=\"#999999\"></td>
                      <td width=\"10\">&nbsp;</td>
                      <td colspan=2 width=\"327\" class=\"artlisttext\"><a href=\"$link\">".urldecode($db2->f("value"))."$newsubheadline</a></td> 
                     </tr> 
                     <tr> 
                      <td colspan=6>&nbsp;</td> 
                     </tr>
                     <tr><td colspan=6 height=\"1\" ></td></tr>
                     <tr><td colspan=6 height=\"1\" bgcolor=\"#999999\"></td></tr>
                     <tr><td colspan=6 height=\"10\"></td></tr>"; 
        } else { 
            echo "<tr> 
                      <td width=\"102\">&nbsp;</td>
                      <td width=\"10\">&nbsp;</td>
                      <td width=\"1\" bgcolor=\"#999999\"></td>
                      <td width=\"10\">&nbsp;</td>
                      <td colspan=2 width=\"327\" class=\"artlisttext\"><a href=\"$link\">".urldecode($db2->f("value"))."$newsubheadline</a></td> 
                     </tr>
                     <tr><td colspan=6 height=\"10\" ></td></tr>
                     <tr><td colspan=6 height=\"1\" bgcolor=\"#999999\"></td></tr>
                     <tr><td colspan=6 height=\"10\"></td></tr>"; 


        } 

    } 

    echo '

           </td> 
             </tr> 
             </table> 
             <tr> 
             <td> 
'; 

    if ($limit > 0 || $anzahl_artikel > $limit + $angezeigte_anzahl) { 
        echo '<table class="artlistbottom" align="left" cellpadding="0" cellspacing="0"> 
                 <tr> 
                  <td colspan=2>&nbsp;</td> 
                 </tr> 
                 <tr>'; 
        if ($limit > 0) { 
            $displaylimit = ($limit - $angezeigte_anzahl >= 0)?($limit - $angezeigte_anzahl):(0); 
            echo "<td class=\"artlistprev\"><a href=\"".$sess->url("front_content.php?client=$client&lang=$lang&idcat=$idcat&idart=$idart&displaylimit=$displaylimit")."\">{$navigationslink['previous']}</a></td>"; 
            //echo "<td class=\"artlistprev\"><a href=\"".$sess->url("/$client/$lang/$idcat/$idart/$displaylimit.html")."\">{$navigationslink['previous']}</a></td>"; 
        } else { 
            echo '<td>&nbsp;</td>'; 
        } 
        if ($anzahl_artikel > $limit + $angezeigte_anzahl) { 
            $displaylimit = $limit + $angezeigte_anzahl; 
            echo "<td class=\"artlistnext\"><a href=\"".$sess->url("front_content.php?client=$client&lang=$lang&idcat=$idcat&idart=$idart&displaylimit=$displaylimit")."\">{$navigationslink['next']}</a></td>"; 
            // echo "<td class=\"artlistnext\"><a href=\"".$sess->url("/$client/$lang/$idcat/$idart/$displaylimit.html")."\">{$navigationslink['next']}</a></td>"; 
        } else { 
            echo '<td>&nbsp;</td>'; 
        } 
        echo '</tr></table>'; 
    } 
        echo '</td></tr></table></div>'; 
?>
Vielen Dank vorab für eure Hilfe!

Grüße Benki

Verfasst: So 29. Jan 2006, 16:58
von rezeptionist
hatte auch mal das problem

einfach mal con_code leeren (nicht löschen)

Verfasst: So 29. Jan 2006, 17:18
von Benki
Danke für die schnelle Antwort,

leider hat das nichts gebracht. Ich vermute halt, dass es auf den falschen DS zeigt !?

Verfasst: So 29. Jan 2006, 17:26
von HerrB
Kannst Du mal testweise meine Artikelliste Advanced einsetzen? So auf den ersten Blick sehe ich nichts (abgesehen davon, dass das Modul nur mit $cfg[start_article_compatible] = true funktionieren dürfte.

Gruß
HerrB

Verfasst: So 29. Jan 2006, 17:28
von rezeptionist
zeigt es im Backend auch die falschen an ??

Verfasst: So 29. Jan 2006, 17:49
von Benki
jap. tut es

Verfasst: So 29. Jan 2006, 19:04
von Benki
@ HerrB

ich hab die Startartikel extra ausgeschaltet, da ich in der Rubrik gar keine Startartikel definiert habe. Es gibt eine Rubrik Meldungen wo nur die Artikel drin stehen, die in der nächst höheren in der Artikelliste angezeigt werden.

Es funktioniert ja auch mit der Verlinkung und dann mit der Anzeige des Artikels. Halt nur in der Artikelliste steht der falsche Text.

Benki

Verfasst: Di 31. Jan 2006, 18:10
von rezeptionist
Was passiert den wenn du einen neuen Artikel anlegst ??

Verfasst: Di 31. Jan 2006, 19:35
von Benki
Er zeigt brav, subhead und Bild an und wieder den nicht dazugehörigen Text - also wieder den Text des falschen Artikels. Ich hab aus anderen Beiträgen den Tipp verfolgt mit 'next record' (auch mehrmals) weiter zu springen, aber dann gibt er die Inhalte der anderen Container aus, aber nie den html-Text des Artikels.

Verständnisfrage nebenbei: zeigt 'next record' auf das nächste Datenwort oder den nächsten Datensatz (wobei für mich eine Datensatz ein Artikel ist(ist das so?)) ?

Danke.

Benki