Formuláře
TimePicker
Čas vybíraný na desktopu na ciferníku a na telefonu ze seznamu slotů, v pevném intervalu.
Na této stránce
Picker jen pro čas, jehož hodnoty jsou sloty v pevném intervalu. Na desktopu se čas vybírá na ciferníku — hodiny, pak minuty — a potvrdí tlačítkem OK; na telefonu se vybírá ze seznamu slotů.
use NyonCode\WireForms\Components\TimePicker;
TimePicker::make('opens_at')
Od mobilního breakpointu pole výš ukáže
otevřené pole ciferník; pod ním rolovatelný seznam — 00:00, 00:30, 01:00,
… — kde klepnutí slot uloží a panel zavře. Obojí zapisuje tutéž hodnotu.
Ciferník
Desktopový panel se drží time pickeru z Fiori:
- Dvě velká tlačítka ukazují vybíraný čas (
14 : 30) a říkají, kterou část ciferník nastavuje; kliknutím na kterékoli se k ní vrátíte. - Ciferník hodin má dva kruhy — venku 1–12, uvnitř 13–23 a 00. Kliknutí
nebo tažení vybírá a puštění na hodině přepne ciferník na minuty. Ciferník
minut přichytává na
minutesStep(); swithSeconds()následují sekundy. - Okraj ukazuje, co jde vybrat. Tečka je pod každým číslem a mezi čísly u
každé minuty, na kterou krok dosáhne — šedesát míst při výchozím kroku jedné
minuty, mezi čísly žádná při kroku 15. Ručička není: vybraná hodnota je
značka na okraji a vyplněná bublina, která ji čte (i
07mezi dvěma čísly), a hodnota pod ukazatelem dostane před kliknutím světlejší. Uprostřed ciferníku je název nastavované části. - Zašedlé nejde vybrat. Hodina celá mimo meze nebo denní okno a minuta mimo krok nebo meze jsou zašedlé a ukazatel je ignoruje.
- Před OK se nic nezapíše. Ciferník upravuje koncept: OK ho uloží, Zrušit a Escape nechají hodnotu, jaká byla, Teď nastaví koncept na aktuální čas (zaokrouhlený dolů na krok a vtažený do mezí) a Vymazat pole vyprázdní. Prázdné pole se otevře na aktuálním čase vtaženém do mezí, ne o půlnoci.
- Klávesnice. ↓ v poli nebo ikona hodin otevře panel s fokusem na ciferníku — je to slider: šipky posouvají nastavovanou část a přeskakují zašedlé, Enter přejde na minuty a pak potvrdí. Čas jde do pole vždy i napsat.
TimePicker vs. DateTimePicker::asTime()
Obojí ukládá tutéž hodnotu ve stejném formátu. Liší se jen panelem:
| Panel | |
|---|---|
TimePicker::make('x') |
Ciferník (na telefonu seznam časů po minutesStep()) |
DateTimePicker::make('x')->asTime() |
Tentýž ciferník, nastavovaný průběžně bez OK (na telefonu steppery) |
TimePicker zvolte tam, kde jsou časy sloty — otevírací doba, termíny, rozvrhy.
asTime() zvolte tam, kde je platná libovolná minuta dne,
nebo když se režim musí měnit.
Interval
Rozestup slotů je zděděný minutesStep(), výchozí 30:
TimePicker::make('opens_at') // 00:00, 00:30, 01:00 …TimePicker::make('opens_at')->minutesStep(15) // 00:00, 00:15, 00:30 …
Samostatný setter interval() neexistuje — je to tentýž pojem pod názvem, který
už měl. hoursStep() a secondsStep() jsou zděděné, ale tady nedělají nic:
seznam slotů má jeden krok, ne tři.
Interval omezuje seznam, ne hodnotu. Čas jde napsat rovnou do triggeru, takže
08:07 zůstává dosažitelný i při třicetiminutovém kroku — napsaný čas odmítnou
jen meze. Viz Psaní z klávesnice.
Meze
minDate() / maxDate() se čtou jako časy a sloty mimo ně zakážou, takže
rozsah zůstane vidět, místo aby se seznam tiše zkrátil:
TimePicker::make('opens_at') ->minDate('08:00') ->maxDate('17:00')
Panel se otevře na aktuální hodnotě, nebo na prvním slotu, který meze dovolují — pole od rána do večera se tedy neotevře o půlnoci. Platí to i na mobilu, kde se z panelu stane spodní sheet.
Pro otevírací dobu jsou přirozenější minTime() / maxTime() —
denní časové okno. U TimePickeru se
čtou stejně jako meze a když jsou nastavené obě, vyhrává přísnější:
TimePicker::make('opens_at') ->minTime('06:00') ->maxTime('18:00')
Všechno ostatní je DateTimePicker
Hodnotová strana je celá zděděná, takže tohle se chová přesně podle dokumentace
DateTimePicker:
TimePicker::make('opens_at') ->withSeconds() // ukládá H:i:s; sloty pořád padají na :00 ->displayFormat('H:i') ->typeable(false) // jen seznam — do triggeru se psát nedá ->native() // nativní <select> se sloty ->placeholder('Vyber čas')
Panel vždycky nese tlačítko Clear, takže volitelné pole jde zase vyprázdnit bez vlastního setteru.
Ukládaná hodnota je H:i, s withSeconds() pak H:i:s.
timezone()je zděděná, ale nedělá tu nic — přesně jako uDateTimePicker::asTime(): holý čas je hodnota nástěnných hodin a převod mezi zónami by ji rozbil. Platí jen prodatetime.
->native()vykreslí sloty jako nativní<select>prohlížeče, ne jako<input type="time">:stepčasového vstupu se do kolečka telefonu nedostane (iOS nabízí každou minutu), takže hodnotu na slotu udrží jen select. Nabízí sloty uvnitřminDate()/maxDate()po intervalu, popsané podledisplayFormat(), a navíc aktuální hodnotu, pokud leží mezi dvěma sloty.->nativeOnMobile()udělá totéž jen pod mobilním breakpointem a nad ním seznam slotů ponechá, ať je interval nebo sekundy jakékoli — viz nativní jen na telefonu. Meze server hlídá v každém případě; hodnota mezi sloty chybou není, protože napsat ji na desktopu je dovolené.
Na telefonu
->touchOnMobile()promění seznam slotů v dotykové kolečko — sloupce hodin a minut v bottom sheetu — viz dotykové kolečko na telefonu.
Režim je zamčený
TimePicker je časový picker natrvalo. Setter režimu — a s ním i zděděné aliasy
asDate(), asMonth() a asDateTime(), které přes něj vedou — vyhodí
FormConfigurationException:
TimePicker::make('opens_at')->asDate(); // vyhodí výjimkuTimePicker::make('opens_at')->mode('date'); // vyhodí výjimkuTimePicker::make('opens_at')->mode('time'); // v pořádku — už jím je
Není to kosmetika: panel je seznam slotů a nic jiného, takže pole, které by se
dostalo do režimu date, by vykreslilo picker bez kalendáře. Pokud se režim musí
měnit, je to DateTimePicker.
Metody
| Metoda | Typ | Popis |
|---|---|---|
mode(string) |
string | Zamčeno na time; jakýkoli jiný režim vyhodí FormConfigurationException |
Všechny ostatní metody pocházejí z DateTimePicker a ze společného API pole pro popisek, hint, tooltip a další sdílené metody.