2011-12-31 21 views
5

Mam zestaw wybierze do daty urodzenia:CakePHP wartości domyślne dla daty wybrać

<?php echo $this->Form->input('Profile.dob', array('label' => 'Date of Birth' 
            , 'dateFormat' => 'DMY' 
            , 'minYear' => date('Y') - 100 
            , 'maxYear' => date('Y') - 13)); ?> 

i chcesz ustawić domyślne się słowa „dzień miesiąc rok” w wybiera.

udało mi się zrobić to z płci z:

<?php echo $this->Form->input('Profile.gender', array('label' => 'Gender', 'type' => 'select', 
     'options' => array('Male'=>'Male','Female'=>'Female'),'empty'=>'Select Sex')); ?> 

ale nie widzę jak to zrobić, z datą wejścia automagii ...

Czy ktoś może pomóc? Dzięki

+0

Możesz potencjalnie dodać kilka linii JS, aby dołączyć do początku tekstu ? Bez modyfikacji pomocnika formularza - nie mogę myśleć o mniej "hackish" sposób. –

Odpowiedz

2

Jeśli nie przeszkadza ci 2 kolejne linie, ty Czy możesz spróbować tego dokonać?

<?php 
echo $this->Form->year('Profile.dob', date('Y') - 100, date('Y') - 13, array('empty' => "YEAR")); 
echo $this->Form->month('Profile.dob', array('empty' => "MONTH")); 
echo $this->Form->day('Profile.dob', array('empty' => 'DAY')); 

?> 
+0

Daje mi ten błąd: 'Błąd krytyczny: Nieobsługiwane typy operandów w/Users/cameron/Sites/social/lib/Cake/View/Helper/FormHelper. php on line 1816' – Cameron

+0

@Cameron, może być brakujące nawiasy klamrowe lub chcesz wypróbować $ this-> Form-> year (....). – Mo3z

+0

@Cameron, przepraszam, powinienem był o tym wspomnieć. Będzie działał tylko dla ciast 1.3 + – Mo3z

13

Wystarczy dodać:

'selected'=>date('Y-m-d')

do tablicy opcji.

Ten przykład pokaże aktualną datę. Jeśli potrzebujesz statycznej daty, wymień ją w razie potrzeby. np:

'selected'=>'2011-12-10'

Oczywiście o dacie i godzinie, przeznaczenie:

'selected'=>date('Y-m-d H:i:s')

lub

'selected'=>'2011-12-10 11:13:45'

+0

Co powiesz na ROK MIESIĘCZNY DZIEŃ jak w rzeczywistych słowach! – Cameron

+0

"wybrane" jest słowem kluczowym, którego szukałem, dziękuję za udostępnienie :) –

2

zaimplementowałem to tak w cakephp 2.0 powyżej

echo $this->Form->dateTime('dob', 'DMY','', array(
    'value'=>'1987-02-12', 
    'empty'=>false, 
    'label'=>'Date Of Birth', 
    'minYear'=>date('Y')-60, 
    'maxYear'=>date('Y')-15) 
); 

wartości atrybutów '' została dodana po 2,0 API cakephp i 'wybranego' jest usunąć.

Instrukcja Cakephp mówi: $ wybrany parametr został usunięty z kilku metod w FormHelper. Wszystkie metody obsługują teraz klucz $ attributes ['value'], który powinien zostać użyty zamiast wybranego $. Ta zmiana upraszcza metody FormHelper, zmniejszając liczbę argumentów i redukując duplikowanie utworzonego $. Dokonanej metody:

FormHelper::select() 
FormHelper::dateTime() 
FormHelper::year() 
FormHelper::month() 
FormHelper::day() 
FormHelper::hour() 
FormHelper::minute() 
FormHelper::meridian() 
0

CakePHP zestaw wybrany z wartością pustą gdy odpowiednie dane żądanie data jest zerowy, zatem po prostu ustawić null przed powtarzając pola daty wejściowych:

$this->request->data['Profile']['dob'] = null; 

echo $this->Form->month('Profile.dob', array('empty' => "MONTH")); 
// do the same for year and day 

z pusta wartość (w przypadku „Data”, „miesiąc”, „rok” pól) zostaną wstępnie wybrane w postaci wejściowego

8

ten sposób działa:

<?php 
echo $this->Form->input(
    'Profile.dob', 
    array(
     'label'   => 'Date of Birth', 
     'dateFormat' => 'DMY', 
     'minYear'  => date('Y') - 100, 
     'maxYear'  => date('Y') - 13, 
     'empty'   => array(
      'day'  => 'DAY', 
      'month'  => 'MONTH', 
      'year'  => 'YEAR' 
      ) 
     ) 
    ); 
?> 
+0

Nice! To dokładnie odpowiada na oryginalne pytanie (które miałem również) i robi to bez przełączania się na trzy oddzielne stwierdzenia. – Voodoo

+0

To powinna być zaakceptowana odpowiedź. – user2340939

0

To jest to, co aktualnie działa dla mnie w Cakephp 2.5:

echo $this->Form->input('fecha_pos_fijacion', array(
    'label' => 'Fecha de fijación', 
    'dateFormat' => 'DMY', 
    'minYear' => date('Y'), 
    'maxYear' => date('Y')+5, 
    'orderYear' => 'asc', 
    'selected' => date('Y-m-1') 
    ) 

);

To jest nieco bardziej dopracowane, daje domyślną wartość ustawioną na pierwszy dzień bieżącego miesiąca. Możliwe wartości dla roku są pomiędzy bieżącym a 5-letnim wyprzedzeniem, wyświetlane w porządku rosnącym.

Jeszcze bardziej kompletne:

echo $this->Form->input('fecha_transporte', array(
        'label' => '', 
        'dateFormat' => 'DMY', 
        'minYear' => date('Y'), 
        'maxYear' => date('Y')+5, 
        'orderYear' => 'asc', 
        'selected' => date('Y-m-1', strtotime("+30 days")) 
        ) 
      ); 

Tutaj domyślna to 1 dzień od następnego miesiąca

2

Również, jesteś pewien, o co naprawdę chodzi?

Wygląda na to, że mylicie wartość domyślną i pustą wartość. Jeśli ustawisz wartość domyślną jako DAY MONTH YEAR używając "zaznaczonego", Twój kod nie będzie działał, ponieważ DAY MONTH YEAR nie jest prawidłową datą. Korzystanie

'empty' => array(
    'day' => 'DAY', 
    'month' =>'MONTH', 
    'year' =>'YEAR' 
); 

wygląda to, czego szukasz, zapraszając użytkownikowi wprowadzić datę.

Powiązane problemy