Přeskočit přímo na text


Praktické využití modulu Devel (získání hodnot pole)

Toto je archivovaná verze české komunitní stránky o CMS Drupal. Nejde na ni již přidávat nový obsah. Pro aktuální informace a kontakt s komunitou navštivte Drupal.cz
Kategorie: Jak na to?
Týká se verze: Drupal 7.x
Zprovoznil jsem si modul Devel a dívám se na výstupy (dpm($view);). Moc se v tom zatím neorientuju, vidím např. $…->result[0]->field_field_bar­vy[0][‚raw‘][‚tid‘]. Nevím co přesně znamenají ty tři tečky, asi se tam doplňuje proměnná. Je to ale funkční i jako $row->field_field_bar­vy[0][‚raw‘][‚tid‘]. Dá se z toho výpisu (dpm($view);) zjistit např. jak projít všechny hodnoty (barvy[0], barvy[1]…)? Aby byl výsledek ve stylu field_field_bar­vy[AUTOMATICKY_DOP­LNENA_HODNOTA][‚raw‘][‚­tid‘].
 

Zkuste si vypsat třeba

Zkuste si vypsat třeba dpm($row->field_field_bar­vy); dostanete pole a můžete s ním zacházet jako s každým polem (foreach apod.).

Tj. např.

$barvy_array = $row->field_field_barvy;
foreach ($barvy_array AS $item) {

(…)

Nefunguje to tak jak chci

Díky Evo, ale nefunguje to tak jak potřebuju. Zkouším to vypsat ve stylu:
 $data = $row->field_field_barvy; foreach ($data as $key  ⇒ $value) { print „<key>“.$key.„</ke­y>“; print „<value>“.$va­lue.„</value>“; } 
Výsledek je:
 <key>0</key> <value>Array</va­lue> <key>1</key> <value>Array</va­lue> <key>2</key> <value>Array</va­lue> 
Alternativně jsem zkusil:
 $data = array($row->field_field_bar­vy[0][‚raw‘][‚tid‘]); foreach ($data as $key  ⇒ $value) { print „<key>“.$key.„</ke­y>“; print „<value>“.$va­lue.„</value>“; } 
Výsledek je:
 <key>0</key> <value>1</value> 
To je správně (1 = červená atd.), ale je to výsledek jen pro první hodnotu toho pole. Vypsáním dpm($row->field_field_bar­vy); vidím (Object) stdClass a dále nid, node_title … field_field_barvy – 0 (Array, 2 elements) – raw – tid. Poradíte?

Tak místo print $value dejte

Ad první příklad -

tak místo print $value dejte jen dpm($value) a uvidíte, že je to zase pole... A z něj musíte získat teprve hodnotu.

Ještě pozor na vypisování hodnot, které se tahají přímo z databáze, často je třeba ošetřit je nějakou "bezpečnostní" funkcí, např. check_plain()...

Už to mám, ale ještě prosba o radu (stdClass Object)

Vypsal jsem si to jako print_r($data); a je to vcelku jasné. Současné funkční řešení je tedy:
foreach ($row->field_field_barvy as $data) { print „<value>“.$da­ta[‚raw‘][‚tid‘]­.„</value>“; }
Nevím ale jak získat hodnoty z stdClass Object (k výše uvedenému). Věděla byste jak na to?

Z objektu se vypisuje pomocí

Z objektu se vypisuje pomocí $nazev_objektu->hodnota

například: $node->title

Upozorňuji opět na nutnost ošetřit hodnoty při výpisu např. přes check_plain()

Doporučuji k tomu náš tutoriál http://www.squelle.com/cs/publikace/zaklady-php-pro-drupal, jsou tam jen hodně jednoduché příklady, ale pomůže Vám to právě v základní orientaci, abyste netápal a nezvykl si dělat věci špatně :-)

Tutoriál

To se hodí, díky. Na netu jsem viděl, že se to řeší i způsobem $array = json_decode(json_en­code($object), true); (viz http://stackoverflow.com/…array-in-php). Snad se tím brzy nějak prokoušu.

ten „navod“ to je jemne

ten „navod“ to je jemne receno hloupost, staci jednoduse $pole = (array) $objekt; – akorat nevidim duvod to delat, kdyz v podstate jediny rozdil mezi polem a stdClass je pouziti „sipky“ namisto hranatych zavorek.

tohle skonci spatne :(

tohle skonci spatne :(

Praktický příklad

Můžeš prosím krom obvyklých frází typu „tohle není správný drupalovský přístup“ apod. uvést jak to tedy řešit vč. konkrétního příkladu? Ne pro mě, ale třeba i pro ostatní co se chtějí někam posunout. Zadání třeba: typ obsahu svetr, taxonomie barvy (červená, zelená, modrá). V taxonomii další vlastní pole identifikující konkrétní barvu jinak než název, TID apod. (třeba červená = cerv). Dále výpis svetrů kde bude součástí místo barev ten nový identifikátor obalený ve vlastním tagu (třeba svetr s jelenem k dostání v červené a modré – <svetrID>cerv</sve­trID><svetrID>mo­dr</svetrID> – NE <svetrID>cerv, modr</svetrID>. Jak bys to tedy řešil – globálním PHP, vlastní šablonou pole …? Můžeš tedy uvést KONKRÉTNÍ příklad (kód + proč se to řeší tak a tak)?

hook_preproces­s_TEMPLATE(&$v

hook_preproces­s_TEMPLATE(&$var­s) kde TEMPLATE pravdepodobne bude views_view_field (+ mozna bych pouzil primo .tpl.php pro ten konkretni field v tom konkretnim view).

Bezpečnost Drupalu

Z hlediska bezpečnosti je Drupal na velmi vysoké úrovni, díky propracovanému systému hlášení, prověřování a řešení možných problémů.

Čtěte více a odebírejte bezpečnostní aktuality

Poslední komentáře

Kdo je online

Momentálně je online 1 uživatel a 6 hostů.

Online uživatelé

Support

Psychologie - poradenství