Ändern Sie den Seitentitel der Ansicht und legen Sie den benutzerdefinierten Titel dafür fest

7

Ich benutze Ansichten und Drupal 7. Ich übergebe Argumente in der URL und möchte dies als Titel der Ansichtsseite. Dies ist möglich, indem Sie das Kontrollkästchen Titel überschreiben verwenden. Aber ich möchte diesen Titel ändern. dh einige Formatierungen und einige Kürzungen des Inhalts vornehmen und nur das zeigen, was ich als Titel benötige. wie kann ich es tun.

Hacker
quelle
Es ist jetzt Page Titel contrib - Modul , das bietet einen Blick auf die Integration als auch.
Refineo
Sie können dies mit dem Metatag-Modul erreichen . Mit diesem Modul können Sie automatisch strukturierte Metadaten bereitstellen.
Heilop

Antworten:

7

Wenn ich mich nicht irre, können Sie das nicht über die Benutzeroberfläche tun. Sie können jedoch einen Hook in einem benutzerdefinierten Modul implementieren, die verfügbaren Variablen übernehmen, Ihre eigene Logik anwenden und den gewünschten Titel festlegen.

Ein Beispiel finden Sie unter Seitentitel festlegen für die Ansicht in Drupal .

function HOOK_views_pre_render(&$view) {
  if ($view->name == 'taxonomy_term' && $view->current_display == 'page') {
    drupal_set_title('Your Page Title');
  }
}
Marcvangend
quelle
Hallo, kann ich das Argument in der URL in dieser Hook-Funktion my_module_views_pre_render übergeben? damit ich es ändern und verwenden kann. Kann ich diese Funktion in meine Vorlagendatei schreiben?
Hacker
Das Argument sollte sich in der Variablen $ view befinden, die an diese Funktion übergeben wird. Eine solche Logik gehört zu einem benutzerdefinierten Modul, nicht zur Themenebene.
Marcvangend
Ich musste auch sicherstellen, dass der Titel der Ansichtsanzeige auf '<keine>' gesetzt war. Andernfalls überschreibt die Kachel, die Sie in der Ansicht eingeben, immer den Wert aus dem Hook.
John
13

Ich habe eine gefunden, die funktioniert

function MYMODULE_views_pre_render(&$view) {
  if ($view->name == 'menu') {
    $view->build_info['title'] = "TEST TITLE";
  }
}
giorgio79
quelle
1
Dies funktionierte nicht für mich, als ich das Rendern von Caching aktiviert hatte
David Meister
Caching war auch mein Problem. Die Verwendung von hook_views_pre_view hat es für mich gelöst (siehe die Antwort von @MPD).
Keven
8

Ich hatte eine ähnliche Frage in einem etwas anderen Kontext: Wann und wo erhalten Panels den Titel aus einer Ansicht?

Meine Lösung war

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";
}
mpdonadio
quelle
Dieser Hook funktionierte für mich auch mit aktiviertem Render-Caching, aber ich musste auch drupal_set_title () für meinen Anwendungsfall hinzufügen
David Meister
In meinem Fall musste ich mich $view->display['default']->handler->options['title']eher ändern als die $view->current_display.
Keven
5

Sie können verwenden $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');
  }
}
eric.chenchao
quelle
2

Anstatt ein separates Modul zu verwenden, habe ich dem von mir verwendeten Thema den folgenden Code hinzugefügt.

/**
 * 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---';
    }
}

Ersetzen Sie MYTHEM durch den Computernamen des von Ihnen verwendeten Themas. Fügen Sie den Code hinzu, den ich in der Datei template.php des Themas gezeigt habe.

allabakash.g
quelle
1

Sie können hook_views_pre_render()in einem Modul implementieren .

/**
 * Implements hook_views_pre_render
 */
function MYMODULE_views_pre_render(&$view) {
  switch ($view->name) {
    case 'VIEW_NAME':
      // Your code here         
      break;
  } 
}
JürgenR
quelle
Danke, aber ich sehe keine "title" -Variable in $ view mit dieser Funktion.
Giorgio79
1

Ich habe das gleiche Problem. Das Folgende ist der einzige Code, der für mich funktioniert hat.

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';
  }
}
purab
quelle
0

Ich gehe davon aus, dass Sie ein Modul "mymodule" erstellt und dann die hook_views_pre_build()Implementierung verwendet haben.

Ich bin nicht sicher, ob Sie den Titel der Ansicht in diesem Schritt ändern können, aber es gibt möglicherweise andere Möglichkeiten.

Wenn Sie versuchen, den Seitentitel (der derzeit von der Ansichtsseite generiert wird) zu ändern, können Sie zunächst versuchen, ihn hinzuzufügen drupal_set_title('My new title');.

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

Dies ändert den Ansichtstitel nicht wirklich, kann jedoch dazu beitragen, den Seitentitel zu überschreiben. Wenn es nicht funktioniert, bedeutet dies, dass Views den Seitentitel nach Ihrem Hook ausgibt und Sie einen anderen Hook finden müssen.

Eine andere Lösung könnte darin bestehen, die Views-Argumente als Titel zu verwenden. In Views ist diese Funktion integriert. In den Argumenteinstellungen gibt es dafür ein Feld. Sie können das erste Argument in der Standardansicht für die Taxonomie überprüfen, die von Ansichten bereitgestellt wird. Dies ist ein gutes Beispiel.

E. de Saint Chamas
quelle
Sehr geschätzt, bisher kein Glück. Ich habe auch Seitentitel installiert, und das scheint irgendwie alle anderen Einstellungen zu überschreiben.
Giorgio79