Computed Field
při vytváření nového pole typu Computed je třeba nastavit dostatečnou velikost!
Data Length=255
Pokud se očekává řazení podle tohoto pole ve views, je NUTNÉ použít číselný typ!
v části Computed Code
je potřeba vložit vypočítanou hodnotu do proměnné
$entity_field[0]['value'] =...
RŮZNÉ:
$typobsahu = $entity->type;
$nazevnode = $entity->title;
hodnota z textového nebo číselného pole:
$hodnotavpoli = $entity->field_mojepole['und'][0]['value'];
hodnota z pole typu odkaz:
$hodnotavpoli = $entity->field_mojepole['und'][0]['url'];
hodnota z pole typu seznam:
$hodnotavdatabazi = $entity->field_mojepole['und'][0]['value'];
$field = field_info_field('field_mojepole');
$hodnotapekna = $field['settings']['allowed_values'][$hodnotavdatabazi ];
viz https://www.drupal.org/node/2307109
hodnota z taxonomy_term:
$idkategorie = $entity->field_mojepole['und'][0]['tid'];
$term = taxonomy_term_load($idkategorie);
$nazevkategorie = $term->name;
$polekategorie = $term->field_pole['und'][0]['value'];
hodnota z node_reference:
$idnode = $entity->field_mojepole['und'][0]['target_id'];
$mujnode = node_load($idnode);
$nazevnode = $mujnode->title;
$polenode = $mujnode->field_pole['und'][0]['value'];
$polemail = $mujnode->field_pole_email['und'][0]['email'];
hodnota ze souboru (url souboru):
$idsouboru = $entity->field_image['und'][0]['fid'];
$file = file_load($idsouboru);
$urisouboru = $file->uri;
$urlsouboru = file_create_url($urisouboru);
$entity_field[0]['value'] = $urlsouboru;
hodnota políčka z vícehodnotového node_reference, pokud chceme hodnotu políčka z posledního nodereference:
(např.: ve třídě voláme příjmení posledního z třídních učitelů)
$idnode=0; $policko=""; $p=0; // p je počitadlo odkazů na nodereference
$pole_vsech_noderef= $entity->field_nodereference['und']; // pole všech odkazů na nodereference
while (array_key_exists($p, $pole_vsech_noderef)) {
$idnode= $pole_vsech_noderef[$p]['target_id'];
$mujnode = node_load($idnode);
$policko = $mujnode->field_pole['und'][0]['value'];
$p++;
}
hodnota políčka z vícehodnotového paragraphs, pokud chceme hodnotu políčka z posledního paragraph:
(např.: číslo dveří posledního umístění)
$cislo=0; $kdevsudetobylo = array(); $idprg = array();
$idmistnosti = 0; $idm = 0; $p=0;
$dat0 = strtotime("now"); $dat1 = 0; $poslednidat = 0;
if (isset($entity->field_umisteni['und'])) {
$kdevsudetobylo = $entity->field_umisteni['und'];
while (array_key_exists($p, $kdevsudetobylo)) {
$idprg = $entity->field_umisteni['und'][$p];
$vsechnaumisteni = entity_load('paragraphs_item', $idprg);
foreach ( $vsechnaumisteni as $jednoumisteni ) {
$dat = $jednoumisteni->field_datum[LANGUAGE_NONE][0]['value'];
$dat1 = strtotime($dat);
if($dat1 > $poslednidat) {
$poslednidat = $dat1;
$idm = $jednoumisteni->field_misto_kde['und'][0]['target_id'];
}
}
$p++;
}}
$idmistnosti = $idm + 0;
if ($idmistnosti) {
$tamtoje = node_load($idmistnosti);
$cislo= $tamtoje->field_mistnost_dvere['und'][0]['value'];
}
$entity_field[0]['value'] = $cislo;
hodnota z pole datum:
$hodnotavpoli = $entity->field_datum[LANGUAGE_NONE][0]['value'];
$hodnotavpoliend = $entity->field_datum[LANGUAGE_NONE][0]['value2'];
$ciselnahodnota = strtotime($hodnotavpoli);
$zobrazitdatum = date("j. n. Y",$ciselnahodnota);
$entity_field[0]['value'] = $zobrazitdatum;
v části Display Code
ponechat defaultní hodnotu:
$display_output = $entity_field_item['value'];
---------------------
Pokud se vypočítává pole načítané do node title (Auto Nodetitle), uzel je potřeba uložit dvakrát,
po každé změně je potřeba uzel uložit zase dvakrát
---------------------
----- PHP -----
vybrat první písmenko z řetězce:
$prvni = mb_substr($celyretezec,0,1);
(pokud se použije funkce substr, neporadí si s českými znaky)
switch ($ppp) {
case 0: break;
default:
}
if ($aaa) {
$cc=0;
}
else {
$cc=0;
}
foreach ($node->field_products as $product) {
/** @var Entity (i.e. Node, Paragraph, Term) $referenced_product **/
$referenced_product = $product->entity;
// Use now the entity to get the values you need.
$field_value = $referenced_product->field_name->value;
}
---
$promenna1 = "foo";
$promenna2 = "bar";
echo $$promenna1; // vypise obsah promenne $foo
echo $$promenna2; // vypise obsah promenne $bar
echo ${$promenna1.$promenna2}; // vypise obsah promenne $foobar
---
při testování, zda hodnota již v databázi je, použij ISSET
namísto:
$hodnotavdb = $entity->field_xxx['und'][0]['value'];
if ($hodnotavdb) {...
použij raději:
$hodnotavdb = isset($entity->field_xxx['und'][0]['value']) ? $entity->field_xxx['und'][0]['value'] : 0;
if ($hodnotavdb) {...
jinak možná vyhlásí chybu:
Warning: Undefined array key 0 ve funkci eval() (řádek: 2 v souboru ...xxx/sites/all/modules/computed_field/computed_field.module(468) : eval()'d code).