lightbox-gallery - Bilder im Cache sind anders benannt

Gesperrt
steve04
Beiträge: 46
Registriert: Fr 5. Nov 2010, 20:26
Kontaktdaten:

lightbox-gallery - Bilder im Cache sind anders benannt

Beitrag von steve04 » Do 14. Jul 2011, 22:05

Hallo,

ich versuche gerade in einer Contenido 4.8.14-Installation (PHP 5.2.12) das Lightbox-Gallery Modul 1.2.1 von ittool zu installieren und habe ein seltsames Phänomen:

Unter http://www.kath-web.de/cms2/haus-eichho ... p?idcat=37 kann man sehen, und zwar nur im Quell-Code, dass da eine Übersicht ausgegeben wird. Allerdings werden keine Bilder angezeigt, weil die skalierten und gecachten Bilder andere Namen haben, als die im Quell-Code angegebenen.

Wenn ich die Bildergalerie verwende, die mit 4.8.14 im Demo-Mandanten geliefert wird, stimmen die Dateinamen der gecachten Bilder mit denen im Quell-Code überein.

Ich habe das Lightbox-Modul schon einige Male installiert und dieses Problem noch nie gesehen.
Hat jemand eine Idee?

Danke!
Stephan

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: lightbox-gallery - Bilder im Cache sind anders benannt

Beitrag von xmurrix » Mo 18. Jul 2011, 23:07

Hallo steve04,

überprüfe mal, ob das ausgewählte Upload-Verzeichnis auch wirklich im upload-Ordner (in cms/upload/) existiert und leere (leeren, nicht löschen) das cache-Verzeichnis des Mandanten (cms/cache/).

Irgend etwas passt da nicht...

Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

steve04
Beiträge: 46
Registriert: Fr 5. Nov 2010, 20:26
Kontaktdaten:

Re: lightbox-gallery - Bilder im Cache sind anders benannt

Beitrag von steve04 » Di 26. Jul 2011, 10:47

Hallo xmurrix,
xmurrix hat geschrieben:überprüfe mal, ob das ausgewählte Upload-Verzeichnis auch wirklich im upload-Ordner (in cms/upload/) existiert
Das kann man am Quelltext dieser Seite sehr schön nachvollziehen: Alle Bilder, die dort in den Links referenziert sind, kann man über den Browser aufrufen.
xmurrix hat geschrieben:und leere (leeren, nicht löschen) das cache-Verzeichnis des Mandanten (cms/cache/).
Das habe ich schon mehrfach gemacht.

Vielleicht gibt es hier ein Problem:
Ich habe diesmal eine weitere Contenido-Installation in ein und dieselbe Datenbank geschrieben, in der es schon eine gibt. Die alte Installation hat das Präfix con_ und die neue das Präfix con2_ bekommen. Vielleicht arbeitet ein Modul, Funktion o.ä. nicht sauber und holt sich für die zweite Installation die Werte z.B. für das Caching aus der ersten? Wäre eine Idee. Die Verzeichnisse sollten korrekt eingetragen sein. Wenn ich den Cache lösche und die Galerie aufrufe, liegt dort die korrekte Anzahl heruntergerechneter Grafiken, aber eben mit falschen Datei-Namen bzw. anderen als im Quell-Code erwartet wird.

Gruß,
Stephan

BagHira
Beiträge: 486
Registriert: Do 23. Feb 2006, 19:42
Wohnort: Tirschenreuth / Oberpfalz / Bayern
Kontaktdaten:

Re: lightbox-gallery - Bilder im Cache sind anders benannt

Beitrag von BagHira » Di 26. Jul 2011, 17:17

Servus Stephan,

poste doch mal den Output deines Moduls. Da oder bei deiner Installation/Konfiguration stimmt was nicht.

Auch der folgende Aufruf ist nicht original, sonder aus einer anderen Prototype-Version (hat aber jetzt erst einmal nichts mit deinem Problem zu tun):

Code: Alles auswählen

<script type="text/javascript" src="js/scriptaculous.js?load=effects,builder"></script>
Gruß Holger

Träumer haben vielleicht keinen Plan, aber Realisten haben keine Vision.

Handgewickelte Glasperlen Facebook Google+

steve04
Beiträge: 46
Registriert: Fr 5. Nov 2010, 20:26
Kontaktdaten:

Re: lightbox-gallery - Bilder im Cache sind anders benannt

Beitrag von steve04 » Mi 27. Jul 2011, 08:48

Hallo,
hier ist der Output-Teil des Moduls:

Code: Alles auswählen

<?php

cInclude("includes", "functions.api.images.php");

/* Gallery variables */
$bRecursive = false;

/* Input variables customized */
$iWidth_crop = "CMS_VALUE[7]";
$iHeight_crop = "CMS_VALUE[8]";
if ($iWidth_crop == 0) {
  $iWidth_crop = '';
}
if ($iHeight_crop == 0) {
  $iHeight_crop = '';
}
/* Cropping ? */
$iCrop = "CMS_VALUE[9]";

/* Input variables */
$iWidth = "CMS_VALUE[0]";
$iHeight = "CMS_VALUE[1]";
if ($iWidth == 0) {
  $iWidth = 300;
}
if ($iHeight == 0) {
  $iHeight = 300;
}

$iColumns = "CMS_VALUE[2]";
if ($iColumns == 0) {
  $iColumns = 2;
}

$iRows = "CMS_VALUE[3]";
if ($iRows == 0) {
  $iRows = 2;
}

$sPath = "CMS_VALUE[4]";
if ($sPath=='') {
    $sPath = $cfgClient[$client]["path"]["frontend"] . $cfgClient[$client]["upl"]["frontendpath"] . "rundgang/";
} else {
    $sPath = $cfgClient[$client]["path"]["frontend"] . $cfgClient[$client]["upl"]["frontendpath"] . "CMS_VALUE[4]";
}

$sort = "CMS_VALUE[5]";
if( $sort == "asc" ) {
    $sort = SORT_ASC;
} else {
    $sort = SORT_DESC;
}

$words = "CMS_VALUE[6]";

if (isset($start)) {
  $iCurrentPage = $start;
} else {
  $iCurrentPage = 1;
}

$aValidExtensions = array("jpg", "jpeg", "gif", "png");

$iImagesPerPage = $iRows * $iColumns;

/* Read all gallery files */
$aGalleryFiles = scanDirectory($sPath, $bRecursive);
array_multisort($aGalleryFiles, $sort, SORT_STRING);

if (is_array($aGalleryFiles)) {
    /* Filter out non-images */
    foreach ($aGalleryFiles as $key => $aGalleryFile) {
        $sExtension = strtolower(getFileExtension($aGalleryFile));
        if (!in_array($sExtension, $aValidExtensions)) {
            unset($aGalleryFiles[$key]);
        }
    }
    
    /* Calculate effective variables */
    $iFileCount = count($aGalleryFiles);
    $iPages = ceil($iFileCount / $iImagesPerPage);
    
    $aImagesToDisplay = array_slice($aGalleryFiles, ($iCurrentPage - 1) * $iImagesPerPage, $iImagesPerPage);
    
    $oImageTpl = new Template;
    $oGalleryTpl = new Template;
    $oEmptyImageTpl = new Template;
    
    $aRenderedImages = array();
    
    $iRow = 0;
    $iImagesRendered = 0;
    
    foreach ($aImagesToDisplay as $sImageToDisplay) {
        /* Do Scaling */

/* ### Customized - changes by GaMbIt ### */
/* Image scale */
$sScaledImage_cr = cApiImgScale($sImageToDisplay, $iWidth, $iHeight, false, false);
/* path */
$sScaledImage_cr = str_replace($cfgClient[$client]["path"]["htmlpath"],"",$sScaledImage_cr);
/* Image crop */
$sScaledImage = cApiImgScale($sScaledImage_cr, $iWidth_crop, $iHeight_crop, true, true);  
/* path */
$sScaledImage = str_replace($cfgClient[$client]["path"]["htmlpath"],"",$sScaledImage);
/* ### End custom changes by GaMbIt ### */

        
        $link = str_replace($cfgClient[$client]['path']['frontend'],$cfgClient['htmlpath'],$sImageToDisplay);
        
        $media_name = ig_getMedienName($sImageToDisplay);
        
        $link_description = ig_getImageDescription($sImageToDisplay);
        
        if ($words != "" || $words != 0) {
            # Cutting text but preserving words and entities
            if(strlen($link_description) > $words){
               $description = htmlentities(capiStrTrimAfterWord($link_description, $words)."...");
            } else {
               $description = "";
            }
        }
        
        if( $media_name != "" && $link_description != "") {
            $link_description = $media_name.': '.$link_description;
        } elseif( $media_name != "" ) {
            $link_description = $link_description;
        } elseif( $description != "" ) {
            $link_description = $link_description;
            $media_name = "&nbsp;"; 
        }
        
        $oImageTpl->reset();
        $oImageTpl->set("s", "FILE", $sScaledImage);
        $oImageTpl->set("s", "WIDTH", $iWidth);
        $oImageTpl->set("s", "HEIGHT", $iHeight);
        $oImageTpl->set("s", "LINK", $link);
        $oImageTpl->set("s", "MEDIANAME", $media_name);
        $oImageTpl->set("s", "DESCRIPTION", $description);
        $oImageTpl->set("s", "LINKDESCRIPTION", $link_description);
        
        $aRenderedImages[] = $oImageTpl->generate($cfgClient[$client]["path"]["frontend"] . "templates/lightbox-gallery_image.html", true, false);
        
        $iImagesRendered++;
        
        if ($iImagesRendered == $iColumns) {
            $oGalleryTpl->set("d", "COLUMNS", implode("", $aRenderedImages));
            $oGalleryTpl->next();
            $iImagesRendered = 0;
            $aRenderedImages = array();
        }
    }
    
    if (count($aRenderedImages) < $iColumns && count($aRenderedImages) > 0) {
        $iEmptyCells = $iColumns - count($aRenderedImages);
        
        $oEmptyImageTpl->set("s", "WIDTH", $iWidth);
        $oEmptyImageTpl->set("s", "HEIGHT", $iHeight);
        
        $sEmptyCells = str_repeat($oEmptyImageTpl->generate($cfgClient[$client]["path"]["frontend"] . "templates/lightbox-gallery_empty.html", true, false),$iEmptyCells);
        
        $oGalleryTpl->set("d", "COLUMNS", implode("", $aRenderedImages) . $sEmptyCells);
        $oGalleryTpl->next();
    }
    
    $aLinks = array();
    
    if ($iCurrentPage > 1) {
        $oPreviousTpl = new Template;
        $oPreviousTpl->set("s", "LINK", $cfgClient[$client]["path"]["htmlpath"] . sprintf("front_content.php?idcatart=%s&start=%s", $idcatart, $iCurrentPage - 1));
        $oPreviousTpl->set("s", "TITLE", mi18n("Zurück"));
        $aLinks[] = $oPreviousTpl->generate($cfgClient[$client]["path"]["frontend"] . "templates/lightbox-gallery_link.html", true, false);
    }
    
    if (($iCurrentPage < $iPages) && $iCurrentPage) {
        $oNextTpl = new Template;
        $oNextTpl->set("s", "LINK", $cfgClient[$client]["path"]["htmlpath"] . sprintf("front_content.php?idcatart=%s&start=%s", $idcatart, $iCurrentPage + 1));
        $oNextTpl->set("s", "TITLE", mi18n("Vor"));
        $aLinks[] = $oNextTpl->generate($cfgClient[$client]["path"]["frontend"] . "templates/lightbox-gallery_link.html", true, false);
    }
    
    $oGalleryTpl->set("s", "NAVIGATION", implode("", $aLinks));
    
    $oGalleryTpl->generate($cfgClient[$client]["path"]["frontend"] . "templates/lightbox-gallery.html", false, false);
}

function ig_getImageDescription($idupl){

    global $cfg, $cfgClient, $db, $client, $lang;
    
    $cApiClient = new cApiClient($client);
    $language_separator = $cApiClient->getProperty('language','separator');
    if ($language_separator == "") {
        //Sanity, if module used in client without set client setting
        $language_separator = "§§§";
        $cApiClient->setProperty('language','separator', $language_separator);
    }
    if(is_numeric($idupl)) {
        //ID is a number 
        $query = "SELECT description FROM ".$cfg["tab"]["upl"]." WHERE idupl = ".$idupl;
    } else {
        //ID is a string
        $path_parts = pathinfo($idupl);
        $upload = $cfgClient[$client]['upl']['frontendpath'];
        $len = strlen($upload);
        $pos = strpos($idupl,$upload);
        $dirname = substr($path_parts['dirname'],$pos+$len).'/';
        $query = "SELECT description FROM ".$cfg["tab"]["upl"]." WHERE (dirname = '".$dirname."') AND (filename='".$path_parts['basename']."') AND (filetype='".$path_parts['extension']."')";
    }
    $db->query($query);
    if($db->next_record()) {
        return htmlspecialchars(urldecode($db->f("description")));
    } else {
        return '';
    }
}

function ig_getMedienName($idupl) {
    
    global $cfg, $cfgClient, $db, $client, $lang;
    
    $cApiClient = new cApiClient($client);
    $language_separator = $cApiClient->getProperty('language','separator');
    if ($language_separator == "") {
        //Sanity, if module used in client without set client setting
        $language_separator = "§§§";
        $cApiClient->setProperty('language','separator', $language_separator);
    }
    if( is_numeric($idupl) ) {
        //ID is a number
        $query = "SELECT description FROM ".$cfg["tab"]["upl"]." WHERE idupl = ".$idupl;
    } else {
        //ID is a string
        $path_parts = pathinfo($idupl);
        $upload = $cfgClient[$client]['upl']['frontendpath'];
        $len = strlen($upload);
        $pos = strpos($idupl,$upload);
        $dirname = substr($path_parts['dirname'],$pos+$len).'/';
        $danis = $dirname.$path_parts['basename'];
        $query = "SELECT value FROM ".$cfg["tab"]["properties"]." WHERE itemid = '".$dirname.$path_parts['basename']."' AND name = 'medianame'";
    }
    $db->query($query);
    if( $db->next_record() ) {
        return htmlspecialchars(urldecode($db->f("value")));
    } else {
        return '';
    }
}
?>
Gruß,
Stephan

BagHira
Beiträge: 486
Registriert: Do 23. Feb 2006, 19:42
Wohnort: Tirschenreuth / Oberpfalz / Bayern
Kontaktdaten:

Re: lightbox-gallery - Bilder im Cache sind anders benannt

Beitrag von BagHira » Mi 27. Jul 2011, 18:07

Servus Stephan,

tut mir Leid, ich hab mir den Script angesehen, kann aber keinen Fehler feststellen :(

Das Einzigste was ich dir noch anbieten kann "vor Ort" drauf zu schauen. Dazu bräuchte ich aber alle Zugangsdaten (Contenido, MySql & FTP).
Wenn du das möchtest, dann aber die Daten nur PN.
Gruß Holger

Träumer haben vielleicht keinen Plan, aber Realisten haben keine Vision.

Handgewickelte Glasperlen Facebook Google+

steve04
Beiträge: 46
Registriert: Fr 5. Nov 2010, 20:26
Kontaktdaten:

Re: lightbox-gallery - Bilder im Cache sind anders benannt

Beitrag von steve04 » Mi 24. Aug 2011, 09:21

Neuer Anlauf:
Wenn ich im Modul-Template das img-Tag dahingehend ändere, dass dort nicht FILE sondern LINK eingesetzt wird, dann funktioniert das Modul. Die Bilder werden dann halt in Original-Größe eingebunden, was nicht schön ist, aber zeigt, dass die Implementierung des Moduls grundsätzlich funktioniert.

Es muss also, wie bereits im Anfang vermutet, an einer Routine liegen, die skalierte Bilder im Verzeichnis cache ablegt, oder einer, die die Dateinamen für die skalierten Bilder ausgibt. Das Modul gibt im Modul-Template lightbox-gallery_image.html mit FILE Dateinamen aus, die es im Verzeichnis /cache/ nicht gibt. Woher nimmt es die? Vielleicht hat da noch jemand eine Idee.

Der Zugriff auf das Verzeichnis /cache/ funktioniert. Nachdem ich es geleert habe, werden beim Aufruf der Übersichtsseite mit Lightbox-Gallery im Verzeichnis cache eine korrekte Zahl von JPG-Dateien abgelegt, nur eben mit anderen Namen als nachher FILE ausgibt. Die Dateien im Verzeichnis cache heißen:

Code: Alles auswählen

0f40de6a151092a4a32ce30d3c74142a.jpg
2a3629b5380267074d015a0f6ebf580c.jpg
4397f1e05ebad4b025247f31694bc0a6.jpg
8611789601a016824cb3a1b60f845def.jpg
91e4c4beb5fd11d7107e23ad3191025f.jpg
c3fd42bf6a97247adfe521b9fde0273b.jpg
c6a2e5b6c791234f11c1de38a517e712.jpg
dbf19572ba3cb94758c2e7bd5e0adc95.jpg
f733b88e157a62600e9efc37d411f3c1.jpg


und lassen sich auch über URL aufrufen, z.B. Bild 1
Unter http://www.kath-web.de/cms2/haus-eichho ... p?idcat=37 (Bilder werden über LINK aufgerufen) lässt sich aber sehen, dass andere Bildnamen mit FILE ausgegeben werden.

Wichtig wäre noch mal zur Erinnerung:
Ich habe in einer Datenbank zwei Installationen von Contenido. Die Tabellen haben das Präfix "con_" bzw "con2_" . Könnte das der Grund für die Probleme sein?
Wird vielleicht irgendwo, z.B. in cApiImgScale (das scheint das Modul Lightbox-Gallery aufzurufen), fest verdraht auf Tabellen mit con_ oder ohne Präfix zugegriffen?
Tut mir leid, das ist jetzt nicht sehr korrekt ausgedrückt, aber vielleicht ist es ja verständlich.

Vielen Dank!
Stephan

Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: lightbox-gallery - Bilder im Cache sind anders benannt

Beitrag von Spider IT » Mi 24. Aug 2011, 16:14

Hallo Stephan,

ich verstehe was du meinst, aber das kann es nicht sein.
Die Funktionalität, die das Modul verwendet, ist die von Contenido, zu finden in /contenido/includes/functions.api.images.php.
Darin gibt es keinen Datenbankzugriff und die Dateinamen werden sowohl zum speichern, als auch als Rückgabewert verwendet.
Es wird sogar auf den richtigen, für den Mandant eingestellten Cachepfad zugegriffen.
Der Fehler muss also woanders liegen.
Hast du dir schon mal Werte während der Ausführung im Modul per echo oder var_dump() ausgeben lassen?
Damit kannst du die Stelle, an der was schiefläuft, genau bestimmen.

Gruß
René

steve04
Beiträge: 46
Registriert: Fr 5. Nov 2010, 20:26
Kontaktdaten:

Re: lightbox-gallery - Bilder im Cache sind anders benannt

Beitrag von steve04 » Mi 24. Aug 2011, 22:01

Spider IT hat geschrieben:Hast du dir schon mal Werte während der Ausführung im Modul per echo oder var_dump() ausgeben lassen?
Damit kannst du die Stelle, an der was schiefläuft, genau bestimmen.
Nein, wie mache ich das? Einfach im Modul Zeilen einfügen, die Werte auf den Bildschirm schreiben?

Herzlichen Gruß,
Stephan

Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: lightbox-gallery - Bilder im Cache sind anders benannt

Beitrag von Spider IT » Do 25. Aug 2011, 07:51

Genau, um z.B. die Variable $sScaledImage zu prüfen (diese beinhaltet den Dateinamen) fügst du überall nach eine $sScaledImage = ... Zeile

Code: Alles auswählen

echo $sScaledImage . '<br />';
ein.
Dadurch wird dir im Frontend nach jede Änderung im Modul der Inhalt der Variable ausgegeben.
Möglich wäre auch

Code: Alles auswählen

echo 'Zeile x: ' . $sScaledImage . '<br />';
wobei x die Zeilennummer im Modul sein sollte (musst du von Hand eintragen), dann siehst du in welche Zeile es nicht mehr passt.

Gruß
René

Gesperrt