w3cncepts.gallery.v1 - Seitennavigation

Gesperrt
steiniman
Beiträge: 19
Registriert: Fr 1. Okt 2004, 09:14
Wohnort: Crimmtschau
Kontaktdaten:

w3cncepts.gallery.v1 - Seitennavigation

Beitrag von steiniman »

Hallo,

Bei der Navigation gibt es einen vor- und zurück-Link. Ich bräuchte jedoch noch eine Möglichkeit zu den Galerieseiten direkt zu springen, nach dem Schema:

zurück | 1 | 2| 3 | weiter

hat jemand sowas schon gebastelt?
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

da müsste wieder mal kummer was dazu sagen ;-)
*** make your own tools (wishlist :: thx)
Luigi
Beiträge: 34
Registriert: Do 18. Nov 2004, 20:50
Kontaktdaten:

Beitrag von Luigi »

Damit sollte es gehen:



/***********************************************
* CONTENIDO MODUL - INPUT
*
* Modulname : w3concepts.gallery.v1
* Author : Andreas Kummer
* Copyright : mumprecht & kummer w3concepts
* Created : 30-08-2004
* Modified : 30-08-2004
************************************************/

class pfad {

function pfad($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) {
if ($preselection == $key) {
echo "<option value=\"$key\" selected=\"selected\">$value</option>";
} else {
echo "<option value=\"$key\">$value</option>";
}
}
}
}

$pfad = new pfad($cfgClient[$client]['path']['frontend'].$cfgClient[$client]['upload']);

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

echo "<tr><td>Bilderpfad:</td>";
echo "<td><select size=\"1\" name=\"CMS_VAR[0]\" />";
$pfad->makeSelect("CMS_VALUE[0]");
echo "</td>";

echo "<tr><td>Thumbnailpfad:</td>";
echo "<td><select size=\"1\" name=\"CMS_VAR[1]\" />";
$pfad->makeSelect("CMS_VALUE[1]");
echo "</td>";

echo "<tr><td>Thumbnailbreite (Max.):</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[2]\" value=\"CMS_VALUE[2]\" size=\"5\" /></td>";

echo "<tr><td>Thumbnailhöhe (Max.):</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[3]\" value=\"CMS_VALUE[3]\" size=\"5\" /></td>";

echo "<tr><td>Anzahl Spalten:</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[4]\" value=\"CMS_VALUE[4]\" size=\"5\" /></td>";

echo "<tr><td>Anzahl Zeilen:</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[5]\" value=\"CMS_VALUE[5]\" size=\"5\" /></td>";

echo "<tr><td>Text für Previous-Link:</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[6]\" value=\"CMS_VALUE[6]\" size=\"15\" /></td>";

echo "<tr><td>Text für Next-Link:</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[7]\" value=\"CMS_VALUE[7]\" size=\"15\" /></td>";

echo "<tr><td>Seitennavigation selektiert (CSS class)</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[8]\" value=\"CMS_VALUE[8]\" size=\"15\" /></td>";

echo "<tr><td>Seitennavigation deselektiert (CSS class)</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[9]\" value=\"CMS_VALUE[9]\" size=\"15\" /></td>";



echo "</table>";


<?
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname : w3concepts.gallery.v1
* Author : Andreas Kummer
* Copyright : mumprecht & kummer w3concepts
* Created : 30-08-2004
* Modified : 30-08-2004
************************************************/

class gallery {

function gallery() {
// initialwerte setzen
$this->setInitValues();

// aussteigen, falls initialwerte nicht sinnvoll
if (!$this->checkInitValues()) return false;

// quellverzeichnis auslesen
$this->readDir();

// zeiger für showNextPicture setzen
if (empty($_REQUEST['pos'])) {
$this->showNextPictureSeq = -1;
} else {
$this->showNextPictureSeq = $_REQUEST['pos'] - 1;
}

// datenbankzugriff initialisieren
$this->db = new DB_Contenido;

// galerie ausgeben
$this->showGallery();

// gegebenenfalls navigation ausgeben
$this->showNavigation();

}

function setInitValues() {
// konfigurationswerte aus dem input-script
// übernehmen
$this->path['pictures'] = "CMS_VALUE[0]";
$this->path['thumbs'] = "CMS_VALUE[1]";
$this->path['upload'] = $GLOBALS['cfgClient']["{$GLOBALS['client']}"]['upload'];
$this->path['html'] = $GLOBALS['cfgClient']["{$GLOBALS['client']}"]['path']['htmlpath'];
$this->abspath['pictures'] = $GLOBALS['cfgClient']["{$GLOBALS['client']}"]['path']['frontend'].$GLOBALS['cfgClient']["{$GLOBALS['client']}"]['upload'].$this->path['pictures'];
$this->abspath['thumbs'] = $GLOBALS['cfgClient']["{$GLOBALS['client']}"]['path']['frontend'].$GLOBALS['cfgClient']["{$GLOBALS['client']}"]['upload'].$this->path['thumbs'];
$this->htmlpath = $GLOBALS['cfgClient']["{$GLOBALS['client']}"]['path']['htmlpath'].$GLOBALS['cfgClient']["{$GLOBALS['client']}"]['upload'];
$this->thumbnailSize['width'] = "CMS_VALUE[2]";
$this->thumbnailSize['height'] = "CMS_VALUE[3]";
$this->tableSize['cols'] = "CMS_VALUE[4]";
$this->tableSize['rows'] = "CMS_VALUE[5]";
$this->link['previous'] = "CMS_VALUE[6]";
$this->link['next'] = "CMS_VALUE[7]";

$this->link['css_selected_page'] = "CMS_VALUE[8]";
$this->link['css_notselected_page'] = "CMS_VALUE[9]";



}

function checkInitValues() {
// prüfen, ob es sich bei den übergebenen pfaden
// um tatsächlich vorhandene pfade im dateisystem
// handelt. gegebenenfalls wird eine ausgabe
// an den browser vorgenommen und false zurückgegeben.
if (!chdir($this->abspath['pictures'])) {
echo "<p>Das Verzeichnis '{$this->abspath['pictures']}' existiert im Dateisystem
des Servers nicht. Entweder müssen Sie es noch anlegen oder die
Konfiguration Ihres Modules anpassen.</p>";
return false;
}
if (!chdir($this->abspath['thumbs'])) {
echo "<p>Das Verzeichnis '{$this->abspath['thumbs']}' existiert im Dateisystem
des Servers nicht. Entweder müssen Sie es noch anlegen oder die
Konfiguration Ihres Modules anpassen.</p>";
return false;
}

if ($this->thumbnailSize['width'] == '') $this->thumbnailSize['width'] = 100;
if ($this->thumbnailSize['height'] == '') $this->thumbnailSize['height'] = 100;

if ($this->tableSize['cols'] == '') $this->tableSize['cols'] = 3;
if ($this->tableSize['rows'] == '') $this->tableSize['rows'] = 3;

if ($this->link['previous'] == '') $this->link['previous'] = '[:: rückwärts ]';
if ($this->link['next'] == '') $this->link['next'] = '[ vorwärts ::]';


// rückgabe im erfolgsfall
return true;
}

function readDir() {
$dir = opendir($this->abspath['pictures']);
while ($file = readdir($dir)) {
$bildinfo = @getimagesize($this->abspath['pictures'].$file);
if (!empty($bildinfo)) {
$picture[] = $file;
}
}
rsort($picture);
closedir($dir);

foreach ($picture as $picture2) {
if (!empty($picture2)) $this->picture[] = $picture2;
}
}

function showNextPicture() {
// zeiger um eins erhöhen
$this->showNextPictureSeq++;

// wenn keine bild mehr vorhanden ist, false zurück geben
if ($this->showNextPictureSeq >= count($this->picture)) return '';

// thumbnail generieren falls erforderlich
$size = $this->generateThumb($this->picture["{$this->showNextPictureSeq}"]);

// originalgrösse des bildes ermitteln
$originalsize = getimagesize($this->abspath['pictures'].$this->picture["{$this->showNextPictureSeq}"]);

// referenz zurück geben
//return "<a href=\"#\" onClick=\"window.open('{$this->path['html']}popupviewer.php?uri={$this->path['upload']}{$this->path['pictures']}{$this->picture[$this->showNextPictureSeq]}','bild','width={$originalsize[0]},height={$originalsize[1]},top=10,left=10,scrollbars=no,topmargin=0,leftmargin=0');bild.document.body.style.margin=0;\"><img src=\"{$this->htmlpath}{$size['filename']}\" width=\"{$size['width']}\" height=\"{$size['height']}\" /></a>";
return "<a href=\"javascript:window.open('{$this->path['html']}popupviewer.php?uri={$this->path['upload']}{$this->path['pictures']}{$this->picture[$this->showNextPictureSeq]}','bild','width={$originalsize[0]},height={$originalsize[1]},top=10,left=10,scrollbars=no,topmargin=0,leftmargin=0');bild.document.body.style.margin=0;\"><img border=0 src=\"{$this->htmlpath}{$size['filename']}\" width=\"{$size['width']}\" height=\"{$size['height']}\" /></a>";
}

function generateThumb($filename) {

$src_image_size = getimagesize($this->abspath['pictures'].$filename);

// prüfen, ob thumbnail bereits vorhanden ist
if (!file_exists("{$this->abspath['thumbs']}{$this->thumbnailSize['width']}.{$this->thumbnailSize['height']}.$filename.jpg")) {

// ermitteln ob das bild auf bestimmte höhe oder bestimmte breite zu reduzieren ist
// sowie ermitteln, um welchen faktor das bild zu verkleinern ist
if ($src_image_size[0]/$src_image_size[1] > $this->thumbnailSize['width']/$this->thumbnailSize['height']) {
$verkleinerungsfaktor = $this->thumbnailSize['width']/$src_image_size[0];
} else {
$verkleinerungsfaktor = $this->thumbnailSize['height']/$src_image_size[1];
}

// berechnen der thumbnailgrösse
$bildhoehe = round($src_image_size[1] * $verkleinerungsfaktor);
$bildbreite = round($src_image_size[0] * $verkleinerungsfaktor);

// thumbnail erstellen
$dst_im = imagecreatetruecolor($bildbreite,$bildhoehe);
if ($src_image_size[2] == 1) {
$src_im = imagecreatefromGIF("{$this->abspath['pictures']}$filename");
} elseif ($src_image_size[2] == 2) {
$src_im = @ImageCreateFromJPEG("{$this->abspath['pictures']}$filename");
} else {
$src_im = @imagecreatefromgd("{$this->abspath['pictures']}$filename");
}
imagecopyresampled ($dst_im,$src_im,0,0,0,0,$bildbreite,$bildhoehe,$src_image_size[0],$src_image_size[1]);
imagejpeg ($dst_im,"{$this->abspath['thumbs']}{$this->thumbnailSize['width']}.{$this->thumbnailSize['height']}.$filename.jpg",100);

$size['width'] = $bildbreite;
$size['height'] = $bildhoehe;
} else {
$thumbnailsize = getimagesize("{$this->abspath['thumbs']}{$this->thumbnailSize['width']}.{$this->thumbnailSize['height']}.$filename.jpg");
$size['width'] = $thumbnailsize[0];
$size['height'] = $thumbnailsize[1];
}

$size['filename'] = "{$this->path['thumbs']}{$this->thumbnailSize['width']}.{$this->thumbnailSize['height']}.$filename.jpg";

return $size;
}

function getDescription() {

$sql = "SELECT description FROM {$GLOBALS['cfg']['tab']['upl']}
WHERE
filename = '{$this->picture[$this->showNextPictureSeq]}'
AND dirname = '{$this->path['pictures']}'
";

$this->db->query($sql);
$this->db->next_record();

return $this->db->f("description");;
}

function showGallery() {

$cellwidth = floor(100/$this->tableSize['cols']);
echo "<table width=\"100%\">\n";
for ($i = 0;$i < $this->tableSize['rows'];$i++) {
$beschreibung = null;

echo "<tr>\n";
for ($j = 0;$j < $this->tableSize['cols'];$j++) {
echo "<td class=\"textbereich\" align=\"center\" valign=\"top\" width=\"$cellwidth%\">\n".$this->showNextPicture()."\n</td>\n";
$beschreibung[] = $this->getDescription();
}
echo "</tr>\n";

echo "<tr>\n";
for ($j = 0;$j < $this->tableSize['cols'];$j++) {
echo "<td class=\"bildunterschrift\" align=\"center\" valign=\"top\" width=\"$cellwidth%\" style=\"padding-bottom:10px; font-style: italic;\">\n{$beschreibung[$j]}\n</td>\n";
}
echo "</tr>\n";
}
echo "</table>\n";
}

function showNavigation() {

if ($this->tableSize['cols'] * $this->tableSize['rows'] < count($this->picture)) {
echo "<table width=\"100%\">\n<tr>\n";

if (!empty($_REQUEST['pos'])) {
$pos = ($this->showNextPictureSeq <= $this->tableSize['cols'] * $this->tableSize['rows']) ? (0) : ($this->showNextPictureSeq - (2 * $this->tableSize['cols'] * $this->tableSize['rows']) + 1);
$pos = ($pos < 0) ? (0) : ($pos);
$link = $GLOBALS['sess']->url("front_content.php?client={$GLOBALS['client']}&lang={$GLOBALS['lang']}&idcat={$GLOBALS['idcat']}&idart={$GLOBALS['idart']}&pos=$pos");
echo "<td class=\"{$this->link['css_notselected_page']}\" style=\"text-align:left; width:33%\"><a href=\"$link\">{$this->link['previous']}</a></td>";
} else {
echo "<td style=\"text-align:left; width:33%\">&nbsp;</td>";
}

// alle Seiten anzeigen
echo "<td align=\"center\" width=\"33%\">";
$pagestep = $this->tableSize['cols'] * $this->tableSize['rows'];
$sel_page = ($this->showNextPictureSeq + 1) / $pagestep ;
//echo $sel_page;

for ($pos = 0; $pos < count($this->picture); $pos += $pagestep)
{
$z++;
$link = $GLOBALS['sess']->url("front_content.php?client={$GLOBALS['client']}&lang={$GLOBALS['lang']}&idcat={$GLOBALS['idcat']}&idart={$GLOBALS['idart']}&pos=$pos");

if ($z == $sel_page)
echo "<a class=\"{$this->link['css_selected_page']}\" href=\"$link\">&nbsp;$z&nbsp;</a>";
else
echo "<a class=\"{$this->link['css_notselected_page']}\" href=\"$link\">&nbsp;$z&nbsp;</a>";
}
echo "</td>";



if ($this->showNextPictureSeq + 1 < count($this->picture)) {
$pos = $this->showNextPictureSeq + 1;
$link = $GLOBALS['sess']->url("front_content.php?client={$GLOBALS['client']}&lang={$GLOBALS['lang']}&idcat={$GLOBALS['idcat']}&idart={$GLOBALS['idart']}&pos=$pos");
echo "<td class=\"{$this->link['css_notselected_page']}\" style=\"text-align:right; width:33%\"><a href=\"$link\">{$this->link['next']}</a></td>";
} else {
echo "<td style=\"text-align:right; width:33%\">&nbsp;</td>";
}

echo "</tr>\n</table>\n";
}
}

}

$gallery = new gallery();
?>
tantalus
Beiträge: 30
Registriert: Do 3. Mär 2005, 12:06
Kontaktdaten:

Beitrag von tantalus »

Tolles Modul,
jetzt habe ich nur noch ein Problem: hat jemand eine Idee wie man auf jeder erzeugten Vorschauseite einen individuellen Text eingeben kann?
Luigi
Beiträge: 34
Registriert: Do 18. Nov 2004, 20:50
Kontaktdaten:

Beitrag von Luigi »

tantalus hat geschrieben:Tolles Modul,
jetzt habe ich nur noch ein Problem: hat jemand eine Idee wie man auf jeder erzeugten Vorschauseite einen individuellen Text eingeben kann?
Also ich weiß nicht, ob das Sinn macht.
Auf welcher Seite welche Bilder sind kann man nämlich nicht festlegen.
Die Reihenfolge der Bilder entspricht der Reihenfolge im Dateisystem.
kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer »

das scheint mir dann fast eher eine aufgabe für eine artikelliste zu sein... :wink:
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
tantalus
Beiträge: 30
Registriert: Do 3. Mär 2005, 12:06
Kontaktdaten:

Beitrag von tantalus »

Alles klar, habe das Problem tatsächlich mit Artikelliste gelöst, vielen Dank :lol:
Gesperrt