dieses modul hat nur die rumpffunktionen der übrigen artikellisten und dürfte primär als ausgangspunkt dienen.
es hat folgende features:
* automatische thumbnailgenerierung, wenn ein bild im bildmodul 1 vorliegt
* teaser wird aus der seitenzusammenfassung ungekürzt übernommen
* titel wird dem seitentitel entnommen
* startartikel sind ausgeblendet
* geht bis zu 2 kategorieebenen in die tiefe
input-bereich:
Code: Alles auswählen
/***********************************************
* CONTENIDO MODUL - INPUT
*
* Modulname   :	    w3concepts.alist.thumb.v1
* Author      :     Andreas Kummer
* Copyright   :     mumprecht & kummer w3concepts
* Created     :     07-11-2004
* Modified    :     07-11-2004
************************************************/
class pfadAlistThumb {
	function pfadAlistThumb($pfad) {
		$this->pfad = $pfad;
		$this->pathlen = strlen($this->pfad);
	}
	function getPath($root,$level = 0) {
		$content = $this->readDir($root);
		foreach ($content as $file) {
			if (is_dir($root.$file)) {
				$verzeichnis = substr($root,$this->pathlen);
				$returnvalue["{$verzeichnis}{$file}/"] = str_repeat(" ",$level * 5).$file;
				$returnvalue = array_merge($returnvalue,$this->getPath($root.$file."/",$level+1));
			}
		}
		return $returnvalue;
	}
	function readDir($path) {
		$handle = opendir($path);
		while ($file = readdir ($handle)) {
			if ($file != "." && $file != "..") $returnvalue[] = $file;
		}
		closedir($handle);
		return $returnvalue;
	}
	function makeSelect($preselection) {
		$pfad = $this->getPath($this->pfad);
		foreach ($pfad as $key => $value) {
			echo "$key :: $value<br/>\n";
			if ($preselection == $key) {
				echo "<option value=\"$key\" selected=\"selected\">$value</option>";
			} else {
				echo "<option value=\"$key\">$value</option>";
			}
		}
	}
}
$pfad = new pfadAlistThumb($cfgClient[$client]['path']['frontend'].$cfgClient[$client]['upload']);
echo "<table cellspacing=\"0\" cellpadding=\"10\" border=\"0\">";
echo "<tr><td>Thumbnailpfad:</td>";
echo "<td><select size=\"1\" name=\"CMS_VAR[0]\" />";
$pfad->makeSelect("CMS_VALUE[0]");
echo "</td>";
echo "<tr valign=\"top\"><td>Kategorie wählen:</td><td><select name=\"CMS_VAR[1]\">";
$selected = "CMS_VALUE[1]";
if($selected!="0" && $selected!=""){
    echo"<option value=\"0\">--- kein ---</option>";
} else {
    echo"<option selected=\"selected\" value=\"0\">--- kein ---</option>";
}
$sql = "
    SELECT a.idcat, a.level, c.name
    FROM {$cfg['tab']['cat_tree']} AS a,
         {$cfg['tab']['cat']} AS b,
         {$cfg['tab']['cat_lang']} AS c
    WHERE
        a.idcat = b.idcat
        AND b.idcat = c.idcat
        AND c.idlang='$lang'
        AND b.idclient='$client'
        AND c.visible = 1
    ORDER BY a.idtree
    ";
$db->query($sql);
while ($db->next_record()) {
    $spaces = "|";
    $levels = $db->f("level");
    for ($i = 0; $i < $levels; $i ++) {
        $spaces = $spaces . "--";
    }
    $spaces .= ">";
    if ($selected == $db->f("idcat")) {
        echo "<option selected=\"selected\" value=\"". $db->f("idcat") ."\">". $spaces . $db->f("name") ."</option>";
    } else {
        echo "<option value=\"". $db->f("idcat") ."\">". $spaces . $db->f("name") ."</option>";
    }
}
echo "</select></td></tr>";
echo "<tr><td>Anzahl Artikel je Seite:</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[2]\" value=\"CMS_VALUE[2]\" size=\"3\" /></td>";
echo "<tr><td>Text für Previous-Link:</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[3]\" value=\"CMS_VALUE[3]\" size=\"15\" /></td>";
echo "<tr><td>Text für Next-Link:</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[4]\" value=\"CMS_VALUE[4]\" size=\"15\" /></td>";
echo "<tr><td>Thumbnail-Breite:</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[5]\" value=\"CMS_VALUE[5]\" size=\"5\" /></td>";
echo "<tr><td>Artikel anzeigen bis:</td>";
echo "<td><select name=\"CMS_VAR[6]\">";
$ebene = "CMS_VALUE[6]";
for ($i=0;$i>-3;$i--) {
    if ($i == $ebene) {
        echo"<option value=\"$i\" selected=\"selected\">Ebene $i</option>";
    } else {
        echo"<option value=\"$i\">Ebene $i</option>";
    }
}
echo "</table>";Code: Alles auswählen
output-bereich:Code: Alles auswählen
<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname   :     w3concepts.alist.mod4.v1
* Author      :     Andreas Kummer
* Copyright   :     mumprecht & kummer w3concepts
* Created     :     06-21-2004
* Modified    :     06-21-2004
************************************************/
class alistThumbs {
	function alistThumbs() {
		// Initialwerte festlegen
		$this->setIniValues();
		// Datenbankverbindung herstellen
		$this->db  = new DB_Contenido;
		$this->db2  = new DB_Contenido;
		// Anzahl Artikel ermitteln
		$this->anzahl_artikel = $this->getNumberOfArticles();
		// Artikel auslesen
		$this->getArticles();
		// Artikel ausgeben
		$this->showArticles();
		// Navigation ausgeben
		$this->showNavigation();
	}
	function setIniValues() {
		
		$bildzielpfad = "CMS_VALUE[0]";
		$this->bildzielpfad['frontend'] = $GLOBALS['cfgClient']["{$GLOBALS['client']}"]['path']['htmlpath'].$GLOBALS['cfgClient']["{$GLOBALS['client']}"]['upload'].$bildzielpfad;
		$this->bildzielpfad['backend'] = $GLOBALS['cfgClient']["{$GLOBALS['client']}"]['path']['frontend'].$GLOBALS['cfgClient']["{$GLOBALS['client']}"]['upload'].$bildzielpfad;
		$this->categorie = "CMS_VALUE[1]";
		$this->angezeigte_anzahl = "CMS_VALUE[2]";
		if ($this->angezeigte_anzahl == '') $this->angezeigte_anzahl = 10;
		$this->navigationslink['previous'] = "CMS_VALUE[3]";
		if ($this->navigationslink['previous'] == '') $this->navigationslink['previous'] = '[:: rückwärts ]';
		$this->navigationslink['next'] = "CMS_VALUE[4]";
		if ($this->navigationslink['next'] == '') $this->navigationslink['next'] = '[ vorwärts ::]';
		$this->ebene = "CMS_VALUE[6]";
		$this->bildbreite = "CMS_VALUE[5]";
		$this->limit = (isset($_GET['displaylimit']) && $_GET['displaylimit'] > 0)?($_GET['displaylimit']):(0);
	}
	function createImage($dirname, $filename) {
		global $cfg, $cfgClient, $client;
		$bilddateiname = "{$this->bildbreite}_$filename.jpg";
                if (!file_exists("{$this->bildzielpfad['backend']}$bilddateiname")) {
			$src_image_size = getimagesize($cfgClient[$client]['path']['frontend'].$cfgClient[$client]['upload'].$dirname.$filename);
			$bildhoehe = round($src_image_size[1] * $this->bildbreite / $src_image_size[0]);
			if ($bildhoehe > $this->bildbreite) {
				$bildhoehe = $this->bildbreite;
				$bildbreite = round($src_image_size[0] * $bildhoehe / $src_image_size[1]);
			} else {
				$bildbreite = $this->bildbreite;
			}		
                    $dst_im = imagecreatetruecolor($bildbreite,$bildhoehe);
                    if ($src_image_size[2] == 1) {
                        $src_im = imagecreatefromGIF($cfgClient[$client]['path']['frontend'].$cfgClient[$client]['upload'].$dirname.$filename);
                    } elseif ($src_image_size[2] == 2) {
                        $src_im = ImageCreateFromJPEG($cfgClient[$client]['path']['frontend'].$cfgClient[$client]['upload'].$dirname.$filename);
                    } else {
                        $src_im = imagecreatefromgd($cfgClient[$client]['path']['frontend'].$cfgClient[$client]['upload'].$dirname.$filename);
                    }
                    
                    imagecopyresampled ($dst_im,$src_im,0,0,0,0,$bildbreite,$bildhoehe,$src_image_size[0],$src_image_size[1]);
                    imagejpeg ($dst_im,$this->bildzielpfad['backend'].$bilddateiname,100);
                }
		return $this->bildzielpfad['frontend'].$bilddateiname;
	}
	function showNavigation() {
		global $sess, $client, $lang, $idcat, $idart, $cfgClient;
		if ($this->limit > 0 || $this->anzahl_artikel > $this->limit + $this->angezeigte_anzahl) {
			echo '<table cellpadding="0" cellspacing="0" style="width:100%"><tr>';
			
			if ($this->limit > 0) {
				$displaylimit = ($this->limit - $this->angezeigte_anzahl >= 0)?($this->limit - $this->angezeigte_anzahl):(0);
				echo "<td style=\"text-align:left\"><a href=\"".$sess->url($cfgClient[$client]['path']['htmlpath']."front_content.php?client=$client&lang=$lang&idcat=$idcat&idart=$idart&displaylimit=$displaylimit")."\">{$this->navigationslink['previous']}</a></td>";
			} else {
				echo '<td> </td>';
			}
			if ($this->anzahl_artikel > $this->limit + $this->angezeigte_anzahl) {
				$displaylimit = $this->limit + $this->angezeigte_anzahl;
				echo "<td style=\"text-align:right\"><a href=\"".$sess->url($cfgClient[$client]['path']['htmlpath']."front_content.php?client=$client&lang=$lang&idcat=$idcat&idart=$idart&displaylimit=$displaylimit")."\">{$this->navigationslink['next']}</a></td>";
			} else {
				echo '<td> </td>';
			}
			echo '</tr></table></p>';
		}
	}
	function getNumberOfArticles() {
		global $cfg, $lang;
		switch ($this->ebene) {
			case -2:
				$this->db->query("
					SELECT count(*) AS anzahl
					FROM
						{$cfg['tab']['cat']} AS a,
						{$cfg['tab']['cat']} AS b,
						{$cfg['tab']['cat']} AS c
					LEFT JOIN {$cfg['tab']['cat_art']} AS d ON c.idcat = d.idcat
					LEFT JOIN {$cfg['tab']['art_lang']} AS e ON d.idart = e.idart
					LEFT JOIN {$cfg['tab']['cat_lang']} AS f ON (f.idcat = d.idcat AND f.idlang = $lang)
					WHERE
					(
						(
							c.parentid = b.idcat
							AND b.parentid = a.idcat
						)
						OR
						(
							c.idcat = b.idcat
							AND b.parentid = a.idcat
						)
						OR
						(
							c.idcat = b.idcat
							AND b.idcat = a.idcat
						)
					)
					AND a.idcat = {$this->categorie}
					AND e.online = 1
					AND e.redirect = 0
					AND e.external_redirect = 0
					AND e.idlang = $lang
					AND f.startidartlang != e.idartlang
					");
				break;
			case -1:
				$this->db->query("
					SELECT count(*) AS anzahl
						FROM
						{$cfg['tab']['cat']} AS a,
						{$cfg['tab']['cat']} AS b,
						{$cfg['tab']['cat']} AS c
					LEFT JOIN {$cfg['tab']['cat_art']} AS d ON b.idcat = d.idcat
					LEFT JOIN {$cfg['tab']['art_lang']} AS e ON d.idart = e.idart
					LEFT JOIN {$cfg['tab']['cat_lang']} AS f ON (f.idcat = d.idcat AND f.idlang = $lang)
					WHERE
					(
						(
							c.idcat = b.idcat
							AND b.parentid = a.idcat
						)
						OR
						(
							c.idcat = b.idcat
							AND b.idcat = a.idcat
						)
					)
					AND a.idcat = {$this->categorie}
					AND e.online = 1
					AND e.redirect = 0
					AND e.external_redirect = 0
					AND e.idlang = $lang
					AND f.startidartlang != e.idartlang
					");
				break;
			case 0:
				$this->db->query("
					SELECT count(*) AS anzahl
					FROM
						{$cfg['tab']['cat']} AS a,
						{$cfg['tab']['cat']} AS b,
						{$cfg['tab']['cat']} AS c
					LEFT JOIN {$cfg['tab']['cat_art']} AS d ON b.idcat = d.idcat
					LEFT JOIN {$cfg['tab']['art_lang']} AS e ON d.idart = e.idart
					LEFT JOIN {$cfg['tab']['cat_lang']} AS f ON (f.idcat = d.idcat AND f.idlang = $lang)
					WHERE
					(
						(
							c.idcat = b.idcat
							AND b.idcat = a.idcat
						)
					)
					AND a.idcat = {$this->categorie}
					AND e.online = 1
					AND e.redirect = 0
					AND e.external_redirect = 0
					AND e.idlang = $lang
					AND f.startidartlang != e.idartlang
					");
				break;
		}
		$this->db->next_record();
		return $this->db->f('anzahl');
	}
	function getArticles() {
		global $cfg, $lang;
		switch ($this->ebene) {
			case -2:
				$this->db->query("
					SELECT f.name, e.pagetitle, c.idcat, d.idart, e.idartlang, e.summary, e.created, DATE_FORMAT(e.created,'%d.%m.%y') AS erstellungsdatum
					FROM
						{$cfg['tab']['cat']} AS a,
						{$cfg['tab']['cat']} AS b,
						{$cfg['tab']['cat']} AS c
					LEFT JOIN {$cfg['tab']['cat_art']} AS d ON c.idcat = d.idcat
					LEFT JOIN {$cfg['tab']['art_lang']} AS e ON d.idart = e.idart
					LEFT JOIN {$cfg['tab']['cat_lang']} AS f ON (f.idcat = d.idcat AND f.idlang = $lang)
					WHERE
					(
						(
							c.parentid = b.idcat
							AND b.parentid = a.idcat
						)
						OR
						(
							c.idcat = b.idcat
							AND b.parentid = a.idcat
						)
						OR
						(
							c.idcat = b.idcat
							AND b.idcat = a.idcat
						)
					)
					AND a.idcat = {$this->categorie}
					AND e.online = 1
					AND e.redirect = 0
					AND e.external_redirect = 0
					AND e.idlang = $lang
					AND f.startidartlang != e.idartlang
					ORDER BY e.created DESC
					LIMIT {$this->limit}, {$this->angezeigte_anzahl}
					");
				break;
			case -1:
				$this->db->query("
					SELECT f.name, e.pagetitle, c.idcat, d.idart, e.idartlang, e.summary, e.created, DATE_FORMAT(e.created,'%d.%m.%y') AS erstellungsdatum
					FROM
						{$cfg['tab']['cat']} AS a,
						{$cfg['tab']['cat']} AS b,
						{$cfg['tab']['cat']} AS c
					LEFT JOIN {$cfg['tab']['cat_art']} AS d ON c.idcat = d.idcat
					LEFT JOIN {$cfg['tab']['art_lang']} AS e ON d.idart = e.idart
					LEFT JOIN {$cfg['tab']['cat_lang']} AS f ON (f.idcat = d.idcat AND f.idlang = $lang)
					WHERE
					(
						(
							c.idcat = b.idcat
							AND b.parentid = a.idcat
						)
						OR
						(
							c.idcat = b.idcat
							AND b.idcat = a.idcat
						)
					)
					AND a.idcat = {$this->categorie}
					AND e.online = 1
					AND e.redirect = 0
					AND e.external_redirect = 0
					AND e.idlang = $lang
					AND f.startidartlang != e.idartlang
					ORDER BY e.created DESC
					LIMIT {$this->limit}, {$this->angezeigte_anzahl}
					");
				break;
			case 0:
				$this->db->query("
					SELECT f.name, e.pagetitle, c.idcat, d.idart, e.idartlang, e.summary, e.created, DATE_FORMAT(e.created,'%d.%m.%y') AS erstellungsdatum
					FROM
						{$cfg['tab']['cat']} AS a,
						{$cfg['tab']['cat']} AS b,
						{$cfg['tab']['cat']} AS c
					LEFT JOIN {$cfg['tab']['cat_art']} AS d ON c.idcat = d.idcat
					LEFT JOIN {$cfg['tab']['art_lang']} AS e ON d.idart = e.idart
					LEFT JOIN {$cfg['tab']['cat_lang']} AS f ON (f.idcat = d.idcat AND f.idlang = $lang)
					WHERE
					(
						(
							c.idcat = b.idcat
							AND b.idcat = a.idcat
						)
					)
					AND a.idcat = {$this->categorie}
					AND e.online = 1
					AND e.redirect = 0
					AND e.external_redirect = 0
					AND e.idlang = $lang
					AND f.startidartlang != e.idartlang
					ORDER BY e.created DESC
					LIMIT {$this->limit}, {$this->angezeigte_anzahl}
					");
				break;
		}
		$counter = 0;
		while ($this->db->next_record()) {
			$this->articles[$counter]['name'] = $this->db->f('name');
			$this->articles[$counter]['pagetitle'] = $this->db->f('pagetitle');
			$this->articles[$counter]['idcat'] = $this->db->f('idcat');
			$this->articles[$counter]['idart'] = $this->db->f('idart');
			$this->articles[$counter]['idartlang'] = $this->db->f('idartlang');
			$this->articles[$counter]['created'] = $this->db->f('erstellungsdatum');
			$this->articles[$counter]['summary'] = $this->db->f('summary');
			$counter++;
		}
		for ($i=0;$i<count($this->articles);$i++) {
			$this->db->query("
				SELECT a.value, a.typeid, b.type, c.filename, c.dirname
				FROM {$cfg['tab']['content']} AS a
				LEFT JOIN {$cfg['tab']['type']} AS b ON a.idtype = b.idtype
				LEFT JOIN {$cfg['tab']['upl']} AS c ON a.value = c.idupl
				WHERE
				a.idartlang = {$this->articles[$i]['idartlang']}
				AND b.type = 'CMS_IMG'
				");
			if ($this->db->next_record()) {
				$this->articles[$i]['picture'] = $this->createImage($this->db->f('dirname'),$this->db->f('filename'));
			}
		}
	}
	function showArticles() {
		global $sess, $cfgClient, $client, $lang, $edit;
		if (count($this->articles) == 0 || $edit) {
			
			echo "<div class=\"text\">CMS_HTML[10]</div>";
		} else {
			echo '<table class="alist" width="100%" cellspacing="0" cellpadding="0">';
	
			for ($i=0;$i<count($this->articles);$i++) {
				list($key,$artikel) = each($this->articles);
				$link = $sess->url($cfgClient[$client]['path']['htmlpath']."front_content.php?idcat={$artikel['idcat']}&idart={$artikel['idart']}");
	
				// Titelzeile ausgeben
				echo "<tr><td class=\"alistHeader\"><a href=\"$link\" class=\"alistHeader\">{$artikel['pagetitle']}</a></td><td class=\"alistCreated\">{$artikel['created']}</td></tr>";
	
				if (!empty($artikel['picture'])) {
	
					// Zusammenfassung und Bild ausgeben
					echo "<tr><td class=\"alistSummary\">{$artikel['summary']}</td><td class=\"alistPicture\"><a href=\"$link\"><img src=\"{$artikel['picture']}\" border=\"0\"/></a></td></tr>";
				} else {
	
					// Zusammenfassung ausgeben
					echo "<tr><td colspan=\"2\" class=\"alistSummary\">{$artikel['summary']}</td></tr>";
				}
				if ($i < count($this->articles) -1) {
					echo '<tr><td colspan="2" class="alistSeparator"><img src="/cms/images/green_pixel.gif" width="522" height="1" border="0"></td></tr>';
				}
			
			}
			echo '</table>';
		}
	}
}
$alistThumbs = new alistThumbs();
?>andreas