it-swarm-id.com

Bagaimana Anda menambahkan kelas CSS ke array render?

Dalam file templat, sebelum print render($content['field_image']); Saya ingin menambahkan kelas CSS ke gambar di $content['field_image'] render array. Bagaimana saya bisa melakukan ini? Berikut ini render array:

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] => 
    )
)

Dan ini adalah output HTML:

<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>

Saya mencoba menambahkan kelas ke $content['field_image']['#attributes']['class'], tapi itu tidak berhasil.
Apakah Anda punya ide tentang bagaimana saya bisa mencapai apa yang saya coba lakukan?

6
Mark

Saya percaya itu akan:

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

Atau untuk menugaskannya ke setiap elemen,

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

Solusi di atas tidak bekerja untuk saya (dan tidak dijelaskan dengan jelas dalam hal apa pun). Inilah cara saya memecahkan masalah ini. Ini mungkin bukan cara terbaik, dan tentu saja bukan satu-satunya, tetapi ini adalah "cara Drupal" yang valid dan berfungsi. Buka file template.php untuk templat Anda.

Rekatkan pada fungsi berikut, yang harus Anda MODIFIKASI dan sesuaikan untuk skenario penggunaan Anda. Misalnya, Anda harus mengganti <TEMPLATENAME> Dengan nama templat Anda, dan menambah atau mengurangi kelas yang diinginkan, dan hal-hal lain, seperti yang akan Anda lihat.

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';
    }
}

Saya membuat pernyataan "jika" untuk menentukan kapan kelas harus ditambahkan ke gambar, tetapi Anda harus menyesuaikannya sesuka Anda - Anda mungkin menghilangkannya sepenuhnya jika Anda ingin kelas pada SEMUA gambar bidang gambar, atau Anda mungkin mengatakan if (drupal_is_front_page()) jika Anda hanya ingin itu diterapkan pada halaman depan, dll.

Dalam kasus SAYA, saya membuat gaya gambar (Konfigurasi> Media> Gaya Gambar) untuk Foto Staf dan menambahkan klausa if untuk hanya menerapkan kelas pilihan saya ke gambar Gaya Gambar yang ditentukan. Saya pikir itu cara yang bagus untuk melakukannya, tetapi Anda dapat melakukan apa yang Anda suka.

Sekarang, setiap kali saya melihat sebuah simpul yang berisi bidang-gambar dengan gaya gambar "Staff Photo," kelas-kelas secara ajaib muncul di tag IMG, yang persis seperti yang saya butuhkan.

4
Matt F

Masalah ini tampaknya diperbaiki di inti 7.23

Di simpul tpl tambahkan ini di atas:

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

Anda juga dapat melakukan sesuatu seperti ini:

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

Jika Anda memerlukan beberapa persyaratan untuk menerapkan kelas, Anda harus mengumpulkan informasi bidang halaman.

Anda dapat melakukannya dengan fungsi template_preprocess_field(&$variables).

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

Bagi Anda di "bidang - bidang-image.tpl.php," gunakan ini:

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

Saya mencari solusi yang serupa, tetapi untuk menata elemen input bentuk dan bukan gambar. Di dalam commerce_coupon.checkout_pane.inc khusus saya sertakan saya menambahkan array #attributes yang berisi kelas-kelas yang diperlukan.

Jadi, jika Anda mencari solusi modul terjerat daripada templat tertanam, ini mungkin merupakan alternatif yang baik.

Berjalan pada Drupal 7.39

  $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