Drupal 7 Drupal 7-获取已加载的节点

Drupal 7 Drupal 7-获取已加载的节点,drupal-7,Drupal 7,是否可以访问区域模板中已加载的节点?这是为了防止重复查询同一事物两次。我知道我可以使用node\u load加载带有nid的节点,如果节点已经加载,它将从静态缓存中检索节点。但是对于这个例子,我不知道nid,所以我更喜欢获取一个已经加载的nid的列表 PS:使用PDO的结果是缓存的,所以即使我多次查询相同的内容,性能也不会有太大的下降,但我还是希望尽可能减少与数据库的联系 为什么不使用hook\u node\u load()并将加载的nid附加到一个数组(可能是全局的)来存储有关加载节点的信息呢

是否可以访问区域模板中已加载的节点?这是为了防止重复查询同一事物两次。我知道我可以使用
node\u load
加载带有
nid
的节点,如果节点已经加载,它将从静态缓存中检索节点。但是对于这个例子,我不知道
nid
,所以我更喜欢获取一个已经加载的
nid
的列表


PS:使用PDO的结果是缓存的,所以即使我多次查询相同的内容,性能也不会有太大的下降,但我还是希望尽可能减少与数据库的联系

为什么不使用hook\u node\u load()并将加载的nid附加到一个数组(可能是全局的)来存储有关加载节点的信息呢

稍后使用node_load_multiple([array of loaded nid]),您将从缓存中获取所有节点

这是:

/**
 * Nid array set function
 */
function mymodule_push_nid_array($nid) {
  global $nid_array;
  if (!isset($nid_array)) {
    $nid_array = array();
  }
  // Only push, if nid isn't already set
  if(!in_array($nid, $nid_array)) {
    array_push($nid_array, $nid);
  }
}

/**
 * Nid array get function
 */
function mymodule_get_nid_array() {
  global $nid_array;
  if(!isset($nid_array)) {
    return array();
  }
  else {
    return $nid_array;
  }
}

/**
 * Implements hook_node_load();
 */
function mymodule_node_load($nodes, $types) {
  foreach ($nodes as $node) {
    mymodule_push_nid_array($node->nid);
  }
}

/**
 * Returns already loaded nodes
 */
function mymodule_get_all_loaded_nodes() {
  return node_load_multiple(mymodule_get_nid_array());
}

/**
 * Demo function (shows only up on next page request!)
 * Don't use THIS HOOK IN PRODUCTION
 */
function mymodule_exit() {
  $nodes = mymodule_get_all_loaded_nodes();
  debug($nodes);
}

这是工作代码,但很快原型。请随意修改。

您能提供一个例子吗?我已经阅读了文档,但是我不明白如何使用这个函数。好的,我写下了代码。希望你能处理它,并了解钩子和模块系统。