Saya menggunakan metode ini , untuk menambahkan pemilih tanggal dan waktu di backend magento. Sekarang waktu input disimpan ke basis data saya dengan benar.
Masalahnya adalah zona waktu toko magento saya diatur ke waktu Standar India (GMT + 05: 30), jadi waktu yang ditunjukkan dalam ADMIN GRID, adalah nilai waktu input (yang ada di DataBase) + 05:30 Jam.
- tampilan phpmyadmin:
waktu dalam database: 7:15 dan 7:52 pagi
- tampilan kotak admin magento:
waktu di admin 12:45 dan 13:22
Ini tidak mengganggu saya karena penghitung waktu mundur yang saya tampilkan di frontend mengambil nilai yang ditampilkan di kisi admin. Saya senang. Tetapi ketika memilih waktu dalam pemilih waktu tanggal, itu menunjukkan GMT, yaitu waktu yang disimpan dalam Database.
Jadi, orang yang memasukkan input waktu harus memasukkan waktu 5:30 jam di muka ke waktu yang dimaksud.
sumber
Jadi setelah menghabiskan hampir satu hari berjuang dengan masalah yang sama dalam ekstensi saya sendiri, saya pikir saya akan membagikan solusi saya di sini. Sesuatu yang perlu diperhatikan adalah bahwa entitas saya tidak menggunakan sistem EAV, setiap entitas memiliki tabel sendiri dengan kolom untuk setiap atribut. Entitas saya memiliki empat atribut datetime - dua di antaranya diisi dari input pengguna (
open_date
,close_date
), dan dua di antaranya diisi secara otomatis oleh kode sumber (create_date
,close_date
).Kelas Model Entitas
Di kelas model entitas saya sertakan yang berikut:
Kode sumber:
The saveAction dari Pengontrol Admin Entitas
Dalam metode saveAction milik pengontrol, saya menggunakan metode getDateFields () yang didefinisikan dalam kelas model untuk mengetahui atribut mana yang perlu saya ubah dari waktu lokal toko (yang dimasukkan pengguna) ke waktu GMT sebelum menyimpan ke basis data. Perhatikan bahwa ini hanya sebagian potongan dari metode simpan saya:
Blok Formulir Admin untuk mengedit Entitas
Tidak seperti widget kisi admin Magento, yang mengharapkan nilai datetime dari koleksi yang akan disediakan dalam GMT, dengan niat untuk mengkonversi nilai-nilai ini ke waktu lokal toko sebelum menampilkan halaman, widget formulir admin Magento tidak mengikuti perilaku ini. Sebagai gantinya, widget bentuk akan menerima nilai datetime apa adanya, dan menampilkannya tanpa secara otomatis menyesuaikan waktu. Oleh karena itu, karena nilai disimpan dalam database dalam GMT, pertama-tama kita harus mengonversi atribut datetime yang dimasukkan pengguna ke waktu lokal toko sebelum memasok data tersebut ke formulir. Di sinilah # 2 kami di Kelas Model Entity ikut bermain.
Berikut ini adalah PORTION dari metode _prepareForm () dari kelas blok formulir admin saya (yang meluas Mage_Adminhtml_Block_Widget_Form). Saya telah menghilangkan sebagian besar fungsi saya, mencoba untuk hanya memasukkan minimum yang relevan dengan pertanyaan ini, dan masih memberikan metode kelas yang valid:
Sebagian besar dari ini mengikuti bentuk widget lainnya untuk Magento. Namun satu hal kunci yang penting untuk dicatat di sini adalah bahwa alih-alih menelepon,
$form->setValues($model->getData())
kita memanggil$form->setValues($model->getAdminFormData())
. Yang mana, jika kami meninjau kode saya dari segmen pertama dari jawaban ini, metode ini akan mengkonversi semua atribut datetime, yang dimasukkan pengguna, dari GMT ke waktu lokal toko.Hasil akhir:
Semoga ini terbukti sebagai sumber daya berharga untuk membantu orang lain di luar sana suatu hari nanti. Saat Anda bekerja pada pengembangan front-end, perlu diingat bahwa nilai-nilai datetime dalam GMT dalam DB!
sumber
$form->setValues($model->getData())
harus dilakukan.getAdminFormData()
dapat memiliki formulir ini di kelas modelpublic function getAdminFormData() { $dateAr = $this->getDateFields(); foreach ($dateAr as $date) { $loc_date = Mage::getModel('core/date')->date('Y-m-d H:i:s',($this->getData($date))); $this->setData($date,$loc_date); } return $this->getData(); }
Anda dapat memeriksa file
Dan komentar string berikutnya
Itu akan memberi tahu widget untuk menggunakan pengaturan browser.
sumber
Anda harus menggunakan metode yang tepat saat menambahkan bidang tanggal menggunakan file setup mysql di Namespace> Module> sql> module_setup> mysql4-install / upgrade-xxxphp :
sumber
'backend' => 'eav/entity_attribute_backend_datetime', // this fixes your issue
addAttribute
tidak punya kekuatan di sini.