neues modul :: downloadList

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

neues modul :: downloadList

Beitrag 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
Zuletzt geändert von kummer am Mi 12. Jul 2006, 07:44, insgesamt 1-mal geändert.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag 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...
*** make your own tools (wishlist :: thx)
kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag 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.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag 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();

?>
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
i-fekt
Beiträge: 1520
Registriert: Mo 3. Jan 2005, 02:15
Wohnort: Chemnitz
Kontaktdaten:

Beitrag von i-fekt »

Ersetze doch bitte den obigen Code, damit niemand falschen Code übernimmt. Der erste Code sollte ja immer der aktuellste sein. ;)
Gruss,
Michael

"Keep on riding this Bike!" (Jackson Mulham)
Dalamar
Beiträge: 298
Registriert: Di 16. Nov 2004, 15:43
Wohnort: Arnstadt / Thüringen
Kontaktdaten:

Beitrag von Dalamar »

Sehr sehr geil Andreas... vielen Dank für das tolle Modul!
Beruflich: eComradeGroup und Media Atoll
Privat: Fantasybuch.net ;)
kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag 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
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag 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!
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
Dalamar
Beiträge: 298
Registriert: Di 16. Nov 2004, 15:43
Wohnort: Arnstadt / Thüringen
Kontaktdaten:

Beitrag 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
Beruflich: eComradeGroup und Media Atoll
Privat: Fantasybuch.net ;)
kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer »

super, vielen dank!
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
damoe
Beiträge: 13
Registriert: Mo 30. Jan 2006, 14:47
Kontaktdaten:

Beitrag 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
kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag 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.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
damoe
Beiträge: 13
Registriert: Mo 30. Jan 2006, 14:47
Kontaktdaten:

Beitrag 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?
kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag 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.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
damoe
Beiträge: 13
Registriert: Mo 30. Jan 2006, 14:47
Kontaktdaten:

Beitrag von damoe »

ok, alles klar. hast schon recht damit, selber versuchen, und noch was dabei lernen.

danke für deine infos.

gruß

damoe
Gesperrt