콘텐츠 업데이트시 활성화되는 규칙을 트리거하기 위해 내 사이트의 모든 노드를 빠르게 다시 저장하려면 어떻게해야합니까?


24

내 사이트에서 특정 콘텐츠 유형을 구성하는 데 실수가있었습니다. 이러한 실수를 해결하기 위해 "기존 컨텐츠가 업데이트 될 때"몇 가지 작업을 수행하는 규칙을 만들었습니다. 그러나 내 사이트를 통해 수동으로 모든 노드를 하나씩 다시 저장하고 싶지 않습니다. 규칙 또는 뷰 대량 작업을 사용하여 모든 노드를 빠르게 다시 저장하는 방법이 있습니까?

답변:


22

VBO에는 "PHP 코드 실행"작업이 있습니다. 실행하고 "node_save ($ entity);"를 입력하십시오. 텍스트 상자에 (따옴표없이). 타임 아웃을 처리하는 동안 트릭을 수행합니다.


1
Ahh, 훨씬 빠르게 :)
Clive

5
VBO에는 "컨텐츠 저장"옵션이 있으며, 이는 자신의 PHP를 작성하지 않고도 동일하게 수행됩니다.
stevenw00

"컨텐츠 저장"옵션을 찾을 수 없지만 언급 한 php 메소드가 훌륭하게 작동했습니다! 감사!
hockey2112

PHP와 vbo 메소드를 모두 성공하지 못했습니다. 유스 케이스에서는 수동 저장 만 테이블 필드의 레이블을 올바르게 업데이트합니다. 이상한 ...
Bisonbleu

14

규칙이나 VBO에 대해서는 모르지만 짧은 코드 스 니펫을 사용하여 동일한 결과를 얻을 수 있습니다.

$nids = db_query('SELECT nid FROM {node}')->fetchCol();
foreach (node_load_multiple($nids) as $node) {
  node_save($node);
}

약간의 시간이 걸리는 노드가 많으므로 서버에서 허용하는 경우 해당 코드 시작시 시간 제한을 연장하는 것이 좋습니다. :

set_time_limit(0);

12

node_mass_update () 함수를 사용할 수 있습니다 :

module_load_include('inc', 'node', 'node.admin');
$nids = db_query('SELECT nid FROM {node}')->fetchCol();
node_mass_update($nids, array());

시간 제한에 신경 쓸 필요가 없으므로 매우 좋습니다. 노드가 10 개를 초과하면 노드 업데이트를위한 배치 프로세스가 자동으로 시작됩니다.


5
200,000 개 이상의 노드에서 완벽하게 작동했습니다. 배치를 처리합니다. devel 모듈을 사용하도록 설정 한 경우 위의 코드를 '/ devel / php'페이지에 붙여 넣기 만하면됩니다.
2pha

1
뛰어난 솔루션, 백그라운드에서 실행되므로 시간 초과 또는 사이트 성능 저하 가능성
Daniel Waters

5

업데이트 : 방금 Resave All Nodes를 만들었습니다 . 현재는 선택된 노드 유형의 모든 노드를 재 저장하기 위해 배치 프로세스를 트리거하는 양식 만 포함합니다. 현재 알파 상태입니다. Drush 명령 (베타)과 일부 테스트 (안정적)도 추가 할 계획입니다.

Drupal Resave All Nodes 양식 스크린 샷


거기에 다시 저장 노드 . 크론 실행에 사용됩니다. 그러나 수동으로 트리거 할 수도 있습니다. 다시 저장해야 할 컨텐츠 유형의 노드를 선택하십시오.

"지금 노드 복원"을 눌러 수동 재 저장을 실행하기 전에 "구성 저장"(크론 유형 및 컨텐츠 유형 선택)을 한 번해야합니다.


2

관리자 / 콘텐츠로 이동하여 게시 된 콘텐츠 유형별로 필터링하십시오. 모두 선택하고 조작 드롭 다운에서 "값 변경"을 선택하십시오. '실행'을 클릭하십시오. 다음 페이지의 속성에서 '상태'를 선택하고 게시 된 상태로 두십시오. '다음'을 클릭하십시오. 게시 된 모든 노드는 변경없이 다시 저장됩니다.

게시 취소 된 노드에 대해 반복합니다 (그러나 게시되지 않은 속성을 속성으로 선택).

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