Modul: Multiple Article Teaser/Mehrfachartikelvorschau

Genaral
Beiträge: 52
Registriert: Di 14. Sep 2004, 09:26
Kontaktdaten:

Re: Modul: Multiple Article Teaser/Mehrfachartikelvorschau

Beitrag von Genaral » Do 29. Mär 2007, 15:10

Lieber HerrB!

Herzlichen Dank für dieses super Modul.

Ich bin gerade dabei dieses zu testen und stieß dabei auf ein Problem:

Wenn in der Artikelkonfiguration ein bzw. mehrere Artikel ausgewählt wurden und dieser ausgewählte Artikel später dann offline gesetzt bzw. gelöscht wird, wird trotzdem die Vorschau mit dem Link bzw. bei gelöschtem Artikel nur der Link angezeigt. Beim anklicken des Links kommt man dann auf die Fehler-Seite bzw. Startseite.

Wie kann ich das ändern?
Leider bin ich noch immer nicht ganz warm mit PHP, auch weil ich beruflich mitlerweile wenig bis gar nicht damit zu tun habe.

Gruß Genaral

fif
Beiträge: 7
Registriert: So 27. Mai 2007, 12:54
Kontaktdaten:

Beitrag von fif » Mo 23. Jul 2007, 18:47

Hallo HerrB!

Erstmal Gratulation! Modul erster Klasse! Vielen Dank!

Ich hab nur ein Problem:

Meine Seite ist so aufgebaut, dass die allermeisten Artikel im Template nicht eine Überschrift, ein Bild und einen Text haben, sondern nur ein Element der Art CMS_HTML[]. Darin gestalte ich dann den Inhalt inklusive Überschriften und Bilder ganz in HTML. Nun kann ich in deinem Modul ja nur dieses Element sowohl als Überschrift als auch als Text auswählen. Gibt es irgendeine Möglichkeit, dass man von deinem Modul aus z.B. <h1> aus CMS_HTML[1] als Titel und <p> als Text auswählen kann?

MFG

Flavio

Nachtrag:
Nun schon etwas konkreter: wo müsste ich ansetzen, um aus dem CMS_HTML[] heraus jeweils die <h1> bis <h6> als Headline und die <p> Elemente als Text verfügbar zu machen? Ich denke ich müsste irgendo vor strip_tags einen weiteren Filter einbauen. Aber hätte dieser dann nur einfluss auf die Ausgabe, wenns ein CMS_HTML[] ist, oder auch wenns ein CMS_TEXT[] ist? Wie könnt ich dazwischen unterscheiden?
Danke im Voraus
MFG
Flavio

fif
Beiträge: 7
Registriert: So 27. Mai 2007, 12:54
Kontaktdaten:

Beitrag von fif » Mo 23. Jul 2007, 21:50

Hab mal was gebastelt, in der functions.input.helper.php. Sollte eigentlich schonmal die Auswahl in den Dropdowns etwas erweitern. Bin leider kein PHP Guru. Zum Glück gibts php.net.

Code: Alles auswählen

while ($db2->next_record()) {
         $sTypeIdentifier = "tblData.idtype = '".$db2->f('idtype')."' AND tblData.typeid = '".$db2->f('typeid')."'";
         $sContent = $db2->f('type')."[".$db2->f('typeid')."]: ".substr(strip_tags(urldecode($db2->f("value"))), 0, 50);
         $sDescription = i18n($db2->f("description"));

         if ($sValue != $sTypeIdentifier) {
            $html .= '<option value="'.$sTypeIdentifier.'">&nbsp;'.$sContent.'</option>'.chr(10);
         } else {
            $html .= '<option selected="selected" value="'.$sTypeIdentifier.'">&nbsp;'.$sContent.'</option>'.chr(10);
         }
      }
hab ich ersetzt durch:

Code: Alles auswählen

while ($db2->next_record()) {
         $sTypeIdentifier = "tblData.idtype = '".$db2->f('idtype')."' AND tblData.typeid = '".$db2->f('typeid')."'";
         $sDescription = i18n($db2->f("description"));

	 if ($db2->f('type') != "CMS_HTML") {
		$sContent = $db2->f('type')."[".$db2->f('typeid')."]: ".substr(strip_tags(urldecode($db2->f("value"))), 0, 50);
		if ($sValue != $sTypeIdentifier) {
          		  $html .= '<option value="'.$sTypeIdentifier.'">&nbsp;'.$sContent.'</option>'.chr(10);
        	 } else {
            		  $html .= '<option selected="selected" value="'.$sTypeIdentifier.'">&nbsp;'.$sContent.'</option>'.chr(10);
         	 }
	} else {
		$searchforh1 = urldecode($db2->f('value'));
		while (strpos($searchforh1,'<h1>') !== FALSE){
			$h1[] = substr(strip_tags(str_replace(stristr($searchforh1, '</h1>'), '' ,stristr($searchforh1, '<h1>'))), 0, 20);
			$searchforh1 = stristr($searchforh1, '</h1>');
		}
		$searchforh2 = urldecode($db2->f('value'));
		while (strpos($searchforh2,'<h2>') !== FALSE){
			$h2[] = substr(strip_tags(str_replace(stristr($searchforh2, '</h2>'), '' ,stristr($searchforh2, '<h2>'))), 0, 20);
			$searchforh2 = stristr($searchforh2, '</h2>');
		}
		$searchforp = urldecode($db2->f('value'));
		while (strpos($searchforp,'<p>') !== FALSE){
			$p[] = substr(strip_tags(str_replace(stristr($searchforp, '</p>'), '' ,stristr($searchforp, '<p>'))), 0, 20);
			$searchforp = stristr($searchforp, '</p>');
		}
		array_merge($h1,$h2,$p);
		foreach($h1 as $sContentEnd){
			$sContent = $db2->f('type')."[".$db2->f('typeid')."]: ";
			$sContent .= $sContentEnd;
			if ($sValue != $sTypeIdentifier) {
          		  $html .= '<option value="'.$sTypeIdentifier.'">&nbsp;'.$sContent.'</option>'.chr(10);
        	 	} else {
            		  $html .= '<option selected="selected" value="'.$sTypeIdentifier.'">&nbsp;'.$sContent.'</option>'.chr(10);
         	 	}
		}
	}
Nur leider folgendes beim Aufrufen der Artikelkonfiguration:

Code: Alles auswählen

Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 865 bytes) in /home/www/web109/html/contenido/cms/includes/functions.input.helper.php on line 179
Kann das wirklich sein, dass ich damit das Memory überstrapaziere? Oder hab ich nur n Fehler übersehen? Bitte um einige Tips :-D

Wenn das dann funktioniert, dann müsste ich doch nur noch (fast) die selbe Ersetzung im Output des Moduls durchführen, oder?

MFG

Flavio

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

Beitrag von HerrB » Di 24. Jul 2007, 17:52

Unabhängig vom Fehler kannst Du das alles rückgängig machen.

Die input.helper.php lässt Dich nur das Text-Element auswählen, welches die relevanten Daten enthält.

Du hast ja drei Komponenten zur Verfügung: Einfach als Headline, Text und Bild das gleiche Element auswählen (da hindert Dich keiner dran).

Dann in der Ausgabe bei der Abfrage des Typs die Extrahierung ergänzen.

Also statt:
Beispiel HeadlineIdentifier:

Code: Alles auswählen

            if ($sTypeIdentifier == $aSettings["HeadlineIdentifier"]) {
               $aData["Item".($i + 1)]["Headline"] = strip_tags(urldecode($db2->f('value')));
            }

Code: Alles auswählen

            if ($sTypeIdentifier == $aSettings["HeadlineIdentifier"]) {
               $sContent = urldecode($db2->f('value'));
... Code, der h1 extrahiert ...
            }
Das Gleiche dann für TextIdentifier und beim Image braucht man nix machen.

Du kannst auch - was vielleicht sogar sinnvoller wäre, Dich auf ein Element in der Eingabe beschränken (also alles rauszuschmeißen, was nicht zur Image-Festlegung gehört (d.h. in der Eingabe des Moduls die Zeilen für die Auswahl des HeadlineIdentifiers und TextIdentifiers komplett raus).

Und dann in der Ausgabe keine Unterscheidung mehr auf Headline und Text, sondern an der Stelle, wo das Bild extrahiert ist, auch gleiche die anderen Elemente zu extrahieren.

Ich hoffe, es ist verständlich.

Ansonsten nein, die Fehlermeldung zeigt nur, dass die while-Schleifen nie zu einem Ende kommen... Zum einen einfach mal mit echo ... zwischendurch testen oder mit print_r ($h1); den Inhalt des Array ausgeben (dito mit $h2 usw.).

Da hätte ich dann noch die Tipps:

Code: Alles auswählen

$aContent["h1"] = "...";
$aContent["h2"] = "...";
nimmt die Informationen in ein Array auf. Wenn es wirklich mehrere h1 gibt, gäbe es auch noch

Code: Alles auswählen

$aContent["h1"][] = "...";
$aContent["h1"][] = "...";
$aContent["h2"][] = "...";
Und dann muss man nicht strpos und stristr verwenden, sondern Du Du solltest reguläre Ausdrücke verwenden. Beispiel habe ich leider gerade nicht bei der Hand.

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

fif
Beiträge: 7
Registriert: So 27. Mai 2007, 12:54
Kontaktdaten:

Beitrag von fif » Mi 25. Jul 2007, 09:27

Hallo HerrB
Vielen Dank für die Bemühungen!
Ich habs (fast) so gelöst, wie du gesagt hast. Im Input hab ich zusätzlich eine Checkbox, wo man auswählen kann, ob man H1 und P extrahieren möchte:

Code: Alles auswählen


echo '           <tr valign="top">',chr(10);
echo '              <td class="text" style="border-left: 1px solid #747488;">'.mi18n("Extract H1 and P from CMS_HTML:").'</td>', chr(10);
if ($aSettings["ExtractFromHTML"] == TRUE) {
   echo '              <td class="text" style="border-right: 1px solid #747488;"><input type="checkbox" name="CMS_VAR[11]" value="enabled" checked></td>', chr(10);
} else {
   echo '              <td class="text" style="border-right: 1px solid #747488;"><input type="checkbox" name="CMS_VAR[11]" value="enabled"></td>', chr(10);
}
echo '           </tr>', chr(10);
Im Output frage ich dann diesen Wert ab, und extrahiere H1 und P mit der alten Methode. Ich hab bewusst nicht Regexpressions benutzt, da ich irgendwo gelesen hab, dass die Engine dazu unheimlich Ressourcen versaut.

Code: Alles auswählen

if( $db2->f('idtype') == '2' && $aSettings["ExtractFromHTML"] == TRUE ) {
               $rawData = urldecode($db2->f('value'));
               if ($sTypeIdentifier == $aSettings["HeadlineIdentifier"]) {
                  $aData["Item".($i + 1)]["Headline"] = strip_tags(str_replace(stristr($rawData, '</h1>'), '' ,stristr($rawData, '<h1>')));
               }
               if ($sTypeIdentifier == $aSettings["TextIdentifier"]) {
                  $sTmpValue = strip_tags(str_replace(stristr($rawData, '</p>'), '' ,stristr($rawData, '<p>')));
                  if (strlen($sTmpValue) > $aSettings["TeaserLength"]) {
                     $sTmpValue = substr($sTmpValue, 0, $aSettings["TeaserLength"])."...";
                  }
                  $aData["Item".($i + 1)]["Text"] = $sTmpValue;
               }
            } else {
               # Note: The TypeIdentifier for one item may be the same as for another item.
               #       Therefore, we are storing the content everywhere as needed
               if ($sTypeIdentifier == $aSettings["HeadlineIdentifier"]) {
                  $aData["Item".($i + 1)]["Headline"] = strip_tags(urldecode($db2->f('value')));
               }
               if ($sTypeIdentifier == $aSettings["TextIdentifier"]) {
                  $sTmpValue = strip_tags(urldecode($db2->f('value')));
                  if (strlen($sTmpValue) > $aSettings["TeaserLength"]) {
                     $sTmpValue = substr($sTmpValue, 0, $aSettings["TeaserLength"])."...";
                  }
                  $aData["Item".($i + 1)]["Text"] = $sTmpValue;
               }
            }
Es ist schon richtig, dass idtype = 2 ein CMS_HTML ist, oder?

MFG

fif

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

Beitrag von HerrB » Mi 25. Jul 2007, 14:13

Es ist schon richtig, dass idtype = 2 ein CMS_HTML ist, oder?
Siehe con_types-Tabelle.

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

JochBec
Beiträge: 54
Registriert: Sa 18. Dez 2004, 15:11
Kontaktdaten:

Link funzt nicht richtig

Beitrag von JochBec » Di 29. Jul 2008, 06:54

Hallo ;)

Ich verwende das Modul und habe es gerade um eine SWF Funktion erweitert, irgendwo scheint aber der Wurm drin zu sein. Mit Modrewrite werden alle Links im Modul korrekt umgeschrieben, nur die ClickURL im SWF wird nicht umgefrickelt und ich weiß nicht wieso. Vielleicht hat hier einer eine Idee?

Das ist das Ende des Moduls:

Code: Alles auswählen

					
         echo '<span><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="146" height="56" id="filmloader" align="middle">
<param name="allowScriptAccess" value="always" />
<param name="movie" value="http://www.linkzumeinerseite.de/videoplayer/filmloader.swf?clickUrl=http://www.linkzumeinerseite.de/'.$href.'&flvUrl=http://www.linkzumeinerseite.de/upload/'.$aData["Item".($i + 1)]["Textlink"].'" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /><embed src="http://www.linkzumeinerlseite.de/videoplayer/filmloader.swf?clickUrl=http://www.linkzumeinerseite.de/'.$href.'&flvUrl=http://www.trailerseite.de/upload/'.$aData["Item".($i + 1)]["Textlink"].'" quality="high" bgcolor="#ffffff" width="146" height="56" name="filmloader" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>', chr(10);
 				 echo '</span><h2><a href="'.$href.'" title="'.$aData["Item".($i + 1)]["Headline"].'">'.$aData["Item".($i + 1)]["Headline"].'</a></h2>', chr(10);
      }
      //echo $aData["Item".($i + 1)]["Text"].' <a href="'.$href.'" title="'.mi18n("More...").'">'.$aData["Item".($i + 1)]["Textlink"].'</a></div>', chr(10);
      echo $aData["Item".($i + 1)]["Text"].'</div>', chr(10);
	  // mi18n("More...")

Konkret geht es um den Link und die Variable '.$href.' im Bereich

Code: Alles auswählen

clickUrl=http://www.linkzumeinerseite.de/'.$href.'&flvUrl=http://w
innerhalb des SWFs. Er funktioniert zwar, wird aber nicht umgeschrieben. Der gleiche Link wird etwas später nochmal im h2-Tag generiert und da funktioniert es super.

Wenn ich übrigens den absoluten Link wegnehme, also das http:// vor '.$href.', dann funktioniert alles danach nicht mehr. Das "&" nach dem Link im SWF und vor "flvURL" wird dann zu einem "?" und natürlich klappt dann der Rest nicht.

Jemand eine Idee wo der Denkfehler liegt?

Dankeschön!!!

Fips
Beiträge: 105
Registriert: Fr 20. Feb 2009, 09:55
Kontaktdaten:

Re: Modul: Multiple Article Teaser/Mehrfachartikelvorschau

Beitrag von Fips » Fr 17. Jul 2009, 11:08

Hallo HerrB,
ich habe das Modul in der Version 4.8.12 eingebaut. Die Anzeige der Headline und des Textes funktioniert. Das Auslesen der Bilder, die im Text eingebunden sind werden nicht angezeit und es wird folgende Fehlermeldung angezeigt:

Code: Alles auswählen

[17-Jul-2009 12:06:23] PHP Warning:  getimagesize(http://www.eisware.de/cms/cache/5cd3171d810ca6be268822a008e4ec91.jpg) [<a href='http://de.php.net/function.getimagesize'>function.getimagesize</a>]: failed to open stream: Connection timed out in /var/www/htdocs/ABSAG/cms/front_content.php(983) : eval()'d code on line 451
Woran kann dies liegen?
Danke für die Information.

Fips

Fips
Beiträge: 105
Registriert: Fr 20. Feb 2009, 09:55
Kontaktdaten:

Re: Modul: Multiple Article Teaser/Mehrfachartikelvorschau

Beitrag von Fips » Fr 6. Nov 2009, 11:39

Hallo,
leider konnte das Problem mit der Darstellung der Bilder auch über die Änderung des Codes wie im Beitrag http://forum.contenido.org/viewtopic.ph ... 18&start=0 erläutert nichts ändern.
Nach der Änderung von

Code: Alles auswählen

list ($width, $height, $type, $attr) = getimagesize($image);
in

Code: Alles auswählen

list ($width, $height, $type, $attr) = getimagesize(str_replace($cfgClient[$client]["path"]["htmlpath"], $cfgClient[$client]["path"]["frontend"], $image));
war die Fehlermeldung immer noch da. Diese kam auch, wenn bei der Konfiguration kein Bild ausgewählt wurde.
Ich habe als Übergang diese Zeile einfach deaktiviert und dann war wenigsten die Fehlermeldung weg.

Hat jemand schon dafür eine Lösung gefunden ?

Danke Fips

Snuppel007
Beiträge: 86
Registriert: Mi 20. Apr 2005, 16:16
Kontaktdaten:

Re: Modul: Multiple Article Teaser/Mehrfachartikelvorschau

Beitrag von Snuppel007 » Di 17. Nov 2009, 12:41

Hallo,

gibt es schon eine Lösung für das Problem "[function.getimagesize]: Filename cannot be empty"
Ich habe leider auch das selbe Problem und konnte bis jetzt nicht herausfinden woran es liegen könnte.
Ich habe beide Module von HerrB im Einsatz, Article List Advanced und Multiple Article Teaser. Aber nur bei Multiple Article Teaser hab ich Probleme wenn in dem Artikel keine Bilder sind.
Meine Fehlermeldung ist erst aufgetaucht als mein Provider (Domain Go) auf PHP 5.0.3 umgestellt hat.

Für einen Lösungsvorschlag wäre ich echt sehr Dankbar!!!

Bey, Snuppel

Snuppel007
Beiträge: 86
Registriert: Mi 20. Apr 2005, 16:16
Kontaktdaten:

Re: Modul: Multiple Article Teaser/Mehrfachartikelvorschau

Beitrag von Snuppel007 » Di 24. Nov 2009, 20:45

Hallo,
habt Ihr wirklich keine Lösung für mich :-( Das hier hat mir nicht weiter geholfen:

Code: Alles auswählen

list ($width, $height, $type, $attr) = getimagesize(str_replace($cfgClient[$client]["path"]["htmlpath"], $cfgClient[$client]["path"]["frontend"], $image));
Der Fehler taucht nur auf, wenn in dem Artikel kein Bild ist.
Lieben Gruß
Snuppel

RkAk907
Beiträge: 51
Registriert: Mi 4. Jul 2007, 12:04
Kontaktdaten:

Re: Modul: Multiple Article Teaser/Mehrfachartikelvorschau

Beitrag von RkAk907 » Do 8. Apr 2010, 10:27

Hallo,

ich habe noch diese Version der Article List Advanced unter 4.8.12 laufen.
Ich kenne mich überhaupt nicht mit PHP aus, deswegen hoffe ich auf eure Hilfe. Sollte eigentlich ganz einfach sein.
Ich möchte, dass der Text-Link (Zeile 481/82) zu jedem Artikel rausgenommen wird (das kann ich selber) und dafür nur das angeziegte Teaser-Bild (Zeile 397) auf den Artikel verlinkt.
Nur den Link um das Bild rumzulegen habe ich versucht, aber da bekomme ich eine Fehlermeldung
Warning: Division by zero in /mnt/web1/11/46/51464746/htdocs/Contenido-4.8.12/cms/front_content.php(983) : eval()'d code on line 563
Schätzungsweise weil eine Variable verwendet wird, die noch nicht definiert ist?

Hier mein Code der Ausgabe:

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

      foreach ($aData as $aValue) {
         echo '<div>', chr(10);
         echo '   <div id="headline_article">'.$aValue["Headline"].'</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 '   <div id="image"><a href="front_content.php?idcat='.$idcat.'&idart='.$idart.'&nextstep='.(round($lCount / $aSettings["ArticlePerPage"]) - 1) * $aSettings["ArticlePerPage"].'"><img src="'.$image.'" width="'.$width.'" height="'.$height.'" /></a></div>', chr(10);
                     }
                     
                     break;
                  default: // Everything else is treated as "Text"
                     echo '   <div id="text">'.$aValue["i".$i]["Value"].'</div>', chr(10);
               }
            }
         }
         echo '<a href="'.$aValue["Link"].'">'.mi18n("Mehr...").'</a>', chr(10);
         echo '</div>', chr(10);
      }
   }

   # Page browsing
   # Hint: Number of max available records: $lCount
   #       Number of pages: round($lCount / $aSettings["ArticlePerPage"])
   #       First page: nextstep=0
   #       Last page:  nextstep=(round($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 '   </div>'."\n";

      echo '</div>'."\n"; # Closing Browsing div
   }
}
# Clearing memory
unset ($aData);
unset ($aSettings);
unset ($i);
unset ($lCount);
unset ($bDebug);
?>
Danke für die Hilfe.

Ruben

andy-man
Beiträge: 166
Registriert: Di 25. Nov 2003, 11:29
Wohnort: Oberstaufenbach
Kontaktdaten:

Multiple Article Teaser - für Contenido 4.8.14

Beitrag von andy-man » Di 30. Nov 2010, 15:47

Hallo Ruben,
ich habe das Modul unter Contenido 4.8.14 in unterschiedlichen Bereichen im Einsatz.
Hier das Modul im Anhang.

andy-man
Dateianhänge
Multiple_Article-Teaser.zip
(4.32 KiB) 210-mal heruntergeladen

Gesperrt