web-dev-qa-db-ja.com

プログラムで非公開ノードを公開する方法

未公開のノードがいくつかあり、そのノードIDを持っています。プログラムでそれらを公開するにはどうすればよいですか?次のようなクエリを使用してカスタムモジュールでそれを達成することは正しいですか?

db_query("UPDATE {node} SET status = 1 WHERE nid = %d", $nid)
15
jim gaslingson

db_query()の使用はDrupal 6メソッドであり、Drupal 7。任意の手動クエリ)。

// load the node object
$node = node_load($nid);
// set status property to 1
$node->status = 1;
// re-save the node
node_save($node);

さらにノードIDがあり、それらすべてのノードを公開する場合は、次のコードを使用できます。

$nids = array();
// Load all nodes in one go for better performance.
$nodes = node_load_multiple($nids);
foreach ($nodes as $node) {
  // set status property to 1
  $node->status = 1;
  // re-save the node
  node_save($node);
}
20
Yusef

node_load()、node_load_multiple()を使用してロードする場合a(multiple) noad(s)多くのフックがhook_node_loadなどのモジュールによって呼び出されます、hook_node_operationshook_node_preparehook_node_accesseですが、drupalスキーマで直接クエリを実行すると、これらのフックは無視されますそして多くの問題につながります。

クエリは次のとおりです。

db_query("UPDATE {node} SET `status` = '1' WHERE `nid` =:nid ;"
    ,array(':nid'=>$node->nid));

db_query("UPDATE {node_revision} SET `status` = '1' WHERE `nid` =:nid AND  `vid` =:vid;"
    ,array(':nid'=>$node->nid,'vid'=> $node->vid));

利用可能なメモリが不足してnode_load()またはnode_load_multiple()が機能しない場合は、上記のコードを使用してください。

7
B Ravanbakhsh