Multiselectbox – přidání možnosti „všechny firmy“

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Nevinho
Člen | 77
+
0
-

php 5.3|nette 2.0.6

Zdarec, mám takový problém, do multiselectboxu si načtu nazvy firem z databáze, a potřeboval bych přidat možnost „vybrat vše“.

formulář mám řešený takhle:

<?php
  protected function createComponentFiltrForm()
{
    $firmaPairs = $this->firmy->findAll()->fetchPairs('ID', 'nazev_firmy');

    $form = new appForm();
    $form->addGroup('Firmy:');
    $form->addMultiSelect('firmy', 'Firmy:', $firmaPairs);
    $form->addGroup('Typ dat:');
    $items = array(1 => 'Finanční ukazatele', 2 => 'Výrobní informace', 3 => 'Fakturační informace', 4 => 'Osoby', 5 => 'Vztahy', 6 => 'Adresy',7 => 'Kontakty', 8 => 'Aktivity');
    $form->addCheckboxList('data', '', $items);
    $form->setDefaults(array('data' => array(1))); // defaultně budou nastaveny finanční informace
    $form->addSubmit('show', 'Zobrazit');
    return $form;
}

Díky za radu

?>

Editoval Nevinho (15. 11. 2012 23:33)

Jirda
Člen | 103
+
0
-

Nevinho napsal(a):

php 5.3|nette 2.0.6

Zdarec, mám takový problém, do multiselectboxu si načtu nazvy firem z databáze, a potřeboval bych přidat možnost „vybrat vše“.

formulář mám řešený takhle:

<?php
  protected function createComponentFiltrForm()
{
    $firmaPairs = $this->firmy->findAll()->fetchPairs('ID', 'nazev_firmy');

    $form = new appForm();
    $form->addGroup('Firmy:');
    $form->addMultiSelect('firmy', 'Firmy:', $firmaPairs);
    $form->addGroup('Typ dat:');
    $items = array(1 => 'Finanční ukazatele', 2 => 'Výrobní informace', 3 => 'Fakturační informace', 4 => 'Osoby', 5 => 'Vztahy', 6 => 'Adresy',7 => 'Kontakty', 8 => 'Aktivity');
    $form->addCheckboxList('data', '', $items);
    $form->setDefaults(array('data' => array(1))); // defaultně budou nastaveny finanční informace
    $form->addSubmit('show', 'Zobrazit');
    return $form;
}

Díky za radu

?>

Jak jako vybrat vse?

Paklize to myslis tak, ze primo ve vyberu selectboxu budes mit vybrat vse, tak treba teto moznosti prirad id = 0 a kdyz uzivatel vybere jen tuto moznost, tak vis, ze vybral vse a podle toho zaridis dalsi logiku.

Nebo pokud chces mit vybrat vse nekde vedle toho selectboxu, tak si uprav vzhled formulare, nejak pekne tam zakomponuj button a dej mu javascript funkcionalitu takovou, ze vybere vsechny polozky. (kod snad neni treba, to ti prozradi i google, neni to nic sloziteho).

enumag
Člen | 2118
+
0
-

Nebyl by lepší checkboxlist?

Nevinho
Člen | 77
+
0
-

checkboxlist určitě podle mě ne, protože kdyby tam bylo třeba dvacet firem, tak už by to vypadalo strašně :-). Tak mám řešený ty typy dat, a už tak to vypadá divně, je tam asi 8 položek pod sebou což je vidět i z kódu.

Nevinho
Člen | 77
+
0
-

For @Jirda: A kód s tím nastavení id by vypadal jak? nějak si to neumím představit kde to nastavuju..

enumag
Člen | 2118
+
0
-

Tak ten checkbox list se dá nastylovat tak aby byl přes více sloupců…

Multiselect je dle mého názoru špatný, protože jej BFU neumí používat – neví, že může vybrat více možností pomocí Ctrl. A navíc ještě nutné scrollování, plus nikdy nevidíš co všechno máš vybrané – děkuji nechci. Pro mé potřeby je multiselect zkrátka příliš user-unfriendly. ;-)

Nevinho
Člen | 77
+
0
-

A jak to nastylovat aby to bylo třeba ve dvou sloupcích?

enumag
Člen | 2118
+
0
-

Co já vím? Řekl bych že by mohly stačit floaty a pevná šířka, ale nevím jaký HTML kód ten checkbox list generuje. Pokud to nepůjde jednoduše, můžeš si to podědit nebo upravit přímo v tom checkboxlistu tak jak potřebuješ.

Nevinho
Člen | 77
+
0
-

ok, dikec za ochotu.

Hafran
Člen | 121
+
0
-

No a nebylo by tohle nejlepší dělat přes Javascript? Normálně si přidat nový samostatný checkbox vybrat vše a tomu dát třeba přes JQuery událost onClick, která ti sama zaškrtne všechny ostatní checkboxy?

Nevinho
Člen | 77
+
0
-

No to nevím, v nette začínám a js vůbec neovládám právě :-(.

Hafran
Člen | 121
+
0
-

Tady je nástřel toho JS, koukni se na stránky JQuery.com budeš chytřejší :)

Tohle by ti mělo zaškrtnout všechny checkboxy s třídou myCheckboxes po kliknutí na checkbox třídy mySpecialCheckbox. Je to z hlavy a nejsem žádnej JS guru, ale když si to někde ještě dohledáš a poladíš, tak bys to moh rozchodit. Musíš to mít samozřejmě ve www a naincludovaný do layoutu a musíš mít nainkludovanou Jquery, ta je tam asi implicitně.

<script type="text/javascript">
$(document).ready(function() {
	$('.mySpecialCheckbox').click(function(){
		$(".myCheckboxes").each( function() {
			$(this).attr("checked",'checked');
		})
	});
});
</script>