Sprachabhängige Beschreibung (Feld description) bei Bilder
Sprachabhängige Beschreibung (Feld description) bei Bilder
Hallo liebes Forum, ich riskiere es mal wieder einen Beitrag mit einer Bitte abzusenden. Ich hoffe ich frage nicht all zu dumm
Habe mal versucht in der Dateiverwaltung bei den Eigenschaften eines Bildes die Beschreibung einzugeben. Dann habe ich die Sprache gewechselt um die Beschreibung in der anderen Sprache auch zu ändern.
Aber siehe da ein Änderung in z.B. italienisch wirkt sich leider auch auf deutsch aus und umgekehrt. Somit kann ich leider nicht die Beschreibung sprachenabhängig eingeben.
Schade ich wollte nämlich unter den Bildern der Bildergalerie (Standardbildergaleriemodul) diese Beschreibung anzeigen lassen. Habe aber ein mehrsprachiges Projekt.
Wollte nun mal das Datenbankmodell (habe mir das Modell von 4.4.X angeschaut) durchschauen ob es von der Datenbank her überhaupt möglich ist die Beschreibung sprachenabhängig zu speichern. Ehrlich gesagt ich blicke da nicht durch .Habe nur die Tabelle con_upl gefunden und darin das Feld description aber wie das nun mit den Sprachen zusammenhängt bleibt meinen bescheidenen Kenntnissen leider verschlossen.
Kann mir jemand auf die Sprünge helfen? Ist es vom Datenmodel her überhaupt machbar? Wenn ja, wo also bei welchen Funktionen müsste ich da ansetzen? Ein Tipp der mich in die richtige Richtung bringt würde mir schon reichen.
Habe mal versucht in der Dateiverwaltung bei den Eigenschaften eines Bildes die Beschreibung einzugeben. Dann habe ich die Sprache gewechselt um die Beschreibung in der anderen Sprache auch zu ändern.
Aber siehe da ein Änderung in z.B. italienisch wirkt sich leider auch auf deutsch aus und umgekehrt. Somit kann ich leider nicht die Beschreibung sprachenabhängig eingeben.
Schade ich wollte nämlich unter den Bildern der Bildergalerie (Standardbildergaleriemodul) diese Beschreibung anzeigen lassen. Habe aber ein mehrsprachiges Projekt.
Wollte nun mal das Datenbankmodell (habe mir das Modell von 4.4.X angeschaut) durchschauen ob es von der Datenbank her überhaupt möglich ist die Beschreibung sprachenabhängig zu speichern. Ehrlich gesagt ich blicke da nicht durch .Habe nur die Tabelle con_upl gefunden und darin das Feld description aber wie das nun mit den Sprachen zusammenhängt bleibt meinen bescheidenen Kenntnissen leider verschlossen.
Kann mir jemand auf die Sprünge helfen? Ist es vom Datenmodel her überhaupt machbar? Wenn ja, wo also bei welchen Funktionen müsste ich da ansetzen? Ein Tipp der mich in die richtige Richtung bringt würde mir schon reichen.
ähm
wenn ich mir die db momentan so ansehe ist das feld description für mehrsprachigkeit nicht ausgelegt...
es ist auch nicht mit der con_lang verknüpft..
wenn ich mir die db momentan so ansehe ist das feld description für mehrsprachigkeit nicht ausgelegt...
es ist auch nicht mit der con_lang verknüpft..
*** make your own tools (wishlist :: thx)
Galeriebilder mit Texteingabefeld
Könnte man für die (Standard)bildergalerie ein Textfeld für Bildunterschriften zu den Thumbnails und in der Detailansicht ergänzen?
Ich habe auch das Problem der Mehrsprachigkeit bei Bildunterschriften und als Lösung könnte man auch ein Eingabefeld für Bildunterschriften zu den Bildern dazu gesellen und die Galerei wäre auch in anderen Sprachen einsetzbar.
Wie würde man das integrieren? Den Thumbnails ist ja ein HTML-Template zugeordnet. Habe intensiv versucht ein CMS_TEXT zu integrieren, komme aber mit dem Teil
"$aRenderedImages[] = $oImageTpl->generate($cfgClient[$client]["path"]["frontend"] . "templates/gallery_image.html", true, false);"
nicht ganz klar. Wie könnte ich da ein Textfeld einfügen?
Ich hab die folgende Galerie in Verwendung:
Input:
Output
Ich habe auch das Problem der Mehrsprachigkeit bei Bildunterschriften und als Lösung könnte man auch ein Eingabefeld für Bildunterschriften zu den Bildern dazu gesellen und die Galerei wäre auch in anderen Sprachen einsetzbar.
Wie würde man das integrieren? Den Thumbnails ist ja ein HTML-Template zugeordnet. Habe intensiv versucht ein CMS_TEXT zu integrieren, komme aber mit dem Teil
"$aRenderedImages[] = $oImageTpl->generate($cfgClient[$client]["path"]["frontend"] . "templates/gallery_image.html", true, false);"
nicht ganz klar. Wie könnte ich da ein Textfeld einfügen?
Ich hab die folgende Galerie in Verwendung:
Input:
Code: Alles auswählen
?><?php
/***********************************************
* Bildergalerie Input
*
* Author : Timo A. Hummel
* Copyright : four for business AG
* Created : 30-09-2005
************************************************/?>
<table>
<tr>
<td><?php echo mi18n("Breite");?></td>
<td><input type="text" name="<?php echo "CMS_VAR[0]"; ?>" value="<?php echo "CMS_VALUE[0]"; ?>"></td>
</tr>
<tr>
<td><?php echo mi18n("Höhe");?></td>
<td><input type="text" name="<?php echo "CMS_VAR[1]"; ?>" value="<?php echo "CMS_VALUE[1]"; ?>"></td>
</tr>
<tr>
<td><?php echo mi18n("Spalten");?></td>
<td><input type="text" name="<?php echo "CMS_VAR[2]"; ?>" value="<?php echo "CMS_VALUE[2]"; ?>"></td>
</tr>
<tr>
<td><?php echo mi18n("Zeilen");?></td>
<td><input type="text" name="<?php echo "CMS_VAR[3]"; ?>" value="<?php echo "CMS_VALUE[3]"; ?>"></td>
</tr>
<tr>
<td><?php echo mi18n("Breite Detailansicht");?></td>
<td><input type="text" name="<?php echo "CMS_VAR[4]"; ?>" value="<?php echo "CMS_VALUE[4]"; ?>"></td>
</tr>
<?php
$sql = "SELECT DISTINCT dirname FROM ".$cfg['tab']['upl']." ORDER BY dirname";
$db->query($sql);
echo '<tr><td>'.mi18n("Verzeichnis auswählen").'</td><td>
<select name="CMS_VAR[5]" size="1" style="width: 320px">
<option value="">'.mi18n("Nichts ausgewählt").'</option>';
while ($db->next_record()) {
if ( stristr($db->f("dirname"),'CVS/') === FALSE ) {
if ($db->f("dirname")=="CMS_VALUE[5]") {
echo '<option value="'.$db->f("dirname").'" selected="selected">'.$db->f("dirname").'</option>';
} else {
echo '<option value="'.$db->f("dirname").'">'.$db->f("dirname").'</option>';
}
}
}
echo '</select></td></tr>';?>
</table>
<?php
Output
Code: Alles auswählen
<?php
/***********************************************
* Bildergalerie Output
*
* Author : Timo A. Hummel
* Copyright : four for business AG
* Created : 30-09-2005
************************************************/
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;
if ($_REQUEST['view']=='') {
/* Read all gallery files */
$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]);
}
}
/* 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 */
$sScaledImage = cApiImgScale($sImageToDisplay, $iWidth, $iHeight);
$link = 'front_content.php?idcatart='.$idcatart.'&start='.$_REQUEST['start'].'&view='.urlencode(str_replace($cfgClient[$client]['path']['frontend'],'',$sImageToDisplay));
$description = ig_getImageDescription($sImageToDisplay);
if ($description=='') {
$description = ' ';
}
$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", "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("Bildvorschau"));
$aRenderedImages[] = $oImageTpl->generate($cfgClient[$client]["path"]["frontend"] . "templates/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/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);
}
} else {
$sImageToDisplay = $cfgClient[$client]['path']['frontend'].$_REQUEST['view'];
$sScaledImage = cApiImgScale($sImageToDisplay, $iDetailWidth, 1000);
$description = ig_getImageDescription($sImageToDisplay);
if ($description=='') {
$description = ' ';
}
$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("Zurück"));
$oImageTpl->set("s", "DESCRIPTION", $description);
$oImageTpl->set("s", "DOWNLOAD_LINK", $download_link);
$oImageTpl->set("s", "DOWNLOAD_SIZE", $download_size);
$oImageTpl->set("s", "DOWNLOAD_CAPTION", mi18n("runter laden"));
$oImageTpl->generate($cfgClient[$client]["path"]["frontend"] . "templates/gallery_detail.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;
}
?>
Code: Alles auswählen
Code: Alles auswählen
hi andreas,
ne, ist klar. aber ich müsste doch dynamisch verschiedene textfelder durch ein modul über eine schleife erzeugen können, in abhängigkeit von der anzahl der ausgelesenen galeriebilder.
oder denke ich da jetzt komplett falsch?
dann könnte ich sie nicht den thumbnails, die dargestellt werden, zuordnen?
hmm....
ne, ist klar. aber ich müsste doch dynamisch verschiedene textfelder durch ein modul über eine schleife erzeugen können, in abhängigkeit von der anzahl der ausgelesenen galeriebilder.
oder denke ich da jetzt komplett falsch?
dann könnte ich sie nicht den thumbnails, die dargestellt werden, zuordnen?
hmm....