ビューのページタイトルを変更し、カスタムタイトルを設定する


7

ビューとdrupal 7を使用しています。引数をURLで渡し、これをビューページのタイトルとして使用します。これは、タイトルの上書きチェックボックスを使用することで可能です。しかし、私はこのタイトルを変更したいと思います。つまり、コンテンツのフォーマットとトリミングを行い、タイトルとして必要なものだけを表示します。どうすればできますか。


現在、ビューの統合も提供するページタイトルコントリビューションモジュールがあります。
Refineo、2012年

あなたはメタタグモジュールでそれを達成することができます。このモジュールを使用すると、構造化メタデータを自動的に提供できます。
heilop 2013年

回答:


7

私が間違えなければ、ユーザーインターフェースからそれを行うことはできません。ただし、カスタムモジュールにフックを実装し、使用可能な変数を取得して、独自のロジックを適用し、必要なタイトルを設定できます。

Drupalで表示するページのタイトルを設定する例を見つけることができます。

function HOOK_views_pre_render(&$view) {
  if ($view->name == 'taxonomy_term' && $view->current_display == 'page') {
    drupal_set_title('Your Page Title');
  }
}

こんにちは、このフック関数my_module_views_pre_renderのURLで渡される引数を取得できますか?変更して使用できるようにします。この関数をテンプレートファイルに記述できますか?
ハッカー2009

引数は、その関数に渡される$ view変数内にある必要があります。このようなロジックは、テーマレイヤーではなく、カスタムモジュールに属しています。
marcvangend 2011

また、ビュー表示のタイトルが「<none>」に設定されていることも確認する必要がありました。それ以外の場合、ビューに入力したタイルは常にフックからの値をオーバーライドします。
ジョン

13

うまくいくものを見つけた

function MYMODULE_views_pre_render(&$view) {
  if ($view->name == 'menu') {
    $view->build_info['title'] = "TEST TITLE";
  }
}

1
レンダーキャッシュを有効にしていると、これは機能しませんでした
David Meister

キャッシュも私の問題でした。hook_views_pre_viewを使用することで解決しました(@MPDからの応答を参照)。
Keven

8

少し異なるコンテキストで同様の質問がありました。いつ、どこでパネルはビューからタイトルを取得しますか?

私の解決策は

function foo_views_pre_view (&$view, &$display_id, &$args)
{
  $view->display[$view->current_display]->display_options["title"] =
  $view->display[$view->current_display]->handler->options["title"] = "Foo";
}

このフックは、レンダーキャッシュを有効にしても機能しましたが、ユースケースにdrupal_set_title()も追加する必要がありました
David Meister

私の場合は、$view->display['default']->handler->options['title']ではなく変更する必要がありました$view->current_display
Keven

5

使用できます$view->set_title()

function mymodule_preprocess_views_view(&$variables) {
  $view = $variables['view'];
  if ($view->name == 'machine_name' && $view->current_display == 'display_machine_name') {
    $view->set_title('New Display Title');
  }
}

2

別のモジュールを使用する代わりに、使用しているテーマに次のコードを追加しました。

/**
 * THEME_PREPROCESS_VIEWS_VIEW
 * @param type $vars
 * 
 */
function MYTHEME_preprocess_views_view(&$vars) {
  // view block 
  if ($vars['view']->name == 'viewName') {
      //update your title
      $vars['view']->build_info['title'] = '---Title---';
    }
}

MYTHEMEを、使用しているテーマのマシン名に置き換えます。テーマのtemplate.phpファイルに示したコードを追加します。


1

hook_views_pre_render()モジュールに実装できます。

/**
 * Implements hook_views_pre_render
 */
function MYMODULE_views_pre_render(&$view) {
  switch ($view->name) {
    case 'VIEW_NAME':
      // Your code here         
      break;
  } 
}

おかげで、この関数では$ viewに「title」変数が表示されません。
giorgio79

1

同じ問題があります。以下は私のために働いた唯一のコードです。

function MYMODULE_NAME_preprocess_views_view(&$vars) {
  // If it is the view you want to change
  if ($vars['view']->name == 'MYMODULE_NAME') {
    // Override view's title, drupal_set_title() was not working
    $vars['view']->build_info['title'] = 'MY CUSTOM TITLE';
  }
}

0

「mymodule」モジュールを作成し、hook_views_pre_build()実装を使用したと想定します。

このステップでビューのタイトルを変更できるかどうかはわかりませんが、他の可能性があるかもしれません。

まず、ページタイトル(現在ビューページによって生成されている)を変更しようとしている場合は、を追加してみますdrupal_set_title('My new title');

function mymodule_views_pre_build(&$view) {
  if ($view->name == 'view_machine_name') {
    drupal_set_title('New title');
  }
}

これは実際にはビュータイトルを変更しませんが、ページタイトルを上書きするのに役立ちます。それが機能しない場合は、フックがフックの後にページタイトルを出力することを意味し、別のフックを見つける必要があります。

別の解決策は、ビューの引数をタイトルとして使用することです。ビューにはこの機能が組み込まれており、引数設定にそのためのフィールドがあります。ビューが提供するデフォルトの分類法ビューの最初の引数で確認できます。これは良い例です。


今のところ幸運はありません。私はページタイトルもインストールしており、それがどういうわけか他のすべての設定を上書きしているようです。
giorgio79
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.