Artikelblättern einmal automatisch ;-) ein neues Modul

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Artikelblättern einmal automatisch ;-) ein neues Modul

Beitrag von kummer »

hallo zusammen

ich habe für zeitgeist ein modul geschrieben, von dem ich annehme, dass es allgemein interessant sein dürfte (hoffe ich mindestens).

mit dem modul w3concepts.artikelautosplit kann ein artikel ganz normal bearbeitet werden. bei der darstellung wird er dann aber automatisch auf mehrere seiten (je nach konfiguration) aufgeteilt. eine navigation zum blättern zwischen den verschiedenen seiten wird automatisch erstellt. der redakteur kann den artikel aber normal als ganzes bearbeiten.

die trennung erfolgt vor dem absatz (<p>) in dem die maximale anzahl zeichen je seite überschritten werden würde. man muss an dieser stelle allerdings anmerken, dass problem auftreten können, wenn absatzmarken innerhalb einer tabelle verwendet werden. das müsste man in diesem zusammenhang vermeiden. sonst kann es geschehen, dass der umbruch innerhalb einer tabelle erfolgt, was zu ungültigen html-code führen würde.

über den input-bereich kann die maximale anzahl zeichen je seite festgelegt werden. dabei werden html-tags nicht mitgezählt.

eine mögliche alternative zur anzahl zeichen je seite als kriterium für einen umbruch stellt die verwendung einer oder zwei aufeinander folgender horizontaler linien (<hr/>) dar. das würde dem redakteur erlauben, selber zu bestimmen, wo ein umbruch erfolgen soll. in der derzeitigen version des moduls besteht allerdings noch keine solche möglichkeit. da seid ihr gefragt... :lol:

ein teil der konfiguration erfolgt im output-script. das betrifft insbesondere das wrapping der headline sowie der subheadline. man könnte diese konfiguration auch in das input-script verlegen; dabei sind bei mir jedoch unerwartet probleme mit einfachen und doppelten anführungszeichen aufgetreten, die ich für die zuordnung einer css-klasse zu einem tag benötige. auch dahingehend könnte man selbstverständlich noch anpassungen vornehmen.

das modul steht hier zum download bereit:
http://w3concepts.net/1/1/51/122.html

ich hoffe, es ist ein dienliches modul. für erfahrungsberichte bin ich sehr dankbar.

gruss,
andreas
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer »

hier noch der code:

Code: Alles auswählen

/***********************************************
* CONTENIDO MODUL - INPUT
*
* Modulname   :     w3concepts.artikelautosplit.v1
* Author      :     Andreas Kummer
* Copyright   :     mumprecht & kummer w3concepts
* Created     :     06-23-2004
* Modified    :     06-23-2004
************************************************/


echo "<table cellspacing=\"0\" cellpadding=\"10\" border=\"0\"><tr valign=\"top\">";

echo "<tr><td>Maximale Zeichen je Artikelseite:</td>";
$wert[0] = ("CMS_VALUE[0]" == '') ? ('1000') : ("CMS_VALUE[0]");
echo "<td><input type=\"text\" name=\"CMS_VAR[0]\" value=\"{$wert[0]}\" size=\"10\" /></td></tr>";

echo "</table>";

Code: Alles auswählen

<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname   :     w3concepts.artikelautosplit.v1
* Author      :     Andreas Kummer
* Copyright   :     mumprecht & kummer w3concepts
* Created     :     06-23-2004
* Modified    :     06-23-2004
************************************************/

// konfiguration

// wrap der headline
$wrap['headline'][0] = "<h1>";
$wrap['headline'][1] = "</h1>";

// wrap der subheadline
$wrap['subheadline'][0] = "<div class=\"subheadline\">";
$wrap['subheadline'][1] = "</div>";

// wrap der headline bei der seite 2 und den folgendenseiten
$wrap['headline2'][0] = "<h2>";
$wrap['headline2'][1] = "</h2>";

// wrap der der anzeige 'Seite 2 von 5'
$wrap['seitenanzeige'][0] = "( Seite ";
$wrap['seitenanzeige'][1] = " von ";
$wrap['seitenanzeige'][2] = " )";

// maximale anzahl zeichen je seite
$maxzeichen = "CMS_VALUE[0]";

// Links
$wrap['link'][0] = "[:: vorige Seite]";
$wrap['link'][1] = "[nächste Seite ::]";

// Seitenlinks
$wrap['seitenlinks'][0] = "[";
$wrap['seitenlinks'][1] = "]";

// -----------------------------------------------------------
// -----------------------------------------------------------

// funktionsdefinitionen

function split_html($html,$maxzeichen) {

	// auftrennung in absätze
	$absaetze = spliti('</p>',$html);

	$block = 0;
	$blockumfang[0] = 0;
	$blockhtml[0] = '';
	foreach ($absaetze as $absatz) {
		// länge des absatzes bestimmen
		$laenge = strlen(strip_tags($absatz));

		// wenn zulässig, den absatz an den block anfügen
		if ($blockumfang[$block] + $laenge <= $maxzeichen) {
			$blockhtml[$block] .= $absatz."</p>";
		} else {
			$block++;
			$blockhtml[$block] .= $absatz."</p>";
		}
	}
	return $blockhtml;
}

// hauptbereich
if ($edit) {
	echo $wrap['headline'][0]."CMS_HTMLHEAD[1]".$wrap['headline'][1];
	echo $wrap['subheadline'][0]."CMS_HTMLHEAD[2]".$wrap['subheadline'][1];
	echo "CMS_HTML[1]";
} else {
	$block = split_html("CMS_HTML[1]",$maxzeichen);

	if (!isset($_GET['displaylimit']) || $_GET['displaylimit'] == 0) {
		echo $wrap['headline'][0]."CMS_HTMLHEAD[1]".$wrap['headline'][1];
		echo $wrap['subheadline'][0]."CMS_HTMLHEAD[2]".$wrap['subheadline'][1];
		echo $block[0];
	} else {
		$teil = $_GET['displaylimit'] +1;
		$von = count($block);
		echo $wrap['headline2'][0]."CMS_HTMLHEAD[1]".$wrap['headline2'][1];
		echo "{$wrap['seitenanzeige'][0]}$teil{$wrap['seitenanzeige'][1]}$von{$wrap['seitenanzeige'][2]}";
		$teil = $_GET['displaylimit'];
		echo $block[$teil];
	}

	if (isset($_GET['displaylimit']) && $_GET['displaylimit'] > 0 && count($block) > 1) {
		$displaylimit = $_GET['displaylimit'] - 1;
		$link = $sess->url("{$cfgClient[$client]['path']['htmlpath']}front_content.php?client=$client&lang=$lang&idcat=$idcat&idart=$idart&displaylimit=$displaylimit");
		echo "<a href=\"$link\">{$wrap['link'][0]}</a>";
	}

	if (count($block) > 1) for ($i=0;$i<count($block);$i++) {
		$link = $sess->url("{$cfgClient[$client]['path']['htmlpath']}front_content.php?client=$client&lang=$lang&idcat=$idcat&idart=$idart&displaylimit=$i");
		$seite = $i + 1;
		echo "&nbsp;<a href=\"$link\">{$wrap['seitenlinks'][0]}$seite{$wrap['seitenlinks'][1]}</a>&nbsp;";
	}

	if (count($block) > 1 && (!isset($_GET['displaylimit']) || $_GET['displaylimit'] + 1 < count($block))) {
		$displaylimit = $_GET['displaylimit'] + 1;
		$link = $sess->url("{$cfgClient[$client]['path']['htmlpath']}front_content.php?client=$client&lang=$lang&idcat=$idcat&idart=$idart&displaylimit=$displaylimit");
		echo "<a href=\"$link\">{$wrap['link'][1]}</a>";
	}
}
?>
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
alter schwede
Beiträge: 65
Registriert: So 13. Jun 2004, 01:27
Kontaktdaten:

Beitrag von alter schwede »

Kann es sein ,das sich in der 4.5.2 irgendwelche Variablennamen geändert werden müssten? Hat das Modul jemand mit Contenido 4.5.2 getestet?

@kummer
habe versucht dein Modul in der Version 4.5.2 zu installieren. Leider zeigt es hier keine Wirkung, sprich es wird nicht umgebrochen. Errorlog bleibt leer! Nutze es innerhalb einer geschützten Kategorie.
Zuletzt geändert von alter schwede am Do 24. Jun 2004, 13:53, insgesamt 1-mal geändert.
kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer »

die 4.5er kenne ich nicht. ich verwende derzeit noch 4.4.4.

allerdings kann es auch daran liegen, dass du zuwenig zeichen in deinem artikel hast. und natürlich müssen mindestens zwei absätze enthalten sein; aber das versteht sich ja von selber.

hier sieht man, wie's läuft:
http://w3concepts.net/cms/front_content ... laylimit=0

wenn übrigens der artikel überhaupt dargestellt wird, dann kann es nicht an der datenbank liegen. weil nur zugriffe auf die db erfolgen, um den artikel auszulesen. und das schein ja geglückt zu sein, oder nicht?
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
alter schwede
Beiträge: 65
Registriert: So 13. Jun 2004, 01:27
Kontaktdaten:

Beitrag von alter schwede »

Dein Modul sieht absolut phantastisch aus aber leider läuft es bei mir nicht :? (Umbruch eingestellt auf 800)

Server operating system Apache-AdvancedExtranetServer/1.3.26 (Mandrake Linux/6.3.90mdk) mod_ssl/2.8.10 OpenSSL/0.9.6g PHP/4.2.3
MySQL Serverversion 4.0.12
Installierte PHP-Version 4.2.3
safe_mode deactivated


Kannst dir das Ergebnis mal ansehen auf:

http://infolinux.ph-gmuend.de/~zimmerma ... p?idcat=41

Frontend-Login: redakteur
pass: redakteur
kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer »

ich hätte es mir gerne angesehen. allerdings komme ich mit deinen zugangsinformationen nicht hinein.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
alter schwede
Beiträge: 65
Registriert: So 13. Jun 2004, 01:27
Kontaktdaten:

Beitrag von alter schwede »

Qkummer

Sorry war mein Fehler. :roll: Jetzt ist die Seite offen!
kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer »

ich vermute mal, dass du gar nicht in den unteren bereich gelangst.

kannst du mal z.b. ein

Code: Alles auswählen

echo "<p>wir sind noch im edit-bereich!</p>";
im editbereich eingeben. also so:

Code: Alles auswählen

 // hauptbereich 
if ($edit) { 
   echo "<p>voila. wir sind noch im edit-bereich!</p>";
   echo $wrap['headline'][0]."CMS_HTMLHEAD[1]".$wrap['headline'][1]; 
   echo $wrap['subheadline'][0]."CMS_HTMLHEAD[2]".$wrap['subheadline'][1]; 
   echo "CMS_HTML[1]"; 
dann sehen wir, ob wir überhaupt in den unteren bereich gelangen.

ich vermute nämlich, dass aus welchen gründen auch immer, bei dir $edit auf true gesetzt ist.

falls das der fall sein sollte, müssen wir herausfinden, wie das kommt.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
alter schwede
Beiträge: 65
Registriert: So 13. Jun 2004, 01:27
Kontaktdaten:

Beitrag von alter schwede »

@kummer
Danke für deinen Tip.
Hab ich gemacht und da leider liegt da nicht der Fehler.

Ich habe zum Test eine Seite mit 21 Absätzen je 700 Zeichen:

- wenn ich weniger als 700 einstelle werden 22 Seiten generiert
- wenn ich mehr als 700 (also zum Beispiel 750) eingebe wird nur eine (keine) Seite generiert
kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer »

ich glaube fast, ich habe den fehler gefunden.

ersetze die zeile...

Code: Alles auswählen

if ($blockumfang[$block] + $laenge <= $maxzeichen) {
durch folgende zeile...

Code: Alles auswählen

if (strlen($blockhtml[$block]) + $laenge <= $maxzeichen) {
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
alter schwede
Beiträge: 65
Registriert: So 13. Jun 2004, 01:27
Kontaktdaten:

Beitrag von alter schwede »

@kummer

Funzt mit deiner Veränderung bestens! :D Danke für dieses Top-Modul!
Hier nochmal der korrigierte Code:

INPUT:
/***********************************************
* CONTENIDO MODUL - INPUT
*
* Modulname : w3concepts.artikelautosplit.v1
* Author : Andreas Kummer
* Copyright : mumprecht & kummer w3concepts
* Created : 06-23-2004
* Modified : 06-23-2004
************************************************/


echo "<table cellspacing=\"0\" cellpadding=\"10\" border=\"0\"><tr valign=\"top\">";

echo "<tr><td>Maximale Zeichen je Artikelseite:</td>";
$wert[0] = ("CMS_VALUE[0]" == '') ? ('1000') : ("CMS_VALUE[0]");
echo "<td><input type=\"text\" name=\"CMS_VAR[0]\" value=\"{$wert[0]}\" size=\"10\" /></td></tr>";

echo "</table>";


OUTPUT:
<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname : w3concepts.artikelautosplit.v1
* Author : Andreas Kummer
* Copyright : mumprecht & kummer w3concepts
* Created : 06-23-2004
* Modified : 06-23-2004
************************************************/

// konfiguration

// wrap der headline
$wrap['headline'][0] = "<h1>";
$wrap['headline'][1] = "</h1>";

// wrap der subheadline
$wrap['subheadline'][0] = "<div class=\"subheadline\">";
$wrap['subheadline'][1] = "</div>";

// wrap der headline bei der seite 2 und den folgendenseiten
$wrap['headline2'][0] = "<h2>";
$wrap['headline2'][1] = "</h2>";

// wrap der der anzeige 'Seite 2 von 5'
$wrap['seitenanzeige'][0] = "( Seite ";
$wrap['seitenanzeige'][1] = " von ";
$wrap['seitenanzeige'][2] = " )";

// maximale anzahl zeichen je seite
$maxzeichen = "CMS_VALUE[0]";

// Links
$wrap['link'][0] = "[:: vorige Seite]";
$wrap['link'][1] = "[nächste Seite ::]";

// Seitenlinks
$wrap['seitenlinks'][0] = "[";
$wrap['seitenlinks'][1] = "]";

// -----------------------------------------------------------
// -----------------------------------------------------------

// funktionsdefinitionen

function split_html($html,$maxzeichen) {

// auftrennung in absätze
$absaetze = spliti('</p>',$html);

$block = 0;
$blockumfang[0] = 0;
$blockhtml[0] = '';
foreach ($absaetze as $absatz) {
// länge des absatzes bestimmen
$laenge = strlen(strip_tags($absatz));

// wenn zulässig, den absatz an den block anfügen
if (strlen($blockhtml[$block]) + $laenge <= $maxzeichen) {






$blockhtml[$block] .= $absatz."</p>";
} else {
$block++;
$blockhtml[$block] .= $absatz."</p>";
}
}
return $blockhtml;
}

// hauptbereich
if ($edit) {
echo "<p>voila. wir sind noch im edit-bereich!</p>";
echo $wrap['headline'][0]."CMS_HTMLHEAD[1]".$wrap['headline'][1];
echo $wrap['subheadline'][0]."CMS_HTMLHEAD[2]".$wrap['subheadline'][1];
echo "CMS_HTML[1]";


} else {
$block = split_html("CMS_HTML[1]",$maxzeichen);

if (!isset($_GET['displaylimit']) || $_GET['displaylimit'] == 0) {
echo $wrap['headline'][0]."CMS_HTMLHEAD[1]".$wrap['headline'][1];
echo $wrap['subheadline'][0]."CMS_HTMLHEAD[2]".$wrap['subheadline'][1];
echo $block[0];
} else {
$teil = $_GET['displaylimit'] +1;
$von = count($block);
echo $wrap['headline2'][0]."CMS_HTMLHEAD[1]".$wrap['headline2'][1];
echo "{$wrap['seitenanzeige'][0]}$teil{$wrap['seitenanzeige'][1]}$von{$wrap['seitenanzeige'][2]}";
$teil = $_GET['displaylimit'];
echo $block[$teil];
}

if (isset($_GET['displaylimit']) && $_GET['displaylimit'] > 0 && count($block) > 1) {
$displaylimit = $_GET['displaylimit'] - 1;
$link = $sess->url("{$cfgClient[$client]['path']['htmlpath']}front_content.php?client=$client&lang=$lang&idcat=$idcat&idart=$idart&displaylimit=$displaylimit");
echo "<a href=\"$link\">{$wrap['link'][0]}</a>";
}

if (count($block) > 1) for ($i=0;$i<count($block);$i++) {
$link = $sess->url("{$cfgClient[$client]['path']['htmlpath']}front_content.php?client=$client&lang=$lang&idcat=$idcat&idart=$idart&displaylimit=$i");
$seite = $i + 1;
echo "&nbsp;<a href=\"$link\">{$wrap['seitenlinks'][0]}$seite{$wrap['seitenlinks'][1]}</a>&nbsp;";
}

if (count($block) > 1 && (!isset($_GET['displaylimit']) || $_GET['displaylimit'] + 1 < count($block))) {
$displaylimit = $_GET['displaylimit'] + 1;
$link = $sess->url("{$cfgClient[$client]['path']['htmlpath']}front_content.php?client=$client&lang=$lang&idcat=$idcat&idart=$idart&displaylimit=$displaylimit");
echo "<a href=\"$link\">{$wrap['link'][1]}</a>";
}
}
?>



PS:
Könnte man das Tabellenumbrechen irgendwie unterbinden, so dass es Absätze in Tabellen zumindest ignoriert?
kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer »

das ist möglich, allerdings vom schiff aus betrachtet nicht ganz einfach. aber ich schaue das mal an. diese modulversion würde ich sowieso als eine bestenfalls beta-version bezeichnen wollen.

ich überarbeite das modul noch diesbezüglich und poste das resultat dann hier.

c ya,
andreas
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
Zeitgeist
Beiträge: 205
Registriert: Fr 5. Sep 2003, 09:47
Wohnort: Hamburg
Kontaktdaten:

.

Beitrag von Zeitgeist »

Der Kummermann ist einfach KLASSE :D
casi1969
Beiträge: 71
Registriert: Mi 4. Aug 2004, 16:30
Wohnort: Köln
Kontaktdaten:

Re: .

Beitrag von casi1969 »

Zeitgeist hat geschrieben:Der Kummermann ist einfach KLASSE :D
Dem kann ich mich nur anschließen!

Aber eine Frage hab ich doch, die ich wegen mangelnter PHP-Kenntnisse nicht lösen kann: Wie kann man die aktive Seite unten in der Seitenanzeige mit einer ID versehen, um sie mit CSS grafisch hervorzuheben?

Wäre für jede Hilfe dankbar.
Myriam
Beiträge: 13
Registriert: Di 24. Jan 2006, 11:22
Kontaktdaten:

Beitrag von Myriam »

Hallo,

Ich habe auch noch eine frage ich benutze jetzt das Modul w3concepts.artikelautosplit ich schaffe es nicht das Design anzupassen.
momentan sieht es so aus http://www.project-germany.de/news-ueberblick/news.html
----------------------------------------
News-Überblick: Google sperrt deutsche Autobörse
Google sperrt deutsche Autobörse Je höher das Ranking, desto besser: Viele Webseitenbetreiber versuchen ihre
Internetseiten so zu optimieren, dass...
More...
----------------------------------------
alles so eng zusammen ich hätte es gerne wie hier http://www.project-germany.de/home/
Überschrift in dieser Farbe und ein Absatz nach dem Artikel bevor more kommt.


so in etwa sollte es aussehen
---------------------------------------
Google sperrt deutsche Autobörse Google sperrt deutsche Autobörse Je höher das Ranking, desto besser: Viele Webseitenbetreiber versuchen ihre Internetseiten so zu optimieren, dass diese bei einer Suchanfrage möglichst weit vorne...

mehr..

--------------------------------------

kann mir da jemand behilflich sein?

das ist der Ausgabe Code:

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 .= "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");
               $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"]) {
                                    //$sTmpValue = htmlentities(substr($sTmpValue, 0, $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["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">'.$aValue["Category"].": ".$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"><img src="'.$image.'" width="'.$width.'" height="'.$height.'" /></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("More...").'</a>', chr(10);
         echo '</div>', chr(10);
      }
   }


   # Page browsing
   # Hint: Number of max available records: $lCount
   #       First page: nextstep=0
   #       Last page:  nextstep=(intval($lCount / $aSettings["ArticlePerPage"]) -1) * $aSettings["ArticlePerPage"];
   #                   (I have to admit that I'm not sure about the last page formula ... ;-) )
   if ($aSettings["ArticlePerPage"] > 0) {
      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);
      }
      echo '</div>', chr(10);
   }
}
# Clearing memory
unset ($aData);
unset ($aSettings);
unset ($i);
unset ($lCount);
unset ($bDebug);
?>
gruß und Dank
Myriam
Gesperrt