Görüntü stiliyle oluşturulan Görüntüye CSS özelliği nasıl eklenir


10

Hemen hemen tüm başlıkta. Ben bir görüntü tarzı tema fonksiyonu ile oluşturulan görüntülere bir CSS sınıfları eklemek istiyorum, böylece çıktı benziyor:

<img class="MYCLASS" alt="" src="site.com/sites/default/files/styles/profile_picture/public/pictures/picture-1-1318455022.jpg" typeof="foaf:Image"> 

Bunun için yine de var mı?

Yanıtlar:


4

Temanızın template.php dosyasında tema işlevlerini geçersiz kılmak istiyorsanız, bir YOURTHEME_image_style () işlevi oluşturabilirsiniz:

http://api.drupal.org/api/drupal/modules--image--image.module/function/theme_image_style/7


Tema işlevinin şu an benim için hala çok bulanık olduğunu söylemeliyim. Her halükarda, bunu açıklığa kavuşturabilecek kaynaklara bir bağınız olur mu?
— silkAdmin

Buradaki fikir, bağlı sayfadaki kodu temanızın template.php dosyasına (temanızda yoksa, yap) kopyalamaktır. zen_image_style veya garland_image_style, vb. olabilir
— Ryan Price

4

İşte Ryan'ın cevabına dayanan bazı kodlar .

  1. Theme_image_style kodunu kopyalayıp temanızın template.php dosyasına yapıştırın .
  2. yerine themede theme_image_styleTemanızın adıyla.
  3. işleve aşağıdaki satırları ekleyin

      $variables['attributes'] = array(
          'class' => 'my-class',
      );

Bunun yerine 'my-class'gerçek stilin adını kullanmak istedim, $variables['style_name']bunun yerine kullandım . Resim stili adları her zaman geçerli css sınıf adlarıdır, bu nedenle bu yaklaşımla ilgili bir sorun olmamalıdır. İşlev şöyle görünmelidir:

function MYTHEME_image_style($variables) {
  // Determine the dimensions of the styled image.
  $dimensions = array(
    'width' => $variables['width'], 
    'height' => $variables['height'],
  );

  image_style_transform_dimensions($variables['style_name'], $dimensions);

  $variables['width'] = $dimensions['width'];
  $variables['height'] = $dimensions['height'];

  $variables['attributes'] = array(
    'class' => $variables['style_name'],
  );

  // Determine the url for the styled image.
  $variables['path'] = image_style_url($variables['style_name'], $variables['path']);
  return theme('image', $variables);
}

4

Önişleme işlevini kullan

JS / jQuery yoluyla ekleme yapmak dağınıktır ve içerik ajax yüklüyse kesilir.

function THEMENAME_preprocess_field(&$variables) {


    if($variables['element']['#field_name'] == 'field_photo'){

        foreach($variables['items'] as $key => $item){

            $variables['items'][ $key ]['#item']['attributes']['class'][] = 'img-circle';

        }

    }

}

Neden bunun için theme_image_style () kullanmıyorum

Bunu theme_image_style () ile yapmanın sorunu, sadece bir alan için çıkış işlevini geçersiz kılmasıdır, farklı yerlerde birden fazla alanınız varsa ... THEME_field__field_photo__team($variables)theme_image_style () kullanarak yukarıdaki ile aynı olan çok fazla şey şöyle görünür:

// Override the field 'field_photo' on the content type 'team'
function THEMENAME_field__field_photo__team($variables) {

    // Determine the dimensions of the styled image.
    $dimensions = array(
        'width' => $variables['width'],
        'height' => $variables['height'],
    );

    image_style_transform_dimensions($variables['style_name'], $dimensions);

    $variables['width'] = $dimensions['width'];
    $variables['height'] = $dimensions['height'];

    $variables['attributes'] = array(
        'class' => $variables['img-circle'],
    );

    // Determine the URL for the styled image.
    $variables['path'] = image_style_url($variables['style_name'], $variables['path']);
    return theme('image', $variables);

}

1
Kabul ediyorum, bir önişlemci kullanmak buraya gitmek için iyi bir yoldur. Alan önişlemcisi sayfa başına birçok kez çağrılabildiğinden, bunun yerine bir düğüm önişlemcisi kullanmaya ne dersiniz? 'Field_images' alanı için sınıfları ekleyebilirsiniz $variables['content']['field_images'][$key]['#item']['attributes']['class'][] = [your_css_class].
— mesch

Belki de bunu bir düğüm ön işlemcisi kullanarak çağırmak daha verimli olacaktır.
— Duncanmoo

1
Bu, Schema.org meta verilerine uymak için bir özellik eklememe yardımcı oldu. Teşekkürler!
— Patrick

1

Sınıfı eklemenin nedeni görüntüler için fazladan css sağlamaksa, dom ağacında bir üst seviyeye giderek bunu atlatabilirsiniz. Resimleriniz benzer bir sınıfa sahip bir alan divine dahil edilmelidir .field-type-image. Bunu göz önünde bulundurarak, görüntüleri seçen bir seçici yazabilirsiniz:
div.field-type-image img {border: 1px solid #ccc }

veya aşağıdakiler gibi daha spesifik bir örnek:

div.field-type-image div.field-items div.field-item img {border: 1px solid #ccc }


1

Bence bunu altyazılar için kullanmak istiyorsunuz. Etrafta çok av yaptıktan sonra Jquery kullanın. Bu şey Drupal 7 içindir.

js dosyanızı oluşturun. Buna caption.js deyin. Buna başka bir şey diyebilirsiniz. Temanızın içinde bir yerde saklayın.

Theme.info dosyanızı düzenleyip komut dosyaları ekleyerek komut dosyasının çağrıldığından emin olun [] = pathtoyourfile / caption.js

caption.js aşağıdaki kodu içermelidir

(function ($) {
Drupal.behaviors.caption = {
attach: function(context, settings) {
$('.views-field-field-useimage img').addClass('caption');
  }}})
(jQuery);

Kendi seçiciniz için .views-field-field-useimage img'yi değiştirin.

Boş önbellek düğmesine basın ve bir deneyin.


0

Bu cevap için bir öneri .

Değiştir

$variables['attributes'] = array(
  'class' => $variables['style_name'],
);

için

$variables['attributes']['class'][] = $variables['style_name'];

böylece resim stili adı sınıf dizisine eklenir ve hiçbir şey istemeden ezilmez.

Tam snippet:

function MYTHEME_image_style($variables) {
  // Determine the dimensions of the styled image.
  $dimensions = array(
    'width' => $variables['width'], 
    'height' => $variables['height'],
  );

  image_style_transform_dimensions($variables['style_name'], $dimensions);

  $variables['width'] = $dimensions['width'];
  $variables['height'] = $dimensions['height'];

  $variables['attributes']['class'][] = $variables['style_name'];

  // Determine the url for the styled image.
  $variables['path'] = image_style_url($variables['style_name'], $variables['path']);
  return theme('image', $variables);
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.