답변:
juampy가 작성한 것처럼 node_revision 도 업데이트해야합니다. 두 개의 쿼리를 실행해야합니다.
1 단계:
UPDATE node SET comment = 0 WHERE type = 'your_content_type'
2 단계:
UPDATE node_revision nrev
INNER JOIN node nd ON nrev.nid = nd.nid AND nd.type = 'your_content_type'
SET nrev.comment = 0
3 단계 : 캐시 지우기
때로는 SQL을 사용하는 것이 가장 쉬운 경우가 있습니다. 제 생각에는 이것이 하나의 사례입니다.
UPDATE node SET comment = 0 WHERE type = 'nocommentsforthistype';
0 = 비활성화
1 = 읽기 전용
2 = 읽기 / 쓰기
위의 해결책 중 어느 것도 나를 위해 일하지 않았습니다. node_revision도 업데이트하지 않으면 주석 양식이 기존 노드에 계속 표시됩니다.
나를 위해 일한 hook_update_N () 구현은 다음과 같습니다.
/**
* Implements hook_update_N().
*
* Disables comments in existing event nodes.
*/
function hook_update_7000(&$sandbox) {
$content_type = 'event';
// Update node table.
db_update('node')
->fields(array('comment' => 1))
->condition('type', $content_type)
->execute();
// Update node_revision table.
$nids = db_select('node', 'n')
->fields('n', array('nid'))
->condition('type', $content_type)
->execute()
->fetchCol();
db_update('node_revision')
->fields(array('comment' => 1))
->condition('nid', $nids)
->execute();
}
먼저 여기에서 주석을 비활성화하십시오.
structure->content types->{node_type}->edit->comment settings
불행히도 노드를 업데이트하려면 각 노드를 다시 저장해야합니다. 아래 hook_update를 사용하십시오.
/**
* Disable comments on node_type
*/
function hook_update_N(&$sandbox) {
$content_type = 'node_type';
// Initialize batch.
if (!isset($sandbox['total'])) {
$query = db_select('node');
$query->addExpression('COUNT(*)');
$query->condition('type', $content_type);
$sandbox['total'] = $query->execute()->fetchField();
$sandbox['progress'] = 0;
if (empty($sandbox['total'])) {
$sandbox['#finished'] = 1;
return t('No %type nodes exist in database.', array('%type' => $content_type));
}
}
// Get and update nodes.
$nids = db_select('node')
->fields('node', array('nid'))
->condition('type', $content_type)
->range(0, 10)
->execute()
->fetchCol();
if (!empty($nids)) {
$nodes = node_load_multiple($nids, NULL, TRUE);
foreach ($nodes as $node) {
$node->comment = 1; // I set comments as 1 where value of 2 enables the comments.
node_save($node); // Re-save the node.
}
}
// Increment & check progress.
$sandbox['progress'] += count($nids);
if (empty($nids) || $sandbox['progress'] >= $sandbox['total']) {
$sandbox['#finished'] = 1;
return t('Updated @count nodes.', array('@count' => $sandbox['progress']));
}
else {
$sandbox['#finished'] = $sandbox['progress'] / $sandbox['total'];
}
}
'node_type' 을 노드 유형 으로 바꾸는 것을 잊지 마십시오 .
UPDATE node SET comment = 0; UPDATE node_revision SET comment = 0
. 나를 위해 일했다 :-).