web-dev-qa-db-ja.com

特定のコンテンツタイプのサイトロゴを変更する

私は本当にシンプルなサイトを構築していて、今この質問に出くわしました。サイトにはいくつかのコンテンツタイプがあり、そのうちの1つはモデレートWikiとして機能します(特定の役割を持つユーザーのみがそのコンテンツを作成/編集できます)。これらのノードのリストを表示するとき、またはフルモードでそのコンテンツタイプのノードを表示するとき、サイトのロゴを変更したいと思います。 "My site"ではなく、"My site [[wiki]]"のように言います。

私の最初の考えは、コンテキストに基づいてテーマ設定を変更するためにコンテキストを微調整することでした。残念ながら、それを取得する方法が見つかりませんでした:/

私はここで利用可能な回答に飛び込んできましたが、答えはないようですが、いくつかの同様の質問が異なるシステムを通じてこの主題に取り組んでいます:

  • 異なる言語で異なるロゴを表示しようとして、i18nと変数モジュールに依存しています。 i18nおよび変数のスレッドを参照
  • 2つ目は、目的の画像へのパスを手書きして、変数を追加します(node-type.tplファイルに直接配置するかどうかは明らかではありません(そして、私はそれが気に入らない:-/)...- tplの「乱用」のスレッドを参照:D

特定のコンテンツタイプに対してこのカスタムロゴを取得するための最良のアプローチは何かに関するアイデアはありますか?

ありがとう:)

回答で提供されたコードは適切に機能していませんでしたが、コードを適合させて機能させました。

function YOURTHEMENAME_preprocess_page(&$vars, $hook) {
  if (isset($vars['node'])) {
  // If the node type is "blog" the template suggestion will be "page--node--blog.tpl.php".
   $vars['theme_hook_suggestions'][] = 'page__node__' . str_replace('_', '--', $vars['node']->type);
   }
}

この関数を使用して、調整可能なカスタマイズされたpage.tpl.phpを取得しました。代替ロゴのURLパスをハードコーディングするのは洗練されていないように見えるので、このコンテンツタイプの$ logo値を変更するか、テーマに追加の設定を追加するだけです。

4
versvs

最も簡単な方法は、コンテンツタイプのtplを作成して、以下の手順に従うことです。

最初に、以下のようにpreprocess_page関数を作成します。これは、template.phpファイルに入ります。

function YOURTHEMENAME_preprocess_page(&$vars) {
  if (isset($vars['node']->type)) {
    $vars['theme_hook_suggestions'][] = 'page__' . $vars['node']->type;
  }
}

これで、コンテンツタイプごとに次のような新しいpage.tplを作成できます。

page__CONTERNTTYPENAME.tpl.php

既存のpage.tpl.phpのコンテンツ全体をこれにコピーして、ロゴを目的のロゴに置き換えることができます。

禅のテーマでは、ロゴはページにあります。tplは次のように印刷されます。

<?php if ($logo): ?>
      <a href="<?php print $front_page; ?>" title="<?php print t('Home'); ?>" rel="home" id="logo"><img src="<?php print $logo; ?>" alt="<?php print t('Home'); ?>" /></a>
    <?php endif; ?>

ここで、画像のsrcをロゴへの直接パスに置き換えることができます。

4