Version: mod6.v1.1
Contenido: 4.4.5
Beschreibung: Die Artikelliste beruht auf der w3concepts.alist.mod6.v1 Artikelliste von w3concepts. In derzeitigen Artikellisten, werden Artikel unter einander, einzelnt aufgelistet. Mit dieser Artikelliste ist es nun möglich, Artikel in zweispaltigem Layout auszugeben. Bilder werden bei dieser Artikelliste nicht dargestellt. Die Artikelliste wurde komplett an XHTML angepasst. Das Aussehen kann komplett über CSS gesteuert werden. Diese Artikelliste eignet sich auch sehr gut für einen Newsbereich. Da der oberste Artikel immer der aktuellste ist. So und nun viel Spaß damit.
[Wichtig] - Getestet nur unter V4.4.5. Keine Gewähr auf richtigkeit. Keine Schadenersatzansprüche.
Beispielbild - so wie ich das umgesetzt habe.
CSS
Code: Alles auswählen
#strContainer { margin: 0; text-align: left; height: auto; width:100%; font-size: 0.7em; color: #000000; }
div.strlinks { border: 1px dotted #000000; padding: 7px; margin-left: 25px; bottom: 5px; top: 0px; width: 280px; height: 87px; float: left; }
div.strrechts { border: 1px dotted #000000; padding: 7px; margin-left: 14px; bottom: 5px; top: 0px; width: 280px; height: 87px; float: left; }
Code: Alles auswählen
/**
* INPUT
* $Revision: 1.1 $
* $Date: 2005/03/08 15:17:27 $
*/
/**
* Artikelliste
* @author Andreas Kummer
* @copyright Copyright © 2005, mumprecht & kummer w3concepts
*/
class dsdIxInput {
function dsdIxInput($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 dsdIxInput($cfgClient[$client]['path']['frontend'].$cfgClient[$client]['upload']);
$selected = "CMS_VALUE[0]";
echo "<table cellspacing=\"0\" cellpadding=\"10\" border=\"0\"><tr valign=\"top\"><td>Kategorie wählen:</td><td><select name=\"CMS_VAR[0]\">";
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[1]\" value=\"CMS_VALUE[1]\" size=\"3\" /></td>";
echo "<tr><td>Startartikel anzeigen?</td>";
$startartikel = "CMS_VALUE[2]";
if ($startartikel != '') {
echo "<td><input type=\"checkbox\" name=\"CMS_VAR[2]\" value=\"true\" size=\"3\" checked=\"checked\"/></td>";
} else {
echo "<td><input type=\"checkbox\" name=\"CMS_VAR[2]\" value=\"true\" size=\"3\"/></td>";
}
echo "<tr><td>Anzahl angezeigte Zeichen des HTML-Textes:</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[3]\" value=\"CMS_VALUE[3]\" size=\"5\" /></td>";
echo "<tr><td>Text für Previous-Link:</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[4]\" value=\"CMS_VALUE[4]\" size=\"15\" /></td>";
echo "<tr><td>Text für Next-Link:</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[5]\" value=\"CMS_VALUE[5]\" size=\"15\" /></td>";
echo "<tr><td>Thumbnail-Breite:</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[6]\" value=\"CMS_VALUE[6]\" size=\"5\" /></td>";
echo "<tr><td>Thumbnailpfad:</td>";
echo "<td><select size=\"1\" name=\"CMS_VAR[7]\" />";
$pfad->makeSelect("CMS_VALUE[7]");
echo "</td>";
echo "<tr><td>Artikel anzeigen bis:</td>";
echo "<td><select name=\"CMS_VAR[8]\">";
$ebene = "CMS_VALUE[8]";
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
<?php
/*************************************************************
* Modulname : w3concepts.alist.mod6.v1
* Author : Andreas Kummer
* Copyright : mumprecht & kummer w3concepts
* Created : 08-07-2004
* Modified : 17-06-2005 by devstormDESIGN <info@devstorm.de>
**************************************************************/
class dsdArtList {
function dsdArtList() {
// Anfangswerte setzen
if (!$this->setInitValues())
return false;
// Anzahl Artikel ermitteln
$this->anzahlArtikel = $this->getArticleCount();
// Artikel auslesen
$this->artikel = $this->getArticleDetails();
// Artikel ausgeben
echo $this->getList();
// Navigation ausgeben
// echo $this->getNavigation();
}
function setInitValues() {
global $cfgClient, $client;
$this->category = "CMS_VALUE[0]";
$this->articleNumber = "CMS_VALUE[1]";
$this->showStartArticle = "CMS_VALUE[2]";
$this->characterCount = "CMS_VALUE[3]";
$this->link['previous'] = "CMS_VALUE[4]";
$this->link['next'] = "CMS_VALUE[5]";
$this->thumbnailDimension = "CMS_VALUE[6]";
$this->thumbnailPath = "CMS_VALUE[7]";
$this->layer = "CMS_VALUE[8]";
// Werte aus dem Request übernehmen
$this->limit = (isset ($_GET['displaylimit']) && $_GET['displaylimit'] > 0) ? ($_GET['displaylimit']) : (0);
// Bilderpfade
$this->bildzielpfad['frontend'] = $cfgClient[$client]['path']['htmlpath'].$cfgClient[$client]['upload'].$this->thumbnailPath;
$this->bildzielpfad['backend'] = $cfgClient[$client]['path']['frontend'].$cfgClient[$client]['upload'].$this->thumbnailPath;
// Anfangswerte setzen, bei leerer Übergabe
if (empty ($this->category))
return false;
if (empty ($this->articleNumber))
$this->articleNumber = 10;
if (empty ($this->showStartArticle)) {
$this->showStartArticle = 'AND d.is_start = 0';
} else {
$this->showStartArticle = '';
}
if (empty ($this->characterCount))
$this->characterCount = 200;
if (empty ($this->link['previous']))
$this->link['previous'] = '[:: rückwärts ]';
if (empty ($this->link['next']))
$this->link['next'] = '[:: vorwärts ]';
if (empty ($this->thumbnailDimension))
$this->thumbnailDimension = 150;
if (empty ($this->thumbnailPath))
return false;
// Datenbankverbindung aufbauen
$this->db = new DB_Contenido;
$this->db2 = new DB_Contenido;
return true;
}
function getArticleCount() {
global $cfg, $lang;
switch ($this->layer) {
case -2 :
$sql = "" .
"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 " .
"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->category}" .
" AND e.online = 1 " .
" AND e.redirect = 0 " .
" AND e.external_redirect = 0 " .
" AND e.idlang = $lang " .
" {$this->showStartArticle}";
break;
case -1 :
$sql = "
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
WHERE
(
(
c.idcat = b.idcat
AND b.parentid = a.idcat
)
OR
(
c.idcat = b.idcat
AND b.idcat = a.idcat
)
)
AND a.idcat = {$this->category}
AND e.online = 1
AND e.redirect = 0
AND e.external_redirect = 0
AND e.idlang = $lang
{$this->showStartArticle}
";
break;
case 0 :
$sql = "
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
WHERE
(
(
c.idcat = b.idcat
AND b.idcat = a.idcat
)
)
AND a.idcat = {$this->category}
AND e.online = 1
AND e.redirect = 0
AND e.external_redirect = 0
AND e.idlang = $lang
{$this->showStartArticle}
";
break;
}
$this->db->query($sql);
if ($this->db->next_record())
return $this->db->f("anzahl");
return false;
}
function getArticleDetails() {
global $cfg, $lang;
switch ($this->layer) {
case -2 :
$sql = "
SELECT e.pagetitle, e.summary, c.idcat, d.idart, e.idartlang, e.created, e.lastmodified, DATE_FORMAT(e.datestart,'%d.%m.%y %H:%i') AS erstellungsdatum, IF(e.datestart > e.lastmodified, e.datestart, e.lastmodified) as sortdate
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
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->category}
AND e.online = 1
AND e.redirect = 0
AND e.external_redirect = 0
AND e.idlang = $lang
{$this->showStartArticle}
ORDER BY sortdate DESC
LIMIT {$this->limit}, {$this->articleNumber}
";
break;
case -1 :
$sql = "
SELECT e.pagetitle, e.summary, c.idcat, d.idart, e.idartlang, e.created, e.lastmodified, DATE_FORMAT(e.datestart,'%d.%m.%y %H:%i') AS erstellungsdatum, IF(e.datestart > e.lastmodified, e.datestart, e.lastmodified) as sortdate
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
WHERE
(
(
c.idcat = b.idcat
AND b.parentid = a.idcat
)
OR
(
c.idcat = b.idcat
AND b.idcat = a.idcat
)
)
AND a.idcat = {$this->category}
AND e.online = 1
AND e.redirect = 0
AND e.external_redirect = 0
AND e.idlang = $lang
{$this->showStartArticle}
ORDER BY sortdate DESC
LIMIT {$this->limit}, {$this->articleNumber}
";
break;
case 0 :
$sql = "
SELECT e.pagetitle, e.summary, c.idcat, d.idart, e.idartlang, e.created, e.lastmodified, DATE_FORMAT(e.datestart,'%d.%m.%y %H:%i') AS erstellungsdatum, IF(e.datestart > e.lastmodified, e.datestart, e.lastmodified) as sortdate
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
WHERE
(
(
c.idcat = b.idcat
AND b.idcat = a.idcat
)
)
AND a.idcat = {$this->category}
AND e.online = 1
AND e.redirect = 0
AND e.external_redirect = 0
AND e.idlang = $lang
{$this->showStartArticle}
ORDER BY sortdate DESC
LIMIT {$this->limit}, {$this->articleNumber}
";
break;
}
$this->db->query($sql);
$counter = 0;
while ($this->db->next_record()) {
$article[$counter]['headline'] = urldecode($this->db->f('pagetitle'));
$article[$counter]['text'] = $this->shortenText($this->db->f('summary'),$this->characterCount);
$this->db2->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->db->f("idartlang")."
AND (
b.type = 'CMS_IMG'
)
ORDER BY b.type, a.typeid ASC");
if ($this->db2->next_record()) {
$article[$counter]['image'] = $this->createImage(urldecode($this->db2->f('dirname')),urldecode($this->db2->f('filename')));
$article[$counter]['filename'] = urldecode($this->db2->f('filename'));
$article[$counter]['dirname'] = urldecode($this->db2->f('dirname'));
}
$article[$counter]['idart'] = $this->db->f('idart');
$article[$counter]['idcat'] = $this->db->f('idcat');
$article[$counter]['created'] = $this->db->f('erstellungsdatum');
$counter++;
}
return $article;
}
function createImage($dirname, $filename) {
global $cfgClient, $client;
if (empty($filename)) return '';
$pathinfo = pathinfo($filename);
$basename = basename($filename,$pathinfo['extension']);
if ($pathinfo['extension'] == 'gif') $pathinfo['extension'] = 'png';
$src_image_size = getimagesize($cfgClient[$client]['path']['frontend'].$cfgClient[$client]['upload'].$dirname.$filename);
$this->srchoehe = $src_image_size[1];
$this->srcbreite = $src_image_size[0];
if ($src_image_size[0]/$this->thumbnailDimension < $src_image_size[1]/$this->thumbnailDimension) {
$resizeFactor = $src_image_size[1]/$this->thumbnailDimension;
} else {
$resizeFactor = $src_image_size[0]/$this->thumbnailDimension;
}
$this->bildhoehe = round($src_image_size[1]/$resizeFactor);
$this->bildbreite = round($src_image_size[0]/$resizeFactor);
$bilddateiname = "{$this->bildbreite}.{$this->bildhoehe}.$basename{$pathinfo['extension']}";
if (!file_exists("{$this->bildzielpfad['backend']}$bilddateiname")) {
$dst_im = imagecreatetruecolor($this->bildbreite,$this->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);
} elseif ($src_image_size[2] == 3) {
$src_im = ImageCreateFromPNG($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,$this->bildbreite,$this->bildhoehe,$src_image_size[0],$src_image_size[1]);
if ($pathinfo['extension'] == 'png') {
imagepng ($dst_im,$this->bildzielpfad['backend'].$bilddateiname);
} else {
imagejpeg ($dst_im,$this->bildzielpfad['backend'].$bilddateiname,100);
}
}
return $this->bildzielpfad['frontend'].$bilddateiname;
}
function shortenText($text,$length) {
$text = strip_tags(trim(urldecode($text)));
if (strlen($text) > $length) {
$newtext = '';
$worte = explode (" ",$text);
$zulang = false;
foreach ($worte as $wort) {
if (strlen($newtext." ".$wort) >= $length) $zulang = true;
$newtext = (!$zulang)?($newtext." ".$wort):($newtext);
}
//$newtext .= "...";
} else {
$newtext = $text;
}
return $newtext;
}
function getList() {
global $client, $lang, $sess;
if (empty($this->artikel)) return false;
// Tabelle Anfang
$returnvalue = '<div class="strContainer">';
$i = 1;
foreach ($this->artikel as $artikel) {
// Link zusammensetzen
$link = $sess->url("front_content.php?client=$client&lang=$lang&idcat={$artikel['idcat']}&idart={$artikel['idart']}");
if (($i%2) == 1) { // Artikel linke Spalte -> orange Trennliene Boxanfang
$returnvalue .= '<div class="strlinks">';
} else { // Artikel rechts ->keine orange Trennlienie Boxanfang
$returnvalue .= '<div class="strrechts">';
}
//Artikel links, Text rechts -> orange Trennlienie
if (($i%4) == 3){
// Überschrift...
$returnvalue .= '<strong><a href="'.$link.'"><img src="images/layout/pfeil.gif"/> '.$artikel['headline']."</a></strong><br/>";
// Text
$returnvalue .= $artikel['text'].'<a href="'.$link.'"><strong>... Details</strong></a>';
} else { // keine orange Trennlienie
// Überschrift...
$returnvalue .= '<strong><a href="'.$link.'"><img src="images/layout/pfeil.gif"/> '.$artikel['headline'].'</a></strong><br/>';
// Text
$returnvalue .= $artikel['text'].'<a href="'.$link.'"><strong>... Details</strong></a>';
}
$returnvalue .= "</div>"; // Ende für eine Darstellung des Artikels
if (($i%2) == 0) { // Ende der Zeile
$returnvalue .= "<br/>";
}
$i++;
} // Ende der Schleife: foreach
// Artikelanzahl ungerade... Lueckenfueller: Zeitungen
if (($i%2) == 0) {
$returnvalue .= ' ';
}
// Tabelle Ende
$returnvalue .= "</div>";
return $returnvalue;
}
function getNavigation() {
global $sess, $client, $lang, $idcat, $idart;
$returnvalue = '';
if ($this->limit > 0 || $this->anzahlArtikel > $this->limit + $this->articleNumber) {
$returnvalue .= ' ';
if ($this->limit > 0) {
$displaylimit = ($this->limit - $$this->articleNumber >= 0) ? ($this->limit - $this->articleNumber) : (0);
$returnvalue .= "<a href=\"".$sess->url("front_content.php?client=$client&lang=$lang&idcat=$idcat&idart=$idart&displaylimit=$displaylimit")."\">{$this->link['previous']}</a>";
} else {
$returnvalue .= ' ';
}
if ($this->anzahlArtikel > $this->limit + $this->articleNumber) {
$displaylimit = $this->limit + $this->articleNumber;
$returnvalue .= "<a href=\"".$sess->url("front_content.php?client=$client&lang=$lang&idcat=$idcat&idart=$idart&displaylimit=$displaylimit")."\">{$this->link['next']}</a>";
} else {
$returnvalue .= ' ';
}
$returnvalue .= '';
}
return $returnvalue;
}
}
$dsdArtList = new dsdArtList();
?>