2010-02-18 4 views
8
나는 일반 첨부 파일의 텍스트를/반환하는 함수와 드루팔 모듈이

,메뉴 콜백 함수에서 드루팔에 untemplated 출력을 반환

function mymodule_menu() { 
$items = array(); 
$items[MY_PATH] = array(
'title' => 'some page', 
'page callback' => 'myfunction', 
'type' => MENU_CALLBACK, 
); 
} 

function myfunction() 
{ 
drupal_set_header('Content-Type: text/plain'); 
return "some text"; 
} 

그러나이 page.tpl.php 템플릿의 페이지를 반환하지만 나는 그것을 예언하지 않기를 원한다. 나는 그 텍스트를 일반 텍스트로 되돌리기 위해 그 주제를 어떻게 오버 라이딩 할까?

감사합니다,

답변

0

템플릿 파일 (reference) 정의 할 수 있습니다 모듈 : 해당 페이지의 새로운 .tpl.php 파일을 작성하여

<?php 
function mymodul_preprocess_page(&$variables) { 
    foreach ($variables['template_files'] as $file) { 
    $template_files[] = $file; 
    if ($file == 'page-node') { 
     $template_files[] = 'page-'. $variables['node']->type; 
    } 
    } 
    $variables['template_files'] = $template_files; 
} 
?> 

합니다. 예 :

페이지 module.tpl.php

페이지 module.tpl.php 만 간단한 페이지, 예를 들어, 일해야합니다 barebones.tpl.php 단지

<?php 
    drupal_set_header('Content-Type: text/plain'); 
    print $barebones; 
?> 

해당 템플릿 후크 수 포함 - 당신은 HTML과 같은 템플릿을 만들 것입니다 경우

<?php 
print $content; 
?> 
+0

안녕하세요, 감사합니다! 텍스트 파일은 콘텐츠 유형이 아니므로 php/database에서 생성 된 보고서이므로 의미가 확실하지 않습니다. 그러나 나는 방금 깨달았습니다. 내가 할 경우 "whateever"라고 인쇄했습니다. 아니요 "무엇이든"을 반환합니다. drupal은 페이지 템플릿을 표시하지 않습니다.나는 여전히 당신이 임의의 내용에 page-plain.tpl.php 템플릿을 적용하기 위해 드루팔 (Drupal)을 얻는 방법을 알고 싶습니다 ... – Tom

9

이 일반 텍스트

function myfunction() { 
    drupal_set_header('Content-Type: text/plain'); 
    print "some text"; 
    exit(0); 
} 
+1

+1 - 이것은 드루팔 자신이 'unthemed'콘텐츠를 반환하는 방법입니다. js 콜백 또는 파일에 대한 응답 (개인 파일이 사용 가능한 경우) 이에 대한 예를 보려면 http://api.drupal.org/api/function/file_transfer/6을 참조하십시오. –

+1

경고의 단어가 적용됩니다 : exit()/die()를 통한 일반적인 Drupal 요청 처리를 끝낼 때 * hook_exit가 호출되지 않습니다 *. 따라서 이러한 경우에는 의존하지 마십시오. –

+0

어떻게 작동하는지 알고 싶습니다. –

1

를 반환합니다 YOURTHEME_preprocess_html()에 다음과 같이 입력하십시오.

function YOURTHEME_preprocess_html(&$variables) { 
    if (array_key_exists('barebones',$_REQUEST)) { 
     $variables['barebones'] = $variables['page']['foo']['bar']; 
     $variables['theme_hook_suggestions'][] = 'html__barebones'; 
    } 
} 

drupal/foo/bar?barebones과 같은 추가 검색어? barebones를 사용하여 페이지를 호출하면 베어 본 버전이 반환됩니다.

결과를 얻는데 까다로운 부분이 있습니다. Drupal이 텍스트를 남긴 곳을 확인하려면 var_dump($variables['page']) 그것은 당신이 사용하지 않는 텍스트를 렌더링하는 데 사용되는 모든 종류의 정보로 둘러싸인 렌더링 배열 안에 자리 잡고 있습니다. 궁금한 점이 있다면 그걸 인쇄하고 exit()를 호출하는 것이 더 효과적이지 않겠습니까?

6

또는 메뉴 콜백 정의에서 'delivery callback'설정을 사용할 수 있습니다. 이제 페이지 콜백 함수가 가장 좋고 간단한 솔루션 오히려 등 모든 전형적인 테마 마크 업을 출력하는 것입니다 drupal_deliver_html_page(),

function mymodule_menu() { 
    $items = array(); 
    $items['MY_PATH'] = array(
    'title' => 'some page', 
    'page callback' => 'myfunction', 
    'type' => MENU_CALLBACK, 
    'delivery callback' => 'mymodule_deliver_page', 
); 
    return $items; 
} 

function mymodule_deliver_page($page_callback_result) { 
    print $page_callback_result; 
    exit(0); 
} 
+0

을 사용하면이 답변이 Drupal 7에도 적용됩니다. 나는 '배달 콜백'이 드루팔 (Drupal 7)에서 이것을 처리하는 가장 좋은 방법이라고 생각합니다. 일반적으로 drupal_exit(); 는 Drupal 7에서 사용해야합니다. https://api.drupal.org/api/drupal/includes%21common.inc/function/drupal_exit/7 이렇게하면 hook_exit() 등이 호출됩니다. – Phizes

2

를 호출하는 것보다 그냥 인쇄 및 종료,하는 사용자 정의 기능을 통해 실행됩니다 콜백을 사용하여 HTML을 인쇄하고 아무 것도 반환하지 않습니다.

예를 들어

,

// Hooks menu to insert new url for drupal 
 
function MYMODULE_menu() { 
 
    $items = array(); 
 
    $items['member-stats.php'] = array(
 
    'page callback' => '_MYMODULE_menu_callback', 
 
    'access callback' => TRUE, 
 
); 
 
    return $items; 
 
} 
 

 
// Callback prints and doesn't return anything 
 
function _MYMODULE_menu_callback() { 
 
    print "Hello, world"; 
 
}

관련 문제