it-swarm-vi.com

Lưu ý: Đang cố lấy tài sản của phi đối tượng

Đây là mã của tôi:

function THEME_preprocess_block(&$variables) {
    $variables['user_profile'] = menu_get_object('user');
}

Tôi in trường "tên" bằng print $user_profile->name Và tôi gặp lỗi sau:

Lưu ý: Cố gắng lấy thuộc tính của đối tượng không bao gồm () (dòng 71 của SITE\site\all\Themes\parce\block - block - 2.tpl.php).

Tôi giả sử $user_profile Không phải là một đối tượng và tôi đã thử print render($user_profile['name']), nó trả về cho tôi:

Lỗi nghiêm trọng: Không thể sử dụng đối tượng của loại stdClass

Chuyện gì đang xảy ra vậy? Tôi đã kiểm tra tham chiếu API Drupal và menu_get_object() sẽ trả lại cho tôi một đối tượng.

5
silkAdmin

Bạn đã không in số dòng của lỗi thứ hai vì vậy tôi không biết liệu chúng có xảy ra trên cùng một dòng không. Có thể thông báo của bạn là từ một cái gì đó khác.

Những gì bạn có thể thử là in ra biến bằng cách sử dụng print_r, vardump, debug hoặc sử dụng mô đun Devel để tạo một số hàm bao bọc như dpm để in các biến bằng Krumo.

Không thể có cùng một biến là một đối tượng và không phải là một đối tượng cùng một lúc. Nhưng thật khó để nói nhiều hơn với thông tin bạn cung cấp.

Cập nhật:
[.__.] Từ ý kiến ​​của bạn, tôi có thể thấy lý do tại sao bạn nhận được lỗi:

print $user_profile->field_country['und']['0']['value'];

Lỗi >> Lưu ý: Chỉ mục không xác định: und ...

print $user_profile['field_country']['und']['0']['value'];

Fatal >> Không thể sử dụng đối tượng của kiểu stdClass làm mảng

Vấn đề như tôi đã đánh dấu trong thông báo lỗi là und không được xác định trong giá trị trường. Vì thế $user_profile->field_country vẫn ổn nhưng $user_profile->field_country['und'] không định nghĩa được. Lý do có thể là nó không có giá trị được đặt hoặc ngôn ngữ cho trường không được xác định. Bạn nên như tôi đã đề xuất ở trên, in ra biến để xem nó chứa gì.

4
googletorp

menu_get_object('user') chỉ trả về cho bạn một đối tượng cho các URL cụ thể; nếu URL của trang nơi khối hiển thị là http://example.com/node/1 , thì hàm sẽ không trả về cho bạn một đối tượng.

Như đã báo cáo trong tài liệu:

menu_get_object() cung cấp quyền truy cập vào các đối tượng được tải bởi mục bộ định tuyến hiện tại. Ví dụ, trên nút trang/nút nút, bộ định tuyến tải đối tượng nút% và gọi menu_get_object() sẽ trả về điều đó.

Trong trường hợp của bạn, URL trang phải khớp với người dùng /% người dùng, chẳng hạn như trong trường hợp http://example.com/user/1 , http://example.com/user/1/phím tắt , http://example.com/user/1/devel .

Hàm cũng không thể trả về một đối tượng khi khối đang được hiển thị trong trang hồ sơ người dùng và nếu có vấn đề khi tải đối tượng người dùng. Trong trường hợp này, trang hồ sơ người dùng cũng sẽ không được hiển thị chính xác, tôi đoán vậy.

0
kiamlaluno