Bagaimana cara saya menulis formatter bidang tambahan untuk bidang yang ada


9

Saya ingin menulis formatter bidang baru untuk jenis bidang yang ada. Saya tidak ingin mengganti pemformat yang ada tetapi menawarkan opsi baru.

Atau lebih baik saya menggunakan theme_preprocess_field () untuk melakukan perubahan kecil? Tapi ini tampaknya lebih sulit untuk dipertahankan dan saya ingin tetap membuka opsi editor konten saya (dan di GUI).

Dapatkah seseorang mengarahkan saya ke contoh cara yang tepat untuk melakukan ini?

Jawaban:


13

Secara pribadi saya akan mengatakan formatter adalah solusi yang lebih baik.

Hanya ada dua kait yang perlu Anda implementasikan:

Sebagai contoh:

function MYMODULE_field_formatter_info() {
  return array(
    'my_formatter' => array(
      'label' => t('My formatter'),
      // The important bit...
      'field types' => array('field_type'),
    ),
  );
}

function MYMODULE_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
  $settings = $display['settings'];
  $element = array();

  if ($display['type'] == 'my_formatter') {
    foreach ($items as $delta => $item) {
      $element[$delta] = array('#markup' => $item['value']);
    }
  }

  return $element;
}

Untuk tampilan yang lebih mendalam, unduh modul Contoh dan lihat field_example - ada banyak kode dan dokumentasi di sana untuk membantu Anda.


Anda juga mungkin tertarik untuk mengimplementasikan hook_field_formatter_settings_form dan hook_field_formatter_settings_summary sehingga Anda dapat memberi pengguna Anda beberapa opsi untuk mengubah cara bidang disajikan.
ndvo

2

Anda dapat mengembangkan modul khusus atau menggunakan modul "Pemformat khusus".

Dalam kasus pertama Anda harus menulis sebuah modul yang mengimplementasikan beberapa Drupal 7 kait: hook_field_formatter_info(), hook_field_formatter_view()dan hook_theme(). hook_field_formatter_info()Digunakan untuk mendeklarasikan tipe formatter. Fungsi ini mengembalikan array dengan deskripsi formatter. Kuncinya adalah nama formatter dan akan memiliki array dengan label dan jenis bidang. Setelah Anda harus menerapkan hook_field_formatter_view()dan hook_theme()untuk menentukan template. Anda dapat menemukan rincian lebih lanjut tentang API Formatter Feld di dokumen .

Dalam kasus kedua Anda dapat menggunakan modul Custom Formatters yang memungkinkan untuk membuat formatters tampilan kustom untuk setiap bidang. Dengan modul ini Anda dapat membuat formatter menggunakan kode PHP khusus atau kode HTML dengan token.

Saya menyarankan cara kedua karena sangat mudah digunakan dan dikonfigurasi.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.