Posted by hs@henrikstrind... on March 11, 2010 at 2:28pm
När jag konfigurerar ett bildfält i CCK (FileField - ImageFiled - ImageCache - osv) kan jag välja att aktivera ett beskrivningsfält. Men det skrivs inte ut! Eller har jag missat nåt?
Motsvarande beskrivningsfält för uppladdad fil skrivs ut perfekt!
Inkonsekvent och opraktiskt. Bile ska bli bättre i Drupal 7, men får vi bildtexter?
Skapar man ett extra cck-fält för bildtexten så blir det problem om har mer än en bild, vilket diskuteras här: http://groups.drupal.org/node/23088
Det går att fixa med Contemplate, men väldigt omständigt och oflexibelt.
Ha det fint / Henrik

Comments
Ditt beskrivningsfält hamnar
Ditt beskrivningsfält hamnar i img-taggens title-attribut. Kolla HTML:en som genereras så kommer du att se något liknande
<img title="Min beskrivning" />. Att plocka ut det därifrån och visa det i klartext i anslutning till bilden är en uppgift för ditt tema.Har du ett eget tema eller använder du ett befintligt?
Tobias Sjösten
Jag tror att du tänker på
Jag tror att du tänker på "title", den där texten som visas efter några sekunder när användaren låter markören vila över bilden? På liknande sätt kan du ange alt-texten. Det tror jag att ImageField fixar.
Jag syftar på de globala inställningarna som kommer längst ner för filuppladdningar med cck. Om jag väljer att visa bilden som en nedladdningsbar fil istället för som en bild, så skrivs beskrivningen ut ifall det finns någon - annars filnamnet (jmfr om du har laddat upp en pdf).
Så det är tweakning att använda det fältet för bildtext. Vilket Thickbox faktiskt gör!
Det går med Content Template, det blir följande kod:
<?phpprint $item['data']['description']; // skriv ut beskrivningen under bilden
?>
Finns något smartare sätt?
Och blir det någon bildtext i D7?
Det är title jag tänkte
Det är title jag tänkte på.
Temafunktionen för imagefield_image genererar bara en img-tagg. Att också ta med en bildbeskrivning är antagligen lite känsligt eftersom utseendet är helt utelämnat till temat. Det finns inget semantiskt sätt att uttrycka det på och därför är chansen stor att resultatet inte blir som förväntat i den större delen av teman.
Vill man ha en text ovanför, under eller på bilden? Ska det se ut som en del av bilden eller ska texten ligga helt fristående? Det är mycket att tänka på och därför lämnas det valet upp till temat. Eller Content Template, för den delen. :)
Ett "smartare sätt" är att inte använda Content Template, av prestanda- och bekvämlighetsskäl (SCM). Jag föreslår att du istället skapar ett eget tema.
Tobias Sjösten
Intressant, vad närmare
Intressant, vad närmare precist föreslår du jag ska jag göra, en tpl-fil för varje innehållstyp som använder bilder eller kan man göra något som alltid skriver ut title-fältet under bilden oavsett i vilken innehållstyp bilden finns?
Vanligen skapar jag ett subtema till Zen eller modifierar Basic (strippat Zen). Sedan jag prövat skinr med just Basic så är jag förtjust i den kombinationen.
Så jag är inte främmande för att arbeta med teman, däremot inte skapa tema från grunden.
Gott! Subtema eller annat
Gott! Subtema eller annat duger gott. Det du behöver göra är att implementera theme_imagefield_image i ditt tema. Säg att temat heter hstrindb, då skulle din implementation se ut något så här:
function hstrindb_imagefield_image($file, $alt = '', $title = '', $attributes = NULL, $getsize = TRUE) {
$file = (array)$file;
if (!is_file($file['filepath'])) {
return '<!-- File not found: '. $file['filepath'] .' -->';
}
if ($getsize) {
// Use cached width and height if available.
if (!empty($file['data']['width']) && !empty($file['data']['height'])) {
$attributes['width'] = $file['data']['width'];
$attributes['height'] = $file['data']['height'];
}
// Otherwise pull the width and height from the file.
elseif (list($width, $height, $type, $image_attributes) = @getimagesize($file['filepath'])) {
$attributes['width'] = $width;
$attributes['height'] = $height;
}
}
if (!empty($title)) {
$attributes['title'] = $title;
}
// Alt text should be added even if it is an empty string.
$attributes['alt'] = $alt;
// Add a timestamp to the URL to ensure it is immediately updated after editing.
$query_string = '';
if (isset($file['timestamp'])) {
$query_character = (variable_get('file_downloads', FILE_DOWNLOADS_PUBLIC) == FILE_DOWNLOADS_PRIVATE && variable_get('clean_url', '0') == '0') ? '&' : '?';
$query_string = $query_character . $file['timestamp'];
}
$url = file_create_url($file['filepath']) . $query_string;
$attributes['src'] = $url;
$attributes = drupal_attributes($attributes);
return '<img '. $attributes .' />'. $file['data']['description'];
}
Stoppa den i template.php. Du behöver nog rensa cachen, så att temaregistret byggs om men sedan bör du kunna se beskrivningarna på dina bilder. Funktionen saknar hantering för bilder som saknar beskrivning men det ger en idé om hur du skulle kunna göra.
Tobias Sjösten
Tack för koden! Kul, jag ska
Tack för koden! Kul, jag ska prova!
Tack, funkar! Kul, du har
Tack, funkar! Kul, du har lärt mig nåt nytt, åsidosätta funktioner. Trevlig helg! Och vår! /Henrik
Gott! Kul att det löste sig.
Gott! Kul att det löste sig. :)
Tobias Sjösten