Seite 1 von 1

Bildergalerie: Problem mit Bildbeschreibung und Medienname

Verfasst: Do 5. Nov 2009, 12:11
von kooogel
Hallo!

Ich habe folgendes Problem: Für einen Kunden habe ich Contenido 4.8.12 eingerichtet und die Standard-Bildgalerie verwendet. Bilder & Thumbs werden auch wie gewünscht angezeigt. Soweit so gut! Allerdings möchte ich gern unter dem Bild sowohl den MEDIENNAME als auch die DESCRIPTION ausgeben. Leider kommt aber über dem Bild nur
{DESCRIPTION}
{MEDIANAME}
Unter dem Bild wird zwar die Description angezeigt, aber der Medienname nicht. Kurios, oder?
Hat jemand eine Ahnung, woran das liegen könnte?

Und hier der Code vom Modul Output:

Code: Alles auswählen

<?php

/***********************************************
* Bildergalerie Output mit Vor/Zurück
*
* Author      :     Timo A. Hummel
* Copyright   :     four for business AG
* Created     :     30-09-2005
* modified    :      19.02.2006 Klövekorn (vor und zurück in der Bilderansicht)
************************************************/

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

/* Gallery variables */
$bRecursive = false;

$sPath = "CMS_VALUE[5]";
if ($sPath=='') {
   $sPath = $cfgClient[$client]["path"]["frontend"] . $cfgClient[$client]["upl"]["frontendpath"] . "bildergalerie/";
} else {
   $sPath = $cfgClient[$client]["path"]["frontend"] . $cfgClient[$client]["upl"]["frontendpath"] . "CMS_VALUE[5]";
}
/*
$iRows = "CMS_VALUE[3]";
if ($iRows == 0)
{$iRows = 2;}
$iColumns = "CMS_VALUE[2]";
if ($iColumns == 0) {$iColumns = 2;}
*/

/*

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


$iWidth = "CMS_VALUE[0]";
$iHeight = "CMS_VALUE[1]";
if ($iWidth == 0) {$iWidth = 300;}
if ($iHeight == 0) { $iHeight = 300;}
$iDetailWidth = "CMS_VALUE[4]";
if ($iDetailWidth == 0) {$iDetailWidth = 300;}
$aValidExtensions = array("jpg", "jpeg", "gif", "png");
$iImagesPerPage = $iRows * $iColumns;



//aus dem ersten REQUEST-Teil verschobener Code:

   $aGalleryFiles = scanDirectory($sPath, $bRecursive);
   
        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]);
                    }
                  } //ende foreach
   
              /* Calculate effective variables */
              $iFileCount = count($aGalleryFiles); //die anzahl der bilder
             // $iPages = ceil($iFileCount / $iImagesPerPage); //liefert die Ganzzahl, die gleich oder größer  Number ist

               $aImagesToDisplay = array_slice($aGalleryFiles, ($iCurrentPage - 1) * $iFileCount,$iFileCount);//$iImagesPerPage, $iImagesPerPage);
                 
               $oImageTpl = new Template;
               $oGalleryTpl = new Template;
               $oEmptyImageTpl = new Template;
   
             $aRenderedImages = array();
   
             $iRow = 0;
              $iImagesRendered = 0;
           
              $i = 0;
         }     

//ende verschobener Code






/* Read all gallery files */
     
              foreach ($aImagesToDisplay as $sImageToDisplay)
                   {// Do Scaling
                   
                               
                                     $sScaledImage = cApiImgScale($sImageToDisplay, $iWidth, $iHeight);
                                     // setzt den Link zusammen um auf die Großansicht zu gehen: "front_content.php/.../view=...
                                     //$link = 'front_content.php?idcat='.$idcatart.'&start='.$_REQUEST['start'].'&view='.urlencode(str_replace($cfgClient[$client]['path']['frontend'],'',$sImageToDisplay));
$link = 'front_content.php?idcat='.$idcatart.'&view='.urlencode(str_replace($cfgClient[$client]['path']['frontend'],'',$sImageToDisplay));

$media_name = ig_getMedienName($sImageToDisplay);

                                     //macht den textlink:
                                     $description = ig_getImageDescription($sImageToDisplay);
                                     if ($description=='')
                                        {
                                         $description = '&nbsp;';
                                         $array_des_pfades = explode("/",$sImageToDisplay);
                                         $bildname_pos = count($array_des_pfades)-1;   
                                        }

        
                                     //$download_link = str_replace($cfgClient[$client]['path']['frontend'],$cfgClient[$client]['path']['htmlpath'],$sImageToDisplay);



                                     $download_size = ig_GetReadableFileSize($sImageToDisplay);
             
                                     $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", "DESCRIPTION", $description);
                                     
         //$oImageTpl->set("s", "MEDIANAME", $media_name);
                                    
         $oImageTpl->set("s", "MEDIANAME", $media_name);
          $oImageTpl->set("s", "DOWNLOAD_LINK", $download_link);
                                     $oImageTpl->set("s", "DOWNLOAD_SIZE", $download_size);
                                     /*$oImageTpl->set("s", "DOWNLOAD_CAPTION", mi18n("runter laden"));*/
                                     $oImageTpl->set("s", "PREVIEW_CAPTION", mi18n("$array_des_pfades[$bildname_pos]"));

           
                                     $aRenderedImages[] = $oImageTpl->generate($cfgClient[$client]["path"]["frontend"] . "templates/gallery_image.html", true, false);   //Rendered Image ist das Thumbnailbild selbst

   
                                     $iImagesRendered++;
   
                                   
                                     if ($iImagesRendered == $iFileCount)//$iColumns)
                                         {
                                          $oGalleryTpl->set("d", "COLUMNS", implode("", $aRenderedImages));
                                          $oGalleryTpl->next();
                                          $iImagesRendered = 0;
                                          $aRenderedImages = array();
                                         }
                                                     
                       } //Ende foreach "scaling"
                     
                     
                     
                  // ohne diesen Block keine Thumbs:
                      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/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/gallery_link.html", true, false);
                         }

                      if ($iCurrentPage < $iPages)
                         {
                         $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/gallery_link.html", true, false);
                       }
                        */
   

   
                      //$oGalleryTpl->set("s", "NAVIGATION", implode("", $aLinks));
   
                       $oGalleryTpl->generate($cfgClient[$client]["path"]["frontend"] . "templates/gallery.html", false, false);
               // }
//generierung des Detailbildes


          // vorheriges/nächstes Bild bestimmen
          //das $_REQUEST analysieren:
          $request_view_uebergabe = $_REQUEST['view'];
          $requestpfad = explode('/', $request_view_uebergabe);
          $letztes_element_request = count($requestpfad)-1;
          $request_bild = $requestpfad[$letztes_element_request];
                   
         
          foreach ($aImagesToDisplay as $arrayelement)
          {
          //ins view-Format konvertieren:
          $pfadarray = explode('/', $arrayelement);
          $letztes_element = count($pfadarray)-1;
          $bild = $pfadarray[$letztes_element];
          $allebilder[] = $bild;
          }
         
          //Diese Funktion gibt den Index des aktuellen Bildes aus:
          function bildfinder($array)
          {
          global $request_bild;
          while(list($k,$val) = each($array))
                {
          if (preg_match("/$request_bild/",$val)) return $k;
                }
          return FALSE;
          }
         
          //Anwendung der Funktion bildfinder:
          $k = bildfinder($allebilder);
         
          $vorbildindex = $k-1;
          $nachbildindex = $k+1;
         
          if ($nachbildindex == $iFileCount) {$nachbildindex = 0;}
         if ($vorbildindex < 0) {$vorbildindex = $iFileCount-1;}   
       
         $vorbild = "upload/CMS_VALUE[5]/".$allebilder[$vorbildindex];
         $nachbild = "upload/CMS_VALUE[5]/".$allebilder[$nachbildindex];
       
          $vorbild = 'front_content.php?idcatart='.$idcatart.'&start='.$_REQUEST['start'].'&view='.urlencode(str_replace($cfgClient[$client]['path']['frontend'],'',$vorbild));
          $nachbild = 'front_content.php?idcatart='.$idcatart.'&start='.$_REQUEST['start'].'&view='.urlencode(str_replace($cfgClient[$client]['path']['frontend'],'',$nachbild));
   
 
          //ende vorher,nachher
         
         $sImageToDisplay = $cfgClient[$client]['path']['frontend'].$_REQUEST['view'];  //der pfad beginnt bei "kunden4c"
       
         $sScaledImage = cApiImgScale($sImageToDisplay, $iDetailWidth, 1000);

          #$description = $bild;//ig_getImageDescription($sImageToDisplay);
          $description = ig_getImageDescription($sImageToDisplay);
               
         if ($description=='')
                   {
                    $description = '&nbsp;';
                   }
         

     
     
         $download_link = str_replace($cfgClient[$client]['path']['frontend'],$cfgClient[$client]['path']['htmlpath'],$sImageToDisplay);
       
         $download_size = ig_GetReadableFileSize($sImageToDisplay);
   
         $oImageTpl = new Template;
         $oImageTpl->set("s", "IMG",$sScaledImage);
         //$oImageTpl->set("s", "BACKLINK",'front_content.php?idcat='.$idcat.'&idart='.$idart.'&start='.$_REQUEST['start']);
         $oImageTpl->set("s", "BACKCAPTION",mi18n("Übersicht"));
         #$oImageTpl->set("s", "DESCRIPTION", $request_bild);
         $oImageTpl->set("s", "DESCRIPTION", $description);
         $oImageTpl->set("s", "MEDIANAME", $media_name);
         $oImageTpl->set("s", "DOWNLOAD_LINK", $download_link);
         $oImageTpl->set("s", "DOWNLOAD_SIZE", $download_size);
         $oImageTpl->set("s", "ZURUECK", mi18n("Vorheriges Bild"));
         $oImageTpl->set("s", "WEITER", mi18n("Nächstes Bild"));
         $oImageTpl->set("s", "VORHERIGES", $vorbild);
         $oImageTpl->set("s", "NAECHSTES", $nachbild);
         /*$oImageTpl->set("s", "DOWNLOAD_CAPTION", mi18n("runter laden")); */
         //$oImageTpl->generate($cfgClient[$client]["path"]["frontend"] . "templates/gallery_detail.html", false, false);
         $oImageTpl->generate($cfgClient[$client]["path"]["frontend"] . "templates/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(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_GetReadableFileSize($path)
        {
        $filesize = filesize($path);
        $unit = "bytes";
         if ($filesize > 1024) {
        $filesize = ($filesize / 1024);
         $unit = "kB"; }
        if ($filesize > 1024) {
        $filesize = ($filesize / 1024);
           $unit = "MB"; }
         if ($filesize > 1024) {
        $filesize = ($filesize / 1024);
        $unit = "GB"; }
        if ($filesize > 1024) {
        $filesize = ($filesize / 1024);
        $unit = "TB"; }
   
        $filesize = round($filesize, 0);
         return $filesize." ".$unit;
        }
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 '';
    }
}
?>
Lieben Dank im Voraus!!

Re: Bildergalerie: Problem mit Bildbeschreibung und Medienname

Verfasst: Mo 9. Nov 2009, 20:10
von homtata
es könnte daran liegen, dass die platzhalter {MEDIANAME} usw. im html-modul-template nicht innerhalb des blocks liegen, der mit begin:block und end:block definiert ist... was mich im modul selbst zudem ein wenig irritiert ist die tatsache, dass der medienname und die description gleich mehrfach ausgelesen werden. normalerweise ist das nicht nötig, denke ich. man hat das array der anzeigbaren bilder, durchläuft es und weist jedem bild einmalig die nötigen ausgelesenen werte zu, übergibt die der template-steuerung und gut ist. ob das html-template die dann benutzt oder nicht, ist erstmal zweitrangig. vielleicht musst du daraufhin den modulcode nochmal intensiver durchackern.

nachtrag: ich seh grad, dass in der function für id_get_medianame der datenbankaufruf nicht zu stimmen scheint. dort steht:
SELECT description FROM ".$cfg["tab"]["upl"]." WHERE idupl = ".$idupl
es müsste m.E. aber heißen
SELECT medianame FROM ".$cfg["tab"]["upl"]." WHERE idupl = ".$idupl

Re: Bildergalerie: Problem mit Bildbeschreibung und Medienname

Verfasst: Di 10. Nov 2009, 13:45
von kooogel
nachtrag: ich seh grad, dass in der function für id_get_medianame der datenbankaufruf nicht zu stimmen scheint. dort steht:
SELECT description FROM ".$cfg["tab"]["upl"]." WHERE idupl = ".$idupl
es müsste m.E. aber heißen
SELECT medianame FROM ".$cfg["tab"]["upl"]." WHERE idupl = ".$idupl
Hallo homtata!

Diese Abfrage funktioniert aber auch nicht. Ich hab mich mal mit der DB auseinandergesetzt und gesehen, dass es in der Tabelle con_upl kein Feld mit der Bezeichnung medianame gibt. Dieses Feld existiert aber in der Tabelle con_upl_meta. Nun habe ich versucht, dieses Feld auszulesen mit einer leicht veränderten DB-Abfrage, aber auch die funzt nicht. Vielleicht könnt Ihr mir da weiterhelfen. Hier mal der Code:

Code: Alles auswählen

<?php

/***********************************************
* Bildergalerie Output mit Vor/Zurück
*
* Author      :     Timo A. Hummel
* Copyright   :     four for business AG
* Created     :     30-09-2005
* modified    :      19.02.2006 Klövekorn (vor und zurück in der Bilderansicht)
************************************************/

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

/* Gallery variables */
$bRecursive = false;

$sPath = "CMS_VALUE[5]";
if ($sPath=='') {
   $sPath = $cfgClient[$client]["path"]["frontend"] . $cfgClient[$client]["upl"]["frontendpath"] . "bildergalerie/";
} else {
   $sPath = $cfgClient[$client]["path"]["frontend"] . $cfgClient[$client]["upl"]["frontendpath"] . "CMS_VALUE[5]";
}
/*
$iRows = "CMS_VALUE[3]";
if ($iRows == 0)
{$iRows = 2;}
$iColumns = "CMS_VALUE[2]";
if ($iColumns == 0) {$iColumns = 2;}
*/

/*

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


$iWidth = "CMS_VALUE[0]";
$iHeight = "CMS_VALUE[1]";
if ($iWidth == 0) {$iWidth = 300;}
if ($iHeight == 0) { $iHeight = 300;}
$iDetailWidth = "CMS_VALUE[4]";
if ($iDetailWidth == 0) {$iDetailWidth = 300;}
$aValidExtensions = array("jpg", "jpeg", "gif", "png");
$iImagesPerPage = $iRows * $iColumns;



//aus dem ersten REQUEST-Teil verschobener Code:

   $aGalleryFiles = scanDirectory($sPath, $bRecursive);
   
        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]);
                    }
                  } //ende foreach
   
              /* Calculate effective variables */
              $iFileCount = count($aGalleryFiles); //die anzahl der bilder
             // $iPages = ceil($iFileCount / $iImagesPerPage); //liefert die Ganzzahl, die gleich oder größer  Number ist

               $aImagesToDisplay = array_slice($aGalleryFiles, ($iCurrentPage - 1) * $iFileCount,$iFileCount);//$iImagesPerPage, $iImagesPerPage);
                 
               $oImageTpl = new Template;
               $oGalleryTpl = new Template;
               $oEmptyImageTpl = new Template;
   
             $aRenderedImages = array();
   
             $iRow = 0;
              $iImagesRendered = 0;
           
              $i = 0;
         }     

//ende verschobener Code






/* Read all gallery files */
     
              foreach ($aImagesToDisplay as $sImageToDisplay)
                   {// Do Scaling
                   
                               
                                     $sScaledImage = cApiImgScale($sImageToDisplay, $iWidth, $iHeight);
                                     // setzt den Link zusammen um auf die Großansicht zu gehen: "front_content.php/.../view=...
                                     //$link = 'front_content.php?idcat='.$idcatart.'&start='.$_REQUEST['start'].'&view='.urlencode(str_replace($cfgClient[$client]['path']['frontend'],'',$sImageToDisplay));
$link = 'front_content.php?idcat='.$idcatart.'&view='.urlencode(str_replace($cfgClient[$client]['path']['frontend'],'',$sImageToDisplay));

#$media_name = ig_getMedienName($sImageToDisplay);


                                     //macht den textlink:
                                     /*$description = ig_getImageDescription($sImageToDisplay);
                                     if ($description=='')
                                        {
                                         $description = '&nbsp;';
                                         $array_des_pfades = explode("/",$sImageToDisplay);
                                         $bildname_pos = count($array_des_pfades)-1;   
                                        }*/

        
                                     //$download_link = str_replace($cfgClient[$client]['path']['frontend'],$cfgClient[$client]['path']['htmlpath'],$sImageToDisplay);



                                     $download_size = ig_GetReadableFileSize($sImageToDisplay);
             
                                     $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", "DESCRIPTION", $description);
                                     
         $oImageTpl->set("s", "MEDIANAME", $media_name);
                                    
         #$oImageTpl->set("s", "MEDIANAME", $media_name);
          $oImageTpl->set("s", "DOWNLOAD_LINK", $download_link);
                                     $oImageTpl->set("s", "DOWNLOAD_SIZE", $download_size);
                                     /*$oImageTpl->set("s", "DOWNLOAD_CAPTION", mi18n("runter laden"));*/
                                     $oImageTpl->set("s", "PREVIEW_CAPTION", mi18n("$array_des_pfades[$bildname_pos]"));

           
                                     $aRenderedImages[] = $oImageTpl->generate($cfgClient[$client]["path"]["frontend"] . "templates/gallery_image.html", true, false);   //Rendered Image ist das Thumbnailbild selbst

   
                                     $iImagesRendered++;
   
                                   
                                     if ($iImagesRendered == $iFileCount)//$iColumns)
                                         {
                                          $oGalleryTpl->set("d", "COLUMNS", implode("", $aRenderedImages));
                                          $oGalleryTpl->next();
                                          $iImagesRendered = 0;
                                          $aRenderedImages = array();
                                         }
                                                     
                       } //Ende foreach "scaling"
                     
                     
                     
                  // ohne diesen Block keine Thumbs:
                      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/gallery_empty.html", false, 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/gallery_link.html", false, false);
                         }

                      if ($iCurrentPage < $iPages)
                         {
                         $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/gallery_link.html", true, false);
                       }
                        */
   

   
                      //$oGalleryTpl->set("s", "NAVIGATION", implode("", $aLinks));
   
                       #$oGalleryTpl->generate($cfgClient[$client]["path"]["frontend"] . "templates/gallery.html", false, true);
                       $oGalleryTpl->generate($cfgClient[$client]["path"]["frontend"] . "templates/gallery_thumbs.html", false, false);
               // }
//generierung des Detailbildes


          // vorheriges/nächstes Bild bestimmen
          //das $_REQUEST analysieren:
          $request_view_uebergabe = $_REQUEST['view'];
          $requestpfad = explode('/', $request_view_uebergabe);
          $letztes_element_request = count($requestpfad)-1;
          $request_bild = $requestpfad[$letztes_element_request];
                   
         
          foreach ($aImagesToDisplay as $arrayelement)
          {
          //ins view-Format konvertieren:
          $pfadarray = explode('/', $arrayelement);
          $letztes_element = count($pfadarray)-1;
          $bild = $pfadarray[$letztes_element];
          $allebilder[] = $bild;
          }
         
          //Diese Funktion gibt den Index des aktuellen Bildes aus:
          function bildfinder($array)
          {
          global $request_bild;
          while(list($k,$val) = each($array))
                {
          if (preg_match("/$request_bild/",$val)) return $k;
                }
          return FALSE;
          }
         
          //Anwendung der Funktion bildfinder:
          $k = bildfinder($allebilder);
         
          $vorbildindex = $k-1;
          $nachbildindex = $k+1;
         
          if ($nachbildindex == $iFileCount) {$nachbildindex = 0;}
         if ($vorbildindex < 0) {$vorbildindex = $iFileCount-1;}   
       
         $vorbild = "upload/CMS_VALUE[5]/".$allebilder[$vorbildindex];
         $nachbild = "upload/CMS_VALUE[5]/".$allebilder[$nachbildindex];
       
          $vorbild = 'front_content.php?idcatart='.$idcatart.'&start='.$_REQUEST['start'].'&view='.urlencode(str_replace($cfgClient[$client]['path']['frontend'],'',$vorbild));
          $nachbild = 'front_content.php?idcatart='.$idcatart.'&start='.$_REQUEST['start'].'&view='.urlencode(str_replace($cfgClient[$client]['path']['frontend'],'',$nachbild));
   
 
          //ende vorher,nachher
         
         $sImageToDisplay = $cfgClient[$client]['path']['frontend'].$_REQUEST['view'];  //der pfad beginnt bei "kunden4c"
       
         $sScaledImage = cApiImgScale($sImageToDisplay, $iDetailWidth, 1000);

          #$description = $bild;//ig_getImageDescription($sImageToDisplay);
          $description = ig_getImageDescription($sImageToDisplay);
               
         if ($description=='')
                   {
                    $description = '&nbsp;';
                   }
                   
         $media_name = ig_getMedienName($sImageToDisplay);
               
         if ($media_name == '')
                   {
                    $media_name = '&nbsp;';
                   }
         

     
     
         $download_link = str_replace($cfgClient[$client]['path']['frontend'],$cfgClient[$client]['path']['htmlpath'],$sImageToDisplay);
       
         $download_size = ig_GetReadableFileSize($sImageToDisplay);
   
         $oImageTpl = new Template;
         $oImageTpl->set("s", "IMG",$sScaledImage);
         //$oImageTpl->set("s", "BACKLINK",'front_content.php?idcat='.$idcat.'&idart='.$idart.'&start='.$_REQUEST['start']);
         $oImageTpl->set("s", "BACKCAPTION",mi18n("Übersicht"));
         #$oImageTpl->set("s", "DESCRIPTION", $request_bild);
         $oImageTpl->set("s", "DESCRIPTION", $description);
         $oImageTpl->set("s", "MEDIANAME", $media_name);
         $oImageTpl->set("s", "DOWNLOAD_LINK", $download_link);
         $oImageTpl->set("s", "DOWNLOAD_SIZE", $download_size);
         $oImageTpl->set("s", "ZURUECK", mi18n("Vorheriges Bild"));
         $oImageTpl->set("s", "WEITER", mi18n("Nächstes Bild"));
         $oImageTpl->set("s", "VORHERIGES", $vorbild);
         $oImageTpl->set("s", "NAECHSTES", $nachbild);
         /*$oImageTpl->set("s", "DOWNLOAD_CAPTION", mi18n("runter laden")); */
         #$oImageTpl->generate($cfgClient[$client]["path"]["frontend"] . "templates/gallery_detail.html", false, false);
         $oImageTpl->generate($cfgClient[$client]["path"]["frontend"] . "templates/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(is_numeric($idupl))
           {//ID is a number
           $query = "SELECT description FROM ".$cfg["tab"]["upl_meta"]." 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_GetReadableFileSize($path)
        {
        $filesize = filesize($path);
        $unit = "bytes";
         if ($filesize > 1024) {
        $filesize = ($filesize / 1024);
         $unit = "kB"; }
        if ($filesize > 1024) {
        $filesize = ($filesize / 1024);
           $unit = "MB"; }
         if ($filesize > 1024) {
        $filesize = ($filesize / 1024);
        $unit = "GB"; }
        if ($filesize > 1024) {
        $filesize = ($filesize / 1024);
        $unit = "TB"; }
   
        $filesize = round($filesize, 0);
         return $filesize." ".$unit;
        }
function ig_getMedienName($idupl) {
    
    global $cfg, $cfgClient, $db, $client, $lang;
    
    $cApiClient = new cApiClient($client);
    $language_separator = $cApiClient->getProperty('language', 'separator');
    
    if(is_numeric($idupl)) {
        //ID is a number
        $query = "SELECT medianame 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 medianame FROM ".$cfg["tab"]["upl_meta"]." WHERE idupl = ".$idupl;
    }
    $db->query($query);
    if( $db->next_record() ) {
        return htmlspecialchars(urldecode($db->f("medianame")));
    } 
    else 
    {
        return '';
    }
}
?>
Achja, alle anderen Probleme sind gelöst, mir fehlt jetzt "nur" noch die Ausgabe des Mediennamens.

Re: Bildergalerie: Problem mit Bildbeschreibung und Medienname

Verfasst: Di 10. Nov 2009, 14:10
von homtata
okay, ich mache es inzwischen sogar komplett anders, auch um eine mehrfachverwendung über module hinweg zu ermöglichen.
die bildergalerie ermöglicht inzwischen mehrsprachigkeit, das bildet die alte getimagedesc-routine nicht ab.

ich habe eine datei "functions.getimagedesc.php" erstellt und in cms/includes abgelegt. inhalt:

Code: Alles auswählen

<?php
/**
 * Project: Viktor Lehmann lagert Dateifragmente aus
 * Contenido Content Management System
 * 
 * Description: Ausgelagerte Funktion zum Ermitteln der Bildbeschreibung
 * Ausgelagert, damit der mehrfache Aufruf pro Seite nicht zum Funktionsfehler führt
 * Die Datei wird in die Module nur noch mit require_once eingebunden.
 * 
 * Requirements: 
 * @con_php_req 5
 * 
 *
 * @package    Contenido Backend <Area>
 * @version    0.1
 * @author     unknown
 * @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
 * @since      file available since contenido release <Contenido Version>
 * @deprecated file deprecated in contenido release <Contenido Version>
 * 
 * 
 */

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 m.description, m.medianame, m.internal_notice, m.keywords, m.copyright 
        FROM " . $cfg["tab"]["upl"] . " u INNER JOIN " . $cfg["tab"]["upl_meta"] . " m
        ON u.idupl = m.idupl AND m.idlang = " . $lang . "
        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"))),
                     "internal" => htmlspecialchars(urldecode($db->f("internal_notice"))),
                     "keywords" => htmlspecialchars(urldecode($db->f("keywords"))),
                     "copyright" => htmlspecialchars(urldecode($db->f("copyright")))
                     );
#       return array("desc"  => urldecode($db->f("description")),
#                    "media" => htmlspecialchars(urldecode($db->f("medianame")))
#                    );
    } else {
        return '';
    }
}
?>
im modul lade ich diese datei mit:

Code: Alles auswählen

cInclude('frontend', 'includes/functions.getimagedesc.php');
und frage diese im laufe des moduls ungefähr so ab:

Code: Alles auswählen

$file_info = ig_getImageDescription($img_path);
dann enthält $file_info als array ALLE verfügbaren eigenschaften des bildes, soweit eingetragen, z.B.
$file_info["desc"] :: die beschreibung
$file_info["media"] :: den mediennamen
$file_info["internal"] :: die interne notiz
$file_info["keywords"] :: die schlüsselwörter
$file_info["copyright"] :: den copyright-eintrag

das reduziert die abfragen und aufrufe der funktion. für jede datei einmal durchlaufen lassen und auf die array-elemente zugreifen.

Re: Bildergalerie: Problem mit Bildbeschreibung und Medienname

Verfasst: Di 10. Nov 2009, 15:53
von kooogel
Yeeha!!!! Vielen vielen Dank für deine Hilfe!! Es läuft alles wie geschmiert.
Du bist ein Meister deines Faches!! :)

Re: Bildergalerie: Problem mit Bildbeschreibung und Medienname

Verfasst: Di 10. Nov 2009, 17:05
von kooogel
Hast du irgendeine Amazon-Wunschliste o.ä., so dass man mal etwas spenden kann ???

Re: Bildergalerie: Problem mit Bildbeschreibung und Medienname

Verfasst: Di 10. Nov 2009, 17:16
von idea-tec
kooogel hat geschrieben:Hast du irgendeine Amazon-Wunschliste o.ä., so dass man mal etwas spenden kann ???
COOL!!! Davon könnten sich einige andere mal eine Scheibe abschneiden!!!

Re: Bildergalerie: Problem mit Bildbeschreibung und Medienname

Verfasst: Di 10. Nov 2009, 17:58
von Oldperl
idea-tec hat geschrieben:COOL!!! Davon könnten sich einige andere mal eine Scheibe abschneiden!!!
Da kann ich mich nur anschließen. :-)

@homtata
Ich habe hier http://forum.contenido.org/viewtopic.ph ... 30#p137130 Quote- in Code-BBCode geändert. Bitte nur bei Zitaten quoten. Danke.

Gruß aus Franken

Ortwin

Re: Bildergalerie: Problem mit Bildbeschreibung und Medienna

Verfasst: Di 2. Nov 2010, 22:11
von Kucki
Hallo Zusammen!

Bin leider ein Newbie in Sachen php. Deshalb frage ich mal, ob wer die Picture Gallery so geändert hat, dass auch die Informationen aus der upl_meta (wie zB Medianame, Schlüsselwörter, Interne Notiz und Copyright) ausgelesen werden?
Meine Versuche sind leider alle gescheitert :cry:

Danke!

Re: Bildergalerie: Problem mit Bildbeschreibung und Medienna

Verfasst: Mi 3. Nov 2010, 06:51
von idea-tec
Hallo Kucki,
schaust du ein paar Einträge weiter oben nach... http://forum.contenido.org/viewtopic.ph ... 40#p137130 es dreht sich um den eintrag von homtata.

ok, für einen php-anfänger nicht einfach, aber da ist eigentlich alles drin, wenn ich mich auf die schnelle nicht verschaut habe.
diese funktion in den modul-output und an der richtigen stelle die funktion aufgerufen ... sollte hinhauen. ich hab es selbst noch nicht getestet

Re: Bildergalerie: Problem mit Bildbeschreibung und Medienna

Verfasst: Do 4. Nov 2010, 21:05
von Kucki
Hallo idea-tec!

Danke für die Information. Ich habe das Problem inzwischen lösen können. Dank deiner Hilfe!