Was ist der Haken, um eine Ansicht vorzuverarbeiten?

7

Was oder gibt es einen Hook, den Sie verwenden können, bevor Sie Ergebnisse in die PHP-Vorlage rendern?

Ist dieses Mittel zum Ändern der Ansichtsergebnisse auch eine schlechte Praxis? Ich versuche zu vermeiden, das PHP-Feld Ansichten zu verwenden.

Chrisjlee
quelle

Antworten:

11

Sie können etwas in dieser Richtung verwenden:

MYMODULE_views_pre_render(&$view) {

  if ($view->name=='NAMEOFTHEVIEW') {

    foreach($view->result as $r => $result) {
      // do whatever you want with each "row"
    }

  }

  // other views might go here

}

und dies ist sicherlich überhaupt keine schlechte Praxis und zumindest meiner Meinung nach den PHP-Feldern in der Ansicht selbst weit überlegen.

Jimajamma
quelle
Ich habe diesen Hook implementiert und die Ausführung ruft diese Funktion auf und kommt zur Funktionsdeklarationszeile. Aber es geht nicht in die Funktion. Was könnte das Problem sein?
Cissharp
1
In erhalten hook_views_pre_render()Sie die Zeilen nicht als Render-Arrays, was in vielen Fällen sehr hilfreich wäre.
CamilB
8

Daher wird für jeden einzelnen durch definierten Themen-Hook hook_themeeine Vorverarbeitungsfunktion aufgerufen. Der Trick bei Views besteht darin, zu wissen, was all diese tatsächlich sind.

Um die Definition aller für Ihre aktuelle Site verfügbaren Views-Themen-Hooks zu erhalten, benötigen Sie Drush. Sie können jedoch Folgendes tun:

drush @alias php-eval "var_dump(array_keys(views_theme()));"

Dadurch wird jeder für Ansichten auf der aktuellen Site definierte Themen-Hook zurückgespuckt. Für mich gab es folgendes zurück:

array(35) {
  [0] =>
  string(16) "views_mini_pager"
  [1] =>
  string(16) "views_view_field"
  [2] =>
  string(19) "views_view_grouping"
  [3] =>
  string(10) "views_view"
  [4] =>
  string(22) "views_view_unformatted"
  [5] =>
  string(17) "views_data_export"
  [6] =>
  string(28) "views_data_export_csv_header"
  [7] =>
  string(26) "views_data_export_csv_body"
  [8] =>
  string(28) "views_data_export_csv_footer"
  [9] =>
  string(28) "views_data_export_doc_header"
  [10] =>
  string(26) "views_data_export_doc_body"
  [11] =>
  string(28) "views_data_export_doc_footer"
  [12] =>
  string(28) "views_data_export_txt_header"
  [13] =>
  string(26) "views_data_export_txt_body"
  [14] =>
  string(28) "views_data_export_txt_footer"
  [15] =>
  string(28) "views_data_export_xls_header"
  [16] =>
  string(26) "views_data_export_xls_body"
  [17] =>
  string(28) "views_data_export_xls_footer"
  [18] =>
  string(28) "views_data_export_xml_header"
  [19] =>
  string(26) "views_data_export_xml_body"
  [20] =>
  string(28) "views_data_export_xml_footer"
  [21] =>
  string(14) "views_view_raw"
  [22] =>
  string(15) "views_view_list"
  [23] =>
  string(15) "views_view_grid"
  [24] =>
  string(16) "views_view_table"
  [25] =>
  string(18) "views_view_summary"
  [26] =>
  string(30) "views_view_summary_unformatted"
  [27] =>
  string(14) "views_view_rss"
  [28] =>
  string(28) "views_view_summary_jump_menu"
  [29] =>
  string(20) "views_view_jump_menu"
  [30] =>
  string(17) "views_view_fields"
  [31] =>
  string(18) "views_view_row_rss"
  [32] =>
  string(21) "views_form_views_form"
  [33] =>
  string(18) "views_exposed_form"
  [34] =>
  string(10) "views_more"
}

In meinem Fall musste ich also einige zusätzliche Zeilendaten zu views_data_export_xml_body hinzufügen. Deshalb habe ich in meinem Modul Folgendes definiert:

function my_module_preprocess_views_data_export_xml_body(&$vars) {
  $vars['themed_rows'][0]['item_1'] = 'whatever';
}

Es ist kein sehr praktisches Beispiel, aber es zeigt, wie eine Vorverarbeitungsfunktion für jeden Views-Themen-Hook erkannt, identifiziert und implementiert wird. Hoffe das hilft.

Lester Peabody
quelle
6

Ich mag diese Seite: Das Leben einer Ansicht

Views ist ein erstaunliches Modul, nicht nur wegen seiner Benutzeroberfläche zum Generieren von Abfragen, sondern auch, weil es umfassende Hooks bietet.

Manchmal verwechseln diese Haken Anfänger mit ihrer Reihenfolge.

Hier ist die Verarbeitungsreihenfolge dieser Haken für Ihre Bequemlichkeit.

Gregory Kapustin
quelle
4

Es hängt davon ab, was Sie tun möchten. Glücklicherweise befinden sich alle Ansichtsfunktionen jetzt in der Drupal-API-Referenz .

Es gibt zwei Gruppen, die Sie betrachten möchten. Es gibt die Ansichten Haken . Diese werden verwendet, um $viewan verschiedenen Stellen im Ansichtskonstruktionsprozess mit dem Objekt herumzuspielen. Die Dokumentation ist nicht so toll. Manchmal kann man anhand des Namens erraten, was man tun kann, aber normalerweise muss man dpm($view)sehen, was da ist, und Dinge in verschiedenen Haken ausprobieren. Wenn Sie die Funktionsweise einer Ansicht ändern möchten, verwenden Sie einen Hook.

Dann gibt es die Vorverarbeitungs- und Prozessfunktionen . Wie der Rest von Drupal stimmen diese eins zu eins mit den Vorlagendateien der Ansichten überein. Wenn Sie ändern möchten, wie eine Ansicht gerendert wird, verwenden Sie eine dieser Optionen.

Ich denke nicht, dass es eine schlechte Idee ist, das Ansichtsverhalten mit den Hooks zu ändern. Im Allgemeinen versuche ich, PHP-Code in der UI-Konfiguration um jeden Preis zu vermeiden.

mpdonadio
quelle
1

Sie suchen nach hook_views_pre_render () . Alle Views-Hooks sind in views.api.php definiert und sollten durchgelesen werden , wenn Sie Änderungen am Prozess zum Erstellen und / oder Rendern von View-Abfragen vornehmen möchten .

Gregorys Antwort enthält auch einen guten Link, der die Reihenfolge der Hook-Aufrufe beschreibt.

Stellen Sie jedoch sicher, dass alles, was Sie tun müssen, wirklich über einen Hook erledigt werden muss. Mit Views 3.x ist das meiste, was ich jemals in Bezug auf Markups tun musste, über die Views-Benutzeroberfläche leicht zu erreichen.

geerlingguy
quelle