Seite 1 von 2

neues modul :: downloadList

Verfasst: Mi 28. Jun 2006, 15:48
von kummer
endlich wieder mal ein kleines modülchen für die community. eine einfache downloadListe mit Editierung im Editierbereich (anstatt der Konfiguration).

voraussetzung ist, dasss zuvor folgender query auf der db abgesetzt wird:

Code: Alles auswählen

ALTER TABLE `con_art_lang` ADD `serializeddata` TEXT;
dann braucht man bloss noch das modul aufnehmen und fertig. das modul hat keinen input-bereich.

Code: Alles auswählen

<?php

cInclude("includes", "functions.upl.php");

if (!class_exists('downloadList')) {
	class downloadList {

		function downloadList($index) {

			global $edit, $client, $cfg, $idart, $lang;

			// Member aufnehmen
			$this->edit = $edit;
			$this->index = 'var_'.$index;

			$this->idart = $idart;
			$this->lang = $lang;

			// Initialisierung des Datenbankzugriffs
			$this->db = new DB_Contenido;

			// CMS_VALUE als Member aufnehmen
			$this->serialization();

			// Dateien aus dem Dateisystem lesen
			$this->db->query("SELECT * FROM ".$cfg['tab']['upl']." WHERE idclient='$client' ORDER BY dirname ASC, filename ASC");
			while ($this->db->next_record()) {
				$this->medien[$this->db->f('idupl')] = array ('idupl' => $this->db->f('idupl'), 'filename' => $this->db->f('dirname').$this->db->f('filename'));
			}
		}

		function serialization() {

			global $cfg;

			if (!empty ($_POST[$this->index]) && $this->edit) {

				for ($i = 0; $i <= count($_POST[$this->index]); $i += 3) {
					if ($_POST[$this->index][$i] != 0) {
						$this->cmsValue[] = $_POST[$this->index][$i];
						$this->cmsValue[] = $_POST[$this->index][$i +1];
						$this->cmsValue[] = $_POST[$this->index][$i +2];
					}
				}

				$serializedData = mysql_real_escape_string(wddx_serialize_value($this->cmsValue));
				$this->db->query("UPDATE ".$cfg['tab']['art_lang']." SET serializeddata = '".$serializedData."' WHERE idart = ".$this->idart." and idlang = ".$this->lang);
			} else {

				$this->db->query("SELECT serializeddata FROM ".$cfg['tab']['art_lang']." WHERE idart = ".$this->idart." and idlang = ".$this->lang);
				while ($this->db->next_record()) {
					$this->cmsValue = wddx_deserialize($this->db->f('serializeddata'));
				}
			}

			if (!empty ($_GET['moveUp']) && $this->edit) {
				for ($i = 0; $i < count($this->cmsValue); $i += 3) {
					if ($i == $_GET['moveUp'] - 3) {
						$newCmsValue[] = $this->cmsValue[$i +3];
						$newCmsValue[] = $this->cmsValue[$i +4];
						$newCmsValue[] = $this->cmsValue[$i +5];
					} else
						if ($i == $_GET['moveUp']) {
							$newCmsValue[] = $this->cmsValue[$i -3];
							$newCmsValue[] = $this->cmsValue[$i -2];
							$newCmsValue[] = $this->cmsValue[$i -1];
						} else {
							$newCmsValue[] = $this->cmsValue[$i];
							$newCmsValue[] = $this->cmsValue[$i +1];
							$newCmsValue[] = $this->cmsValue[$i +2];
						}
				}

				$this->cmsValue = $newCmsValue;

				$serializedData = mysql_real_escape_string(wddx_serialize_value($this->cmsValue));
				$this->db->query("UPDATE ".$cfg['tab']['art_lang']." SET serializeddata = '".$serializedData."' WHERE idart = ".$this->idart." and idlang = ".$this->lang);
			}
		}

		function getRequestUri() {

			$returnValue = $_SERVER['PHP_SELF'];

			$start = true;
			if (!empty ($_GET)) {
				foreach ($_GET as $key => $value) {
					if ($key != 'moveUp') {
						if ($start) {
							$start = false;
							$returnValue .= '?'.$key.'='.$value;
						} else {
							$returnValue .= '&'.$key.'='.$value;
						}
					}
				}
			}
			
			return $returnValue;
		}

		function show() {
			if ($this->edit) {
				return $this->edit();
			} else {
				return $this->showOutput();
			}
		}

		function edit() {

			global $cfg;

			// Dateien aus dem Dateisystem lesen
			$this->db->query("SELECT * FROM ".$cfg['tab']['upl']." WHERE idclient='$client' ORDER BY dirname ASC, filename ASC");
			while ($this->db->next_record()) {
				$this->medien[$this->db->f('idupl')] = array ('idupl' => $this->db->f('idupl'), 'filename' => $this->db->f('dirname').$this->db->f('filename'));
			}

			$returnValue = '<div><form action="'.$this->getRequestUri().'" method="POST"><table border="0" cellspacing="0" cellpadding="0" width="100%">';

			for ($i = 0; $i <= count($this->cmsValue); $i += 3) {
				$returnValue .= '<tr><td>Datei:</td><td><select name="'.$this->index.'['.$i.']">';
				$returnValue .= "<option value='0'>-- kein --</option>\n";

				foreach ($this->medien as $medium) {
					($this->cmsValue[$i] == $medium['idupl']) ? $sel = ' selected="selected" ' : $sel = '';
					$returnValue .= '<option value="'.$medium['idupl'].'" '.$sel.'>'.$medium['filename'].'</option>'."\n";
				}

				$returnValue .= '</select></td></tr>';
				$returnValue .= '<tr><td>Bezeichnung:</td><td><input type="text" size="35" value="'.$this->cmsValue[($i +1)].'" name="'.$this->index.'['. ($i +1).']" /></td></tr>';
				$returnValue .= '<tr><td>Beschreibung:</td><td><textarea rows="3" cols="40" name="'.$this->index.'['. ($i +2).']">'.$this->cmsValue[($i +2)].'</textarea></td></tr>';

				if ($i > 0 && $i < count($this->cmsValue)) {
					$returnValue .= '<tr><td>&nbsp;</td><td><a href="'.$this->getRequestUri().'&moveUp='.$i.'">^^^ nach oben verschieben ^^^</a></td></tr>';
				}
				$returnValue .= '<tr><td colspan="2"><hr/></td></tr>';
			}

			return $returnValue.'</table><input type="submit" value="speichern" /></form></div>';
		}
		
		function setMask($mask) {
			$this->mask = $mask;
		}

		function showOutput() {
			
			global $client, $cfgClient;
			
			$returnValue = '';
			
			for ($i = 0; $i < count($this->cmsValue); $i += 3) {
				$name = $this->cmsValue[$i + 1];
				$description = $this->cmsValue[$i + 2];
				$filename = $this->medien[$this->cmsValue[$i]]['filename'];
				$localFilename = $cfgClient[$client]["upl"]["path"].$filename;
				$link = $cfgClient[$client]["upl"]["htmlpath"].$filename;
				$size = human_readable_size(filesize($localFilename));
				$icon = "<img src=".uplGetFileIcon($localFilename)." alt=". getFileExtension($localFilename)." />";
				
				$mask = str_replace('{name}', $name, $this->mask);
				$mask = str_replace('{description}', $description, $mask);
				$mask = str_replace('{size}', $size, $mask);
				$mask = str_replace('{icon}', $icon, $mask);
				$mask = str_replace('{link}', $link, $mask);
				
				$returnValue .= $mask;
			}
			
			return $returnValue;
		}

	}
}

$downloadList = new downloadList("liste1");
$downloadList->setMask('<div style="margin-bottom:10px;">{icon}<a href="{link}">{name} ({size})</a><div>{description}</div></div>');
echo $downloadList->show();

?>
gruss,
andreas

Verfasst: Fr 30. Jun 2006, 17:16
von emergence
nur ne anmerkung
intressant die con_art_lang als speicherungsort zu wählen...
d.h an sich, dass die einstellungen sich nicht in allen sprachen ident auswirken, sondern für jede sprache gesetzt werden müssen...

Verfasst: Fr 30. Jun 2006, 17:26
von kummer
nun, ich denke, das ist im regelfall gewünscht. eindeutig für den mandanten, den artikel und die sprache. in einer anderen sprache, müssten entsprechend natürlich auch wieder dateien ausgewählt werden. aber nicht notwendigerweise die gleichen.

die für die ausgabe massgebliche maske könnte selbstredend natürlich auch über die konfiguration gesetzt werden. ist in der jetzigen phase allerdings noch nicht realisiert.

kundenseitig bestand der wunsch, die downloadliste über den editierbereich editieren zu können und die reihenfolge frei wählen zu können. dabei sollte es nicht nötig sein, die konfiguration für die entsprechenden benutzer zu öffnen.

Verfasst: Di 11. Jul 2006, 17:15
von kummer
im obigen code hat sich ein fehler eingeschlichen. bitte folgenden code verwenden:

Code: Alles auswählen

<?php

cInclude("includes", "functions.upl.php");

if (!class_exists('downloadList')) {
	class downloadList {

		function downloadList($index) {

			global $edit, $client, $cfg, $idart, $lang;

			// Member aufnehmen
			$this->edit = $edit;
			$this->index = 'var_'.$index;

			$this->idart = $idart;
			$this->lang = $lang;

			// Initialisierung des Datenbankzugriffs
			$this->db = new DB_Contenido;

			// CMS_VALUE als Member aufnehmen
			$this->serialization();

			// Dateien aus dem Dateisystem lesen
			$this->db->query("SELECT * FROM ".$cfg['tab']['upl']." WHERE idclient='$client' ORDER BY dirname ASC, filename ASC");
			while ($this->db->next_record()) {
				$this->medien[$this->db->f('idupl')] = array ('idupl' => $this->db->f('idupl'), 'filename' => $this->db->f('dirname').$this->db->f('filename'));
			}
		}

		function serialization() {

			global $cfg;

			if (!empty ($_POST[$this->index]) && $this->edit) {

				for ($i = 0; $i <= count($_POST[$this->index]); $i += 3) {
					if ($_POST[$this->index][$i] != 0) {
						$this->cmsValue[] = $_POST[$this->index][$i];
						$this->cmsValue[] = $_POST[$this->index][$i +1];
						$this->cmsValue[] = $_POST[$this->index][$i +2];
					}
				}

				$serializedData = mysql_real_escape_string(wddx_serialize_value($this->cmsValue));
				$this->db->query("UPDATE ".$cfg['tab']['art_lang']." SET serializeddata = '".$serializedData."' WHERE idart = ".$this->idart." and idlang = ".$this->lang);
			} else {

				$this->db->query("SELECT serializeddata FROM ".$cfg['tab']['art_lang']." WHERE idart = ".$this->idart." and idlang = ".$this->lang);
				while ($this->db->next_record()) {
					$this->cmsValue = wddx_deserialize($this->db->f('serializeddata'));
				}
			}

			if (!empty ($_GET['moveUp']) && $this->edit) {
				for ($i = 0; $i < count($this->cmsValue); $i += 3) {
					if ($i == $_GET['moveUp'] - 3) {
						$newCmsValue[] = $this->cmsValue[$i +3];
						$newCmsValue[] = $this->cmsValue[$i +4];
						$newCmsValue[] = $this->cmsValue[$i +5];
					} else
						if ($i == $_GET['moveUp']) {
							$newCmsValue[] = $this->cmsValue[$i -3];
							$newCmsValue[] = $this->cmsValue[$i -2];
							$newCmsValue[] = $this->cmsValue[$i -1];
						} else {
							$newCmsValue[] = $this->cmsValue[$i];
							$newCmsValue[] = $this->cmsValue[$i +1];
							$newCmsValue[] = $this->cmsValue[$i +2];
						}
				}

				$this->cmsValue = $newCmsValue;

				$serializedData = mysql_real_escape_string(wddx_serialize_value($this->cmsValue));
				$this->db->query("UPDATE ".$cfg['tab']['art_lang']." SET serializeddata = '".$serializedData."' WHERE idart = ".$this->idart." and idlang = ".$this->lang);
			}
		}

		function getRequestUri() {

			$returnValue = $_SERVER['PHP_SELF'];

			$start = true;
			if (!empty ($_GET)) {
				foreach ($_GET as $key => $value) {
					if ($key != 'moveUp') {
						if ($start) {
							$start = false;
							$returnValue .= '?'.$key.'='.$value;
						} else {
							$returnValue .= '&'.$key.'='.$value;
						}
					}
				}
			}
			
			return $returnValue;
		}

		function show() {
			if ($this->edit) {
				return $this->edit();
			} else {
				return $this->showOutput();
			}
		}

		function edit() {

			global $cfg;

			// Dateien aus dem Dateisystem lesen
			$this->db->query("SELECT * FROM ".$cfg['tab']['upl']." WHERE idclient='$client' ORDER BY dirname ASC, filename ASC");
			while ($this->db->next_record()) {
				$this->medien[$this->db->f('idupl')] = array ('idupl' => $this->db->f('idupl'), 'filename' => $this->db->f('dirname').$this->db->f('filename'));
			}

			$returnValue = '<div><form action="'.$this->getRequestUri().'" method="POST"><table border="0" cellspacing="0" cellpadding="0" width="100%">';

			for ($i = 0; $i <= count($this->cmsValue); $i += 3) {
				$returnValue .= '<tr><td>Datei:</td><td><select name="'.$this->index.'['.$i.']">';
				$returnValue .= "<option value='0'>-- kein --</option>\n";

				foreach ($this->medien as $medium) {
					($this->cmsValue[$i] == $medium['idupl']) ? $sel = ' selected="selected" ' : $sel = '';
					$returnValue .= '<option value="'.$medium['idupl'].'" '.$sel.'>'.$medium['filename'].'</option>'."\n";
				}

				$returnValue .= '</select></td></tr>';
				$returnValue .= '<tr><td>Bezeichnung:</td><td><input type="text" size="35" value="'.$this->cmsValue[($i +1)].'" name="'.$this->index.'['. ($i +1).']" /></td></tr>';
				$returnValue .= '<tr><td>Beschreibung:</td><td><textarea rows="3" cols="40" name="'.$this->index.'['. ($i +2).']">'.$this->cmsValue[($i +2)].'</textarea></td></tr>';

				if ($i > 0 && $i < count($this->cmsValue)) {
					$returnValue .= '<tr><td>&nbsp;</td><td><a href="'.$this->getRequestUri().'&moveUp='.$i.'">^^^ nach oben verschieben ^^^</a></td></tr>';
				}
				$returnValue .= '<tr><td colspan="2"><hr/></td></tr>';
			}

			return $returnValue.'</table><input type="submit" value="speichern" /></form></div>';
		}
		
		function setMask($mask) {
			$this->mask = $mask;
		}

		function showOutput() {
			
			global $client, $cfgClient;
			
			$returnValue = '';
			
			for ($i = 0; $i < count($this->cmsValue); $i += 3) {
				$name = $this->cmsValue[$i + 1];
				$description = $this->cmsValue[$i + 2];
				$filename = $this->medien[$this->cmsValue[$i]]['filename'];
				$localFilename = $cfgClient[$client]["upl"]["path"].$filename;
				$link = $cfgClient[$client]["upl"]["htmlpath"].$filename;
				$size = human_readable_size(filesize($localFilename));
				$icon = "<img src=".uplGetFileIcon($localFilename)." alt=". getFileExtension($localFilename)." />";
				
				$mask = str_replace('{name}', $name, $this->mask);
				$mask = str_replace('{description}', $description, $mask);
				$mask = str_replace('{size}', $size, $mask);
				$mask = str_replace('{icon}', $icon, $mask);
				$mask = str_replace('{link}', $link, $mask);
				
				$returnValue .= $mask;
			}
			
			return $returnValue;
		}

	}
}

$downloadList = new downloadList("liste1");
$downloadList->setMask('<div style="margin-bottom:10px;">{icon}<a href="{link}">{name} ({size})</a><div>{description}</div></div>');
echo $downloadList->show();

?>

Verfasst: Di 11. Jul 2006, 17:19
von i-fekt
Ersetze doch bitte den obigen Code, damit niemand falschen Code übernimmt. Der erste Code sollte ja immer der aktuellste sein. ;)

Verfasst: Mi 12. Jul 2006, 07:38
von Dalamar
Sehr sehr geil Andreas... vielen Dank für das tolle Modul!

Verfasst: Mi 12. Jul 2006, 07:44
von kummer
i-fekt hat geschrieben:Ersetze doch bitte den obigen Code, damit niemand falschen Code übernimmt. Der erste Code sollte ja immer der aktuellste sein. ;)
ist gemacht!

gruss,
andreas

Verfasst: Mi 12. Jul 2006, 07:47
von kummer
@dalamar: könntest du einen link auf eine seite angeben, in der du das modul im einsatz hast? einfach, damit man auch sieht, wie das ganze ausschaut. ich habe im moment leider noch keinen.

und, wenn wir schon dabei sind, vielleicht sogar den code für die darstellung, damit man sieht, wie die umsetzung aussehen kann.

danke im voraus!

Verfasst: Mi 12. Jul 2006, 07:55
von Dalamar
Klar kann ich...

Hier der Link: http://81.169.135.155/01/cms_kwg/fronte ... p?idart=34

Bitte nicht wundern. Die Seite ist gerade in der Enstehungsphase, Content und eine Download-Kategorie ist nicht vorhanden. Ich habe einfach mal einen Artikel in einer anderen Cat erstellt und diesem das Download-Template zugewiesen.

LG,
Christian

Verfasst: Mi 12. Jul 2006, 07:59
von kummer
super, vielen dank!

Verfasst: Mi 26. Jul 2006, 12:34
von damoe
hallo kummer,

wäre es noch möglich in das modul eine funktion einzubauen welche die einzelnen Dateien nach oben oder unter verschieben kann? Somit hätte es der benutzer einfacher seine downloads zu strukturieren wenn er beispielsweise einen download zwischen zwei anderen einfügen möchte.

gruß

damoe

Verfasst: Mi 26. Jul 2006, 12:42
von kummer
das kann man ja bereits. wenn das nicht funktionieren sollte, dann liegt ein fehler vor. aber das modul ist genau dafür vorgesehen.

Verfasst: Mi 26. Jul 2006, 12:49
von damoe
sorry, hatte diese kleine funktion leider übersehen, funktioniert alles super, wie kompliziert wäre es aber noch einen punkt einzufügen der einen download nach unten bewegt?

Verfasst: Mi 26. Jul 2006, 12:52
von kummer
machen lässt sich alles. allerdings musst du dir das ganze selber mal anschauen. es sollte nicht so schwierig sein, das ganz nach eigenem gusto anzupassen.

Verfasst: Mi 26. Jul 2006, 12:57
von damoe
ok, alles klar. hast schon recht damit, selber versuchen, und noch was dabei lernen.

danke für deine infos.

gruß

damoe