ฉันจะเข้าถึงค่าฟิลด์ในตัวแปร $ row ในเทมเพลตชุดรูปแบบมุมมองฟิลด์ได้อย่างไร


11

ฉันลบล้างเทมเพลตฟิลด์สำหรับมุมมองของฉันและฉันต้องการเข้าถึงค่าฟิลด์อื่นจากตัวแปร $ row เอกสารในไฟล์เทมเพลตแสดงสิ่งนี้:

เมื่อดึงผลลัพธ์จากแถว $ ควรใช้โครงสร้างนี้: $ data = $ row -> {$ field-> field_alias}

เขตข้อมูลของฉันถูกเรียกว่า field_calendar_title แต่สิ่งต่อไปนี้ใช้ไม่ได้ตามที่คาดไว้:

$row->{$field->field_calendar_title}

ฉันได้รับข้อผิดพลาดต่อไปนี้:

ข้อผิดพลาดร้ายแรง: ไม่สามารถเข้าถึงคุณสมบัติที่ว่างเปล่า ...

ฟิลด์ "นามแฝง" แตกต่างจากชื่อของฟิลด์ในประเภทเนื้อหาหรือไม่

เอาต์พุต "ล้างแล้ว" จาก var_dump ของ $ row:

stdClass Object
(
    [node_title] => ...
    [nid] => 568
    [field_data_field_performance_date_delta] => 0
    [field_data_field_performance_date_language] => und
    [field_data_field_performance_date_bundle] => event
    [field_data_field_performance_date_field_performance_date_val] => 2012-03-02 19:00:00
    [field_data_field_performance_date_node_entity_type] => node
    [_field_data] => Array
        (
            [nid] => Array
                (
                    [entity_type] => node
                    [entity] => stdClass Object
                        (
                            [vid] => 878
                            [uid] => 0
                            [title] => ...
                            [log] => 
                            [status] => 1
                            [comment] => 0
                            [promote] => 0
                            [sticky] => 0
                            [nid] => 568
                            [type] => event
                            [language] => und
                            [created] => 1329332968
                            [changed] => 1331836509
                            [tnid] => 0
                            [translate] => 0
                            [revision_timestamp] => 1331836509
                            [revision_uid] => 1
                            [body] => Array
                                (
                                    [und] => Array
                                        (
                                            [0] => Array
                                                (
                                                    [value] => ...
                                                    [summary] => ...
                                                    [safe_summary] => ...
                                                )
                                        )
                                )
                                [field_resident_company] => Array ( [und] => Array ( [0] => Array ( [tid] => 3 ) ) )
                                [field_series] => Array ( [und] => Array ( [0] => Array ( [tid] => 36 ) ) )
                                [field_venue] => Array ( )
                                [field_rotator_image] => Array ( )
                                [field_exclude] => Array ( [und] => Array ( [0] => Array ( [value] => 0 ) ) )
                                [field_performance_image] => Array ( )
                                [field_premiere] => Array ( [und] => Array ( [0] => Array ( [value] => 1330714800 [timezone] => UTC [timezone_db] => UTC [date_type] => datestamp ) ) )
                                [field_closing] => Array ( [und] => Array ( [0] => Array ( [value] => 1330714800 [timezone] => UTC [timezone_db] => UTC [date_type] => datestamp ) ) )
                                [field_exclude_update] => Array ( [und] => Array ( [0] => Array ( [value] => 0 ) ) )
                                [field_performance_date] => Array ( [und] => Array ( [0] => Array ( [value] => 2012-03-02 19:00:00 [timezone] => UTC [timezone_db] => UTC [date_type] => datetime ) ) )
                                [field_performance_id] => Array ( [und] => Array ( [0] => Array ( [value] => 1436 [format] => [safe_value] => 1436 ) ) ) [field_event_status] => Array ( [und] => Array ( [0] => Array ( [value] => open ) ) )
                                [field_calendar_title] => Array ( [und] => Array ( [0] => Array ( [value] => PSYCHIC EXP [format] => [safe_value] => PSYCHIC EXP ) ) )
                                ...
                        )
) 

คำตอบ:


10

จากรูปลักษณ์ของvar_dumpคุณควรจะสามารถหาค่าฟิลด์ของคุณด้วยสิ่งนี้:

$row->_field_data['nid']['entity']->field_calendar_title['und'][0]['value'];

ฉันหวังว่าจะมีวิธีที่ดีกว่านั้นอีก!


ขออภัยฉันแก้ไขไวยากรณ์ในคำถามของฉันแล้ว แต่ก็ยังใช้งานไม่ได้ ลองสิ่งนี้ด้วยและไม่มีโชค $ row-> field_calendar_title;
SomethingOn

อืม ... ฉันคิดว่าจากข้อความแสดงข้อผิดพลาด$fieldไม่ได้กำหนด ... คุณลองทำแล้วvar_dump($row)เพื่อดูว่ามีอะไรเกิดขึ้นจริงบ้างไหม? คุณอาจจะเห็นสนามที่คุณตามหาได้ง่ายๆ :)
คลีฟ

เฮ้คลีฟ, yup ฉันทำ var_dump และฟิลด์นั้นมีอยู่ภายใต้ _field_data พร้อมกับส่วนที่เหลือของค่าฟิลด์ ...
SomethingOn

หากคุณสามารถนำเอาท์พุทของvar_dump($row)คำถามของคุณมาใส่ไว้ในรูปแบบของการแก้ไขได้ฉันอาจสามารถมองเห็นคุณค่าที่คุณต้องการได้
ไคลฟ์

@SomethingOn ผมได้ปรับปรุงคำตอบก็ไม่สวย แต่มันควรจะทำงาน :)
ไคลฟ์

7

วิธีที่ง่ายกว่า:

$rendered_field = $view->render_field($fieldname, $view->row_index);

ที่นี่ $ fieldname เป็นชื่อจริงของชื่อฟิลด์ (ไม่ใช่ชื่อที่มีนามแฝง) เช่น 'field_myfield'


3

อาจจะช้าไปหน่อย แต่สำหรับการอ้างอิงในอนาคตนี่คือคำตอบของฉัน:

คำอธิบายค่อนข้างคลุมเครือ แต่คุณควรใช้อย่างแท้จริง:

$row->{$field->field_alias}

ในไฟล์เทมเพลตของคุณมีการบันทึกไว้ด้วยว่า:

ตัวแปรที่มีอยู่:

  • $ view: วัตถุมุมมอง
  • $ field: วัตถุตัวจัดการฟิลด์ที่สามารถประมวลผลอินพุต
  • $ row: ผลลัพธ์ SQL ดิบที่สามารถใช้ได้
  • $ output: ผลลัพธ์ที่ประมวลผลที่ปกติจะใช้

ในฟิลด์ $ มีฟิลด์ชื่อ field_alias ดังนั้น$row->{$field->field_alias}จริงๆแล้วชี้ไปที่ในกรณีของคุณ field_calendar_title

ลองสร้าง var_dump ของฟิลด์ $ และคุณจะเห็นด้วยตัวเอง

หวังว่านี่จะช่วยให้ทุกคนที่เจอโพสต์นี้

Gerben


มันยังไม่สายเกินไปคำถามที่ยังมีแนวโน้ม 1. ฉันไม่ต้องการใช้ตัวอย่างของ monstrous @ Clive แม้ว่ามันจะใช้ได้ 2. ฉันต้องการที่จะเข้าใจวิธีการทำงานกับตัวแปรที่กำหนด: แถว $, $ ยื่น, ฯลฯ ข้อเสนอแนะของคุณจะส่งกลับเฉพาะตัวเลข (อาจ nid หรือ smth ) แต่ฉันจะเข้าถึงฟิลด์ของฉันได้อย่างแม่นยำ ถ้าฉันมีสองฟิลด์ที่ต่างกันที่ฉันต้องการ
vladkras

-2

วิธีที่ง่ายที่สุดคือ: $ field ["field_name"] -> content; โดยที่ field_name -> ชื่อฟิลด์ cck

หวังว่าจะช่วย !!

ไชโย! ราชา


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