it-swarm-ko.tech

3000 개 이상의 노드에 대한 입력 형식 변경

입력 형식을 변경 해야하는 많은 노드가 있습니다. 손으로 직접 할 수는 있지만 2014 년 크리스마스 전에는 완료되지 않습니다.

Drupal 해당 정보를 저장하는 위치는 어디입니까? SQL 쿼리를 사용하여 몇 초 만에 입력 형식을 변경하려면 어떻게해야합니까?

17
mortendk

이 en-masse를 수행하면 잠재적으로 보안 위험이 발생합니다. 특히 형식을 좀 더 관대 한 필터 세트로 변경하는 경우이 답변을 시작하겠습니다. 텍스트 형식은 저장 중에가 아니라 표시 중에 필드 출력을 수정합니다. 예를 들어 실수로 또는 의도적으로 필터를 전체 HTML 또는 PHP 코드로 설정하면 필드에서 제출 된 이전에 이스케이프 된 HTML 또는 PHP가 렌더링/실행됩니다.

이런 이유로 Drupal은 텍스트 형식을 변경할 때 기존의 모든 노드를 자동으로 업데이트하지 않습니다. 비슷한 시나리오에서 텍스트 형식의 동작은 여전히 ​​ 공개 문제 입니다.

다시 한번 : , 용이 있다는 것을 명심하십시오.

그렇게 말하면, 각 필드는 텍스트를 field_foo_format라는 열로 저장합니다. 여기서 field_foo는 필드의 기계 이름입니다. field_revision_field_foofield_data_field_foo 테이블에서 해당 열을 업데이트해야합니다.

열의 값은 filter_format 테이블에서 열 format으로 정의 된 시스템 이름입니다. 따라서 모든 필드를 업데이트하는 것은 다음과 같은 쿼리 문제입니다.

UPDATE field_revision_foo SET field_foo_format = 'new_format';
UPDATE field_data_foo SET field_foo_format = 'new_format';

변경이 필요한 각 필드에 대해.

여기에서 new_format 값을 결정할 수 있습니다. http://YOURSITE.com/admin/config/content/formats -링크 구성-URL의 숫자 또는 문자열은 new_format. 업데이트 후 캐시를 지 웁니다.

20
user7

특정 유형의 모든 노드에 대해 루프를 작성하여이 방법을 시도하십시오.

$node = node_load(nid);
$node->body[$node->language][0]['format'] = 'full_html'; // plain_text
node_save($node);
4
Ek Kosmos

나를 위해 다음이 효과가있었습니다.

update `field_revision_body` set `body_format` = 'new_body_forma' WHERE `bundle` = 'node_type'
update `field_data_body` set `body_format` = 'new_body_forma' WHERE `bundle` = 'node_type'

물론 new_body_forma와 node_type을 변경해야합니다

1
Ámon Tamás

Morten이 여기에서했던 것과 같은 상황에 빠졌고, 입력 형식을 끝내지 않은 D6 => D7 업그레이드를 사용했습니다.

이미 여기에있는 답변보다 조잡한 접근 방식을 취하고 DB 스키마를 실행하고 문자열 'format'을 포함하는 모든 열을 업데이트하여 D6 형식 값 (1, 2, 3)을 D7 컴퓨터 이름 ( filtered_html, full_html, plain_text).

https://Gist.github.com/xurizaemon/9824872

매핑을 지원하도록 하드 코딩

1 => filtered_html, 
2 => full_html,
3 => plain_text,

또한 'format'이라는 이름의 필드를 다시 쓰려고 할 수도 있습니다 (예 : "date_format", 값이 '2'인 날짜 형식이 있으면 문제입니다).

1
Chris Burgess
update field_revision_body set body_format = 'full_html' WHERE bundle IN ('book','page');
update field_data_body set body_format = 'full_html' WHERE bundle IN ('book','page');

나를 위해 트릭을했다. 캐시를 지우는 것을 잊지 마십시오

0
duck

Entity.module이 설치되어 있으면 다음 코드를 사용할 수 있습니다.

// I'm using node_save($node); 
$wrapper = entity_metadata_wrapper('node', $node->nid); 
$wrapper->body->set(array('value' => body_text, 'format'=>'full_html'));
0