it-swarm-ja.com

カスタムモジュールからテンプレートファイルに変数を渡すにはどうすればよいですか?

カスタムモジュールからテンプレートファイルに変数を渡す最も簡単な方法を知る必要があります。 custom.moduleを作成し、custom.tpl.phpをモジュールフォルダーに配置しました。

function custom_menu(){
  $items = array();

  $items['custom'] = array(
    'title' => t('custom!'),
    'page callback' => 'custom_page',
    'access arguments' => array('access content'),
    'type' => MENU_CALLBACK,
  );

  return $items;
}

function custom_page() {

    $setVar = 'this is custom module';
    return theme('custom', $setVar);    
}

私はテーマ機能を追加しましたが、機能していません、誰でもこのコードの何が問題になっているのかを示唆できますか

function theme_custom($arg) {
  return $arg['output'];
}

function custom_theme() {
  return array(
    'Bluemarine' => array(
        'variables' => 'output',
        'template' => 'Bluemarine',
     ),
  );
}
8
Kamran Akhter

モジュールを記述しているDrupalバージョンから独立して、コードに2つのエラーがあります:

  • 「Bluemarine」をテーマ関数として定義しますが、次に「カスタム」テーマ関数を呼び出すtheme('custom')を呼び出します
  • テンプレートファイルを使用するテーマ関数として「カスタム」を定義すると、theme_custom()は呼び出されません

Drupal 6のコードを記述している場合、コードは次のようになります。テーマ関数の名前はcustomであると想定しています。

_function custom_menu(){
  $items = array();

  $items['custom'] = array(
    'title' => t('custom!'),
    'page callback' => 'custom_page',
    'access arguments' => array('access content'),
    'type' => MENU_CALLBACK,
  );

  return $items;
}

function custom_theme() {
  return array(
    'custom' => array(
      'arguments' => array('output' => NULL),
      'template' => 'custom',
     ),
  );
}

function custom_page() {
    $output = 'This is a custom module';
    return theme('custom', $output);    
}

function theme_custom($output) {
}
_

テンプレートファイルは、モジュールが実装している場合、_$output_、およびtemplate_preprocess_custom()で設定された変数にアクセスできます。

たとえば、次のようなコードを実装できます。

_function template_preprocess_custom(&$variables) {
  if ($variables['output'] == 'This is a custom module') {
    $variables['append'] = ' and I wrote it myself.";
  }
}
_

このコードを使用すると、テンプレートファイルは_$output_および_$append_にアクセスできます。

テンプレートファイルを使用するテーマ関数の例として、 node_theme() で定義されている theme_node() を見て、それが node。 tpl.php テンプレートファイルとして; Nodeそのテーマ関数のモジュールによって実装される前処理関数は template_preprocess_node() です。

6
kiamlaluno

間違ったテーマ関数を呼び出しています。 function theme_customの代わりにfunction theme_Bluemarineにする必要があります。 hook_theme() の変数に配列を渡す必要もあります。簡単な例 here を参照してください。

あなたの例を使用する(テンプレートとテーマ関数をcustomに変更した後):

function custom_menu(){
  $items = array();

  $items['custom'] = array(
    'title' => t('custom!'),
    'page callback' => 'custom_page',
    'access arguments' => array('access content'),
    'type' => MENU_CALLBACK,
  );

  return $items;
}

function custom_page() {
  $setVar = 'this is custom module';
  return theme('custom', array('output' => $setVar));
}

function custom_theme() {
  $path = drupal_get_path('module', 'custom');
  return array(
    'custom' => array(
        'variables' => array('output' => null),
        'template' => 'custom',
     ),
  );
}

今度はcustom.tpl.phpに<?php print $output; ?>が必要です

3
Laxman13