Làm cách nào để sử dụng Views PHP để viết lại kết quả của một trường?


7

Tôi đang sử dụng Views PHP để viết lại các trường trong Lượt xem. Tôi có thể truy cập tất cả các biến NHƯNG những biến có chế độ xây dựng. Trong trường hợp của tôi, tôi có trường Content: Node (có thể được xây dựng theo bất kỳ màn hình nào), có thể truy cập bằng cách sử dụng biến $row->nodefield. Tuy nhiên, nội dung của biến đó luôn trống. Tôi đã thử với các biến khác và mọi trường có chế độ xây dựng sẽ không được hiển thị trong Lượt xem PHP .

nhập mô tả hình ảnh ở đây

Đây có phải là một vấn đề thiết kế hay tôi đang thiếu một cái gì đó?

Tôi đang sử dụng Drupal 7 và Lượt xem 3

BIÊN TẬP

Sử dụng dpm () trên các giá trị khả dụng trả về các giá trị sau:

dpm ($ hàng)

nhập mô tả hình ảnh ở đây

dpm (dữ liệu $)

nhập mô tả hình ảnh ở đây

Câu trả lời:


6

Phía trên phần "Mã đầu ra", bạn nên kiểm tra $databiến trong trường "Giá trị".

Thông thường tôi chỉ dpm($data)để tìm lĩnh vực tôi cần. Sau đó, bạn có thể lưu nó vào $static['myvalue']biến để sử dụng trong trường "Mã đầu ra".

Thật khó hiểu nhưng vì một số lý do nếu bạn chỉ thử các $row->xxxbiến trong phần "Mã đầu ra" thì chúng trống hoặc được đặt thành id nút.


Cảm ơn bạn. Tôi chưa quen với điều này, vì vậy bạn có thể vui lòng giúp tôi thêm không: khi tôi sao chép dpm($data)trong trường giá trị, Lượt xem trả về "lỗi gọi hàm không xác định dpm ()"
znat

ĐỒNG Ý. DPM là một chức năng phát, vì vậy nó sẽ không hoạt động nếu bạn chưa cài đặt mô-đun phát . Cài đặt hoặc chỉ sử dụng print_r ($ data).
Cơ hội G

Tôi không tìm thấy bất kỳ nội dung có liên quan. (xem phần chỉnh sửa của tôi) Tất cả các trường dường như null trong đối tượng $ row. Tôi đã thử các biến khác như $ view hoặc $ handler nhưng không thành công. Mã thông báo [gật đầu] có sẵn trong Kết quả viết lại, vì vậy nó phải ở đâu đó. Còn ý tưởng nào khác không?
znat

3

Các $rowmục Biến có sẵn trong Chế độ xem là loại vô dụng để nhận giá trị trường. Nhưng bạn không cần sử dụng noad_loadđể lấy dữ liệu bạn cần. Đầu tiên, như thường lệ, ẩn đầu ra của trường bạn muốn viết lại, sau đó trong trường Mã đầu ra của trường PHP của bạn, bạn có thể sử dụng $datanhư vậy:

<?php echo check_markup($data->field_field_body[0]['rendered']['#markup'], 'nitf_body'); ?>

Trong trường hợp này, tôi tước các thẻ không được phép và được quy cho nội dung để sử dụng trong xuất khẩu NITF. Nếu bạn không chắc chắn những gì bên trong $data, tất nhiên bạn có thể print_r($data)xem nó.


chính xác ý bạn là gì khi: "Đầu tiên, như thường lệ, ẩn đầu ra của trường bạn muốn viết lại"? Bạn có đang tham gia hộp kiểm "Loại trừ khỏi màn hình" trên trường chúng tôi muốn viết lại không?
Antonio

Đúng. Bạn sử dụng "Loại trừ khỏi màn hình" bất cứ khi nào bạn muốn nhận giá trị của một trường và sử dụng nó trong trường tùy chỉnh tiếp theo.
Scott Lahteine

1
Bạn có thể sử dụng $data->field_field_body[0]['raw']['value']để có được giá trị thô.
dùng2534880

1

Mẹo bổ sung: Mảng dữ liệu $ thực sự chứa dữ liệu nút thô và có thể được in. Nhưng để hiển thị chính xác, chúng ta cần xử lý các trường với các hàm như field_view_field .


1

Bạn đang cố gắng để làm điều này trong quan điểm? Tại sao không chỉ chủ đề mẫu khung nhìn thay vì sử dụng PHP toàn cầu? Tôi không chắc nếu print_r sẽ hoạt động trong trường xem. Nếu là tôi, tôi chỉ cần nhấp vào chủ đề -> thông tin, bạn sẽ thấy một cái gì đó như khung nhìn-view-field - MyViewName.tpl.php

(chỉnh sửa, làm rõ) Trong thư mục chủ đề mô-đun khung nhìn, sao chép "view-view-field.tpl.php" sau đó đổi tên thành "view-view-field - MyViewName.tpl.php" và đặt nó trong thư mục / samples của bạn trong trang web của bạn chúng. Trong tệp, bạn sẽ thấy một cái gì đó như

<?php print $output; ?> 

Bạn có thể xóa nó và thêm tất cả các trường của bạn theo cách thủ công như

<div class="MyPrettyTitle"><?php print $row->_field_data['nid']['entity']->title; ?></div> 
<div class="MyNodeBody">
<?php print $row->_field_data['nid']['entity']->body['und'][0]['value'];?>
</div>

vv Hoặc bọc đầu ra $ với bất cứ điều gì bạn muốn.

Ngoài ra, tôi chưa bao giờ gặp nhiều may mắn với Nghịch, tôi luôn chỉ sử dụng:

<?php print var_dump($row);?> 

Sau đó nhìn vào nguồn của trang để có được các biến. Có thể tôi đang sử dụng sai, nhưng tôi thấy tôi có thể nhận được các biến cho mỗi hàng dễ dàng hơn với một var_dump PHP thông thường.


Điều này cho hàng trùng lặp!
user219492

0

Tôi đã dành hai ngày để tìm giải pháp. Cách dễ nhất là cập nhật "Mô-đun Lượt xem Php" thành 7.x-2.x-dev. Người bảo trì đã khắc phục sự cố này trong phiên bản 2.x của họ.

Bạn có thể tải xuống từ đây (Đảm bảo bạn tải xuống 7.x-2.x-dev ): https://www.drupal.org/project/view_php

Hy vọng có thể giúp ai đó.


0

Bạn KHÔNG BAO GIỜ lưu trữ mã PHP trong cơ sở dữ liệu của bạn (và với Xem PHP bạn sẽ). Thay vào đó, sử dụng hook Views để sửa đổi kết quả.


Xin chào @ssibal, và cảm ơn vì đã đóng góp. Bạn có thể giải thích tại sao điều này nên tránh? Nó sẽ làm tăng đáng kể chất lượng bài viết của bạn.
Neograph734
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.