it-swarm-ja.com

モジュールのnode.tpl.phpをオーバーライドする

特定のコンテンツタイプのコンテンツを表示できるモジュールを作成しました。表示はやや複雑で、オフにしてすべてをグループ化できるように、このためのモジュールを作成しました。

しかし最終的には、通常のnode.tpl.phpをカスタム.tpl.phpファイルでオーバーライドするだけです。テンプレートフォルダーにファイルを置くと、ファイルが取得され、ページが意図したとおりに表示されますが、ファイルがモジュールフォルダーにある場合、ファイルを機能させることができません。

.tplファイルと前処理の登録について多くのことを読みましたが、必要なものを組み合わせるものは何もありませんでした。

これが今のところ

function apps_theme($existing, $type, $theme, $path) {
    $items = array(
        'node--app' => array(
            'template' =>  drupal_get_path('module', 'app') . '/node--app',
            'variables' => array('node' => (object)array())
        )
    );
    return $items;
}

function apps_preprocess_node(&$vars) {
    $variables['theme_hook_suggestions'][] = 'node__app';
}
8
dazz

テンプレートをsites/all/custom/modulesに配置するか、sites/all/custom/modules/the_name_of_mymoduleに配置するかは、質問では明確ではありません。後である必要があります。

ただし、次の場合:

  • テンプレートを適切な場所に配置します。
  • admin/appearanceパスにアクセスして、テーマレジストリを強制的に更新しました。
  • キャッシュをすべて削除しました。

...しかし、まだサイコロはありません。hook_theme()実装で常にtheme_pathキーを指定できます。

<?php
function apps_theme($existing, $type, $theme, $path) {
    $items = array(
        'node_app' => array(
            // Don't specify the path in the template name.
            // Unless you have your template inside a directory within this module.
            'template' =>  'node--app',
            'variables' => array('node' => (object)array()),
            // If you want to put the tpl in another location, you can use this key.
            'theme path' => drupal_get_path('module', 'another_module'),
        ),
    );
    return $items;
}
3
amateur barista

私が見つけた解決策を投稿すると思いました:

function MYMODULE_theme($existing, $type, $theme, $path) {
  return array(
    'node__NODETYPE' => array(
      'render element' => 'content',
      'base hook' => 'node',
      'template' => 'node--NODETYPE',
      'path' => drupal_get_path('module', 'MYMODULE') . '/templates',
    ),
  );
}
3
Aronanda

私はこれに従ってそれを機能させました:

http://www.metachunk.com/blog/adding-module-path-drupal-7-theme-registry

2
dazz