簡體   English   中英

drupal bootstrap腳本:如何獲取x類型的所有節點的列表?

[英]drupal bootstrap script: how to get list of all nodes of type x?

我創建了一個自定義導入和導出,目前作為外部腳本(通過bootstrap),我打算以更通用的方式創建一個模塊。

我正在為nagios和我們的主機管理和nagios配置btw構建一個前端。 也許它可能對其他環境有用(網絡管理)

現在我需要知道如何獲取x類型的所有節點的列表?

我想避免直接SQL。

我得到的一個建議是制作一個rs並解析它,但是我接受了drupal db十幾次來提取各種節點,所以對一件事做一個web請求感覺很奇怪

所以我正在尋找的新手drupal dev只是指向這個任務的基本搜索模塊api的指針

TIA florian

為什么要避免使用SQL?

如果你想獲得有關db中的內容的信息,比如x類型的所有節點,獲取它的唯一方法是通過SQL查詢,除非你已經提取了數據。

像這樣的查詢

db_query("SELECT title, nid FROM {node} WHERE type = 'x';");

不應該是破壞你的表現的東西。

編輯:
您提供的鏈接來自Drupal 7,因此您必須小心閱讀此內容。 原因是在Drupal 7中不僅可以使用db_query ,它基本上是php函數mysql_querypg_query包裝器。 它有點不同並且使用它,您不必使用db_specific代碼。 無論如何,Drupal 7的新功能有點像ORM。 我沒有詳細閱讀它,但想法是你可以使用對象上的命令構建查詢。 這可能就是你所追求的。 但是,Drupal 7還沒有為生產站點做好准備。 仍然存在許多關鍵問題和安全問題。 所以這在一段時間內不可能存在。

編輯2:
如果您想獲取節點標題和正文,那么您應該這樣做:

$type = 'x';
$query = db_query("SELECT r.nid, r.title, r.body FROM {node} AS n 
                  LEFT JOIN {node_revisions} AS r ON r.nid = n.nid
                  WHERE type = '%s';", array($type));
$nodes = array();
while ($node = db_fetch_object($query)) {
    $nodes[$node->nid] = $node;
}

如果要從db中提取數組而不是對象,則可以使用db_fetch_array而不是db_fetch_object`。

這是一個非常古老的問題,但對於現在遇到此頁面的任何人來說,在Drupal 7.x中,最佳做法是使用動態查詢。

因此,如果要選擇x類型的所有節點,可以執行以下操作:

$articles = db_select('node')
->fields('node', array('nid', 'title'))
->condition('type', 'x', '=')
->execute()
->fetchAllKeyed();

然后,$ articles變量應該是所有x類型節點的數組,由nid鍵入,數組對應的值設置為節點標題。 希望能有所幫助。

視圖通常是如何在沒有在Drupal中編寫數據庫查詢的情況下創建數據庫查詢的,但是這個查詢非常簡單我不確定學習視圖的開銷,在你引導Drupal之后只需要5行:

$nodes = array();
$results = db_query("SELECT nid FROM {node} WHERE type = '%s'", $type);
while ($result = db_fetch_object($result)) {
  $nodes[] = node_load($result->nid);
}

必須使用SQL做到這一點。

http://api.drupal.org/api/function/node_get_types/6

節點數=

$node_types = node_get_types();

$type_count = array();

foreach ($node_types as $type) {
   $result = db_fetch_object(db_query('SELECT count(nid) AS node_count FROM {node} WHERE type = "%s"'), $type);
   $type_count[$type] = $result['count(nid)'];
}

print_r($type_count);

節點及其類型:

$node_types = node_get_types();

$nodes = array();

foreach ($node_types as $type) {
   $result = db_query('SELECT nid, title FROM {node} WHERE type = "%s"'), $type);

   while ($node = db_fetch_object($result)) {
      $nodes[] = array('Type' => $type, 'Title' => $node->title);
   }
}

print_r($nodes);

這樣的事情。 我正在吃午餐,所以我沒有測試過,但我之前已經這樣做了,所以它應該有效。 Drupal 6。

您可能會對遷移模塊感興趣。 它還支持drush,因此您可以非常輕松地編寫腳本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM