Я использовал этот метод , чтобы добавить указатель даты и времени в бэкэнд magento. Теперь время ввода правильно сохраняется в моей базе данных.
Проблема в том, что часовой пояс моего магазина magento установлен на стандартное индийское время (GMT + 05: 30), поэтому время, указанное в СЕТКЕ ADMIN, представляет собой входное значение времени (которое находится в базе данных) + 05:30 часов.
- phpmyadmin view:
время в базе данных: 7:15 и 7:52
- Вид сетки в админке magento:
время в админ 12:45 и 13:22
Это не беспокоит меня, так как таймер обратного отсчета, который я отображаю во внешнем интерфейсе, принимает значение, указанное в сетке администратора Я счастлив. Но при выборе времени в датчике время показывает время по Гринвичу, то есть время, сохраненное в базе данных.
Таким образом, человек, который вводит ввод времени, должен ввести время, которое на 5:30 часов раньше запланированного времени.
источник
Поэтому, потратив почти день на борьбу с этой же проблемой в своем собственном дополнении, я решил поделиться своим решением здесь. Следует отметить, что мои объекты не используют систему EAV, у каждого объекта есть своя собственная плоская таблица со столбцом для каждого атрибута. Моя сущность имеет четыре атрибута datetime - два из которых заполняются из пользовательского ввода (
open_date
,close_date
), а два из них автоматически заполняются исходным кодом (create_date
,close_date
).Модель класса сущности
В класс модели объекта я включил следующее:
Исходный код:
SaveAction административного контроллера сущности
В методе saveAction моего контроллера я использовал метод getDateFields (), определенный в классе модели, чтобы узнать, какие атрибуты мне нужно изменить с локального времени магазина (которое было введено пользователем) на время по Гринвичу до сохранения в базе данных. Обратите внимание, что это только частичный фрагмент моего метода сохранения:
Блок административной формы для редактирования сущности
В отличие от виджета сетки администратора Magento, который ожидает, что значения времени и даты из коллекций будут предоставлены в GMT, с намерением преобразовать эти значения в местное время магазина до отображения страницы, виджет формы администратора Magento не соответствует этому поведению. Вместо этого виджет формы будет принимать значение даты и времени как есть и отображать его без автоматической настройки времени. Поэтому, поскольку значения хранятся в базе данных в GMT, мы должны сначала преобразовать введенные пользователем атрибуты datetime в местное время магазина, прежде чем предоставлять эти данные в форму. Вот тут-то и вступает в игру наш второй номер в классе моделей Entity .
Вот часть метода _prepareForm () класса блока моей формы администратора (который расширяет Mage_Adminhtml_Block_Widget_Form). Я опустил большую часть своей функции, пытаясь включить только тот минимум, который имеет отношение к этому вопросу, и по-прежнему предоставлять правильный метод класса:
Большая часть этого следует за любым другим виджетом формы для Magento. Однако, одна ключевая вещь, которую важно здесь отметить, это то, что вместо того, чтобы звонить,
$form->setValues($model->getData())
мы звоним$form->setValues($model->getAdminFormData())
. Что, если мы рассмотрим мой код из первого сегмента этого ответа, этот метод берет преобразование всех атрибутов даты и времени, которые вводятся пользователем, из GMT в местное время магазина.Конечный результат:
Надеюсь, что это окажется ценным ресурсом, чтобы помочь кому-то еще там когда-нибудь. Настало время, когда вы работаете над интерфейсной разработкой, имейте в виду, что значения datetime находятся в GMT в БД!
источник
$form->setValues($model->getData())
должно быть.getAdminFormData()
может иметь эту форму в модельном классеpublic 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(); }
Вы можете проверить файл
И комментируйте следующие строки
Это должно сказать виджету использовать настройки браузера.
источник
Вы должны использовать правильный метод при добавлении поля даты, используя установочный файл mysql в Namespace> Module> sql> module_setup> mysql4-install / upgrade-xxxphp :
источник
'backend' => 'eav/entity_attribute_backend_datetime', // this fixes your issue
addAttribute
что здесь нет сил.