未公開のノードがいくつかあり、そのノードIDを持っています。プログラムでそれらを公開するにはどうすればよいですか?次のようなクエリを使用してカスタムモジュールでそれを達成することは正しいですか?
db_query("UPDATE {node} SET status = 1 WHERE nid = %d", $nid)
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);
}
node_load()、node_load_multiple()を使用してロードする場合a(multiple) noad(s)多くのフックがhook_node_loadなどのモジュールによって呼び出されます、hook_node_operations、hook_node_prepare、hook_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()が機能しない場合は、上記のコードを使用してください。