Antworten:
Es dauert ein bisschen, um die Ansichten Haken zu lernen. Kennen Sie das Anzeigen von Vorlagendateien? Wenn dies schnell und unkompliziert möglich ist, müssen Sie überprüfen, wie viele Zeilen in der Ansichtsvorlagendatei der höchsten Ebene die Anzeigeausgabe enthalten. Wenn Sie das Devel-Modul installiert haben, können Sie es dpm($variables)
in views-view.tpl.php verwenden (wahrscheinlich möchten Sie die für Ihre Ansicht eindeutige Anzeigeausgabe verwenden).
Ich kann mich nicht erinnern, wo, aber irgendwo in $variables
ist eine Zeilenanzahl; Sie können der Vorlagendatei die Logik hinzufügen, um sie nicht auszudrucken, $rows
wenn sie Ihren Kriterien nicht entspricht.
Basierend auf dem Hinweis, den googletorp gegeben hat, besteht meine einfache Lösung darin, dies in meine template.php einzufügen:
function MY_THEME_NAME_preprocess_views_view(&$vars) {
if ($vars['display_id'] == 'MY_DISPLAY_ID' && count($vars['view']->result) < 2) {
$vars['view']->result = NULL;
}
}
In diesem Fall verstecke ich die Ansicht, wenn sie weniger als zwei Ergebnisse hat.
Vielen Dank!
Sie können in einer Vorlagenvorverarbeitungsfunktion leicht die Anzahl der Ergebnisse (Zeilen) einer Ansicht erkennen und die Ausgabe auf eine leere Zeichenfolge setzen, wenn dies der Fall ist.
Damit dies funktioniert, müssen Sie möglicherweise ein wenig in der Vorlage arbeiten, da Views immer umhüllendes HTML hinzufügt, das Sie wahrscheinlich nicht möchten, wenn die Ansicht leer ist.
Ich würde wahrscheinlich am einfachsten in der Vorverarbeitungsfunktion template_preprocess_views_view () tun . Sie können die Ansichtsoberfläche konsultieren, um Hinweise zu Vorlagen zu erhalten.
views-view.tpl.php
Datei mit <?php if ($rows): ?> ... <?php endif; ?>. My understanding currently is there is no way to eliminate the extraneous wrapper HTML otherwise. If the
einer Variablen umgeben, die mir in dieser Datei bereits zur Verfügung steht. Warum sollte ich zusätzliche Arbeit leisten template.php
?
Wenn der Grund dafür hauptsächlich auf die Anzeige ausgerichtet ist (z. B. wenn Sie ein Raster erstellen und eine gerade / ungerade Anzahl von Elementen erzwingen möchten), ist das Hinzufügen einer benutzerdefinierten Logik auf der Themenebene sicherlich die logischste. Die anderen Antworten haben dies abgedeckt, denke ich. Wir haben jedoch festgestellt, dass einige Ansichtsvariablen, die möglicherweise geändert werden müssen (z. B. $view->result = NULL
), im Rahmen einer Vorverarbeitungsfunktion nicht sicher geändert werden können. Es scheint, dass das interne Caching von Ansichten einige Variablen so generieren kann, dass einige Kombinationen der Cache-Einstellungen für "gerenderte Ausgabe" und "Abfrageergebnis" mit keiner der vorhandenen Lösungen kompatibel sind.
Eine Alternative besteht darin, die Ergebnisse der ausgeführten Abfrage selbst zu ändern, was eine Kontrolle auf einer viel niedrigeren Ebene bietet. Dies kann auch einige Probleme beim Ausblenden von Wrapper-Markups umgehen, da eine "leere" Ergebnismenge simuliert wird, noch bevor das Markup erstellt wird.
/**
* Implements hook_views_post_execute().
*/
function MYMODULE_views_post_execute(&$view) {
$view_name = 'myviewname';
$view_display = 'mydisplay';
// Don't show the view if there is only one item.
if ($view->name == $view_name && $view->current_display == $view_display && count($view->result) < 2) {
$view->result = array();
}
}
Dies kann natürlich nicht in einem Thema implementiert werden, da es nicht mit einem Thema oder einem Änderungshaken zusammenhängt, aber ich denke, es ist immer noch erwähnenswert für Leute, die sich für diese Frage interessieren.
In einigen Fällen ist es besser, diese Art von Bedingung in die Ansicht aufzunehmen, damit der Builder versteht, was im Kontext der Bearbeitungsansicht geschieht, nicht in einem anderen Modul oder Themen-Hook.
Wenn Sie diese Logik lieber auf der Seite zum Bearbeiten der Ansicht haben möchten, können Sie Folgendes tun:
<?php $view = views_get_current_view(); if ( count($view->result) < 5 ) { $view->result = null; } ?>
Sie können dies auch mithilfe der Themenvorlage tun:
views-view.php
in Ihr Themen- / Vorlagenverzeichnisviews-view--view-name--display-name.tpl.php
if (count($rows) < $n):
Ihrem Code hinzu, um ihn basierend auf der Anzahl der Ergebnisse nach Bedarf zu bearbeiten