ฉันอ่านค่าฟิลด์และรูปแบบจากฐานข้อมูล ฉันจะแสดงค่าดังกล่าวด้วยรูปแบบได้อย่างไร
ฉันอ่านค่าฟิลด์และรูปแบบจากฐานข้อมูล ฉันจะแสดงค่าดังกล่าวด้วยรูปแบบได้อย่างไร
คำตอบ:
ในขณะที่คุณสามารถใช้เวลามากมายในการแยกวิเคราะห์วิธีการทำงานของ Field API คุณควรใช้ Field API โดยตรงเพื่อแสดงเนื้อหาของฟิลด์แทนที่จะทำการสืบค้นฐานข้อมูลด้วยตัวคุณเอง มีการห่อหุ้มและสิ่งที่เป็นนามธรรมจำนวนมากที่ถูกเพิ่มเข้าไปในทุ่งนาซึ่งจะปลุกพระเจ้าเก่าถ้าผ่านไป
การใช้ Field API หากคุณต้องการฟิลด์ที่จัดรูปแบบทั้งหมดพร้อมด้วยเลเบลและค่าทั้งหมดคุณต้องการใช้field_view_field()
:
$nid = 1;
$node = node_load($nid);
$output = field_view_field('node', $node, 'field_foo');
// $output is a render array, so it needs to be rendered first
print render($output);
หากคุณเพียงต้องการแสดงค่าการจัดรูปแบบของหนึ่งรายการในเขตข้อมูลคุณจำเป็นต้องใช้field_view_value()
ซึ่งเกี่ยวข้องกับ:
// Must load field content for entity before using field_view_value()
$fields = field_get_items('node', $node, 'field_foo');
// $index corresponds to the value you want to render. First value = 0.
$index = 0;
$output = field_view_value('node', $node, 'field_foo', $fields[$index]);
print render($output);
หากคุณต้องการใช้ตัวจัดรูปแบบอื่นที่ไม่ใช่ค่าเริ่มต้นที่ระบุสำหรับอินสแตนซ์ของฟิลด์ให้ส่งมันโดยใช้$display
พารามิเตอร์ในfield_view_field()
หรือfield_view_value()
:
$display = array('type' => 'my_formatter');
$output = field_view_field('node', $node, 'field_foo', $display);
โดยการตรวจสอบ api ฉันคิดว่าคุณกำลังมองหาสิ่งนี้ (ฉันยังไม่ได้ทดสอบโค้ด)
$the_field = field_view_field($entity_type, $entity, $field_name, $display = array(), $langcode = NULL);
// render the field
drupal_render($the_field);
อัปเดต: คำตอบที่ซ้ำกันอาจเพียงแค่ลบฉัน คำตอบอื่น ๆ โพสต์ในขณะที่ฉันเขียนคำตอบนี้
หากคุณใช้ตัวจัดรูปแบบที่กำหนดเองของโมดูลอย่าลืมเพิ่มคำนำหน้า 'custom_formatters_' หน้าชื่อ mashine ของตัวจัดรูปแบบของคุณดังนี้:
$display = array('type' => 'custom_formatters_my_formatter');
ดูเหมือนว่าคุณสามารถแก้ไขไฟล์เทมเพลตเพื่อปรับวิธีการแสดงผลทางความหมาย:
1) ตั้งค่าวันที่ที่กำหนดเองและกำหนดชื่อเครื่องเช่น "short_date_only" หรืออะไรก็ตาม 2) กำหนดค่าตัวเลือกการแสดงผลสำหรับชนิดเนื้อหาเพื่อใช้รูปแบบนั้น 3) แทนที่เทมเพลตฟิลด์เป็นบางอย่างเช่นฟิลด์ - field_date_custom-content_type.tpl
$index
(พารามิเตอร์ที่สามของ field_view_value ())คือ $ เดลต้า ในฟิลด์ค่าเดียวนี่จะเป็น 0 ดังนั้นคุณสามารถใช้$output = field_view_value('node', $node, 'field_foo', $fields[0]);
หรือ$output = field_view_value('node', $node, 'field_foo', $fields[$delta]);