Mennyibe kerül egy node_load() ?

aboros képe

A kérdésem teljesen elméleti jellegű.

Mostanában gyakran csinálom azt, hogy az arg() értékeit figyelve, ha node/nid van, betöltöm node_load() -al a node -ot. Leginkább ilyen-olyan sminkelési céllal csinálom ezt. Mondok egy példát:

Szeretném, ha a body osztályként megkapná az adott node típusát, de a page.tpl.php -ban a $node nem áll rendelkezésre.

Ezt úgy csinálom, hogy a template.php -ban ilyesmi van:

function playground_body_class() {
  if (arg(0) == 'node' && is_numeric(arg(1)) {
    $node = node_load(arg(1));
    $class = 'ntype-'.$node->type;
  }
  if (isset($class)) {
    print ' class="'. $class .'"';
  }
}

aztán a page.tpl.php -ban pedig:
<body<?php print playground_body_class(); ?>>
..

A kérdésem az, hogy mennyire "drága" ez nekem? Nem számít szinte semmit vagy inkább ne csináljak ilyet? (ugyanezt kérdezhettem volna taxonomy_node_get_terms_by_vocabulary() -val is, ha mondjuk egy node termjeit szeretném a body -hoz osztályként rendelni.)

Drupal verzió: 
Fórum: 
pp képe

Ha így csinálod akkor olcsó. Neked megszámítom egy sörért. :D
A node_lode ekkor már egyszer lefutott, és minden újabb hívásnál az akkor előállított node ojjektumot adja vissza. (de ezt ugye minden óvodás láthatja a forrásból)

Minden más esetben a válasz az, hogy a franc se tudja, mert attól függ hány és milyen modul van bekapcsolva. Tehát, ha nem a node/x amit lehívtak.

A taxonomy_node_get_terms_by_vocabulary pedig minden egyes node-nál egy újabb sql lekérdezést fog jelenteni. (persze ehhez már nagycsoportosnak kell lenned, mivel először a taxonomy_nodapi-t kell megnézni. ;))
A kérdés, hogy miért nem jó neked a $node->taxonomy ?

pp

0
0
aboros képe

ugyanis, a modules/node/node.tpl.php -ban nem szerepel a $taxonomy, nincs is dokumentálva, hogy ott lenne ilyen tömb. a garland node.tpl.php -ja már használja (if($taxonomy)) de a garland template.php -jában sincs semmi különös, ami belenyomná a $node -ba a $taxonomy -t.. szóval nem is értem, hogy kerül oda, dokumentáció szerint csak a $terms van, ami viszont már html.

fura, lehet, hogy dokumentáció-bug? :)

mindenesetre simán jó a $taxonomy, köszönöm. (bár nincs benne, hogy melyik term melyik szótárból való és a termek idjét is csak sztringvadosással lehet kinyerni, de ezek most nem is érdekelnek, úgyhogy mindegy is)

0
0

-
clear: both;

Illyés Edit képe

D5 alatt a phptemplate.engine-ben volt, most átmozgatták a theme.inc-be:

<?php
function phptemplate_node($node, $teaser = 0, $page = 0) {
  if (module_exists('taxonomy')) {
    $taxonomy = taxonomy_link('taxonomy terms', $node);
  }
  else {
    $taxonomy = array();
  }
?>

<?php
function template_preprocess_node(&$variables) {
  $node = $variables['node'];
  if (module_exists('taxonomy')) {
    $variables['taxonomy'] = taxonomy_link('taxonomy terms', $node);
  }
  else {
    $variables['taxonomy'] = array();
  }
?>
0
0
aboros képe

értem. köszi!
csak hogyan kéne rájönnie tibinek, hogy ez benne van a $node -ban, ha az amúgy igen részletes dokumentációban nem említik? nem feltételeztem, hogy 'kifelejtették' .. tudom, használjon devel modult. meg ugye a garland forrásában is van $taxonomy..

de ettől még igazán benne lehetne az eredeti node.tpl.php -ban az Available variables között, hogy $taxonomy: keyed array of taxonomy terms associated with the node (see theme.inc) vagy ilyesmi.

0
0

-
clear: both;

pp képe

Az, hogy benne van az csak akkor igaz, ha a taxonomy modul telepítve van és be van kapcsolva. Ha felteszel egy taxonomy killer modult ami a nodapi load op-ban kitörli akkor meg nem lesz benne. És akkor ezt mind a hétezer modulra le kéne írni. Szerinted??
És akkor nem beszéltünk arról, hogy a cck meg szintén beletesz mindenfélét a node-ba de azt még dokumentálni se lehet, mert azt a júzer kattintgatja össze.

Miért nem használsz devel modult, hogy tudd mi van a $node-ban?

(ha azt fontolgatod, hogy Te akkor is nekiállsz és ledokumentálod, szólnék: valószínűleg mire végzel kijön a hetes és még vagy száz modul és kezdheted előröl sok sikert!)

pp

0
0