Seite 1 von 2
4.8.8 + Lightbox + Medienname
Verfasst: Di 9. Sep 2008, 23:54
von Karlchen
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
Verfasst: Mi 10. Sep 2008, 07:46
von OliverL
Bitte trage noch den Modul-Namen oder den Output-Quelltext nach.
Ansonsten wird dir keiner helfen können(/wollen).
mfg OliverL
Verfasst: Mi 10. Sep 2008, 08:29
von Karlchen
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 = " ";
}
$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 '';
}
}
?>
Verfasst: Mi 10. Sep 2008, 10:07
von Karlchen
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?
Verfasst: Mi 10. Sep 2008, 16:39
von GaMbIt_
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

Verfasst: Mi 10. Sep 2008, 19:57
von Karlchen
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
Verfasst: Mi 10. Sep 2008, 21:25
von GaMbIt_
Ö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...
Verfasst: Do 11. Sep 2008, 08:47
von Karlchen
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

Bug
Verfasst: Do 11. Sep 2008, 11:17
von salsa
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.
Verfasst: Do 11. Sep 2008, 17:08
von GaMbIt_
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...
Verfasst: Do 11. Sep 2008, 17:29
von GaMbIt_
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"];
Verfasst: Do 11. Sep 2008, 17:49
von Karlchen
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...
Verfasst: Do 11. Sep 2008, 21:17
von Karlchen
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
Verfasst: Do 11. Sep 2008, 23:31
von GaMbIt_
Flasche Wein

das is ja fein

Verfasst: Fr 12. Sep 2008, 09:46
von Karlchen
Musst mir nur sagen welche Geschmacksrichtung, Farbe und wohin die Post gehen soll!!!