프로그래밍되지 않은 노드를 프로그래밍 방식으로 게시하는 방법


15

게시되지 않은 노드가 있는데 노드 ID가 있습니다. 프로그래밍 방식으로 게시하려면 어떻게해야합니까? 다음과 같은 쿼리를 사용하여 사용자 정의 모듈에서 달성하는 것이 맞습니까?

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

가장 깨끗한 것은 아니지만 더 빠릅니다.
Oskar Calvo

3
이 방법의 근본적인 문제는 업데이트되지 않기 node_revision때문에 불일치가 발생한다는 것입니다.
artfulrobot

답변:


20

사용 db_query()은 Drupal 7에서 사용되지 않는 Drupal 6 방법입니다. 작업을 수행하려면이 코드를 제안합니다 (수동 쿼리없이).

// 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);
}

3
응? db_queryDrupal 7 방법도 있습니다. 다른 주장을 취하십시오.

@andrewtweber, 네, 이제 drupal의 일부이지만 drupal 7의 첫 번째 버전을보고 주장하십시오 !!!
Yusef

hook_node_submit 안에 추가했지만 오류가 발생했습니다. 도움이 있습니까?
sokratis

hook_form_alter의 @sokratis는 사용자 정의 submit핸들러를 사용자 정의 제출 핸들러에서 다음과 같이 사용할 수 있습니다.
Yusef

따옴표를 잊지 마십시오. $ node-> status = "1";
Selwyn Polit

7

node_load (), node_load_multiple ()을 사용하여 여러 노드를로드하는 경우 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 ()이 작동하지 않는 경우 위 코드를 사용하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.