modul für 4.5.2 alpha :: w3concepts.alist.thumbs.v1
Verfasst: Do 11. Nov 2004, 15:45
				
				noch ne artikelliste. diesmal für die 4.5.2 alpha... es hat da ja ein paar änderungen gegeben, weshalb nicht alle artikellistenmodule der 4.4.4 funktionieren.
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:
gruss,
andreas
			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