4.8.8 + Lightbox + Medienname

Karlchen
Beiträge: 40
Registriert: Sa 4. Feb 2006, 02:02
Kontaktdaten:

4.8.8 + Lightbox + Medienname

Beitrag von Karlchen » Di 9. Sep 2008, 23:54

Hi zusammen,

habe folgendes Problemchen mit 4.8.8 und dem Medienname bei der Lightbox:
Die Mediennamen erscheinen nicht, wenn ich ein diese unter 4.8.8 neu eingebe - die Beschreibung erscheint jedoch.
Im Quelltext bekomme ich nur: title=" "

Mediennamen die ich bereits unter 4.8.7 eingab, erscheinen (immer noch) korrekt. Auch im Quelltext erschien der Titel: title="Landung"

Kann jemand diesen Fehler zufälligerweise reproduzieren und hat jemand evtl. eine Lösung?

Merci vorab viele Grüsse

Kalrchen

OliverL
Beiträge: 870
Registriert: Do 28. Jun 2007, 09:28
Kontaktdaten:

Beitrag von OliverL » Mi 10. Sep 2008, 07:46

Bitte trage noch den Modul-Namen oder den Output-Quelltext nach.

Ansonsten wird dir keiner helfen können(/wollen).

mfg OliverL

Karlchen
Beiträge: 40
Registriert: Sa 4. Feb 2006, 02:02
Kontaktdaten:

Beitrag von Karlchen » Mi 10. Sep 2008, 08:29

Merci, es geht um die Lightbox-Gallery 1.2.1 http://forum.contenido.org/viewtopic.php?t=14867

In der Dateiverwaltung wird der Medienname angezeigt und gespeichert, im Editor und im FE nicht, da steht im Quelltext nur: title=" "
Dies jedoch nur bei neu unter C4.8.8 beschrifteten Bildern.
Bilder, die ich bereits unter C4.8.7 betitelte, erscheinen korrekt mit dem Mediennamen.
Das fehlen des Medienname kam erst nach dem Update auf 4.8.8.

Merci und viele Grüsse

Karlchen

PS der Lightbox-Gallery 1.2.1 Output-Quelltext:

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"] . "bildergalerie/";
} 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 '';
    }
}
?>

Karlchen
Beiträge: 40
Registriert: Sa 4. Feb 2006, 02:02
Kontaktdaten:

Beitrag von Karlchen » Mi 10. Sep 2008, 10:07

Habe mal mit phpmyadmin in die Datenbank geschaut, habe jetzt mit C4.8.8 für die jedes Bild nur noch 2 Einträge in der con_properties protected, nämlich: protected und timemgmt
Unter 4.8.7 standen hier mehr Werte je Datei: medianame, medianotes, protected, copyright, timemgmt und keywords

Werden die gegenüber 4.8.7 fehlen Wert nun wo anders gespeichert?

GaMbIt_
Beiträge: 674
Registriert: Do 16. Mär 2006, 16:17
Kontaktdaten:

Beitrag von GaMbIt_ » Mi 10. Sep 2008, 16:39

In der Funktion get_MedienName() muss das SQL script ein bischen umgebaut werden...

Die gesuchten Infos finden sich jetzt nicht nur in der Tabelle $cfg['tab']['upl'] sondern auch in der Tabelle $cfg['tab']['upl_meta']

Ich hab das SQL mal ein bischen angepasst...

Code: Alles auswählen

$query = "SELECT u.description, m.medianame
        FROM " . $cfg["tab"]["upl"] . " u INNER JOIN " . $cfg["tab"]["upl_meta"] . " m
        ON u.idupl = m.idupl
        WHERE (u.dirname = '" . $dirname . "') AND (u.filename='" . $path_parts['basename'] . "') AND (u.filetype='" . $path_parts['extension'] . "')";
Erweiterung:
Ich habe die beiden Funktionen ein bischen umgebaut und sie in einer zusammengefasst... die Funktion gibt bei mir jetzt ein Array mit den Eigenschaften einer Datei aus... dazu müsste man aber das Modul ein bischen anpassen...

Für Bastler (!ungetestet!)

Code: Alles auswählen

function pl_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;
         $query= "SELECT u.description, m.medianame
        FROM " . $cfg["tab"]["upl"] . " u INNER JOIN " . $cfg["tab"]["upl_meta"] . " m
        ON u.idupl = m.idupl
        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'] . "')";
        
        $query = "SELECT u.description, m.medianame
        FROM " . $cfg["tab"]["upl"] . " u INNER JOIN " . $cfg["tab"]["upl_meta"] . " m
        ON u.idupl = m.idupl
        WHERE (u.dirname = '" . $dirname . "') AND (u.filename='" . $path_parts['basename'] . "') AND (u.filetype='" . $path_parts['extension'] . "')";

    }
    $db->query($query);
    if ($db->next_record()) {
#        return htmlspecialchars(urldecode($db->f("description")));
        return array("desc"  => htmlspecialchars(urldecode($db->f("description"))),
                     "media" => htmlspecialchars(urldecode($db->f("medianame")))
                     );
    } else {
        return '';
    }
}
Verbesserungen bitte melden :)

Karlchen
Beiträge: 40
Registriert: Sa 4. Feb 2006, 02:02
Kontaktdaten:

Beitrag von Karlchen » Mi 10. Sep 2008, 19:57

Hi GaMbIt_,

ganz herzlichen Dank, dass du dich meiner angenommen hast. Leider war ich aber erfolglos und bekomme einen: Fatal error: Call to undefined function ig_getImageDescription() in eval()'d code on line 635

Weisst du oder ein anderer Leser zufälligerweise, wie ich die Dateiverwaltung wieder so hinbiegen kann, dass ich meine Datenspeicherung in der con_properties wieder wie in der 4.8.7er hinbekomme?

Viele Grüsse

Karlchen

GaMbIt_
Beiträge: 674
Registriert: Do 16. Mär 2006, 16:17
Kontaktdaten:

Beitrag von GaMbIt_ » Mi 10. Sep 2008, 21:25

Öhm... wenn Du die von mir gepostete Funktion einbaust heisst die aber pl_getImageDescription()
:)

Aber meine Funktion gibt eben ein Array und nicht nur einen String aus...

ansonsten einfach nur das SQL Script etwas erweitern damit auch der Medienname mitabgefragt wird...

Karlchen
Beiträge: 40
Registriert: Sa 4. Feb 2006, 02:02
Kontaktdaten:

Beitrag von Karlchen » Do 11. Sep 2008, 08:47

Dachte es lag gestern an meiner Müdigkeit...
Habe eben nochmals versucht zu basteln und die function ig_getImageDescription und function ig_getMedienName entfernt und durch die function pl_getImageDescription ersetzt, leider erfolglos. Habe nun wieder einen Fatal error: Call to undefined function ig_getMedienName() in ...cms/front_content.php(952) : eval()'d code on line 632
Bin auch nochmals mit der Suche darüber und finde keinen ig_getMedienName im Modul...
Muss mich wohl im nächsten Leben etwas mehr mit PHP beschäftigen :?

salsa
Beiträge: 165
Registriert: Mi 27. Apr 2005, 15:47
Wohnort: Dortmund
Kontaktdaten:

Bug

Beitrag von salsa » Do 11. Sep 2008, 11:17

Dasselbe Problem ist bei der Picture Gallery des Beispielmandanten
und bei der I - F E K T G A L L E R Y by Daniel Smolcic.
Daraus schließe ich, dass der Fehler nicht im Galerie-Modul zu suchen ist, sondern dass es sich um einen "bug" handelt.
Wenn Informationen nicht in die Datenbank geschrieben werden, dann sind sie nicht vorhanden; dann kann man sie auch nicht abfragen.

GaMbIt_
Beiträge: 674
Registriert: Do 16. Mär 2006, 16:17
Kontaktdaten:

Beitrag von GaMbIt_ » Do 11. Sep 2008, 17:08

gagaga...

Call to undefined function bedeutet nur dass eine Funktion aufgerufen wird die nicht definiert ist... das heisst sie fehlt...

Die beiden Funktionen die Du rausgelöscht hast werden im oberen Teil des Codes aufgerufen...
Die von mir gepostete Funktion könnte diese ersetzen... man muss aber schon auch die Aufrufe anpassen...

und der gravierendste Unterschied ist eben der Ausgabewert der neuen Funktion...
Es wird nicht einfach ein "String" mit dem Mediennamen ausgegeben sondern ein Array mit Beschreibung und Medienname...

GaMbIt_
Beiträge: 674
Registriert: Do 16. Mär 2006, 16:17
Kontaktdaten:

Beitrag von GaMbIt_ » Do 11. Sep 2008, 17:29

ok ... lalala

tauscht doch mal diesen Code hier

Code: Alles auswählen

        $media_name = ig_getMedienName($sImageToDisplay); 
        
        $link_description = ig_getImageDescription($sImageToDisplay); 
gegen den hier aus...

Code: Alles auswählen

$media = pl_getImageDescription($sImageToDisplay);

$media_name = $media["media"];
$link_description = $media["desc"];

Karlchen
Beiträge: 40
Registriert: Sa 4. Feb 2006, 02:02
Kontaktdaten:

Beitrag von Karlchen » Do 11. Sep 2008, 17:49

Merci!!!
Nach deinem ersten Hinweis kam ich einen Schritt weiter. Der Fehler ist weg (Dank copy + paste habe ich auch noch die Fehlermeldung ins Modul kopiert *pein*)
Hatte allerdings unter jedem Foto nun "Array" stehen...
Werde nun den Kopf im Wald etwas frei joggen und mich dann an den nächsten Hinweis machen...

Karlchen
Beiträge: 40
Registriert: Sa 4. Feb 2006, 02:02
Kontaktdaten:

Beitrag von Karlchen » Do 11. Sep 2008, 21:17

GaMbIt_, ganz herzlich merci für die Hilfestellung und Lösung meines Problems! Es funktioniert bestens!!!
Den "$media =" hatte ich noch hinbekommen. Aber das Tüpfelchen auf dem 'I' war Austausch von "$link_description =" gegen deinen Code.
Weisst du warum wurde der Mediennamen nun in einer anderen Tabelle gespeichert wird?
Musst mir jetzt nur noch sagen, wo ich Flasche Wein oder das Bier hinschicken kann.

Viele Grüsse und nochmals Danke

Karlchen

GaMbIt_
Beiträge: 674
Registriert: Do 16. Mär 2006, 16:17
Kontaktdaten:

Beitrag von GaMbIt_ » Do 11. Sep 2008, 23:31

Flasche Wein :) das is ja fein :)

:P

Karlchen
Beiträge: 40
Registriert: Sa 4. Feb 2006, 02:02
Kontaktdaten:

Beitrag von Karlchen » Fr 12. Sep 2008, 09:46

Musst mir nur sagen welche Geschmacksrichtung, Farbe und wohin die Post gehen soll!!!

Gesperrt