Modul: Standard-Artikelliste Advanced V1.4

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Di 2. Mai 2006, 20:10

*Sigh*

Ich gebe ja zu, dass der Tipp für den Einsteiger zu kurz gefasst ist... Der PHP-Crash-Kurs:

Code: Alles auswählen

str_replace($cfgClient[$client]["path"]["htmlpath"], $cfgClient[$client]["path"]["frontend"], $image)
str_replace (A,B,C) (siehe http://www.php.net) sucht nach A in C und ersetzt mit B. Nur gibt es natürlich an dieser Stelle im Code kein $image... hier wäre $image durch den Term zu ersetzen gewesen, der im Code an gleicher Stelle vorkam...

An dieser ersten Stelle genügt sogar ein:

Code: Alles auswählen

list ($width, $height, $type, $attr) = getimagesize($aData[$i]["i".$k]["ServerPath"]);
(Da steht im Modul WebPath statt ServerPath, werde ich noch korrigieren [so ist es jetzt aber korrekt]).

Warum? Weil vor dieser Stelle gar kein ImageScale vorkommt, welches den Pfad vermurkst...

An der zweiten Stelle (ab Output Data) ist es korrekt...

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

votapero
Beiträge: 63
Registriert: Do 9. Mär 2006, 15:04
Kontaktdaten:

Beitrag von votapero » Mi 3. Mai 2006, 05:05

Hallo HerrB und Co.

Ich kriege bei der ArtikelListe 1.4 einfach das Blättern nicht hin (es schaltet zwar von 1 nach 2 (bei der <1 - 2> Anzeige), aber die Artikelliste beginnt immer beim ersten Artikel. Kann das an der PhP 4.3.1 Version liegen? Oder habe ich, trotz mehrmaligem durchlesen der 15 Seiten etwas übersehen?

(Habe 4.6.8 im Einsatz, Artikelliste mit Templates von Seite 12 )
PS: Könnte man nicht einen aktuellen Code posten? Die Ddiskussionen um Round und Ceil etc. verwirren die "nicht Php'ler". Danke.

votapero
Beiträge: 63
Registriert: Do 9. Mär 2006, 15:04
Kontaktdaten:

Beitrag von votapero » Mi 3. Mai 2006, 09:19

Hallo HerrB

Das Problem gefunden: Wenn das Modul im selben Template 2 mal eingesetzt wird, geht das Blättern nicht. Ist dies nicht vorgesehen oder ein Bug? Oder mach ich was falsch?

Wollte in einem zweiten Container weitere NEWS ausgeben...

Danke für ihren Feedback.

Uwe
Beiträge: 258
Registriert: Mo 30. Jun 2003, 16:05
Wohnort: Konstanz
Kontaktdaten:

Beitrag von Uwe » Mi 3. Mai 2006, 09:47

*Sigh*

Ich gebe ja zu, dass der Tipp für den Einsteiger zu kurz gefasst ist... Der PHP-Crash-Kurs:
Danke, danke, funktioniert. Wäre ja schon fast ne neue Versionsnummer wert.

Und jetzt frage ich doch frecherweise: Warum hast Du für das starke Modul kein Template genutzt? Bin nur neugierig ...

Viele Grüsse, Uwe

rezeptionist
Beiträge: 1536
Registriert: Fr 20. Aug 2004, 10:07
Kontaktdaten:

Beitrag von rezeptionist » Mi 3. Mai 2006, 10:19

Da ich Ihn damals unter Zeitdruck gesetzt habe, da ich das Modul dringenst brauchte . :wink:
greets

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Mi 3. Mai 2006, 15:30

Das Problem gefunden: Wenn das Modul im selben Template 2 mal eingesetzt wird, geht das Blättern nicht. Ist dies nicht vorgesehen oder ein Bug? Oder mach ich was falsch?
Mmmh, das ist nicht ganz so einfach. Erzeuge das Modul zunächst zweimal und benenne im zweiten Modul im Output überall den Term, der in der URL eingetragen ist (nextstep oder page oder sowas) in was anderes um (am Besten in Notepad kopieren, Term identifizieren und mit Suchen&Ersetzen ersetzen).

Hinweis: Wenn Du das Modul zweimal einsetzt, kann es im Moment noch zu Problemen bei der Konfiguration kommen (Backend).

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Beitrag von Oldperl » Mi 3. Mai 2006, 15:58

baumpaul hat geschrieben:Ich habe gerade noch eine Bug in der Template Verson endeckt. Bei mir mit folgender Einstellung:
Headline (0), Bild aus Text (200x150), Text (255)

Wenn ein Artikel ein Bild hat, wird der Text des nächsten Artikels angehängt. Als Beweis, hier ein Bild:

Der Erste Artikel ist korrekt, aber der 2te und 3te nicht. Siehe beim 2. Absatz, steht dort der Text des 1. Absatzes des nächsten Artikels.
Habe nach Absprache mit baumpaul den obigen Fehler reproduzieren und beheben können.

Der Fehler tritt dann auf, wenn in eine HTML-Text kein Bild vorhanden ist, dieses aber angezeigt werden soll. Es wird dann der Text vom vorherigen Artikel genommen, ich nehme an weil dieser noch im array steht, aber genau konnt ich es nicht herausbekommen.
Ich habe nun in der Template-Version den Output so geändert, das, wenn kein Bild im Text steht, das Template für ein Bild garnicht erzeugt wird.

Hier nun die Änderungen (sind kommentiert)

Code: Alles auswählen

/* Init Template
*/
$template_advanced = "teaser_advanced.html";
$template_advanced2 = "teaser_advanced_element.html";
$newsheadline = "Neues auf dieser Seite";
$ii = 0;
if (!is_object($tpl)) {
	$tpl = new Template;
}

$tpl->reset();
$tpl->set('s', 'TITLE', $newsheadline);
      foreach ($aData as $aValue) {
       $headline_advanced = $aValue["Category"].": ".$aValue["Headline"];
         if ($aSettings["Elements"] > 0) {
         	if (!is_object($tpl2)) {     #generate template for elements
				$tpl2 = new Template;
				}
			$tpl2->reset();

            $img_number = 0;
            $text_number = 0;
            for ($i = 0; $i < $aSettings["Elements"]; $i++) {
               switch (TRUE) {
                  case ($aSettings["k".$i]["ElementType"] == "Image" || $aSettings["k".$i]["ElementType"] == "ExtractedImage"):
                  if (!empty($aValue["i".$i]["WebPath"])) {     // modify oldperl: if no Webpath, there's no image
                     $image = $aValue["i".$i]["WebPath"];

                     $width  = $aValue["i".$i]["Width"];
                     $height = $aValue["i".$i]["Height"];

                     if ($aSettings["k".$i]["ElementWidth"] > 0 && $aSettings["k".$i]["ElementHeight"] > 0) {
                        # Check, if resize necessary
                        if ($aValue["i".$i]["ServerPath"] != "" && file_exists($aValue["i".$i]["ServerPath"]) &&
                            ($aValue["i".$i]["Width"] > $aSettings["k".$i]["ElementWidth"] ||
                             $aValue["i".$i]["Height"] > $aSettings["k".$i]["ElementHeight"])) {
                           # Scale image
                           $image = capiImgScale($aValue["i".$i]["ServerPath"], $aSettings["k".$i]["ElementWidth"], $aSettings["k".$i]["ElementHeight"], false, false, 10, false);

                           #Get dimensions of the image
                           list ($width, $height, $type, $attr) = getimagesize($image);
                        } else {
                           $image = $aValue["i".$i]["WebPath"];

                           $width  = $aValue["i".$i]["Width"];
                           $height = $aValue["i".$i]["Height"];
                        }
                     }

                     if ($image != "") {
                        $element_class = 'img_advanced'.$img_number;
                        if ($XHTML == true) {
                        $element_content = '<img src="'.$image.'" width="'.$width.'" height="'.$height.'" alt="" />';                      } else {
                        $element_content = '<img src="'.$image.'" width="'.$width.'" height="'.$height.'" alt="">';
                        }

                        $img_number++;
                     }
                     } else {       // modify oldperl: if no image, we need no template
                        $no_template = true;
                     }
                     break;
                  default: // Everything else is treated as "Text"
                     $element_class = 'text_advanced'.$text_number;  // set the class-value for div
                     $element_content = $aValue["i".$i]["Value"]; // set content for div

                     $text_number++;
               }
               	if(!$no_template) {     // modify oldperl: build tpl only if needed
                	// build elements with template
	                $tpl2->set('d', 'CLASS_ELEMENT', $element_class);
	                $tpl2->set('d', 'CONTENT_ELEMENT',$element_content);
	                $tpl2->next();
                } else {
                	$no_template = false;
                }
            }
wenn der Webpath des Bildes nicht im array steht, gibts da auch kein Bild, also wird eine Variable $no_template auf true gesetzt. Ist diese Variable gesetzt, so werden keine Templateeinträge gemacht, sondern die Variable wieder auf false gesetzt.

Vielleicht fällt jemandem da noch eine besser Lösung ein :?:

Den Code :arrow: http://www.contenido.org/forum/viewtopi ... 6174#76174
habe ich auch angepaßt.

Gruß aus dem sonnigen Frankenland

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

votapero
Beiträge: 63
Registriert: Do 9. Mär 2006, 15:04
Kontaktdaten:

Beitrag von votapero » Mi 3. Mai 2006, 20:36

Hallo HerrB.
Danke für den Tipp! Klappt nun mit zwei ArtikelListen. Brauchte wirklich nur den Term NEXTSTEP mit NEXTSTEP2 zu ersetzen. Auch die Konfiguration im Backend scheint zu funktionieren. Werde noch weiter Testen, bin aber soweit voll zufrieden. Ist wirklich cool, die ArtikelListe !

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Mi 3. Mai 2006, 21:35

Freut mich. Aber trotzdem arbeite ich gerade an ein paar Änderungen, die das Leben erleichtern sollen (und auch die - verständliche - Kritik von, öhm, i-fekt?) zu berücksichtigen - in mehreren Sprachen funktioniert das Modul zwar, aber es ist ein Pain in the a**, die Einstellungen anzugleichen...

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

Dalamar
Beiträge: 298
Registriert: Di 16. Nov 2004, 15:43
Wohnort: Arnstadt / Thüringen
Kontaktdaten:

Beitrag von Dalamar » Mo 15. Mai 2006, 13:54

Hi,

ich benutze das Modul zum ersten Mal und bin ehrlich gesagt sehr erfreut, über die konsequente und flexible Umsetzung der Artikelliste. *lob*

Aber nun zu meinem eigentlichen Anliegen. Mir ist aufgefallen, dass Entitäten nicht sauber ausgegeben werden. Und zwar benutze ich in diversen Artikel das Eurozeichen €. Dieses wird durch den TinyMCE automatisch in die Entität &euro; umgewandelt. Soweit so gut. Schaue ich nun in die Artikelliste, dann sehe ich nicht das €-Zeichen, sondern das Literal &euro;. Ein Blick in den Html-Code zeigt mir, dass die Artikelliste aus dem & auch eine Entität (&) gemacht hat und somit das €-Zeichen nicht korrekt dargestellt werden kann. Im Html-Code steht dann &euro;.

Ändert man folgenden Code:

Code: Alles auswählen

                              default:
                                 $sTmpValue = html_entity_decode(strip_tags(urldecode($db3->f('value'))));
                                 if ($aSettings["k".$k]["ElementWidth"] > 0 && strlen($sTmpValue) > $aSettings["k".$k]["ElementWidth"]) {
                                    # Cutting text but preserving words and entities
                                    $sTmpValue = htmlentities(capiStrTrimAfterWord($sTmpValue, $aSettings["k".$k]["ElementWidth"])."...");
                                 }
                                 $aData[$i]["i".$k]["Value"] = $sTmpValue;
in

Code: Alles auswählen

default:
                                 $sTmpValue = html_entity_decode(strip_tags(urldecode($db3->f('value'))));
                                 if ($aSettings["k".$k]["ElementWidth"] > 0 && strlen($sTmpValue) > $aSettings["k".$k]["ElementWidth"]) {
                                    # Cutting text but preserving words and entities
                                    $sTmpValue = capiStrTrimAfterWord($sTmpValue, $aSettings["k".$k]["ElementWidth"])."...";
                                 }
                                 $aData[$i]["i".$k]["Value"] = $sTmpValue;
dann funktioniert es.

Prüf das bitte nochmal nach HerrB. Du wirst sicherlich deine Gründe gehabt haben, warum Du die Funktion "htmlentities" verwendet hast.

Gruss,
Christian
Beruflich: eComradeGroup und Media Atoll
Privat: Fantasybuch.net ;)

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Mo 15. Mai 2006, 14:12

Nö, war mal ein Fix für irgendwas anderes. Sieht gut aus.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

mR_brown
Beiträge: 27
Registriert: Sa 3. Dez 2005, 12:15
Wohnort: H/MD
Kontaktdaten:

Beitrag von mR_brown » Do 18. Mai 2006, 07:03

Hallo,

setze gerade auch die Artikelliste ein, jedoch wird das Teaserbild nur rechts vom Text ausgegeben wenn ich dem Text-div eine width-Angabe zuweise, jedoch ist das für mein Layout nicht so praktisch, gibt es eine Möglichkeit das Teaserbild vor dem Teasertext auszugeben.

Habe schon versucht im Modul die image-Ausgabe zu verschieben, jedoch ohne Erfolg. Kann mir einer bitte einen Tipp geben?!

Code: Alles auswählen

<div id="teaser">
<h1>h1 Headline</h1>
<div style="float:left; width: 80%"><p>Absatz Blindtext Absatz Blindtext Absatz Blindtext Absatz Blindtext Absatz Blindtext Absatz Blindtext Absatz Blindtext Absatz Blindtext Absatz BlindtextAbsatz Blindtext Absatz Blindtext</p></div>
<div><img src="" width="80" height="58" /></div>
<div style="clear:left"/>
<a href="front_content.php?idcat=15&idart=14">Weiter lesen</a>
</div>
Bessere Ausgabe so:

Code: Alles auswählen

<div id="teaser">
<h1>h1 Headline</h1>
<div style="float:right"><img src="" width="80" height="58" /></div>
<div><p>Absatz Blindtext Absatz Blindtext Absatz Blindtext Absatz Blindtext Absatz Blindtext Absatz Blindtext Absatz Blindtext Absatz Blindtext Absatz BlindtextAbsatz Blindtext Absatz Blindtext</p></div>
<a href="front_content.php?idcat=15&idart=14">Weiter lesen</a>
</div>
Dank+Gruß,
brown

Aixtraweb
Beiträge: 100
Registriert: Do 23. Sep 2004, 10:55
Wohnort: Herzogenrath
Kontaktdaten:

Was mich ein wenig stört...

Beitrag von Aixtraweb » Mi 24. Mai 2006, 05:21

Hallo HerrB,

tolle Leistung und super Artikelliste! Danke!

Ich habe allerdings noch eine Anmerkung, wenn man mehrere Elemente eines Artikels hat, z.B. um einen Zufallsartikel auf einer Seite auszugeben, dann wird nur die Headline richtig formartiert dargestellt.

Bei den zusätzlichen Elementen, die man anzeigen lassen möchte, fallen die Formatierungen weg und die Ausgabe ist reiner Fließtext. Könnte man das nicht irgendwie abändern, dass die Formatierungen beibehalten werden?

Beispiel:

Neben der Headline, geben ich die Subheadline (Element 1) und dann noch den kompletten Text (Element 2) aus. Beide Elemente sind ohne Formatierung. Absätze, Hervorhebungen durch Fettschrift etc. gehen verloren.

Könnte man nicht 'einfach' einen schalter einbauen, mit dem man die Formatierungen schützen sprich übernehmen kann anstelle diese einfach in Fließtext zu setzen...???
Mit freundlichen Grüßen
Jörg Knörchen

Meine Hobby-Webseite:
www.mein-foto-abc.de : contenido 4.6.15 - I love it! : www.yogie.de : www.bastelstun.de

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Mi 24. Mai 2006, 10:23

Zum einen ist die Gestaltung des Output-Bereichs Dir überlassen (der vorhandene Code ist nur ein Beispiel). Zum anderen werden im Beispiel alle Elemente in DIVs mit einer bestimmten Klasse ausgegeben - einfach mal in den fertigen Code gucken und die Klasse in der CSS-Datei Deiner Seite definieren, so dass sie formatiert werde.

U.U. ist das aber auch ein Missverständnis: Da es sonst Probleme mit dem Abschneiden von Texten gibt, werden alle Tags aus den Inhalten vor Ausgabe entfernt (damit auch alle span oder div-tags).

Wenn diese erhalten bleiben sollen, musst Du im Output-Code jeweils die Funktion strip_tags herausoperieren.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

peanut
Beiträge: 246
Registriert: Do 25. Nov 2004, 19:34
Kontaktdaten:

Beitrag von peanut » Do 25. Mai 2006, 17:55

Hallo zusammen

ich hab mal eine Frage wegen dem ROUND und dem CEIL Problem

also bei mir geht das irgendwie nicht so richtig

die Letzte Seite verschwindet einfach beim Blättern über die 1,2,3,4,5,6,7,8 Version ausser es passt von der Anzahl her mit der Eingabe im Backend zufällig überein

das next und back geht aber komischerweise richtig

hier mal der OUTPUT code ( ist nicht mehr original !!!! )

Code: Alles auswählen

<?php
# Initialization
$bDebug     = false;
$iDataStart = 20;
$lCount     = 0;

unset ($aData);
$aData = array();

# Base settings
unset ($aSettings);
$aSettings = array();
$aSettings["ArticleCount"]       = "CMS_VALUE[0]";
$aSettings["ArticlePerPage"]     = "CMS_VALUE[1]";
$aSettings["SortBy"]             = "CMS_VALUE[2]";
$aSettings["SortDir"]            = "CMS_VALUE[3]";
$aSettings["ShowStart"]          = "CMS_VALUE[4]";
$aSettings["Category"]           = "CMS_VALUE[5]";
$aSettings["HeadlineIdentifier"] = "CMS_VALUE[7]";
$aSettings["HeadlineLength"]     = "CMS_VALUE[8]";
$aSettings["Elements"]           = "CMS_VALUE[9]";
$aSettings["CatTypeSel"]         = "CMS_VALUE[10]";
$aSettings["AddCats"]            = "CMS_VALUE[11]";

# Checking base settings
if (!is_numeric($aSettings["ArticleCount"]) || $aSettings["ArticleCount"] < 0) {
   $aSettings["ArticleCount"] = 5;
}
if (!is_numeric($aSettings["ArticlePerPage"]) || $aSettings["ArticlePerPage"] < 0) {
   $aSettings["ArticlePerPage"] = 0; // Deactivating page browsing
}
if ($aSettings["ArticlePerPage"] == 0 || !is_numeric($_REQUEST["nextstep"])) {
   $_REQUEST["nextstep"] = 0;
}
if (!is_numeric($aSettings["Category"]) || $aSettings["Category"] <= 0) {
   $aSettings["Category"] = 0;
}
if (strlen($aSettings["HeadlineIdentifier"]) > 50) {
   $aSettings["HeadlineIdentifier"] = "";
}
if (!is_numeric($aSettings["HeadlineLength"]) || $aSettings["HeadlineLength"] < 0) {
   $aSettings["HeadlineLength"] = 0;
}
if (!is_numeric($aSettings["Elements"]) || $aSettings["Elements"] < 0) {
   $aSettings["Elements"] = 0;
}
if ($aSettings["CatTypeSel"] == "" || ($aSettings["AddCats"] == "" && $aSettings["CatTypeSel"] == "selected")) {
   $aSettings["CatTypeSel"] = "none";
}

# Detail settings
if ($aSettings["Elements"] > 0) {
   for ($i = 0; $i < $aSettings["Elements"]; $i++) {
      $iElementType       = $iDataStart + ($i * 5);
      $iElementIdentifier = $iElementType + 1;
      $iElementWidth      = $iElementType + 2;
      $iElementHeight     = $iElementType + 3;

      $aSettings["k".$i] = array();
      $aSettings["k".$i]["ElementType"]    = "CMS_VALUE[$iElementType]"; // Text, Image, ExtractedImage
      $aSettings["k".$i]["Identifier"]     = "CMS_VALUE[$iElementIdentifier]";
      $aSettings["k".$i]["ElementWidth"]   = "CMS_VALUE[$iElementWidth]"; // Textlength or ImageWidth
      $aSettings["k".$i]["ElementHeight"]  = "CMS_VALUE[$iElementHeight]";

      # Check detail settings
      if ($aSettings["k".$i]["ElementType"] == "") {
         $aSettings["k".$i]["ElementType"] == "Text";
      }
      if ($aSettings["k".$i]["ElementType"] == "Text") {
         $aSettings["ElementHeight"] = 0;
         if (!is_numeric($aSettings["k".$i]["ElementWidth"]) || $aSettings["k".$i]["ElementWidth"] < 0) {
            $aSettings["k".$i]["ElementWidth"] = 50;
         }
      } else if (!is_numeric($aSettings["k".$i]["ElementWidth"]) || $aSettings["k".$i]["ElementWidth"] <= 0 ||
                 !is_numeric($aSettings["k".$i]["ElementHeight"]) || $aSettings["k".$i]["ElementHeight"] <= 0) {
         $aSettings["k".$i]["ElementWidth"] = 0;
         $aSettings["k".$i]["ElementHeight"] = 0;
      }
      if (strlen($aSettings["Identifier"]) > 50) {
         $aSettings["Identifier"] = "";
      }
   }
}

unset ($iDataStart);
unset ($iElementType);
unset ($iElementIdentifier);
unset ($iElementWidth);
unset ($iElementHeight);

if ($aSettings["Category"] !== "0" && $aSettings["HeadlineIdentifier"] !== "") {
   if (!is_object($db2)) {
      $db2 = new DB_Contenido;
   }

   # Specifying search categories
   $sSelCats = "'".$aSettings["Category"]."'";
   # Adding categories "below" primary category
   switch ($aSettings["CatTypeSel"]) {
      case "below":
         $lCatLevel = -1;
         $sql  = "SELECT a.idcat AS idcat, b.level AS level FROM ".$cfg["tab"]["cat"]." a, ".$cfg["tab"]["cat_tree"]." b ";
         $sql .= "WHERE a.idcat = b.idcat ORDER BY b.idtree";

         $db2->query($sql);
         while($db2->next_record()) {
            if ($db2->f("idcat") == $aSettings["Category"]) {
               $lCatLevel = $db2->f("level");
            } else if ($lCatLevel > -1 && $db2->f("level") > $lCatLevel) {
               $sSelCats .= ",'".$db2->f("idcat")."'";
            } else if ($db2->f("level") <= $lCatLevel) {
               break;
            }
         }
         break;
      case "selected":
         $aCats = explode(",",$aSettings["AddCats"]);
         foreach ($aCats as $value) {
            if (is_numeric($value)) {
               $sSelCats .= ",'".$value."'";
            }
         }
         break;
      default:
   }

   $sql  = "SELECT tblData.value AS headline, ARTLANG.idart AS id, ARTLANG.lastmodified AS lastmodified, " ;
   $sql .= "ARTLANG.created AS created, ARTLANG.published AS published, CATLANG.name AS category, ";
   $sql .= "ARTLANG.idartlang AS idartlang, CATART.idcat AS idcat, CATART.idcatart AS idcatart FROM ";
   $sql .= $cfg["tab"]["cat_art"]." AS CATART, ";
   $sql .= $cfg["tab"]["art_lang"]." AS ARTLANG, ";
   $sql .= $cfg["tab"]["cat_lang"]." AS CATLANG, ";
   $sql .= $cfg["tab"]["content"]." AS tblData ";

   $sql .= "WHERE CATART.idcat IN (".$sSelCats.") AND ARTLANG.idlang = '".$lang."' ";
   $sql .= "AND tblData.idartlang = ARTLANG.idartlang ";
   $sql .= "AND CATLANG.idlang = ARTLANG.idlang ";
   $sql .= "AND CATLANG.idcat = CATART.idcat ";
   $sql .= "AND ARTLANG.idart = CATART.idart ";

   if ($aSettings["ShowStart"] != "enabled") {
      if ($cfg["is_start_compatible"] == true) {
         $sql .= "AND CATART.is_start = '0' ";
      } else {
         $sql .= "AND tblData.idartlang != CATLANG.startidartlang ";
      }
   }

   $sql .= "AND ARTLANG.online = '1' ";
   $sql .= "AND ".$aSettings["HeadlineIdentifier"]." ";

   // Sort by
   $sql .= "ORDER BY ";
   $sql .= $aSettings["SortBy"]." ".$aSettings["SortDir"]." ";

   // LIMIT
   if ($aSettings["ArticleCount"] > 0) {
      $sql .= "LIMIT 0, ".$aSettings["ArticleCount"];
   }

   // execute query
   $db2->query($sql);
   $lCount = $db2->num_rows();

   if ($lCount > 0) {
      if (!is_object($db3)) {
         $db3 = new DB_Contenido;
      }
      if (!is_object($db4)) {
         $db4 = new DB_Contenido;
      }
      if ($aSettings["ArticlePerPage"] > 0) {
         $lStartCount = $_REQUEST["nextstep"];
         $lEndCount   = $_REQUEST["nextstep"] + $aSettings["ArticlePerPage"];
         if ($lEndCount > $lCount) {
            $lEndCount = $lCount;
         }
      } else {
         $lStartCount = 0;
         $lEndCount   = $lCount;
      }

      $lRow = 0;
      $i    = 0;
      while ($db2->next_record()) {
         if ( $aSettings["ShowStart"] == "enabled" || 
             ($aSettings["ShowStart"] != "enabled" && $db2->f("idartlang") != $lStartIDArtLang)) {
            if ($lRow >= $lStartCount && $lRow < $lEndCount) {
               $aData[$i]                        = array();
               $aData[$i]["Category"]            = urldecode($db2->f("category"));
               $aData[$i]["Link"]                = $sess->url("front_content.php?idcat=".$db2->f("idcat")."&idart=".$db2->f("id"));;
               $aData[$i]["LastModified"]        = $db2->f("lastmodified");
               $aData[$i]["Created"]             = $db2->f("created");
               $aData[$i]["Published"]           = $db2->f("published");
               $sTmpValue = html_entity_decode(strip_tags(urldecode($db2->f('headline'))));
               if ($aSettings["HeadlineLength"] > 0 && strlen($sTmpValue) > $aSettings["HeadlineLength"]) {
                  # Cutting text but preserving words and entities
                  $sTmpValue = htmlentities(capiStrTrimAfterWord($sTmpValue, $aSettings["HeadlineLength"])."...");
               }
               $aData[$i]["Headline"] = $sTmpValue;

               if ($aSettings["Elements"] > 0) {
                  for ($k = 0; $k < $aSettings["Elements"]; $k++) {
                     $aData[$i]["i".$k]               = array();
                     $aData[$i]["i".$k]["Value"]      = "";
                     $aData[$i]["i".$k]["ServerPath"] = "";
                     $aData[$i]["i".$k]["WebPath"]    = "";
                     $aData[$i]["i".$k]["Width"]      = 0;
                     $aData[$i]["i".$k]["Height"]     = 0;
                  }
               
                  $sql =  "SELECT tblData.value AS value, tblData.idtype AS idtype, tblData.typeid AS typeid FROM ";
                  $sql .= $cfg["tab"]["cat_art"]." AS tblCatArt, ";
                  $sql .= $cfg["tab"]["art_lang"]." AS tblArtLang, ";
                  $sql .= $cfg["tab"]["content"]." AS tblData ";
                  $sql .= "WHERE tblData.idartlang = tblArtLang.idartlang AND ";
                  $sql .= "tblArtLang.idlang = '".$lang."' AND ";
                  $sql .= "tblArtLang.idart = tblCatArt.idart AND ";
                  $sql .= "tblCatArt.idcatart = '".$db2->f("idcatart")."' AND (";
               
                  $sql_items = "";
                  for ($k = 0; $k < $aSettings["Elements"]; $k++) {
                     if ($aSettings["k".$k]["Identifier"] != "") {
                        if ($sql_items != "") {
                           $sql_items .= " OR (".$aSettings["k".$k]["Identifier"].")";
                        } else {
                           $sql_items = "(".$aSettings["k".$k]["Identifier"].")";
                        }
                     }
                  }
                  $sql .= $sql_items.")";
                  
                  if ($bDebug) {
                     echo "<pre>".$sql."</pre>", chr(10);
                  }

                  // execute query
                  $db3->query($sql);
                  
                  while ($db3->next_record()) {
                     $sTypeIdentifier = "tblData.idtype = '".$db3->f('idtype')."' AND tblData.typeid = '".$db3->f('typeid')."'";
                     
                     # Note: The TypeIdentifier for one item may be the same as for another item.
                     #       Therefore, we are storing the content everywhere as needed
                     for ($k = 0; $k < $aSettings["Elements"]; $k++) {
                        if ($sTypeIdentifier == $aSettings["k".$k]["Identifier"]) {
                           switch (TRUE) {
                              case ($aSettings["k".$k]["ElementType"] == "Image" || $aSettings["k".$k]["ElementType"] == "ExtractedImage"):
                                 $sql = "";
                                 if ($aSettings["k".$k]["ElementType"] == "Image") {
                                    $sql =  "SELECT dirname, filename FROM ".$cfg["tab"]["upl"]." ";
                                    $sql .= "WHERE idupl = '".$db3->f('value')."'";
                                 } else {
                                    $sTmpValue = urldecode($db3->f('value'));
   
                                    $regEx = "/<img[^>]*?>.*?/i";
                                    $match = array ();
                                    preg_match($regEx, $sTmpValue, $match);
      
                                    $regEx = "/(src)(=)(['\"]?)([^\"']*)(['\"]?)/i";
                                    $img = array ();
                                    preg_match($regEx, $match[0], $img);
                                    $img_src = preg_split("/\//", $img[0]);
                                    
                                    $img_name = $img_src[count($img_src) - 1];
                                    $img_name = preg_replace("/\"/", "", $img_name);
                                    #Don't know what is happening here, exactly...
                                    # $img_split = preg_split("/\./", $img_name);
                                    # $img_type = $img_split[count($img_split) - 1];
                                    # $img_split2 = preg_split("/_/", $img_split[0]);

                                    $name = strtolower($img_name);

                                    #Don't know what is happening here, exactly...
                                    #if (count($img_split2) > 1) {
                                    #   $img_x = $img_split2[count($img_split2) - 1];
                                    #   $img_y = $img_split2[count($img_split2) - 2];
    
                                    #   if (is_numeric($img_x) AND is_numeric($img_y)) {
                                    #      $suffix = "_".$img_x."_".$img_y.".".$img_type;
                                    #      $name = preg_replace("/$suffix/", "", $img_name);
                                    #      $name = $name.".[a-zA-Z]{3}";
                                    #   }
                                    #}
   
                                    if (strlen($name) > 0) {
                                       $sql =  "SELECT dirname, filename FROM ".$cfg["tab"]["upl"]." ";
                                       $sql .= "WHERE LOWER(filename) = '$name'";
                                       // $sql .= "WHERE filename REGEXP '$name'"; // Old: for 'banner.jpg' 'merlin_banner.jpg' is also returned
                                    }
                                 }
                              
                                 if ($bDebug) {
                                    echo "<pre>".$sql."</pre>";
                                 }
                              
                                 // execute query
                                 if ($sql != "") {
                                    $db4->query($sql);
                                 
                                    if ($db4->next_record()) {
                                       $aData[$i]["i".$k]["ServerPath"] = $cfgClient[$client]["upl"]["path"].$db4->f('dirname').$db4->f('filename');
                                       $aData[$i]["i".$k]["WebPath"]    = $cfgClient[$client]["upl"]["htmlpath"].$db4->f('dirname').$db4->f('filename');

                                       list ($width, $height, $type, $attr) = getimagesize($aData[$i]["i".$k]["WebPath"]);
                                       $aData[$i]["i".$k]["Width"]      = $width;
                                       $aData[$i]["i".$k]["Height"]     = $height;
                                    }
                                 }
                              
                                 break;
                              default:
                                 $sTmpValue = html_entity_decode(strip_tags(urldecode($db3->f('value'))));
                                 if ($aSettings["k".$k]["ElementWidth"] > 0 && strlen($sTmpValue) > $aSettings["k".$k]["ElementWidth"]) {
                                    # Cutting text but preserving words and entities
                                    $sTmpValue = htmlentities(capiStrTrimAfterWord($sTmpValue, $aSettings["k".$k]["ElementWidth"])."...");
                                 }
                                 $aData[$i]["i".$k]["Value"] = $sTmpValue;
                           }
                        }
                     } 
                  }
               }
               $i++;
            } else if ($lRow == $lEndCount) {
               break;
            }
            $lRow++;
         }
      }
      # Clearing memory
      unset ($db2);
      unset ($db3);
      unset ($db4);
      unset ($sql);
      unset ($lStartIDArtLang);
      unset ($lStartCount);
      unset ($lEndCount);

      # Output data
      # Every output manipulation should be done here...
      # 
      # Base information:
      # $aSettings["Elements"]:       Number of expected, additional elements from each article
      # $aSettings["ArticlePerPage"]: Number of articles per page (0: show all)
      # $aSettings["k".$i]["ElementType"]:   Per Element: Type of Element: Text, Image or ExtractedImage
      # $aSettings["k".$i]["ElementWidth"]:  Per Element: Text length or image width (-> recycling ...)
      # $aSettings["k".$i]["ElementHeight"]: Per Element: Image width
      # 
      # Per article:
      # $aValue["Headline"]:          Content of article element specified as containing the headline information
      # $aValue["Link"]:              Relative link to get to the listed article
      # $aValue["LastModified"]:      Last modified date of the article
      # $aValue["Created"]:           Created date of the article
      # $aValue["Published"]:         Published date of the article
      # $aValue["Category"]:          Category name
      # 
      # Per article additional element:
      # $aValue["i".$i]["Value"]:      Text (only for text elements, otherwise "")
      # $aValue["i".$i]["WebPath"]:    HTTP... path to image
      # $aValue["i".$i]["ServerPath"]: /server/... path to image
      # $aValue["i".$i]["Width"]:      >Original< image width
      # $aValue["i".$i]["Height"]:     >Original< image height

		$box_count = 'odd'; 
      
      foreach ($aData as $aValue) {
         echo '<div class="mvf_teaserBox_'.$box_count.'">', chr(10);
         echo '   <div class="mvf_head"><span class="mvf_headlineCat">'.$aValue["Category"].':</span> <a href="'.$aValue["Link"].'" class="mvf_headline">'.$aValue["Headline"].'</a></div>', chr(10);

         if ($aSettings["Elements"] > 0) {
            for ($i = 0; $i < $aSettings["Elements"]; $i++) {
               switch (TRUE) {
                  case ($aSettings["k".$i]["ElementType"] == "Image" || $aSettings["k".$i]["ElementType"] == "ExtractedImage"):
                     $image = $aValue["i".$i]["WebPath"];
                     
                     $width  = $aValue["i".$i]["Width"];
                     $height = $aValue["i".$i]["Height"];

                     if ($aSettings["k".$i]["ElementWidth"] > 0 && $aSettings["k".$i]["ElementHeight"] > 0) {
                        # Check, if resize necessary
                        if ($aValue["i".$i]["ServerPath"] != "" && file_exists($aValue["i".$i]["ServerPath"]) && 
                            ($aValue["i".$i]["Width"] > $aSettings["k".$i]["ElementWidth"] || 
                             $aValue["i".$i]["Height"] > $aSettings["k".$i]["ElementHeight"])) {
                           # Scale image
                           $image = capiImgScale($aValue["i".$i]["ServerPath"], $aSettings["k".$i]["ElementWidth"], $aSettings["k".$i]["ElementHeight"], false, false, 10, false);
                           
                           #Get dimensions of the image
                           list ($width, $height, $type, $attr) = getimagesize($image);
                        } else {
                           $image = $aValue["i".$i]["WebPath"];
                           
                           $width  = $aValue["i".$i]["Width"];
                           $height = $aValue["i".$i]["Height"];
                        }
                     }
                     
                     if ($image != "") {
                        echo '   <a href="'.$aValue["Link"].'"><img src="'.$image.'" width="'.$width.'" height="'.$height.'"  class="mvf_image" /></a>', chr(10);
                     }
                     
                     break;
                  default: // Everything else is treated as "Text"
                  
                  
                  echo '   <div class="mvf_text'.$i.'">'.$aValue["i".$i]["Value"].'</div>', chr(10);
                  
                  
                  
                  
               }
            }
         }
         echo '<a class="mvf_details" href="'.$aValue["Link"].'">'.mi18n("# DETAILS").'</a>', chr(10);
         echo '</div>', chr(10);
         
         if ($box_count == 'even') {
         	$box_count = 'odd';
         }else {
         	$box_count = 'even';
         }
      }
   }

   # Page browsing
   # Hint: Number of max available records: $lCount
   #       Number of pages: ceil($lCount / $aSettings["ArticlePerPage"])
   #       First page: nextstep=0
   #       Last page:  nextstep=(ceil($lCount / $aSettings["ArticlePerPage"]) - 1) * $aSettings["ArticlePerPage"];
   #                   (I have to admit that I'm not sure about the last page formula ... ;-) )
   if ($aSettings["ArticlePerPage"] > 0) {
      # Example: Back and Next
      echo '<div id="browsing">', chr(10);
      if ($_REQUEST["nextstep"] > 0) {
         echo '   <div id="Back">', chr(10);
         echo '      <a href="front_content.php?idcat='.$idcat.'&idart='.$idart.'&nextstep='.($_REQUEST["nextstep"]-$aSettings["ArticlePerPage"]).'">'.mi18n("Back").'</a>', chr(10);
         echo '   </div>', chr(10);
      }
      if (($_REQUEST["nextstep"] + $aSettings["ArticlePerPage"]) < $lCount) {
         echo '   <div id="Next">', chr(10);
         echo '      <a href="front_content.php?idcat='.$idcat.'&idart='.$idart.'&nextstep='.($_REQUEST["nextstep"]+$aSettings["ArticlePerPage"]).'">'.mi18n("Next").'</a>', chr(10);
         echo '   </div>', chr(10);
      }

      # Example: 1 2 3 4 5 6 7 ...
      $iPages = intval($lCount / $aSettings["ArticlePerPage"]);
      $sPageLinks = '';

      echo '   <div id="Pages">';
      for ($i = 1; $i <= $iPages; $i++) {
         $lNextStep = ($i - 1) * $aSettings["ArticlePerPage"];
         if ($sPageLinks != '') {
            $sPageLinks .= '&nbsp;';
         }
         if ($_REQUEST["nextstep"] == $lNextStep) {
            $sPageLinks .= $i."\n"; # I'm on the current page, no link
         } else {
            $sPageLinks .= '<a href="front_content.php?idcat='.$idcat.'&idart='.$idart.'&nextstep='.$lNextStep.'">'.$i.'</a>'."\n";
         }
      }
      echo '      '.$sPageLinks."\n";
      echo '   </div>'."\n";

      # Example: |< 1 ... 3 4 5 ... 8 >|
      $iPages = intval($lCount / $aSettings["ArticlePerPage"]);
      $sPageLinks = '';

      echo '   <div id="Pages">'."\n";
      echo '      <a href="front_content.php?idcat='.$idcat.'&idart='.$idart.'&nextstep=0">|<</a>'."\n";
      for ($i = 1; $i <= $iPages; $i++) {
         $lNextStep = ($i - 1) * $aSettings["ArticlePerPage"];
         if ($i == 1 || $i == $iPages) {
            if ($sPageLinks != '') {
               $sPageLinks .= '&nbsp;';
            }
            if ($_REQUEST["nextstep"] == $lNextStep) {
               $sPageLinks .= $i."\n"; # I'm on the current page, no link
            } else {
               $sPageLinks .= '<a href="front_content.php?idcat='.$idcat.'&idart='.$idart.'&nextstep='.$lNextStep.'">'.$i.'</a>'."\n";
            }
         } else if ($_REQUEST["nextstep"] == $lNextStep) {
            $sPageLinks .= '&nbsp;'.$i."\n"; # I'm on the current page, no link
         } else if ($_REQUEST["nextstep"] == ($lNextStep + $aSettings["ArticlePerPage"])) {
            # Front
            $sPageLinks .= '&nbsp;<a href="front_content.php?idcat='.$idcat.'&idart='.$idart.'&nextstep='.$lNextStep.'">'.$i.'</a>'."\n";
         } else if ($_REQUEST["nextstep"] == ($lNextStep - $aSettings["ArticlePerPage"])) {
            # Back
            $sPageLinks .= '&nbsp;<a href="front_content.php?idcat='.$idcat.'&idart='.$idart.'&nextstep='.$lNextStep.'">'.$i.'</a>'."\n";
         } else if ($_REQUEST["nextstep"] == ($lNextStep - (2 * $aSettings["ArticlePerPage"])) ||
                    $_REQUEST["nextstep"] == ($lNextStep + (2 * $aSettings["ArticlePerPage"]))) {
            $sPageLinks .= '...';
         }
      }
      echo '      '.$sPageLinks."\n";
      echo '      &nbsp;<a href="front_content.php?idcat='.$idcat.'&idart='.$idart.'&nextstep='.(ceil($lCount / $aSettings["ArticlePerPage"]) - 1) * $aSettings["ArticlePerPage"].'">>|</a>'."\n";
      echo '   </div>'."\n";

      echo '</div>'."\n"; # Closing Browsing div
   }
}
# Clearing memory
unset ($aData);
unset ($aSettings);
unset ($i);
unset ($lCount);
unset ($bDebug);
?>
Vielen Dank für einen kleinen Tipp .....

Gruss
Peanut
du liest nie ein Buch und weisst weise der Bildung auszuweichen ....

Gesperrt