2011-02-11 3 views
1

드루팔 (Drupal 7)로 옮겨 가면서 나는 갑자기 내가 이해한다고 생각했던 것에 대해 혼란스러워했다. (Drupals 5와 6에서 보낸 상당한 시간 동안 이해할 필요가 없었다. -페이지가 드루팔 (Drupal 7)의 노드보다 먼저 생성됩니까?

모듈에 대해 작업 할 것이며 코드 개발 과정에서 dsm() 및/또는 drupal_set_message()에 대한 몇 가지 호출을 던질 것입니다. 이전 작업에서 이러한 호출은 항상 I 예상 - 다음 페이지 제출시 dsm은 실행되어 제작 한 내용을 생성하며 결과는 페이지에서 끝납니다 .Drupal 7에서는 동일한 작업을 수행하지만 표시되고 있음을 알았습니다. 너무 늦은 한 페이지 - 나는 그들을 볼 수있는 페이지를 새로 고쳐야 만합니다. 이것은 Drupal 7 평가 모델이 선택된 페이지 템플리트가 평가되고 그 다음에 만 - 노드가 di 페이지에 스플레이되어로드되고 렌더링됩니다. 물론 watchdog() 및 sleep()을 사용하는 몇 가지 테스트에서이를 확인합니다. 페이지 템플리트가 페이지 내부의 노드가 처리되기 전에 확실히 처리되기 시작합니다. (이것은 표준 D7 페이지 템플리트의 아주 약간 변경된 버전으로, 내부 D7 동작의 펑키 한 비틀림, btw가 없으며 캐싱과 관련하여 특별한 일을하지 않습니다. Config> Development> 성능이 꺼져 있습니다.)

메시지 동작을 설명합니다. 페이지 템플릿은 페이지 렌더링 프로세스 시작시 사용할 수있는 메시지를 올려 놓은 다음 노드에서 작동합니다. 노드가 렌더링되는 동안 메시지가 생성되면 메시지 스택으로 이동하지만 메시지 스택은 페이지 템플리트에 의해 이미 렌더링 (및 지워짐)되어 있으므로이 버전의 페이지에는 표시되지 않습니다. 그러나 이것은 잘못된 것 같습니다 - 나는 그 메시지를 페이지의 즉각적인 표현의 일부로 나타나기를 원합니다. 나는 또한 D6이 이런 식으로 행동하지 않는다는 것을 확신한다 - dsm() 메시지가 곧 나타날 것이다. 이것은 디버깅 문제가 아닙니다. 그것은 또한 폼 검증 코드를 엉망으로 만들고 있습니다. 폼 검증 코드는 양식 제출에 의해 생성 된 페이지에 나타나지 않습니다. 정확히이 이유 때문입니다.

아니면 어쨌든 생각합니다. 내가 미쳤거나 미혹 되었는가, 아니면 다른 것인가? 이 겉보기에 새로운 행동으로 이어지는 D7의 변화가 있었습니까? 아니면 혼란 스럽습니까? 어떤 설명이든 거기에 있을지도 모르는 것에 대해 많은 감사드립니다.

답변

2

정확하게 dsm() 호출을 추가하고 있습니까?

상태 메시지 http://api.drupal.org/api/drupal/includes--theme.inc/function/template_process_page/7에 테마된다

그 단계 이후에 추가되는 모든 메시지는 그 예를 들어 page.tpl.php에 만 다음 페이지에 표시됩니다 (D6에서 template_preprocess_page이었다). D5에 대해서는 전혀 몰랐지만 이것이 D6에서 정확히 동일합니다.

메뉴 콜백 처리 중에 발생하는 모든 작업은 동일한 페이지에서 실행되고 표시되어야합니다.

+0

노드에 dsm 호출을 넣을 수 있습니다 (예 : something.tpl.php). 이 결과는 제출 된 페이지 다음 페이지에 표시됩니다. 어쨌든, 방금 D6과 D7 사이트에서 watchdog 구문을 something.tpl.php와 page-something.tpl.php 노드에 넣는 테스트를 반복했습니다. D6에서 노드 템플리트는 페이지 템플리트보다 먼저 실행됩니다. D7에서 페이지 템플리트가 노드 템플리트보다 먼저 실행됩니다. template.php 파일을 확인한 결과,이 파일에 영향을 줄 수있는 부분은 볼 수 없습니다. 심지어 더 의아해 했어. –

+0

아, 네, 가능합니다. 왜냐하면 D7이 모든 것을 가능한 한 늦게 렌더링하려고하기 때문입니다. – Berdir

+0

오, 기쁨. theme.inc의 메시지 렌더링 코드를 내 테마의 preprocess_page 함수로 옮겨 보려고했지만 아무 소용이 없습니다. 이것에 관해 할 일이 있습니까? 이 문제에 관해서 막 생각 해낸 것이 아니라면, 그것은 아주 큰 것처럼 보입니다. –