[Modul] Download-Liste / Filelist / auf Smarty-Template-Basis

Alles rund um Module und Plugins in CONTENIDO 4.9.
Antworten
csmd
Beiträge: 20
Registriert: Mo 15. Jun 2009, 11:06
Kontaktdaten:

[Modul] Download-Liste / Filelist / auf Smarty-Template-Basis

Beitrag von csmd » Mi 10. Mai 2017, 14:06

Hallo zusammen,

da ich immer noch mit der aktuellen Download-Liste auf Kriegsfuß stehe (Ausgabe über das alte HTML-Template), habe ich heute endlich mal ein neues Modul zusammen gezimmert.
Das habe ich auf Basis von dem Modul "content_picture_gallery" gemacht, welches ebenfalls die Filelist benutzt und schon immer einen Schritt weiter war.

Der Hauptvorteil bei diesem Ansatz ist:
Man muss nicht in der Contenido-Klasse "class.content.type.filelist.php" rum hacken (was man eh nie machen sollte), wenn man die Icons ändern möchte, oder andere Tweaks vornehmen möchte (Überschreiben des Dateinamens mit Medianame, etc).

Modul Ausgabe:

Code: Alles auswählen

<?php
/**
 * description: smarty download list / based on content_picture_gallery
 *
 * @package Module
 * @author timo.trautmann@4fb.de
 * @copyright four for business AG <www.4fb.de>
 * @license http://www.contenido.org/license/LIZENZ.txt
 * @link http://www.4fb.de
 * @link http://www.contenido.org
 */

defined('CON_FRAMEWORK') || die('Illegal call: Missing framework initialization - request aborted.');

$filelistIndex = 1;
$art = new cApiArticleLanguage();
$art->loadByArticleAndLanguageId(cRegistry::getArticleId(), cRegistry::getLanguageId());
$contentValue = $art->getContent("FILELIST", $filelistIndex);
$filelist = new cContentTypeFilelist($contentValue, $filelistIndex, array());
$files = $filelist->getConfiguredFiles();

if (cRegistry::isBackendEditMode()) {
	$label = mi18n("LABEL_HEADER_DOWNLOADLIST");
	echo '<label class="content_type_label">'.$label.'</label>';
	echo '<div class="con_filelist_dllist">';
	echo "CMS_FILELIST[1]";
	echo '</div>';
}

$dlfiles = array();
if (($files!='')&&(count($files) > 0)) {
	foreach ($files as $file) {
		$path = $file['path'] . '/' . $file['filename'];
		$record = array();
		$record['link'] = $cfgClient[$client]['upload'] . $path;
		$record['extension'] = $file['extension'];
		switch ($file['extension']) {
			case 'gif':
				$record['icon'] = 'file-image-o';
				break;
			case 'jpg':
				$record['icon'] = 'file-image-o';
				break;
			case 'jpeg':
				$record['icon'] = 'file-image-o';
				break;
			case 'png':
				$record['icon'] = 'file-image-o';
				break;
			case 'doc':
				$record['icon'] = 'file-word-o';
				break;
			case 'docx':
				$record['icon'] = 'file-word-o';
				break;
			case 'xls':
				$record['icon'] = 'file-excel-o';
				break;
			case 'xlsx':
				$record['icon'] = 'file-excel-o';
				break;
			case 'ppt':
				$record['icon'] = 'file-powerpoint-o';
				break;
			case 'pptx':
				$record['icon'] = 'file-powerpoint-o';
				break;
			case 'pdf':
				$record['icon'] = 'file-pdf-o';
				break;
			default:
				$record['icon'] = 'file-o';
				break;
		}
		$record['medianame'] = $file['metadata']['medianame'];
		if (($record['medianame'] != '')or($record['medianame'] != 0)) {
			$record['filename'] = $record['medianame'];
		} else {
			$record['filename'] = $file['filename'];
		}
		$record['description'] = $file['metadata']['description'];
		$record['copyright'] = $file['metadata']['copyright'];
		//$record['filesize'] = $file['filesize'];
		$record['filesize'] = humanReadableSize($file['filesize']);
		$record['dlsize'] = '('.$record['extension'].' - '.$record['filesize'].')';
		array_push($dlfiles, $record);
	}
	$tpl = cSmartyFrontend::getInstance();
	$tpl->assign('dlfiles', $dlfiles);
	$tpl->display('get.tpl');
}
?>
get.tpl

Code: Alles auswählen

<div class="">
	{foreach from=$dlfiles item=dlfile}
		<div class="dl_entry">
			<div class="dl_content">
				<div class="dl_icon">
					<i class="fa fa-{$dlfile.icon|escape}" aria-hidden="true"></i>
				</div>
				<div class="dl_link">
					<a href="{$dlfile.link|escape}" target="_blank">{$dlfile.filename|escape}</a>
				</div>
			</div>
			{if 0 lt $dlfile.description|strlen}
			<div class="dl_desc">
				{$dlfile.description|escape}
			</div>
			{/if}
			<div class="dl_size">
				{$dlfile.dlsize|escape}
			</div>
		</div>
	{/foreach}
</div>
Damit Contenido im Backend nicht noch zusätzlich die alte Fileliste anzeigt, habe ich das contenido_backend.css um folgendes erweitert:
contenido_backend.css

Code: Alles auswählen

.con_filelist_dllist h2 {
	display: none;
}
.con_filelist_dllist ul {
	display: none;
}
Das Smarty-Template sollt ihr natürlich al Gusto an Eure Bedürfnisse anpassen, daher schicke ich auch kein CSS mit.
(für die Icons habe ich die FontAwesome verwendet, den Icon-Div-Container auf float:left mit fixer Breite gesetzt)

Dieser Post soll euch nur die Grund-Arbeit ersparen, wenn ihr schnell auf eine Smarty-basierte Download-Liste wechseln möchtet (mit o.g. Vorteilen).
Vielleicht kann ja jemand dieses Download-Modul gebrauchen.

Abschließend hätte ich noch eine kurze Frage an die Community:
Aktuell werden die Metas nur ausgelesen, wenn man im Filelist-Fenster explizit deren Ausgabe mit Häkchen bestätigt.
Ich fände ein generelles Auslesen für meinen Einsatz nicht schlecht, da diese Liste in zig Artikeln auftaucht und der Redakteur dann nicht jedes mal das Häkchen setzen muss.
Gibt es dafür einen schnellen Hack?

Viele Grüße
Christian

Antworten