Formatierung in der Artikelliste

Gesperrt
Andreas
Beiträge: 254
Registriert: So 16. Nov 2003, 14:48
Wohnort: Reichshof
Kontaktdaten:

Formatierung in der Artikelliste

Beitrag von Andreas »

Hallo zusammen,
ich verwende die Artikellist mit Thumbnails.
Funktioniert auch alles einwandfrei. Allerdings wird der Text (der gekürzte aus dem eigentlichen Artikel) in der Artikelliste umformatiert (Zeilenumbrüche werden entfernt, Formatierungen, usw.). das ist "im Normalfall auch gut. Für ein bestimmtes Projekt soll dies aber nicht geschehen. Der Text in der Artikelliste soll genauso dargestellt werden wie im eigentlichen Artikel - zwar gekürzt aber ansonsten genauso formatiert.

Weiß jemand wo die "Umformatierung" im Modul geschiet bzw. wo der Befehl dazu gegeben wird und wie ich ihn unterdrücken kann?

Hier der Output des Moduls:

Code: Alles auswählen

<?php 


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

    // 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]"; 

    $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)?(''):('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 
                    AND e.idlang = $lang 
                    $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 
                    $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 
                    $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 
                    $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 
                    $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 
                    $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 '<table class="text" cellpadding="0" cellspacing="0" style="width:100%"><tr style="height:1px;"><td></td><td style="width:467px;"></td><td style="width:100px;"></td></tr>'; 
   



    if ($limit > 0 || $anzahl_artikel > $limit + $angezeigte_anzahl) { 
        echo '<tr><td colspan="3"><table cellpadding="0" cellspacing="0" style="width:100%"><tr>'; 
        if ($limit > 0) { 
            $displaylimit = ($limit - $angezeigte_anzahl >= 0)?($limit - $angezeigte_anzahl):(0); 
            echo "<td class=\"text\" style=\"text-align:left\"><img src=\"upload/layout/pfeil_vorher.gif\">&nbsp;<a href=\"".$sess->url("front_content.php?client=$client&lang=$lang&idcat=$idcat&idart=$idart&displaylimit=$displaylimit")."\">{$navigationslink['previous']}</a></td>"; 
            // echo "<td style=\"text-align:left\"><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=\"text\" style=\"text-align:right\"><a href=\"".$sess->url("front_content.php?client=$client&lang=$lang&idcat=$idcat&idart=$idart&displaylimit=$displaylimit")."\">{$navigationslink['next']}</a>&nbsp;<img src=\"upload/layout/pfeil_weiter.gif\"></td>"; 
            // echo "<td style=\"text-align:right\"><a href=\"".$sess->url("/$client/$lang/$idcat/$idart/$displaylimit.html")."\">{$navigationslink['next']}</a></td>"; 
        } else { 
            echo '<td>&nbsp;</td>'; 
        } 
        echo '</tr></table>'; 
    } 




 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=\"3\">&nbsp;</td></tr>";
        echo "<tr><td colspan=\"2\" class=\"headline2\"><a href=\"$link\" class=\"headline2\">".urldecode($db2->f("value"))."</a></td>"; 
        echo "<td align=\"right\" nowrap valign=\"bottom\"  class=\"text10\">Erstellt am ".$db->f("erstellungsdatum")."</td></tr>"; 
        echo "<tr><td colspan=\"3\"><img src=\"upload/layout/dot.gif\" width=\"100%\" height=\"1\" vspace=\"1\"><br></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 .= "...  <a href=\"$link\" id=\"link_klein\"><img src=\"upload/layout/image_mehr.gif\" width=\"14\" height=\"10\" border=\"0\"> &nbsp;mehr</a>"; 
        } 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").".jpg"; 
                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; 
            } 
        } 

        if ($bild_vorhanden) { 
            $width = "CMS_VALUE[7]"; 
            $width += 5; 
            $src_image_size = getimagesize($cfg['path']['frontend'].$bilddateiname); 
            echo "<tr><td valign=\"top\" class=\"text\" style=\"width:{$width}px;\"><a href=\"$link\"><img src=\"$bilddateiname\" border=\"0\" hspace=\"5\" vspace=\"5\"  {$src_image_size[3]}/ ></a></td><td width=\"100%\" valign=\"top\" class=\"text\" colspan=\"2\">$newsubheadline</td></tr>"; 
        } else { 
            echo "<tr><td width=\100%\" valign=\"top\" class=\"text\" colspan=\"3\">$newsubheadline</td></tr>"; 
        } 

    } 

    echo '</table>'; 

    if ($limit > 0 || $anzahl_artikel > $limit + $angezeigte_anzahl) { 
        echo '<table cellpadding="0" cellspacing="0" style="width:100%"><tr><td colspan="3">&nbsp;</td></tr><tr><td colspan="3"><img src="upload/layout/dot.gif" width="100%" height="1" vspace="1"><br></td></tr><tr>'; 
        if ($limit > 0) { 
            $displaylimit = ($limit - $angezeigte_anzahl >= 0)?($limit - $angezeigte_anzahl):(0); 
            echo "<td class=\"text\" style=\"text-align:left\"><img src=\"upload/layout/pfeil_vorher.gif\">&nbsp;<a href=\"".$sess->url("front_content.php?client=$client&lang=$lang&idcat=$idcat&idart=$idart&displaylimit=$displaylimit")."\">{$navigationslink['previous']}</a></td>"; 
            // echo "<td style=\"text-align:left\"><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=\"text\" style=\"text-align:right\"><a href=\"".$sess->url("front_content.php?client=$client&lang=$lang&idcat=$idcat&idart=$idart&displaylimit=$displaylimit")."\">{$navigationslink['next']}</a>&nbsp;<img src=\"upload/layout/pfeil_weiter.gif\"></td>"; 
            // echo "<td style=\"text-align:right\"><a href=\"".$sess->url("/$client/$lang/$idcat/$idart/$displaylimit.html")."\">{$navigationslink['next']}</a></td>"; 
        } else { 
            echo '<td>&nbsp;</td>'; 
        } 
        echo '</tr></table>'; 
    } 
?> 

emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

das hängt mit der funktion
strip_tags zusammen...

wenn du das entfernst -> also strip_tags( XX )
bleiben die html tags intakt...

nur ergeben sich daraus jede menge neue probleme... (bei der kürzung)
1. die html tags werden sicher nicht korrekt geschlossen
2. die länge des anzuzeigenden strings rechnet alle html tag teile mit

eine möglichkeit das abzufangen die klein und elegant ist... gibt es nicht...
*** make your own tools (wishlist :: thx)
kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer »

hallo andreas

was du da machen willst ist extrem kompliziert, wenn danach immer noch gültiger html-code ausgegeben werden soll. bei der kürzung des artikels wirst du fast notwendigerweise offene tags übrig lassen. wenn der artikel zum beispiel einen langen absatz enthält, welcher mit einem <p> eingeleitet wurde und der artikel nun nur bis zur hälfte angezeigt wird, dann bleibt das <p>-tag offen. dann hast du ungültigen html-code.

was du machen kannst ist folgendes:

(1) im layout einen zusätzlichen container einfügen

(2) das modul text (html) kopieren und text (html) hidden nennen.

(3) im template den zusätzlichen container mit dem modul 'text (html) hidden' füllen.

(4) im modul 'text (html) hidden' um das ganze modul eine if-prüfung machen mit der bedingung 'if ($edit)'. dieser bereich wird dann nur im backend angezeigt.

(5) diesen bereich kannst du dann mit dem teil des artikels füllen, der in der artikelliste auszugeben wäre.

(6) dann musst du einfach noch die artikelliste so anpassen, dass der zweite html-bereich verwendet wird anstatt der erste (erster = sichtbar, zweiter = unsichtbar).

ich sehe keine möglichkeit, das anders zu lösen. leider...

gruss,
andreas
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
Gesperrt