1

Drupal で遊んでいて、サイトのスローガンに 2 行目を追加しようとしています。以下は、私が作業している page.tpl.php の一部です。

<?php if ($site_name || $site_slogan): ?>
    <div id="name-and-slogan" class="hgroup">
        <?php if ($site_name): ?>
            <h1 class="site-name">
                <a href="<?php print $front_page; ?>" title="<?php print t('Home'); ?>">
                    <?php print $site_name; ?>
                </a>
            </h1>
        <?php endif; ?>
        <?php if ($site_slogan): ?>
            <p class="site-slogan"><?php print $site_slogan; ?></p>
        <?php endif; ?>
        <?php
            /* ADDED */
            $node = menu_get_object();
            $siteslogan2 = field_get_items('node', $node, 'field_siteslogan2');
        ?>
        <?php if ($siteslogan2): ?>
            <p class="site-slogan2"><?php print $siteslogan2; ?></p>
        <?php endif; ?>
    </div>
<?php endif; ?>

基本的に、siteslogan2 (field_siteslogan2) というフィールドを持つ新しいコンテンツ タイプを追加しました。ここで取得して表示したいと思います。最初の問題は、 $node var が定義されていないことです (ドキュメントによれば定義されているはずですが)。2 つ目の問題は、EntityMalformedException: Missing bundle property on entity of type node. in entity_extract_ids()手動で定義して実行すると発生することです。

まず第一に、これは問題に対する正しいアプローチですか?次に、なぜ EntityMalformedException を受け取るのですか?どうすれば修正できますか?


var_dump($node)NULL を生成します。良くない $node コンテンツを取得する方法に違いありません。それが言うとき、ドキュメントは私には少し不可解です:

$node: ページに関連付けられた自動的にロードされるノードがあり、ノード ID がページのパスの 2 番目の引数である場合のノード オブジェクト (例: node/12345 および node/12345/revisions、comment/reply/ ではない) 12345)。

4

1 に答える 1

1

この種のことは、テーマの template.php で前処理関数を使用して、 $varables 配列で変数を定義および設定することで実行できます。

この変数は、前処理を行ったテンプレート (ページ、ノード、フォームなど) で使用できるようになります。テーマの template.php ファイルには、これを行う方法に関するコメントが含まれている可能性があります。

たとえば、template.php でこれを行うと、変数 $display_header の値が作成または変更され、node.tpl.php で使用できるようになります。

function yourthemename_preprocess_node(&$variables, $hook) {
  $variables['display_header'] = false;
}

その後、この変数を使用するようにノード テンプレート ファイルを変更できます。

サブスローガンのような単純なものについては、テーマに設定を追加して、他のテーマ設定と同様にテーマの構成ページに表示されるようにすることができます。

これには、テーマの theme-settings.php に次の関数を実装する必要があります。

function yourthemename_form_system_theme_settings_alter(&$form, $form_state) {}

これにより、新しい設定に関する情報が設定フォームに提供されます。このような:

https://api.drupal.org/api/drupal/modules!system!theme.api.php/function/hook_form_system_theme_settings_alter/7

うまくいけば、それで十分です。

于 2013-06-28T10:53:51.360 に答える