metóda na pridanie informatívneho riadku v SelectBox-e

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

Zdravím.
Napadlo mi, že by sa zišla metóda, ktorou by bolo možné pridať „info“ riadok v SelectBoxe. Momentálne, keď získam dáta z databázy tak, to musím riešiť napr. takto:

<?php
  $items = $model->getPairs();
  $form->addSelect('user', 'Používateľ', array_merge(array('?' => '---'), $items))
    ->skipFirst(TRUE);
?>

Myslím, že šikovnejšie by to bolo napr. takto:

<?php
  $items = $model->getPairs();
  $form->addSelect('user', 'Používateľ', $items))
    ->setFirst('?', '---')
    ->skipFirst(TRUE);
?>

Čo myslíte?

PetrP
Člen | 587
+
0
-

Nebo by to mohla přijímat metoda skipFirst

$form->skipFirst(array('?', '---'));
mlady
Člen | 24
+
0
-

PetrP napsal(a):

Nebo by to mohla přijímat metoda skipFirst

$form->skipFirst(array('?', '---'));

Myslím, že by to síce bolo kratšie ale trocha mätúce. Vo mne tento zápis na prvý pohľad evokuje skôr to, že ignorovať sa budú riadky ‚?‘ a ‚---‘.

jasir
Člen | 746
+
0
-

mlady napsal(a):

PetrP napsal(a):

Nebo by to mohla přijímat metoda skipFirst

$form->skipFirst(array('?', '---'));

Myslím, že by to síce bolo kratšie ale trocha mätúce. Vo mne tento zápis na prvý pohľad evokuje skôr to, že ignorovať sa budú riadky ‚?‘ a ‚---‘.

On kolega PetrP spíše myslel

<?php
$form->skipFirst(array('?' => '---'));
?>

Mě to přijde jako dobrý nápad, je fakt, že teď s tím array_merge je to méně intuitivní.

Editoval jasir (18. 6. 2009 10:31)

vlki
Člen | 218
+
0
-

Jen poznamenám, že array_merge může zajistit těžce zjistitelné chyby, když ho použijete např. takto:

// data z db
$items = array(
	3 => 'item1',
	5 => 'item2',
	9 => 'item3',
);
$items = array_merge(array('' => '---'), $items);

Číselné klíče pole to přečísluje tak, že nultý bude ‚---‘, první ‚item1‘, atd.
(Pokud se použije jako klíč otazník, tak problém padá, ale ne vždy je chtěný.)

Řešením je nepoužít array_merge, ale jednoduché sloučení polí, které přečíslování nedělá.

$items = array('' => '---') + $items;

Sám jsem nad tím strávil nemálo času, tak ať se tím nespálí i někdo jiný…

Taková feature u skipFirst by to určitě zpřehlednila a takovýmto wtf věcem zabránila.

piler
Člen | 111
+
0
-

jasir napsal(a):

mlady napsal(a):

PetrP napsal(a):

Nebo by to mohla přijímat metoda skipFirst

$form->skipFirst(array('?', '---'));

Myslím, že by to síce bolo kratšie ale trocha mätúce. Vo mne tento zápis na prvý pohľad evokuje skôr to, že ignorovať sa budú riadky ‚?‘ a ‚---‘.

On kolega PetrP spíše myslel

<?php
$form->skipFirst(array('?' => '---'));
?>

Mě to přijde jako dobrý nápad, je fakt, že teď s tím array_merge je to méně intuitivní.

Dobry napad je to v tom, ze je moznost vymenovat zoznam items, ktore sa nemaju brat do uvahy pri Form::FILLED, ale nazov skipFirst() uz nie je to „spravne orechove“…

o5
Člen | 416
+
0
-

vlki napsal(a):

$items = array('' => '---') + $items;

pekne, sakra jednou jsem tohle resil, ale jeste trochu jinak…ale tohle je docela elegantni..dik za tip

PetrP
Člen | 587
+
0
-

jasir napsal(a):

On kolega PetrP spíše myslel …

Tak tak díky ;]

Mě na tom první návrhu od mlady se nelíbylo nutnost to defakto nastavovat dvakrát:

->setFirst('?', '---')
->skipFirst(TRUE);

// To samé i u momentalního řešení
$items = array('?' => '---') + $items;
->skipFirst(TRUE);
// Proto buď
->skipFirst(array('?' => '---'));

// nebo možná lépe pojmenované
->setFirst(array('?' => '---')); //které by ale zároveň nastavovalo skipFirst na true;
mlady
Člen | 24
+
0
-
// nebo možná lépe pojmenované
->setFirst(array('?' => '---')); //které by ale zároveň nastavovalo skipFirst na true;

Presne to je to čo chcem ;-) už len niekoho kto to nakóduje a commitne …

David Grudl
Nette Core | 8145
+
0
-

Implementováno v rev. 412

$form->addSelect(...)
  ->skipFirst('---');