2011-04-06 2 views
1

저는 Drupal (v6) 및 PHP를 처음 사용하고 있으며 사용자 정의 모듈을 통해 일부 내용을 구현하려고합니다. 튜토리얼을 따라 드루팔 (Drupal이 내 모듈을 인식하고 내 사용자 정의 페이지의 URL을 등록하는 방법을 알아 냈습니다. 그것은 내가 의도 한 것처럼 네비게이션에 나타납니다 - 지금까지 그렇게 좋았습니다.Drupal 6 페이지의 콜백 내에서 별도의 .php를 호출하고 포함하십시오.

내 장난감 예제에는 좋지만 실제로 쓰려는 페이지에는 좋지 않습니다. 지금은이 있습니다

function twtevents_menu() { 

    $items = array(); 

    $items['gingerbread'] = array(
    'title' => 'Gingerbread Gallery', 
    'page callback' => 'twtevents_gallery_gingerbread', 
    'access arguments' => array('access twtevents content'), 
    'type' => MENU_NORMAL_ITEM 
); 

    return $items; 
} 

function twtevents_gallery_gingerbread() { 
    // content variable that will be returned for display 
    $page_content = ''; 

    $page_content = '<p>'. t("Some super-cool content") .'</p>'; 

    return $page_content; 
} 

을하지만 $page_content = '<p>'. t("Some super-cool content") .'</p>';의 스타일에 크고 복잡한 페이지를 쓰고 싶지 않아 - 계속적으로합니다.

나는 가까운이에 스타일의 실제 페이지를 작성하려면 : PHP 코드 오히려 반대보다, HTML 마크 업에 뿌려

<div class="comment<?php print ($comment->new) ? ' comment-new' : ''; print ' '. $status ?> clear-block"> 
    <?php print $picture ?> 

    <?php if ($comment->new): ?> 
    <span class="new"><?php print $new ?></span> 
    <?php endif; ?> 

    <h3><?php print $title ?></h3> 

</div> 

.

내 기능에서는 include($path)을 성공적으로 호출 할 수 있지만 (물론)이 접근 방식은 내 페이지의 출력을 broser의 왼쪽 상단 코넷에 배치합니다 ... 별개의 출력을 보내야합니다. 내 콜백 함수의 반환 페이지로.

거기에 PHP 기능이 있습니까? 드루팔 (Drupal) 기능? 모범 사례?

답변

1

Kniganapolke가 말했듯이, 후크 테마 구현이 템플릿을 호출하기를 원합니다.

같은 것;

function twtevents_theme(){ 
    return array(
     'template' => 'twtevents_gallery_gingerbread', 
     'arguments' => array() 
    ); } 

그런 다음 모듈 폴더에 twtevents_gallery_gingerbread.tpl.php라는 파일에 템플릿 코드를 삽입.

그런 다음 페이지 콜백을 업데이트하여 다음과 같은 테마 함수를 호출하십시오.

function twtevents_gallery_gingerbread(){ 
    return theme('twtevents_gallery_gingerbread'); 
} 

이제 여기 중요한 비트 - 당신은 당신이 당신의 드루팔 캐시를 삭제해야합니다 모듈에 테마 후크를 추가 한 후, 그렇지 않으면 새 템플릿을 찾을 수 없습니다.

+0

고마워! 두 대답은 모두 매우 도움이되었습니다. PHP/Drupal newb로, 코드 예제가 제 상황에 맞게 조정되어 더 완벽 해졌습니다 (twtevents_gallery_gingerbread() 함수 전체보기). –

2

모듈에서 사용자 지정 템플릿 파일을 사용하려면 hook_theme 구현을 제공해야합니다. 다음은 advanced forum 모듈의 예입니다.

function advanced_forum_theme() { 
    // ... 
    $items['advanced_forum_topic_header'] = array(
     'template' => 'advanced_forum-topic-header', 
     'arguments' => array(
     'node' => NULL, 
     'comment_count' => NULL, 
     ) 
); 
    // ... 
    return $items; 
} 

이 훅이 호출되는 방법입니다

// Build the topic header 
    $variables['topic_header'] = theme('advanced_forum_topic_header', 
             $variables['node'], 
             $variables['comment_count']); 

레이아웃이 포함 된 템플릿 파일 advanced_forum-topic-header.tpl.php입니다.

자세한 내용은 다음 링크를 참조하십시오. "Using hook_theme to style module output", hook_theme description for Drupal 6.

+0

+1 - 통찰력에 감사드립니다. –