it-swarm.com.de

Hinweis: Es wird versucht, die Eigenschaft eines Nichtobjekts abzurufen

Hier ist mein Code:

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

Ich drucke das Feld "Name" mit print $user_profile->name Und erhalte folgende Fehlermeldung:

Hinweis: Es wird versucht, die Eigenschaft eines Nichtobjekts in include () abzurufen (Zeile 71 von SITE\sites\all\theme\parce\block - block - 2.tpl.php).

Ich nahm an, dass $user_profile Kein Objekt war und versuchte es mit print render($user_profile['name']), was mich zurückgab:

Schwerwiegender Fehler: Objekt vom Typ stdClass kann nicht verwendet werden

Was ist los? Ich habe die API-Referenz Drupal API) überprüft, und menu_get_object() sollte mir ein Objekt zurückgeben.

5
silkAdmin

Sie haben die Zeilennummern des zweiten Fehlers nicht gedruckt, daher weiß ich nicht, ob sie in derselben Zeile auftreten. Vielleicht kommt Ihre Nachricht von etwas anderem.

Sie können versuchen, die Variable mit print_r, vardump, debug auszudrucken oder das Modul Devel zu verwenden, mit dem einige Wrapper-Funktionen wie dpm, um Variablen mit Krumo zu drucken.

Es sollte unmöglich sein, dass dieselbe Variable ein Objekt ist und nicht gleichzeitig ein Objekt. Aber es ist schwer, mit den von Ihnen bereitgestellten Informationen mehr zu sagen.

Update:
Aus Ihren Kommentaren kann ich ersehen, warum Sie die Fehler erhalten:

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

Fehler >> Hinweis: Undefinierter Index: und ...

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

Schwerwiegend >> Objekt vom Typ stdClass kann nicht als Array verwendet werden

Das Problem, das ich in der Fehlermeldung markiert habe, ist, dass und im Feldwert nicht definiert ist. $user_profile->field_country Ist also in Ordnung, aber $user_profile->field_country['und'] Ist undefiniert. Der Grund könnte sein, dass kein Wert festgelegt ist oder dass die Sprache für das Feld nicht undefiniert ist. Sie sollten, wie oben vorgeschlagen, die Variable ausdrucken, um zu sehen, was sie enthält.

4
googletorp

menu_get_object('user') gibt Ihnen ein Objekt nur für bestimmte URLs zurück; Wenn die URL der Seite, auf der der Block sichtbar ist, http://example.com/node/1 lautet, gibt die Funktion kein Objekt zurück.

Wie in der Dokumentation angegeben:

menu_get_object() bietet Zugriff auf Objekte, die vom aktuellen Router-Element geladen wurden. Auf dem Seitenknoten /% -Knoten lädt der Router beispielsweise das% -Knotenobjekt, und der Aufruf von menu_get_object() gibt dies zurück.

In Ihrem Fall sollte die Seiten-URL mit Benutzer /% Benutzer übereinstimmen, z. B. im Fall von http://example.com/user/1 , http://example.com)/user/1/shortcuts , http://example.com/user/1/devel .

Die Funktion konnte auch kein Objekt zurückgeben, wenn der Block auf einer Benutzerprofilseite angezeigt wird und wenn beim Laden des Benutzerobjekts Probleme auftreten. In diesem Fall würde die Benutzerprofilseite vermutlich auch nicht korrekt angezeigt.

0
kiamlaluno