여러 노드가있는 기존 컨텐츠 유형이 있습니다. 방금 기본값이 "off"인 새 부울 필드를 추가했습니다.
그러나 각 노드를 다시 저장할 때까지 기본값이 설정되지 않으므로 새 필드에서 기본값을 사용하는 노드 만 표시해야하는보기가 현재 비어 있습니다.
필드를 추가하기 전에 생성 된 기존 노드를 업데이트하여 해당 필드를 기본값으로 설정하려면 어떻게해야합니까?
여러 노드가있는 기존 컨텐츠 유형이 있습니다. 방금 기본값이 "off"인 새 부울 필드를 추가했습니다.
그러나 각 노드를 다시 저장할 때까지 기본값이 설정되지 않으므로 새 필드에서 기본값을 사용하는 노드 만 표시해야하는보기가 현재 비어 있습니다.
필드를 추가하기 전에 생성 된 기존 노드를 업데이트하여 해당 필드를 기본값으로 설정하려면 어떻게해야합니까?
답변:
슬프게도, VBO / 규칙 외에도이 작업을 수행하는 매우 간단한 방법은 없지만 새 필드를 추가 한 후 특정 노드 유형의 필드 값을 미리 채워야 할 때 사용자 정의 모듈 설치 파일의 업데이트 기능에 사용하는 코드는 다음과 같습니다 ( 이 경우 '페이지'노드) :
<?php
// Get all nodes of 'page' type, populate the field with a value of '1'.
$pages = db_query("SELECT nid, vid FROM {node} WHERE type = 'page'")->fetchAllAssoc('nid');
foreach ($pages as $nid => $values) {
$fields = array(
'entity_type' => 'node',
'bundle' => 'page',
'deleted' => 0,
'entity_id' => $values->nid,
'revision_id' => $values->vid,
'language' => LANGUAGE_NONE,
'delta' => 0,
'field_page_new_field_value' => 1,
);
db_insert('field_data_field_page_new_field')
->fields($fields)
->execute();
db_insert('field_revision_field_page_new_field')
->fields($fields)
->execute();
}
?>
이 답변에 언급 된 다른 수동 방법 은 EntityFieldQuery를 사용하고 각 노드를로드 / 저장합니다. Drupal-y는 많지만 성능은 떨어집니다 ... (각 노드에 대한 전체 노드로드 및 저장 작업이 필요합니다!).
entity_get_controller('node')->resetCache($nids);
다른 후속 - node_load()
캐시에서 오래된 데이터를로드 할 수 있으며, 어떤 node_save()
객체의는 것이다 쓰기 데이터베이스에 그 오래된 데이터 다시.
최선의 방법은 MySQl에 직접 있습니다. 테이블은 다음과 같습니다.
field_data_field_newbooleanfieldname
field_revision_field_newbooleanfieldname
그것들을 보면 매우 간단합니다. 쿼리가 어떻게 생겼는지 또는 여기서부터 괜찮습니까?
벨로우즈 로직을 사용해보십시오. 훨씬 빠르며 모든 후크 구현도 통과합니다. 자세한 내용은 . 간단한 직접 db_select 쿼리를 작성하여 모든 nid를 가져 와서이 샘플 코드로 반복 할 수 있습니다.
$node = new stdClass();
$node->nid = $val;
$node->type = 'NODETYPE';
$node-field_whatever[LANGUAGE_NONE][0]['value'] = 'VALUE';
field_attach_presave('node', $node);
field_attach_update('node', $node);
필드 값이 설정되지 않은 노드는 다음을 고려하여 sql 사용
SELECT nid,vid
from node where type='procedure' and nid not in (select entity_id from field_data_field_pr_choix_du_document)
field_data_field_pr_choix_du_document 내 필드에 해당하는 테이블이며 엔티티 ID가 노드를 참조하도록 설정된 하나의 항목 par 값을 포함하는 테이블
SQL insert ... select 구문을 사용했습니다.
https://dev.mysql.com/doc/refman/5.5/en/insert-select.html
INSERT INTO `field_data_field_pr_choix_du_document` (`entity_type`, `bundle`, `deleted`, `entity_id`, `revision_id`, `language`, `delta`, `field_pr_choix_du_document_value`)
SELECT 'node','procedure',0,nid,vid,'und',0,'Importer un document'
from node where type='procedure' and nid not in (select entity_id from field_data_field_pr_choix_du_document)
Views Bulk Operations 모듈을 설치하고 사용 가능하게하고 페이지 표시가있는보기를 작성하십시오.
추가 => 대량 작업 : 컨텐츠 (컨텐츠) 필드를 봅니다.
보내다
기본값을 설정하려는 필드를 선택하십시오.
보기를 저장하고 작성된 페이지로 이동하십시오. 결과 페이지가 둘 이상인 경우 현재 페이지의 모든 항목, 모든 페이지의 모든 항목을 선택하거나 개별 노드에 해당하는 확인란을 수동으로 선택할 수 있습니다. 계속하려면 하나 이상의 확인란을 선택해야합니다.
이제 기본값을 설정하고 저장하십시오.