รับค่าของฟิลด์จากเอนทิตี


11

สิ่งที่ฉันติดตั้งบนไซต์ของฉันคือโมดูล Entity API และ Entityform โมดูล Entityform ช่วยให้ฉันสามารถสร้างฟอร์มที่ผู้ใช้สามารถส่งและเขตข้อมูลฟอร์มพร้อมให้ฉันใช้ในมุมมองคล้ายกับประเภทเนื้อหาที่จะทำงาน

โดยปกติแล้วจะดึงค่าของเขตข้อมูลจากโหนดไปยังแม่แบบของฉันด้วย php ฉันจะทำต่อไปนี้:

<?php echo $node->field_name[$node->language][0]['value']; ?>

อย่างไรก็ตามสิ่งนี้ไม่ทำงานกับเอนทิตี / เอนทิตี

ไม่มีใครรู้วิธีการทำเช่นนี้สำหรับเขตข้อมูลภายในเอนทิตี้ของ? บางคนแนะนำให้ใช้ฟังก์ชั่น devel และ dpm () แต่ฉันก็ไม่รู้ว่าจะใช้มันอย่างไร

ตัวอย่างเฉพาะบางประการเกี่ยวกับวิธีที่ฉันสามารถรับค่าของฟิลด์นี้จะช่วยฉันได้มากจริงๆ

คำตอบ:


13

คุณลองเข้าถึงค่าด้วยentity_metadata_wrapper แล้วหรือยัง?

$entityform_id = 12; // entity form id
$entityform = entityform_load($entityform_id);
$entityform_wrapper = entity_metadata_wrapper('entityform', $entityform);
// Access fields with $entityform_wrapper->field_name->value() or ->field_name->raw()
drupal_set_message($entityform_wrapper->field_my_field->value()); // for example

4
หมายเหตุสำหรับผู้อ่านในอนาคต: สิ่งนี้ถูกต้อง แต่ไม่จำเป็นต้องติดตั้งเอนทิตี API เพื่อเข้าถึงฟิลด์เอนทิตี Drupal core มีฟังก์ชั่นในการเข้าถึงฟิลด์เอนทิตีแล้ว
kiamlaluno

ใช่ แต่ติดแท็ก OP และระบุว่ามีการติดตั้งโมดูลเอนทิตี API ดังนั้นเอนทิตี _metadata_wrapper ยิ่งไปกว่านั้นมันก็ขึ้นอยู่กับโมดูลเอนทิตี้ของ
เดวิดโธมัส

2
entity-apiเป็นแท็กสำหรับ Entity API ที่นำมาใช้จาก Drupal 7 ไม่ใช่สำหรับโมดูล Entity API หมายเหตุคือเพื่อหลีกเลี่ยงการพัฒนาเริ่มต้นคิดว่าโมดูลเอนทิตี API เป็นสิ่งจำเป็นสำหรับการจัดการหน่วย ฉันไม่ได้บอกว่าคำตอบนั้นไม่ถูกต้อง :)
kiamlaluno

7

โดยไม่ต้องใช้โมดูล Entity API เพื่อให้ได้ค่าของเขตข้อมูลที่เกี่ยวข้องกับกิจการที่คุณใช้field_get_items () ; คุณเพิ่งผ่านประเภทเอนทิตีวัตถุเอนทิตีและชื่อฟิลด์

ตัวอย่างเช่นในการรับเนื้อหาของความคิดเห็นคุณใช้รหัสต่อไปนี้

if ($items = field_get_items('comment', $comment, 'comment_body')) {
  // ...
}

เพื่อให้ได้เนื้อความของโหนดคุณสามารถใช้รหัสต่อไปนี้

if ($items = field_get_items('node', $node, 'body')) {
  // ...
}

วัตถุนิติบุคคลเป็นวัตถุกลับมาจากentity_load ()หรือฟังก์ชั่นโหลดที่เฉพาะเจาะจงสำหรับนิติบุคคลที่เช่นnode_load () , comment_load ()หรือtaxonomy_term_load () ใน Drupal 8 entity_load()ฟังก์ชั่นเหล่านี้จะห่อสำหรับ

หากคุณต้องการที่จะแสดงเนื้อหาของข้อมูลแล้วคุณควรใช้field_view_field ()


0

ตามปกติคุณจะได้รับคุณสมบัติ $ node เพราะคุณหรือบางรหัสที่คุณใช้กำลังเรียก node_load () ไว้ล่วงหน้า

คุณต้องโหลดเอนทิตีอย่างเต็มที่ก่อนจึงจะสามารถรับคุณสมบัติได้

ใช้ entity_load () http://api.drupal.org/api/drupal/includes%21common.inc/function/entity_load/7

จากนั้นคุณจะมีวัตถุเอนทิตีที่โหลดซึ่งคุณสามารถรับได้ที่ฟิลด์ของ

การใช้ dpm () เหมือนกับฟังก์ชั่นอื่น ๆ คุณเพียงแค่ต้องติดตั้งโมดูล devel

ดังนั้นทำสิ่งนี้:

<?php
$entity = entity_load('myEntityType', $entity_id);
dpm($entity);
?>

0

ลอง:

$value= field_get_items('entityform', $entityform, 'field_myfieldname');
print '<p>the value is: '.$value.'</p>';

สิ่งนี้ควรพิมพ์ค่าของฟิลด์

ถ้าเป็นอาร์เรย์ลองทำดังนี้:

$values = field_get_items('entityform', $entityform, 'field_myfieldname');
$value = $values[0]['value'];
print '<p>the value is: '.$value.'</p>';

โปรดจำไว้ว่านี่เป็นผลลัพธ์ดิบและขึ้นอยู่กับว่าค่ามาจากที่ใดคุณอาจต้องล้างค่าด้วยตนเองที่นี่

โปรดดูที่: ฟังก์ชัน field_get_items


0

วางสิ่งนี้ไว้ในหนึ่งในโมดูลของคุณและไปที่หน้าของแบบฟอร์มแล้วคุณจะพบข้อมูลที่คุณต้องการ

function yourmodulename_form_alter(&$form, &$form_state, $form_id) {

  dpm($form);

}

-1

แทนที่จะใช้ dpm และติดตั้งโมดูลที่ฉันใช้:

print_r('<pre>');
print_r($node);
print_r('</pre>');

หวังว่านี่จะช่วยให้คุณขุดลงไปที่ค่า


อืมนั่นไม่ได้ส่งผลอะไรสำหรับฉัน :( อาจเป็นเพราะฉันกำลังดูการส่งเอนทิตีและไม่ใช่โหนดหรือการส่งเอนทิตีเป็นจริงแล้วเป็นโหนดหรือไม่งงงวย
Dustin

ฉันไม่แน่ใจฉันจะสมมติว่าคุณต้องการตัวแปรอื่นที่ไม่ใช่ $ node
Brian

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