web-gelistirme-sc.com

Oluşturma dizisine nasıl bir CSS sınıfı eklersiniz?

Bir şablon dosyasında, önce print render($content['field_image']);$content['field_image'] Render dizisindeki görüntüye bir CSS sınıfı eklemek istiyorum. Bunu nasıl yapabilirim? İşte render dizisi:

Array
(
[#theme] => field
[#weight] => 2
[#title] => Image
[#access] => 1
[#label_display] => hidden
[#view_mode] => full
[#language] => und
[#field_name] => field_image
[#field_type] => image
[#field_translatable] => 1
[#entity_type] => node
[#bundle] => ll_basic_page
[#object] => stdClass Object
[#items] => Array
    (
        [0] => Array
            (
                [fid] => 6777
                [alt] => alt text
                [title] => 
                [uid] => 1
                [filename] => imageFile.jpg
                [uri] => public://imageFile.jpg
                [filemime] => image/jpeg
                [filesize] => 28742
                [status] => 1
                [timestamp] => 1314312382
                [rdf_mapping] => Array
                    (
                    )
            )
    )
[#formatter] => image
[0] => Array
    (
        [#theme] => image_formatter
        [#item] => Array
            (
                [fid] => 6777
                [alt] => alt text
                [title] => 
                [uid] => 1
                [filename] => imageFile.jpg
                [uri] => public://imageFile.jpg
                [filemime] => image/jpeg
                [filesize] => 28742
                [status] => 1
                [timestamp] => 1314312382
                [rdf_mapping] => Array ()
            )
        [#image_style] => 
        [#path] => 
    )
)

Ve bu HTML çıktısı:

<div class="field field-name-field-image field-type-image field-label-hidden" thmr="thmr_96">
  <div class="field-items">
    <div class="field-item even">
      <span thmr="thmr_97">
        <span thmr="thmr_98">
          <img typeof="foaf:Image" src="http://..../sites/default/files/imageFile.jpg" alt="alt text" />
        </span>
      </span>
    </div>
  </div>
</div>

$content['field_image']['#attributes']['class'] 'A bir sınıf eklemeyi denedim, ama işe yaramadı.
Yapmaya çalıştığım şeyi nasıl başarabileceğim hakkında bir fikrin var mı?

6
Mark

Bunun olacağına inanıyorum:

$content['field_image'][0]['#attributes']['class'][] = 'my-class';

Veya her öğeye atamak için,

foreach (element_children($content['field_image'] as $key) {
  $content['field_image'][$key]['#attributes']['class'][] = 'my-class';
}
8
tim.plunkett

Yukarıdaki çözümler benim için işe yaramadı (ve hiçbir durumda açıkça tanımlanmadı). İşte tam olarak bu problemi çözme şeklim. Bu muhtemelen en iyi yol değil ve kesinlikle tek değil, ama geçerli bir "Drupal yolu" ve çalışıyor. Şablonunuz için template.php dosyasını açın.

Kullanım senaryosunuz için DEĞİŞTİRMEK ve özelleştirmeniz gereken aşağıdaki işlevi yapıştırın. Örneğin, <TEMPLATENAME> Yerine şablon adınızı koymalı ve sınıfları istediğiniz gibi ve gördüğünüz gibi başka şeyler eklemeli ya da çıkarmalısınız.

function <TEMPLATENAME>_preprocess_image(&$variables) {
    // If this image is of the type 'Staff Photo' then assign additional classes to it:
    if ($variables['style_name'] == 'staff_photo') {
        $variables['attributes']['class'][] = 'lightbox';
        $variables['attributes']['class'][] = 'wideborder';
    }
}

Sınıfın görüntüye ne zaman eklenmesi gerektiğini belirlemek için bir "if" ifadesi oluşturdum, ancak istediğiniz gibi özelleştirmeniz gerekecek - TÜM görüntü alanı görüntülerinde bir sınıf istiyorsanız tamamen ortadan kaldırabilirsiniz veya yalnızca ön sayfaya vb. uygulanmasını istiyorsanız if (drupal_is_front_page()) diyebilir.

Benim durumumda, Personel Fotoğrafları için bir görüntü stili (Yapılandırma> Medya> Görüntü Stilleri) oluşturdum ve tercih edilen sınıflarımı yalnızca belirtilen Görüntü Stilinin resimlerine uygulamak için if cümlesini ekledim. Bence bunu yapmanın harika bir yolu, ama ne istersen yapabilirsin.

Şimdi, "Staff Photo" görüntü stiline sahip bir görüntü alanı içeren bir düğümü her görüntülediğimde, sınıflar sihirli bir şekilde IMG etiketinde görünür.

4
Matt F

Bu sorun çekirdek 7.23'te giderilmiş gibi görünüyor

Tpl düğümünde bunu en üste ekleyin:

<?php
$content['field_name'][0]['#item']['attributes']['class'][] = 'your-class';
?>
2
FVANtom

Bunun gibi bir şey de yapabilirsiniz:

  $array['container']['#prefix'] = '<div id = "container">';
  $array['container']['#suffix'] = '</div>';
2
starsinmypockets

Sınıfı uygulamak için bazı koşullara ihtiyacınız varsa, sayfa alanları bilgilerini toplamanız gerekir.

Bunu template_preprocess_field(&$variables) fonksiyonuyla yapabilirsiniz.

template_preprocess_field(&$variables) {
  if ($variables['element']['#field_type'] == 'image') {
        $variables['items'][0]['#item']['attributes']['class'][] = 'your-class';
  }
}
0
Aporie

"Field - field-image.tpl.php" dosyasında olanlar için şunu kullanın:

$item['#item']['attributes']['class'][] = 'your-class';
0
ben.hamelin

Benzer bir çözüm arıyordum, ama bir görüntü değil, bir form giriş elemanı şekillendirmek için. Benim özelleştirilmiş commerce_coupon.checkout_pane.inc içinde gerekli sınıfları içeren bir #attributes dizi ekledim.

Dolayısıyla, şablon gömülü yerine modül dolaşmış bir çözüm arıyorsanız, bu iyi bir alternatif olabilir.

Drupal 7,39 üzerinde çalışıyor)

  $pane_form['coupon_add'] = array(
    '#type' => 'button',   
    '#value' => t('Add coupon'),    
    '#name' => 'coupon_add',    
    '#limit_validation_errors' => array(),    
    '#ajax' => array(    
      'callback' => 'commerce_coupon_add_coupon_callback',    
      'wrapper' => 'commerce-checkout-coupon-ajax-wrapper',    
    ),
    '#attributes' => array('class' => array('btn', 'btn-13')),
0
rawdesk.be