후크를 사용하여 새 컨텐츠를 업데이트 / 삭제 / 추가 한 후 캐시를 삭제하는 방법은 무엇입니까?


11

Drupal 7에는 사용자 정의 서비스 모듈과 사이트가 있으며 편집기에서 새 컨텐츠를 추가하거나 기존 컨텐츠를 업데이트 한 후 캐시를 삭제하는 태스크가 있습니다.

Cache Actions 라는 모듈에 대해 읽었 지만 앞서 말했듯이 사용자 정의 모듈에서 함수를 만들어야합니다.

또한 Drupal 후크에 대해 읽기 시작했지만 여전히이 작업을 구현하는 방법에 대한 단서가 없습니다. 어떤 제안? 감사.


이것은 몇 가지 방법으로 구현 될 수 있습니다. 편집자는 얼마나 자주 새 컨텐츠를 업데이트 / 삭제 / 추가합니까?
Peter

모바일 앱용 웹 서비스를 만들기 위해 drupal을 데이터 관리자로 사용하기 때문에 매우 흔합니다. 데이터를 얼마나 자주 추가하거나 수정하는지 정확히 알 수는 없지만 변경이 발생할 때마다 캐시를 ​​지우는 것이 주요 요청입니다.
Erzei

답변:


12

이미 사용자 정의 모듈을 가지고있는 것처럼 들리지만 모듈 개발자 안내서 를 보지 못한 경우에 대비합니다 .

찾고있는 고리는 hook_node_insert()and hook_node_update()이며 캐시를 지우는 기능은 cache_clear_all()또는 drupal_flush_all_caches입니다. 전자는 특정 캐시 저장소 (및 특정 캐시 항목)를 지우고 후자는 모든 것을 완전히 지 웁니다.

예를 들면 다음과 같습니다.

function MYMODULE_node_insert($node) {
  drupal_flush_all_caches();
}

또는 노드가 업데이트 된 후 정적 페이지 캐시 만 지우려면 다음을 수행하십시오.

function MYMODULE_node_update($node) {
  $nodeurl = url('node/'. $node->nid, array('absolute' => TRUE));
  cache_clear_all($nodeurl, 'cache_page');
}

알았어요 질문 하나 더, .module 파일 또는 drupal의 노드 모듈 파일에 코드를 추가해야합니까?
Erzei

2
그것은 자신의 모듈 파일에 들어갑니다. 핵심 파일을 해킹하는 것은 Drupal에서 크지 않습니다 :)
Clive

1

특정 노드 캐시를 업데이트 한 후 쉽게 지울 수 있습니다. 전의. :

function MYMODULE_node_update($node) {
  $nodeurl = url('node/'. $node->nid, array('absolute' => TRUE));
  cache_clear_all($nodeurl, 'cache_page');
}

을 지정해야합니다 array('absolute' => TRUE).

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