it-swarm-eu.dev

Upozornění: Pokoušíme se získat vlastnost jiného objektu

Tady je můj kód:

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

Vytisknu pole „name“ pomocí print $user_profile->name A zobrazí se následující chyba:

Poznámka: Pokoušíme se získat vlastnost non-object in () (řádek 71 SITE\sites\all\themes\parce\block - block - 2.tpl.php).

Předpokládal jsem, že $user_profile Nebyl objekt, a zkusil jsem print render($user_profile['name']), který mi vrátil:

Závažná chyba: Nelze použít objekt typu stdClass

Co se děje? Zkontroloval jsem Drupal API reference) a menu_get_object() by mi měl vrátit objekt.

5
silkAdmin

Nevytiskli jste čísla řádků druhé chyby, takže nevím, jestli k nim dojde na stejném řádku. Možná si všimnete něčeho jiného.

Můžete zkusit vytisknout proměnnou pomocí print_r, vardump, debug nebo použít modul Devel , který vytváří některé funkce wrapperu jako dpm pro tisk proměnných s Krumem.

Mělo by být nemožné, aby stejná proměnná byla objektem a nebyla zároveň objektem. Je však těžké říci více s poskytnutými informacemi.

Aktualizace:
Z vašich komentářů vidím, proč se vám zobrazují chyby:

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

Chyba >> Upozornění: Nedefinovaný index: und ...

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

Závažné >> Nelze použít objekt typu stdClass jako pole

Problém, který jsem označil v chybové zprávě, je, že und není definována v hodnotě pole. Takže $user_profile->field_country Je v pořádku, ale $user_profile->field_country['und'] Není definováno. Důvodem může být to, že nemá nastavenou hodnotu nebo že jazyk pole není definován. Měli byste, jak jsem navrhl výše, vytisknout proměnnou a zjistit, co obsahuje.

4
googletorp

menu_get_object('user') vám vrátí objekt pouze pro konkrétní URL; Pokud je URL stránky, na které je blok viditelný, http://example.com/node/1 , funkce vám nevrátí objekt.

Jak je uvedeno v dokumentaci:

menu_get_object() poskytuje přístup k objektům načteným aktuální položkou routeru. Například na stránce uzel /% uzel router načte objekt% uzel a volání menu_get_object() to vrátí.

Ve vašem případě by se adresa URL stránky měla shodovat s uživatelem /% uživatelem, například v případě http://example.com/user/1 , http://example.com)/user/1/zkratky , http://example.com/user/1/devel .

Funkce také nemohla vrátit objekt, když je blok zobrazen na stránce profilu uživatele, a pokud se vyskytnou problémy s načtením objektu uživatele. V tomto případě by stránka uživatelského profilu také nebyla správně vizualizována.

0
kiamlaluno