it-swarm-eu.dev

Přidání možnosti „Vše“ do filtru vystaveného zobrazení

Mám filtr Exponovaný pohled, který umožňuje vybrat více položek. Je založen na „povolených hodnotách“ pro pole CCK pro více výběrů.

Vystavený filtr vyjde vypadat takto:

Option 1
Option 2
Option 3

Potřebuji přidat na začátek možnost „Vše“, aby to bylo:

All
Option 1
Option 2
Option 3

Kliknutí na možnost Vše by mělo mít stejný účinek jako přidržení Ctrl a kliknutí na Možnosti 1, 2 a 3. tj. vraťte do tohoto pole všechny uzly, které mají hodnotu možnosti 1, možnosti 2 nebo možnosti 3.

Jak mohu přidat takovou možnost do mého widgetu? Jsem si jist, že se to nějak dá udělat pomocí form_alter, ale nemůžu si vysvětlit, jak.

5
Tom Kirkpatrick

Dobře ... myslím, že jsem to mohl popraskat.

function mymodule_form_alter(&$form, $form_state, $form_id) { 
  if ($form_state['view']->name == 'myview') {
    // Add our custom All buttons.
    $form['myfield']['#options'] = array("-ALL-" => t("- All -")) + $form['myfield']['#options'];
    array_unshift($form['#submit'], 'mymodule_exposed_form_submit');
  }
}

function mymodule_exposed_form_submit(&$form, &$form_state) { 
  if (!empty($form_state['values']['myfield']['-ALL-'])) {
    $options = $form['myfield']['#options'];
    unset($options['-ALL-']);
    $form_state['values']['myfield'] = $options;
  }
}

Takže v podstatě přidám do své položky „Vše“ v horní části výběru. Poté přidám svůj vlastní obslužný program pro odeslání před jeden z pohledů.

Ve svém obslužném programu pro odeslání zkontroluji přítomnost možnosti Vše a pokud je nalezena, upravím vybrané možnosti tak, aby byly vybrány všechny možnosti kromě možnosti Vše.

Zdá se, že práce :)

9
Tom Kirkpatrick

Pomocí svých možností můžete jednoduše přidat stejný nevystavený filtr:

Option 1
Option 2
Option 3

Poté možnost „Vše“ v exponovaném filtru zobrazí výsledky pouze pro tyto tři možnosti.

2
yarroha

V mém případě (Zobrazení vystavený filtr taxonomických výrazů) jsem musel zrušit výběr všech možností, abych získal -Všechny-. Nejste si jisti, proč to tak funguje pro mě.

function mymodule_exposed_form_submit(&$form, &$form_state) { 
  if (!empty($form_state['values']['myfield']['-ALL-'])) {
    $form_state['values']['myfield'] = array();
  }
}

Myslím, že to ve výchozím nastavení nemůžete udělat, ale můžete použít modul, který byl vytvořen speciálně pro vylepšení vystavených filtrů. Jmenuje se Lepší vystavené filtry .

1
F1234k

Udělal jsem dvě velmi ošklivá řešení.

Za předpokladu, že máte výchozí nastavení pro tisk všech hodnot, můžete hacknout možnost ve vaší výstupní výstupní šabloně (ta založená na views-view.tpl.php). Příklad

<?php if ($attachment_before): ?>
  <div class="attachment attachment-before">
  <?php $attachment_before = str_replace('<div class="view-content">',                                     
   '<div class="view-content"><div class="views-summary views-summary-unformatted"><a href="/glossary/all">All</a></div>', $attachment_before); ?>

    <?php print $attachment_before; ?>
  </div>
<?php endif; ?>

Druhá metoda v podstatě dělá totéž s jQuery.

1
mpdonadio

Pokud je exponovaný filtr označen jako vícenásobný a není volitelný, výběrem všech nebo žádných možností získáte stejné výsledky. Jednou z možností by bylo zmínit to v nápovědě k filtru. Další možností je nainstalovat lepší exponované filtry a povolit odkaz select all/none, který, aniž by se změnila funkčnost filtru, poskytne uživatelům intuitivnější rozhraní.

1
mikeker

Tom Kirkpatrick měl pravdu, ale namísto přidání všech možností můžete také všechny možnosti odstranit, takže hodnota stavu formuláře je prázdná. Ve výchozím nastavení jsou také zobrazeny všechny hodnoty a je to trochu čistší:

function mymodule_form_alter(&$form, $form_state, $form_id) { 
  if ($form_state['view']->name == 'myview') {
    // Add our custom All buttons.
    $form['myfield']['#options'] = array("-ALL-" => t("- All -")) + $form['myfield']['#options'];
    array_unshift($form['#submit'], 'mymodule_exposed_form_submit');
  }
}

function mymodule_exposed_form_submit(&$form, &$form_state) { 
  $myfield_values = $form_state->getValue('myfield');
  if (!empty($myfield_values) && isset($myfield_values['-ALL-'])) {
    $form_state->set('myfield', []);
    $form_state->setValue('myfield', []);
  }
}
1
user33560

Alespoň pro Drupal 8 (nevím, jestli platí i pro D7)), Filtry lepšího vystavení vám nabízejí možnost „Přidat výběr všech/žádných odkazů“ do vašeho vystaveného filtru. Verze, kterou používám: 8.x-3.0

Chcete-li tuto možnost přidat do svého odkrytého filtru, přejděte do svého zobrazení, přejděte na panel Upřesnit> Filtry s lepším vystavením> Nastavení a pod každým odkrytým filtrem najdete sbalený panel označený „VÍCE MOŽNOSTÍ“ [FIELD_NAME] “(FILTER LABEL:“ [OZNAČENÍ]")".

Zaškrtněte políčko „Přidat a„ Vybrat vše/žádné “pro:

Při vykreslování exponovaného filtru pomocí zaškrtávacích políček přidejte odkaz „Vybrat vše/žádný“. Pokud je tato možnost zakázána, upravte filtr a zaškrtněte políčko „Povolit více výběrů“. “

! Problém, který jsem si všiml s touto vybranou volbou „Vše“, spočívá v tom, že se stránka obnovuje, i když má formulář automatické odeslání. Pokud však tuto funkci nepotřebujete, zdá se, že funguje jako kouzlo .

0
ElaAle