it-swarm.com.de

Ansichtskopf programmgesteuert setzen

Ich weiß, dass es einen Beitrag zum Festlegen eines Kopf-/Fußzeilenwerts für Ansichten gibt hier , aber wie kann ich einen Kopf-/Fußzeilenwert für Ansichten festlegen, ohne ihn zuerst über die Benutzeroberfläche von Ansichten erstellen zu müssen?

Der Grund, warum ich einen Ansichtskopf programmgesteuert implementieren möchte, ist, dass ( a ) ich PHP-Code darin schreiben möchte, indem ich die Drupal-API nutze Dies ist in einem Textfeldfeld nicht so praktisch, wie das, das die Benutzeroberfläche für Ansichten und jedes andere Textfeldfeld bereitstellt, sowie die Tatsache, dass einige Funktionen möglicherweise nie aufgerufen werden und ( b ), weil ich die Kopf-/Fußzeile der Ansicht bedingt setzen/deaktivieren möchte.

2
mchar

Nach einigen Recherchen konnte ich meine eigene Frage beantworten, indem ich hook_views_pre_view in meinem benutzerdefinierten Modul implementierte. Die Methode set_item wird verwendet, um die Konfiguration eines Elements (Feld/Sortierung/Filter/usw.) auf einer bestimmten Anzeige festzulegen. Das $print Variable zeigt den Inhalt an, der im Ansichtskopf gerendert werden soll. Dies ist nur ein Beispiel und kann durch alles ersetzt werden. Anscheinend kann ich jetzt die Drupal API) nutzen oder sogar ein Ansichtselement bedingt setzen/deaktivieren.

/**
 * Implementation of hook_views_pre_view.
 */
function my_module_views_pre_view(&$view, &$display_id, &$args) {

  $path = $_GET['q'];
  // Construct the print link.
  $print = l(t('Display a printer-friendly version of this page'), '/print/' . $path . '/print-friendly',  array(
    'attributes' => array(
      'class' => array('print-friendly'),
      'target' => '_blank',
      'title'=> t('Display a printer-friendly version of this page.'),
      ),
    )
  );

  if ($view->name == 'my_view_name' && $display_id == 'my_view_display') {
    // View's header declaration.
    $item = array(
      'id' => 'area',
      'table' => 'views',
      'field' => 'area',
      'relationship' => 'none',
      'group_type' => 'group',
      'ui_name' => '', 
      'label' => '',
      'empty' => 0,
      'content' => $print,
      'format' => 'filtered_html',
      'tokenize' => 0,
    );
    // Render the header.
    $view->set_item($display_id, 'header', 'area', $item);
  }
}
7
mchar

Nur als zweite Option können Sie jederzeit eine Vorverarbeitungsfunktion verwenden, um den Theme-Hook zu überschreiben.

Aktivieren Sie zunächst theme_debug in Ihrem settings.php Datei, löschen Sie Ihren Site-Cache und navigieren Sie zu der Seite, die die Ansichtsanzeige enthält, die Sie ändern möchten.

Öffnen Sie die Entwicklertools Ihres Browsers (z. B. Chrome: Strg + Umschalt + I oder klicken Sie mit der rechten Maustaste und wählen Sie "Überprüfen") und suchen Sie das Markup der Anzeige im Quellcode. Sie sollten etwas Ähnliches direkt über dem Element sehen.

(Notice the output provided by theme_debug. Specifically, the "Call: theme('views_view')"

Als nächstes in template.php Schreiben Sie für Ihr Thema eine Vorverarbeitungsfunktion, die denselben Themen-Hook aufruft:

function THEMENAME_preprocess_views_view(&$vars) {
    //logic
}

Das $vars Variable ist ein Array, das das Ansichtsobjekt enthält. Verwenden Sie ein Debug-Tool wie devel , um das Render-Array zu überprüfen. Legen Sie dann das Kopf- und Fußzeilenattribut fest, indem Sie ihm einen Wert zuweisen.

/**
 * Implements template_preprocess_views_view().
 */
function THEMENAME_preprocess_views_view(&$vars) {
    //logic
    $vars['header'] = "Something Special";
}

Quelle: template_preprocess_views_view

2
knice