Skip to content

CPG: Download kompletter Alben

Ich suche schon seit einiger Zeit nach DER Lösung, um den Usern ein Zip Download eines kompletten Albums anbieten zu können. Nach einer kleiner Unterhaltung (sehr einseitig) mit dem CPG Forum bin ich dann fündig geworden - hier das Ganze jetzt auf deutsch.

Zunächst einmal erstellt man eine Datei namens zip.php im Root Verzeichnis der Galerie mit folgendem Inhalt:
<?php
include "include/config.inc.php";

/ Write here the name of the folder  where the zip will be created /
$sFolderZip = "zipfiles/";

/ Connecting to the server /
$db = @mysql_connect($CONFIG['dbserver'], $CONFIG['dbuser'], $CONFIG['dbpass'])
   or die (mysql_error());

/ Selecting the database /
$db_check = @mysql_select_db($CONFIG['dbname']);

/ Retrieving pictures list /
$sql = 'SELECT FROM `'.$CONFIG['TABLE_PREFIX'].'pictures` where `aid` = ' . $aid;
$result = mysql_query($sql) OR die(mysql_error());
$bilder = "";
while ($row = mysql_fetch_assoc($result))
   $bilder .= "albums/" . $row['filepath'].$row['filename'].",";

/
Retrieving album name /
$sql = 'SELECT
FROM `'.$CONFIG['TABLE_PREFIX'].'albums` where `aid` = ' . $aid;
$result = mysql_query($sql) OR die(mysql_error());
$o_AlbumName = mysql_fetch_object($result);
$sDesiredZipName = urlencode($o_AlbumName->title);

/ Creating the zip file /
include_once('pclzip.lib.php');
$archive = new PclZip($sFolderZip.$sDesiredZipName . '.zip');
$v_list = $archive->create($bilder);
if ($v_list == 0)
        die("Error : ".$archive->errorInfo(true));

$file = $sFolderZip.$sDesiredZipName.".zip";
$filename = basename($file);
$size = filesize($file);
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=".$filename);
header("Content-Length:".$size);
readfile($file);
?>
Anschließend lädt man sich die aktuelle PclZip library herunter und kopiert sie ebenfalls in das Root Verzeichnis seiner Galerie.

Wo wir gerade im Rootverzeichnis sind, schnell noch ein Ordner namens zipfiles angelegt und per chmod 777 die richtigen Rechte verpassen.

Als letzter Schritt muss jetzt nur noch das eigene Theme ein wenig angepasst werden. Öffne hierzu folgende Datei /Pfad_zu_Deiner_Galerie/themes/Dein_Theme/theme.php und füge vor dem abschließende PHP Tag - ?> diesen Code ein:
function theme_display_thumbnails(&$thumb_list, $nbThumb, $album_name, $aid, $cat, $page, $total_pages, $sort_options, $display_tabs, $mode = 'thumb')
{
    global $CONFIG;
    global $template_thumb_view_title_row,$template_fav_thumb_view_title_row, $lang_thumb_view, $template_tab_display, $template_thumbnail_view, $lang_album_list;

    static $header = '';
    static $thumb_cell = '';
    static $empty_cell = '';
    static $row_separator = '';
    static $footer = '';
    static $tabs = '';
    static $spacer = '';

    if ($header == '') {
        $thumb_cell = template_extract_block($template_thumbnail_view, 'thumb_cell');
        $tabs = template_extract_block($template_thumbnail_view, 'tabs');
        $header = template_extract_block($template_thumbnail_view, 'header');
        $empty_cell = template_extract_block($template_thumbnail_view, 'empty_cell');
        $row_separator = template_extract_block($template_thumbnail_view, 'row_separator');
        $footer = template_extract_block($template_thumbnail_view, 'footer');
        $spacer = template_extract_block($template_thumbnail_view, 'spacer');
    }

    $cat_link = is_numeric($aid) ? '' : '&amp;cat=' . $cat;
    $uid_link = (isset($_GET['uid']) && is_numeric($_GET['uid'])) ? '&amp;uid=' . $_GET['uid'] : '';

    $theme_thumb_tab_tmpl = $template_tab_display;

    if ($mode == 'thumb') {
        $theme_thumb_tab_tmpl['left_text'] = strtr($theme_thumb_tab_tmpl['left_text'], array('{LEFT_TEXT}' => $aid == 'lastalb' ? $lang_album_list['album_on_page'] : $lang_thumb_view['pic_on_page']));
        $theme_thumb_tab_tmpl['inactive_tab'] = strtr($theme_thumb_tab_tmpl['inactive_tab'], array('{LINK}' => 'thumbnails.php?album=' . $aid . $cat_link . $uid_link . '&amp;page=%d'));
        $theme_thumb_tab_tmpl['inactive_next_tab'] = strtr($theme_thumb_tab_tmpl['inactive_next_tab'], array('{LINK}' => 'thumbnails.php?album=' . $aid . $cat_link . $uid_link . '&amp;page=%d'));
        $theme_thumb_tab_tmpl['inactive_prev_tab'] = strtr($theme_thumb_tab_tmpl['inactive_prev_tab'], array('{LINK}' => 'thumbnails.php?album=' . $aid . $cat_link . $uid_link . '&amp;page=%d'));
    } else {
        $theme_thumb_tab_tmpl['left_text'] = strtr($theme_thumb_tab_tmpl['left_text'], array('{LEFT_TEXT}' => $lang_thumb_view['user_on_page']));
        $theme_thumb_tab_tmpl['inactive_tab'] = strtr($theme_thumb_tab_tmpl['inactive_tab'], array('{LINK}' => 'index.php?cat=' . $cat . '&amp;page=%d'));
        $theme_thumb_tab_tmpl['inactive_next_tab'] = strtr($theme_thumb_tab_tmpl['inactive_next_tab'], array('{LINK}' => 'index.php?cat=' . $cat . '&amp;page=%d'));
        $theme_thumb_tab_tmpl['inactive_prev_tab'] = strtr($theme_thumb_tab_tmpl['inactive_prev_tab'], array('{LINK}' => 'index.php?cat=' . $cat . '&amp;page=%d'));
    }

    $thumbcols = $CONFIG['thumbcols'];
    $cell_width = ceil(100 / $CONFIG['thumbcols']) . '%';

    $tabs_html = $display_tabs ? create_tabs($nbThumb, $page, $total_pages, $theme_thumb_tab_tmpl) : '';
    // The sort order options are not available for meta albums
    if ($sort_options) {
        $param = array('{ALBUM_NAME}' => $album_name,
            '{AID}' => $aid,
            '{PAGE}' => $page,
            '{NAME}' => $lang_thumb_view['name'],
            '{TITLE}' => $lang_thumb_view['title'],
            '{DATE}' => $lang_thumb_view['date'],
            '{SORT_TA}' => $lang_thumb_view['sort_ta'],
            '{SORT_TD}' => $lang_thumb_view['sort_td'],
            '{SORT_NA}' => $lang_thumb_view['sort_na'],
            '{SORT_ND}' => $lang_thumb_view['sort_nd'],
            '{SORT_DA}' => $lang_thumb_view['sort_da'],
            '{SORT_DD}' => $lang_thumb_view['sort_dd'],
            '{POSITION}' => $lang_thumb_view['position'],
            '{SORT_PA}' => $lang_thumb_view['sort_pa'],
            '{SORT_PD}' => $lang_thumb_view['sort_pd'],
            );
        // MOD - begin
        $param['{ALBUM_NAME}'] .= '&nbsp;<a href="zip.php?aid=' . $aid . '" title="Download album as *zip archive">[ Download Album ]</a>';
        // MOD - end
        $title = template_eval($template_thumb_view_title_row, $param);
    } else if ($aid == 'favpics' && $CONFIG['enable_zipdownload'] == 1) { //Lots of stuff can be added here later
       $param = array('{ALBUM_NAME}' => $album_name,
                             '{DOWNLOAD_ZIP}'=>$lang_thumb_view['download_zip']
                               );
       $title = template_eval($template_fav_thumb_view_title_row, $param);
    }else{
        $title = $album_name;
    }


    if ($mode == 'thumb') {
        starttable('100%', $title, $thumbcols);
    } else {
        starttable('100%');
    }

    echo $header;

    $i = 0;
    foreach($thumb_list as $thumb) {
        $i++;
        if ($mode == 'thumb') {
            if ($aid == 'lastalb') {
                $params = array('{CELL_WIDTH}' => $cell_width,
                    '{LINK_TGT}' => "thumbnails.php?album={$thumb['aid']}",
                    '{THUMB}' => $thumb['image'],
                    '{CAPTION}' => $thumb['caption'],
                    '{ADMIN_MENU}' => $thumb['admin_menu']
                    );
            } else {
                $params = array('{CELL_WIDTH}' => $cell_width,
                    '{LINK_TGT}' => "displayimage.php?album=$aid$cat_link&amp;pos={$thumb['pos']}$uid_link",
                    '{THUMB}' => $thumb['image'],
                    '{CAPTION}' => $thumb['caption'],
                    '{ADMIN_MENU}' => $thumb['admin_menu']
                    );
            }
        } else {
            $params = array('{CELL_WIDTH}' => $cell_width,
                '{LINK_TGT}' => "index.php?cat={$thumb['cat']}",
                '{THUMB}' => $thumb['image'],
                '{CAPTION}' => $thumb['caption'],
                '{ADMIN_MENU}' => ''
                );
        }
        echo template_eval($thumb_cell, $params);

        if ((($i % $thumbcols) == 0) && ($i < count($thumb_list))) {
            echo $row_separator;
        }
    }
    for (;($i % $thumbcols); $i++) {
        echo $empty_cell;
    }
    echo $footer;

    if ($display_tabs) {
        $params = array('{THUMB_COLS}' => $thumbcols,
            '{TABS}' => $tabs_html
            );
        echo template_eval($tabs, $params);
    }

    endtable();
    echo $spacer;
}

Fertig.

Trackbacks

Keine Trackbacks

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

Starlight am :

Funktioniert bei mir nicht.
Bei mir kommt dann eine Syntax Error Fehlermeldung. =(

Frank am :

Hmmm, wie soll ich Dir denn jetzt helfen? "Syntax Error Fehlermeldung" ist leider nicht sehr aussagekräftig. Auf jeden Fall scheint sich irgendwo ein Fehler versteckt zu haben. Schon einmal versucht den verlinkten Thread aus dem Coppermine Forum zu überfliegen und eventuell diesen Code zu nutzen?

Gruß. Frank.

Michi am :

Hi,

ich hab versucht das bei mir einzubauen....
Sobald ich den Download-Button anklicke kommt eine Meldung

Access denied for web942 (username) @localhost, using passwort "NO"

Obwohl ich aber das Passwort zur DB eingegeben habe.

Kannst mir da helfen?
Habe die CPG 1.4

Danke + Gruß
Michi

Frank am :

@ Michi

Normalerweise holt sich das Skript die Zugangsdaten zur Datenbank aus der config.inc.php. Hast Du mal überprüft, ob der Pfad zur besagten Datei stimmt? Existiert der Ordner zipfiles und wenn ja, welche Rechte hat er? Die pclzip.lib.php Datei ist auch dort wo sie hingehört? Falls das alles passt, könnte es noch sein das Dein Hoster auf dem Server kein zip Download ermöglicht.

Aber ich sehen gerade, das der verlinkte Thread nicht mehr aktuell ist. Am besten schaust Du Dir mal das hier an! Damit bist Du auf der sicheren Seite! ;-)

Eventuell werde ich mal einen neuen Eintrag zum Thema verfassen.

Gruß. Frank.

Michi am :

Hi Frank!!
Ich danke Dir. War der Beweis, dass ich davon leider sehr wenig Ahnung habe.
ich dachte ich muss in dem code oben die Daten zur Datenank eingeben.
Nachdem ich den code so gelassen habe wie er oben steht zieht er nun anscheinend die Daten aus der Config.inc.php


soweit ich weiss werden vom Hoster ZIPs unterstützt. Der Ordner zipfiles ist auch da mit den Rechten 777.

Leider taucht ein neuer Fehler auf:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM `cpg14x_pictures` where `aid` =' at line 1

hast du da Rat?
Wär toll!

Gruß
Michi

Frank am :

Tja, ohne den Quellcode zusehen, würde ich mal vermuten, das es irgendein Problem der Syntax ist und zwar in dieser Zeile:

$sql = 'SELECT FROM `'.$CONFIG['TABLE_PREFIX'].'pictures` where `aid` = ' . $aid;

Aber, wie ich vorhin schon erwähnt hatte, würde ich Dir aus Sicherheitsgründen raten die nachfolgende Version einzubauen! Hier nochmal der Link zum passenden Forumbeitrag!

Michi am :

ok, auf jeden Fall vielen Dank!
ich wühl mich dann da heut abend mal durch und versuch das mal einzubauen..

Merci!
Gruß
Michi

Andy am :

Hallo,

ich habe jetzt im Classic Theme alles so eingebaut wie Du beschrieben hast, leider kommt bei mir wenn ich auf Download Album klicke:
Parse error: syntax error, unexpected '/' in /home125b/sub003/sc69352-CBAR/www/Coppermine/zip.php on line 4

Woran könnte dieses liegen?

Danke

Frank am :

Genaugenommen hast Du die Antwort schon selber geschrieben ... Parse Error in Zeile 4 der zip.php. Vermutlich ein Zeichen zu wenig in besagter Zeile ... Semikolon gesetzt?

Andy am :

Hallo,

ich habe die zip.php nochmals neu erstellt, diesmal mit "nvu" und danach die zip.php mit dieser neuen auf dem Server überschrieben.
Wenn ich jetzt auf Download klicke wird mir der Quelltext der zip.php angezeigt...
In dem Theme ist der Text hinzugefügt, ebenso hatte ich die eine php Datei gedownloadet und auch in das Rootverzeichnis von Coppermine überspielt...

Gruß
Andy

Frank am :

Dann würde ich das gerade nochmal machen, denn aus irgendeinem Grund wird die PHP Datei nicht geparst. Syntax scheint okay. Vielleicht ein Problem des Webservers oder sonstige Einschränkungen ... hast Du schon einmal bei Deinem Hoster nachgefragt? Die haben wesentlich mehr Möglichkeiten den Fehler genau zu lokalisieren.

Kommentar schreiben

Umschließende Sterne heben ein Wort hervor (*wort*), per _wort_ kann ein Wort unterstrichen werden.
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
BBCode-Formatierung erlaubt
:'(  :-)  :-|  :-O  :-(  8-)  :-D  :-P  ;-) 
Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.

Um maschinelle und automatische Übertragung von Spamkommentaren zu verhindern, bitte die Zeichenfolge im dargestellten Bild in der Eingabemaske eintragen. Nur wenn die Zeichenfolge richtig eingegeben wurde, kann der Kommentar angenommen werden. Bitte beachten Sie, dass Ihr Browser Cookies unterstützen muss, um dieses Verfahren anzuwenden.
CAPTCHA

Formular-Optionen