Jag vill göra en responsive design på en webbplats och allt funkar bra med Drupal förutom det där med att få bilderna att skala om sig beroende på bredden på fönstret. (http://www.alistapart.com/articles/responsive-web-design/)
En bild skall (för att den skall vara skalbar) inte ha en bestämd vidd och höjd utan visas i 100% storlek eller så stor som fönstret tillåter. Problemet är då att alla bilder ifrån tex. Imagecache visas med vidd och höjd utskrivet img-taggen. Hur får man bort det?
Jag antar att det är preprocessed functions som gäller men jag är inte alls hemma i det tänket och vet inte riktigt var jag ska börja. Jag har sökt och läst och kommer just nu inte vidare… Det närmaste jag har kommit är nog denna sida: http://cruncht.com/421/mobile-drupal-code men han sätter nya värden för vidd och höjd medan jag helt sonika vill ta bort det! Jag vill heller inte använda ett separat tema för mobiltelefoner utan låter bara css:en sköta så att sidan anpassar sig efter webbläsarens bredd.
Jag har också sett den utmärkta videon ifrån drupalcon sf 2010 "theme preprocess functions: an introduction" http://yadadrop.com/drupal-video/drupal-theme-preprocess-functions-intro...
Jag kan inte ens komma åt vad det är för hook jag skulle använda, jag vill åt samtliga bilder på sidan, inte bara en specifik bildtyp och jag vill inte ändra något annat än att ta bort vidd och höjd. Det här ser lovande ut: http://api.drupal.org/api/drupal/includes--image.inc/function/image_get_... men jag vet inte hur jag ska använda det…
- Kan man få fram en uppställning (array) för samtliga img-taggar så att man kan komma åt beståndsdelarna?
- Hur skulle man skriva en preprocessed function för att ta bort information inuti en tagg på hela sidan?
Jag tar tacksamt emot alla förslag – både på läsning såväl som mer konkreta lösningar på problemet. :)
Comments
Hej, Du ska använda
Hej,
Du ska använda preprocess i din template.php. I koden som jag bifogar ska du ändra dintema till namnet på din tema. Du ska även sätta FALSE på $getsize variabeln.
Efter det töm cachen. Nu kommer inte imagecache att lägga till height och width. Du kan såklart anpassa funktionen efter behov.
function dintema_imagecache($presetname, $path, $alt = '', $title = '', $attributes = NULL, $getsize = TRUE) {
// Check is_null() so people can intentionally pass an empty array of
// to override the defaults completely.
if (is_null($attributes)) {
$attributes = array('class' => 'imagecache imagecache-'. $presetname);
}
if ($getsize && ($image = image_get_info(imagecache_create_path($presetname, $path)))) {
$attributes['width'] = $image['width'];
$attributes['height'] = $image['height'];
}
$attributes = drupal_attributes($attributes);
$imagecache_url = imagecache_create_url($presetname, $path);
return '<img src="'. $imagecache_url .'" alt="'. check_plain($alt) .'" title="'. check_plain($title) .'" '. $attributes .' />';
}
Damir Hasakovic, Lixion
Tusen tack!
Så där skulle det se ut!
Du får jättegärna förklara lite hur du kom fram till vilka värden som hämtades och vad som kunde skrivas om (om du har tid förstås).
Kan man alltid ta sitt temanamn och modulnamnet och skapa en funktion med dem?
Hur kom du fram till $getsize? (Jag hade nog försökt med $getimagesize eftersom det är det enda jag hittat i dokumentationen)
Det Damir visar är
Det Damir visar är temafunktionen för imagecache. Funktionen han visar är hur den fungerar som standard. Din override skriver över hur funktionen normalt sett beter sig. Se förklaringen av funktionen. Du kan använda Theme developer för att finna vilken tema funktion som skriver ut olika element på din sajt.
//Pontus Nilsson, Digitalist
Tack igen!
Ja, jag förstår hur det hela fungerar, jag förstod bara inte hur man Damir fått fram informationen om vilket tema som används.
När jag klickar på en bild på sajten med "Themer info" aktiverad ser jag "theme_imagecache_formatter_linked". I Imagecache-foldern finns varken theme-folder eller tpl.php-fil.
Jag sökte då på http://api.drupal.org men där fanns inget om imagecache (kanske finns bara grundfunktonaliteten där?).
Jag sökte däremot aldrig på http://drupalcontrib.org – men efter att först ha sökt på imagechache och sedan läst igenom förklaringarna på listan hittade jag förstås theme_imagecache – Create and image tag for an imagecache derivative vilket ju var vad jag var ute efter.
Tack för att tog dig tid att förklara, man vill ju gärna förstå och inte bara göra… :)
När du skriver om funktionen
När du skriver om funktionen så lägger du till namn på din tema. Precis som jag visade i exemplet ovan. Du gör det för att funktionen ska endast vara giltig för din tema. Därför lägger man till den i template.php i samma mapp där dina övriga tema filer ligger. När funktionen ligger i själva modulen eller i Drupal core så blir den global oavsett vilken tema du använder. När du lägger till funktionen i template.php med dintema_imagecache så blir den endast tillgänglig för dig och din tema.
Hoppas det makes sense :)
Damir Hasakovic, Lixion