2017-09-21 8 views
0

私はカスタムブロックを作成しました。関連モジュールのtplに関連付けたいと思います。drupal 7 - カスタムブロックを作成してそれにtplを割り当てます

現在、私はテーマフォルダにあるtplファイルのみを関連付けることができます。

私はそれがモジュールのtplであることを望み、hook_menuを使用してそれにいくつかのデータを渡します。私の知る限り、テーマフォルダにはtplがありません。

これは可能ですか?

これができない場合は、テーマとしてコンテナとしてtplを使用し、その内容を渡すためにhook_menuを使用したいと思いますが、モジュールで作成するtpl /テーマを返す方法はわかりません。

誰かが私を助けることができますか?

私は以下の例はあなた

function MYMODULEBLOCK_block_info() { 
    $blocks['MYMODULE_BLOCK_NAME'] = array(
    'info' => t('MYMODULE BLOCK TITLE'), 
    'cache' => DRUPAL_NO_CACHE, //there are a number of caching options for this 
); 

    return $blocks; 
} 

function MYMODULEBLOCK_block_view($delta = ''){ 
    switch($delta){ 
    case 'MYMODULE_BLOCK_NAME': 
     if(user_access('access content')){ //good idea to check user perms here 
     $block['subject'] = t('MYBLOCK_TITLE'); 
     $block['content'] = MYMODULE_BLOCK_FUNCTION_ITEMS(); 
     return $block; 
     } 
     break; 
    } 
} 

function MYMODULE_BLOCK_FUNCTION_ITEMS(){ 
    $items = array(); 
    $items['VAR_ONE'] = array('#markup' => 'VAR_ONE_OUTPUT'); //this is the simplest kind of render array 
    $items['VAR_TWO'] = array(
         '#prefix' => '<div>', 
         '#markup' => 'VAR_TWO_OUTPUT', 
          '#suffix' => '</div>', 
         ); 
// this is where the $items get sent to your default MYMODULE_BLOCK.tpl.php that gets 
// registered below 
     return theme('MYMODULE_BLOCK_FUNCTION_ITEMS', array('items' => $items)); 
    } 

//here you are registering your default tpl for the above block 
function MYMODULE_theme() { 
    $module_path = drupal_get_path('module', 'MYMODULE'); 
    $base = array(
    'path' => "$module_path/theme", 
); 
    return array(
    'MYMODULE_BLOCK_FUNCTION_ITEMS' => $base + array(
     'template' => 'MYMODULE_BLOCK', //leave off .tpl.php 
     'variables' => array('items' => NULL,), 
    ), 
); 
} 

(DRUPAL_NO_CACHE除く)大文字のすべてのものは、あなたが

を好きな名前が付けられ、その後、テーマ/そこにすべきと呼ばれる自分のモジュール内のサブフォルダにすることができ役に立てば幸い

答えて

1

それでこれを持っている可能性がMYMODULE_BLOCK.tpl.phpと呼ばれるファイルである:

<?php 

$items = $variables['items']; 

print render($items['VAR_ONE']); 
print render($items['VAR_TWO']); 

そして、あなたがしたい場合、あなたは実際には「デフォルト」モジュールのimpleを上書きする可能性があなたの精神作用あなたがブロックに望むように自分のテーマにMYMODULE_BLOCK.tpl.phpのために作られた - のmymodule - DELTA.tpl.php

1

次のように私はこれを行う方法がある...

function YOURMODULE_menu(){ 
    $items['somepage'/%] = array(
     'title' => 'Some page title', 
     'page callback' => 'YOURMODULE_page', 
     'page arguments' => array(1), 
     'type' => MENU_CALLBACK, 
     'access arguments' => array('access content'), 
    ); 
    return $items; 
} 

function YOURMODULE_page($data){ 
    $output = 'value from YOURMODULE module! = '.$data; 
    return theme('theme_file',array('results' => $output)); 
} 

function YOURMODULE_theme() { 
    $path = drupal_get_path('module', 'YOURMODULE'); 
    return array(
     'theme_file' => array(
      'variables' => array('results' => null), 
      'template' => 'theme_file', 
      'path' => $path, 
     ), 
    ); 
} 

あなたのtplファイルtheme_file.tpl.phpをモジュールディレクトリに置き、その中に以下のコードを使用します。

<?php print $results; ?> 

または

function YOURMODULE_theme() { 
    return array(
     'theme_file' => array(
      'variables' => array('results' => null), 
      'template' => 'theme_file', 
     ), 
    ); 
} 

置きあなたのテーマディレクトリ内とその内部のあなたのTPLファイルtheme_file.tpl.php結果を見るためにあなたのhttp://yourdomain.com/somepage/somedataに以下のコード

<?php print $results; ?> 

ゴーを置きます。

関連する問題