ฉันจะเขียนตัวจัดรูปแบบฟิลด์เพิ่มเติมสำหรับฟิลด์ที่มีอยู่ได้อย่างไร


9

ฉันต้องการเขียนตัวจัดรูปแบบฟิลด์ใหม่สำหรับประเภทฟิลด์ที่มีอยู่ ฉันไม่ต้องการแทนที่ตัวจัดรูปแบบที่มีอยู่ แต่เสนอตัวเลือกใหม่

หรือฉันควรใช้ theme_preprocess_field () เพื่อทำการเปลี่ยนแปลงเล็กน้อย แต่สิ่งนี้ดูเหมือนจะยากกว่าที่จะรักษาและฉันต้องการเปิดตัวแก้ไขเนื้อหาของฉันไว้ (และใน GUI)

ใครสามารถชี้ให้ฉันเป็นตัวอย่างของวิธีที่เหมาะสมในการทำสิ่งนี้?

คำตอบ:


13

โดยส่วนตัวผมจะบอกว่าฟอร์แมตเตอร์เป็นทางออกที่ดีกว่า

มีตะขอสองตัวเท่านั้นที่คุณต้องใช้:

ตัวอย่างเช่น:

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

หากต้องการข้อมูลเชิงลึกเพิ่มเติมให้ดาวน์โหลดโมดูลตัวอย่างและดู field_example - มีรหัสและเอกสารมากมายที่จะนำคุณไป


คุณอาจสนใจติดตั้ง hook_field_formatter_settings_form และ hook_field_formatter_settings_s บทสรุปเพื่อให้ผู้ใช้ของคุณมีตัวเลือกเพื่อเปลี่ยนวิธีการนำเสนอฟิลด์
ndvo

2

คุณสามารถพัฒนาโมดูลที่กำหนดเองหรือใช้โมดูล "Custom formatters"

ในกรณีแรกที่คุณต้องเขียนโมดูลซึ่งดำเนินการบางอย่าง Drupal 7 ตะขอ: hook_field_formatter_info(), และhook_field_formatter_view() ถูกใช้เพื่อประกาศชนิดตัวจัดรูปแบบ ฟังก์ชันนี้ส่งคืนอาร์เรย์ด้วยคำอธิบายการจัดรูปแบบ คีย์จะเป็นชื่อตัวจัดรูปแบบและจะมีอาร์เรย์ที่มีป้ายชื่อและประเภทเขตข้อมูล หลังจากที่คุณต้องนำไปใช้และเพื่อที่จะกำหนดแม่แบบ คุณสามารถค้นหารายละเอียดเพิ่มเติมเกี่ยวกับ F API ield ฟอร์แมตในเอกสารhook_theme()hook_field_formatter_info()hook_field_formatter_view()hook_theme()

ในกรณีที่สองคุณสามารถใช้โมดูลตัวจัดรูปแบบกำหนดเองซึ่งอนุญาตให้สร้างตัวจัดรูปแบบการแสดงผลแบบกำหนดเองสำหรับทุกฟิลด์ ด้วยโมดูลนี้คุณสามารถสร้างฟอร์แมตเตอร์โดยใช้โค้ด PHP ที่กำหนดเองหรือโค้ด HTML พร้อมโทเค็น

ฉันแนะนำวิธีที่สองเพราะใช้งานง่ายและกำหนดค่า

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.