2011-12-31 33 views
5

Tôi có một bộ Selects cho một ngày tháng năm sinh:CakePHP giá trị mặc định cho ngày chọn

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

và muốn thiết lập giá trị mặc định là dòng chữ "NGÀY THÁNG NĂM" trong lựa chọn.

Tôi đã cố gắng làm điều này với giới với:

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

nhưng tôi không thấy làm thế nào để làm điều này với ngày đầu vào automagic ...

bất cứ ai có thể giúp đỡ? Cảm ơn

+0

Bạn có khả năng có thể thêm một vài dòng JS để thêm vào phần đầu của văn bản ? Ngắn của việc sửa đổi helper biểu mẫu - Tôi không thể nghĩ ra một cách "hackish" ít hơn. –

Trả lời

2

Nếu bạn không nhớ thêm 2 dòng, bạn có thể thử làm điều này không?

<?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

Cung cấp cho tôi lỗi này: 'Lỗi nghiêm trọng: Các loại toán hạng không được hỗ trợ trong/Người dùng/cameron/Trang web/xã hội/lib/Bánh/Xem/Trình trợ giúp/FormHelper. php trên dòng 1816' – Cameron

+0

@Cameron, có thể tôi thiếu một số niềng răng hoặc bạn muốn thử $ this-> Form-> year (....). – Mo3z

+0

@Cameron, tôi xin lỗi tôi nên đề cập đến. Nó sẽ chỉ hoạt động với bánh 1.3+ – Mo3z

13

Chỉ cần thêm:

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

để mảng của bạn lựa chọn.

Ví dụ đó sẽ hiển thị ngày hiện tại. Nếu bạn cần có một ngày tĩnh, hãy thay thế nó theo yêu cầu. ví dụ:

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

Rõ ràng cho ngày và thời gian, sử dụng:

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

hoặc

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

+0

Điều gì về NGÀY THÁNG NĂM như trong các từ thực tế! – Cameron

+0

'được chọn' là từ khóa tôi đang tìm kiếm, nhờ chia sẻ :) –

2

tôi thực hiện nó như thế này trong cakephp 2.0 trên

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) 
); 

'giá trị' thuộc tính đã được thêm vào sau 2,0 api của CakePHP và 'chọn' là loại bỏ.

Hướng dẫn sử dụng Cakephp cho biết: Tham số $ đã chọn đã bị xóa khỏi một số phương thức trong FormHelper. Giờ đây, tất cả các phương thức đều hỗ trợ khóa $ attribute ['value'] và được sử dụng thay cho $ selected. Sự thay đổi này đơn giản hóa các phương thức FormHelper, giảm số lượng các đối số và làm giảm sự sao chép mà $ selected đã tạo ra. Các phương pháp thực hiện là:

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

CakePHP bộ chọn vào giá trị rỗng nếu yêu cầu ngày tương ứng dữ liệu là null, do đó chỉ cần đặt nó để null trước khi lặp lại các lĩnh vực đầu vào ngày:

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

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

sự giá trị rỗng (trong trường hợp của bạn "NGÀY", "THÁNG", "nĂM" lĩnh vực) sẽ được chọn trước theo hình thức đầu vào

8

Bằng cách này hoạt động:

<?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

Tuyệt vời! Điều này chính xác trả lời câu hỏi ban đầu (mà tôi đã có là tốt) và làm điều đó mà không cần chuyển sang ba báo cáo riêng biệt. – Voodoo

+0

Đây phải là câu trả lời được chấp nhận. – user2340939

0

Đây là những gì hiện đang làm việc cho tôi trong 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') 
    ) 

);

Điều này được chi tiết hơn một chút, nó sẽ cung cấp cho bạn giá trị mặc định được đặt thành ngày đầu tiên của tháng hiện tại. Các giá trị có thể có trong năm là giữa hiện tại và 5 năm trước, được hiển thị theo thứ tự tăng dần.

Thậm chí hoàn chỉnh hơn:

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")) 
        ) 
      ); 

Ở đây mặc định là ngày 1 của tiếp theo tháng

2

Ngoài ra, bạn thực sự chắc chắn về những gì bạn thực sự nghĩa là gì?

Bạn dường như đang nhầm lẫn giá trị mặc định và giá trị trống. Nếu bạn đặt giá trị mặc định là DAY MONTH YEAR bằng cách sử dụng 'đã chọn', mã của bạn sẽ không hoạt động vì DAY MONTH YEAR không phải là ngày hợp lệ. Sử dụng

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

trông giống như những gì bạn đang tìm kiếm, mời người dùng nhập ngày.

Các vấn đề liên quan