it-swarm-eu.dev

Pokud výsledky mají méně než N, skryjte pohled

Zajímalo by mě, jestli je možné skrýt pohled (jako blokové zobrazení), pokud má méně než X výsledků.

6
Disco

Trvá trochu času, než se naučíte háky. Víte o zobrazení šablon souborů? Pokud ano, rychlý a špinavý způsob, jak to udělat, je zkontrolovat, kolik řádků je v souboru šablony nejvyšší úrovně zobrazení výstup zobrazení. Pokud máte nainstalovaný modul Devel, můžete dpm($variables) v views-view.tpl.php (pravděpodobně budete chtít použít výstup zobrazení, který je pro váš pohled jedinečný).
Nemůžu si vzpomenout, kde, ale někde v $variables je počet řádků; můžete přidat logiku do souboru šablony, aby se nevytiskl $rows pokud nesplňuje vaše kritéria.

1
Jepedo

Mohli byste ve funkci předzpracování šablony snadno zjistit počet výsledků (řádků), které má pohled, a pokud je tomu tak, nastavit výstup na prázdný řetězec.

Chcete-li, aby to fungovalo, možná budete muset udělat trochu práce v šabloně, protože Zobrazení vždy přidá nějaké obtékající HTML, které pravděpodobně nechcete, pokud je pohled prázdný.

Pravděpodobně nejjednodušší je udělat ve funkci template_preprocess_views_view () preproces. Tipy týkající se šablon naleznete v rozhraní zobrazení.

8
googletorp

Na základě poskytnuté rady googletorp je mým jednoduchým řešením vložit to do mé template.php:

function MY_THEME_NAME_preprocess_views_view(&$vars) {
  if ($vars['display_id'] == 'MY_DISPLAY_ID' && count($vars['view']->result) < 2) {
    $vars['view']->result = NULL;
  }
}

V tomto případě skrývám názor, pokud má méně než dva výsledky.

Díky moc!

8
yan

Pokud je tento důvod primárně orientován na zobrazení (např. Stavíte mřížku a chcete vynutit sudý/lichý počet položek), pak se domnívám, že přidání vlastní logiky do vrstvy motivu je určitě nejlogičtější. Myslím, že se to týkalo i dalších odpovědí. Problém, který jsme zjistili, je však v tom, že některé proměnné zhlédnutí, které mohou být nutné změnit (např. $view->result = NULL), nelze bezpečně změnit v rámci funkce předzpracování. Zdá se, že interní ukládání do mezipaměti pohledů může generovat některé proměnné takovým způsobem, že některé kombinace nastavení mezipaměti „vykreslený výstup“ a „výsledek dotazu“ mohou být nekompatibilní s jakýmkoli stávajícím řešením.

Jednou alternativou je změna výsledků samotného spuštěného dotazu, který nabízí ovládání na mnohem nižší úrovni. To by také mohlo vyřešit některé z problémů se skrytím značení obalů, protože to simuluje „prázdné“ výsledky nastavené ještě před vytvořením značení.

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

To samozřejmě nelze implementovat do tématu, protože to nesouvisí s tématem nebo změnou háčku, ale myslím, že je to stále stojí za zmínku pro lidi, kteří se zajímají o tuto otázku.

1
rjacobs

Můžete to také provést pomocí templatingu tématu:

  • Zkopírujte views-view.php Do adresáře téma/šablony
  • vytvořte kopii tohoto souboru a pojmenujte jej views-view--view-name--display-name.tpl.php
  • (Viz Upřesnit> Jiné> Téma: Informace o podrobnějších informacích o tom, jaké názvy souborů zvolit a přepsat - v závislosti na vašich potřebách můžete získat více či méně konkrétní informace)
  • přidejte if (count($rows) < $n): in do vašeho kódu a podle potřeby s ním manipulujte podle počtu výsledků
0
squarecandy

V některých případech je hezčí, když je tento druh podmíněnosti vložen do pohledu, takže tvůrce chápe, co se děje v kontextu pohledu na úpravy, nikoli v jiném modulu nebo zavěšení motivu.

Pokud dáváte přednost tomu, aby byla tato logika zahrnuta na stránce pro úpravu zobrazení, můžete to udělat:

  1. Přidejte pole zápatí Globální text/HTML a vytvořte textový formát PHP Kód
  2. Nastavte jméno administrátora tohoto pole na něco velmi jasného, ​​např. „Skrýt toto zobrazení, pokud má méně než 5 výsledků“, aby budoucí tvůrci stránek nebyli zmateni (proč můj názor mizí!?!?)
  3. Upravte níže uvedený kód PHP=) tak, aby vyhovoval vašim potřebám a použijte v poli:
<?php
$view = views_get_current_view();
if ( count($view->result) < 5 ) {
    $view->result = null;
}
?>
0
RogerRoger