هذا هو الرمز الخاص بي:
function THEME_preprocess_block(&$variables) {
$variables['user_profile'] = menu_get_object('user');
}
أطبع الحقل "name" باستخدام print $user_profile->name
، وأحصل على الخطأ التالي:
إشعار: محاولة الحصول على خاصية غير كائن في تضمين () (السطر 71 من SITE\sites\all\theme\parce\block - block - 2.tpl.php).
افترضت أن $user_profile
لم يكن كائنًا وحاولت print render($user_profile['name'])
، والتي أعادتني:
خطأ فادح: لا يمكن استخدام كائن من النوع stdClass
ما الذي يجري؟ لقد تحققت من مرجع Drupal API ، و menu_get_object()
يجب أن تعيد لي كائنًا.
لم تطبع أرقام أسطر الخطأ الثاني ، لذا لا أعرف ما إذا كانت تحدث في نفس السطر. ربما إشعارك من شيء آخر.
ما يمكنك تجربته هو طباعة المتغير باستخدام print_r
، vardump
، debug
أو استخدام الوحدة Devel التي تنشئ بعض وظائف الغلاف مثل dpm
لطباعة المتغيرات باستخدام Krumo.
يجب أن يكون من المستحيل أن يكون نفس المتغير كائنًا وليس كائنًا في نفس الوقت. ولكن من الصعب قول المزيد بالمعلومات التي قدمتها.
التحديث:
من تعليقاتك ، أستطيع أن أرى لماذا تحصل على الأخطاء:
print $user_profile->field_country['und']['0']['value'];
خطأ >> إشعار: فهرس غير محدد: und ...
print $user_profile['field_country']['und']['0']['value'];
Fatal >> لا يمكن استخدام كائن من النوع stdClass كصفيف
المشكلة كما أشرت في رسالة الخطأ هي أنه لم يتم تحديد und
في قيمة الحقل. وبالتالي $user_profile->field_country
لا بأس ولكن $user_profile->field_country['und']
غير محدد. قد يكون السبب هو أنه ليس لديه مجموعة قيمة أو أن لغة الحقل غير محددة. يجب أن اقترحت أعلاه ، اطبع المتغير لمعرفة ما يحتوي عليه.
menu_get_object('user')
يُرجع لك كائنًا فقط لعناوين URL محددة ؛ إذا كان عنوان URL للصفحة حيث تكون الكتلة مرئية http://example.com/node/1 ، فلن تعيدك الوظيفة كائنًا.
كما ورد في الوثائق:
يوفر
menu_get_object()
الوصول إلى الكائنات التي تم تحميلها بواسطة عنصر جهاز التوجيه الحالي. على سبيل المثال ، في عقدة الصفحة /٪ node ، يقوم جهاز التوجيه بتحميل كائن العقدة٪ ، وسيؤدي استدعاءmenu_get_object()
إلى إرجاع ذلك.
في حالتك ، يجب أن يتطابق عنوان URL للصفحة مع المستخدم /٪ المستخدم ، كما هو الحال في http://example.com/user/1 ، http://example.com/user/1/اختصارات ، http://example.com/user/1/devel .
لا يمكن أن تقوم الوظيفة أيضًا بإرجاع كائن عندما يتم عرض الكتلة في صفحة ملف تعريف المستخدم ، وإذا كانت هناك مشكلات في تحميل كائن المستخدم. في هذه الحالة ، لن يتم تصور صفحة ملف تعريف المستخدم بشكل صحيح أيضًا ، على ما أعتقد.