Làm cách nào để truy cập giá trị trường trong biến $ row trong mẫu chủ đề của trường xem?


11

Tôi đang ghi đè mẫu trường cho một trong các chế độ xem của mình và tôi muốn có thể truy cập giá trị trường khác từ biến $ row. Tài liệu trên tệp mẫu cho thấy điều này:

Khi tìm nạp đầu ra từ $ row, nên sử dụng cấu trúc này: $ data = $ row -> {$ field-> field_alias}

Trường của tôi được gọi là field_calWiki_title, nhưng trường sau không hoạt động như mong đợi:

$row->{$field->field_calendar_title}

Tôi nhận được lỗi sau đây:

Lỗi nghiêm trọng: Không thể truy cập tài sản trống ...

Trường "bí danh" có khác với tên của trường trong loại nội dung không?

Đầu ra "Đã xóa" từ var_dump của $ 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 ) ) )
                                ...
                        )
) 

Câu trả lời:


10

Từ vẻ ngoài của var_dumpbạn sẽ có thể tìm thấy giá trị trường của bạn với điều này:

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

Tôi thực sự hy vọng có một cách tốt hơn thế!


Xin lỗi tôi đã sửa cú pháp trong câu hỏi của tôi và nó vẫn không hoạt động. Đã thử điều này quá và không có may mắn $ row-> field_calWiki_title;
SomethingOn

Hmmm ... Tôi nghĩ từ thông báo lỗi $fieldlà không xác định ... bạn đã thử làm một var_dump($row)để xem những gì thực sự trong đó? Bạn có thể sẽ phát hiện ra lĩnh vực mà bạn theo đuổi khá dễ dàng :)
Clive

Xin chào Clive, yup tôi đã thực hiện var_dump và trường tồn tại dưới _field_data cùng với phần còn lại của các giá trị trường ...
SomethingOn

Nếu bạn có thể đưa đầu ra var_dump($row)vào câu hỏi của mình dưới dạng chỉnh sửa, tôi có thể phát hiện ra giá trị bạn cần
Clive

@S SomethingOn Tôi đã cập nhật câu trả lời, nó không đẹp nhưng nó sẽ hoạt động :)
Clive

7

Một cách tiếp cận đơn giản hơn:

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

Ở đây, $ fieldname là tên trường ban đầu (không phải là bí danh), ví dụ: 'field_myfield'.


3

Có thể hơi muộn, nhưng để tham khảo trong tương lai đây là câu trả lời của tôi:

Mô tả khá mơ hồ, nhưng bạn nên sử dụng theo nghĩa đen:

$row->{$field->field_alias}

Trong tệp mẫu của bạn cũng lưu ý rằng:

Các biến có sẵn:

  • $ view: Đối tượng xem
  • $ field: Đối tượng xử lý trường có thể xử lý đầu vào
  • $ row: Kết quả SQL thô có thể được sử dụng
  • $ output: Đầu ra được xử lý thường sẽ được sử dụng.

Trong trường $ có một trường được gọi là field_alias. Vì vậy, $row->{$field->field_alias}thực sự là trỏ đến, trong trường hợp của bạn, field_calWiki_title.

Hãy thử tạo một var_dump của trường $ và bạn sẽ tự mình nhìn thấy.

Hy vọng điều này sẽ giúp bất cứ ai đi qua bài viết này.

Gerben


Không bao giờ là quá muộn, vẫn là xu hướng câu hỏi. 1. Tôi không muốn sử dụng ví dụ quái dị @ Clive, mặc dù nó hoạt động 2. Tôi muốn hiểu cách làm việc với các biến đã cho: $ row, $ nộp, v.v. Đề xuất của bạn chỉ trả về một số (có thể là nid hoặc smth ), nhưng làm thế nào tôi có thể truy cập chính xác lĩnh vực của mình. Nếu tôi có hai lĩnh vực khác nhau mà tôi muốn có được thì sao?
vladkras

-2

Cách đơn giản nhất là: $ field ["field_name"] -> nội dung; Trường tên_bảng -> tên trường cck.

Hy vọng rằng sẽ giúp !!

Chúc mừng! Raj


1
không có $fieldsbiến có sẵn trong mẫu trường
Ejaz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.