Получите ошибку при редактировании клиентов с бэкенда в Magento - PullRequest
1 голос
/ 14 декабря 2011

Я внезапно начал сталкиваться с этой ошибкой из ниоткуда и мне нужна помощь.

В моем разделе «Управление клиентами», когда я добавляю нового клиента, он отображается нормально со всеми правильными значениями. Но всякий раз, когда я пытаюсь отредактировать нового добавленного клиента, я получаю страницу с ошибкой в ​​Magento.

Произошла ошибка при обработке вашего запроса.

А позже, когда я вернусь к сетке «Управление клиентами», столбец «Клиент с» для этой записи клиента изменится на это значение «30 ноября -1 01:00:00»

Так кто-нибудь имеет представление о том, что там может пойти не так?

Это ошибка в папке var / report,

a:5:{i:0;s:25:"No date part in '' found.";i:1;s:4432:"#0 /home/wpfsl/public_html/lib/Zend/Date.php(1078): Zend_Date->_calculate('set', false, NULL, 'en_GB')
#1 /home/wpfsl/public_html/lib/Zend/Date.php(197): Zend_Date->set(false, NULL, 'en_GB')
#2 /home/wpfsl/public_html/app/code/core/Mage/Core/Model/Locale.php(478): Zend_Date->__construct(false, NULL, Object(Zend_Locale))
#3 /home/wpfsl/public_html/app/code/core/Mage/Adminhtml/Block/Customer/Edit/Tab/View.php(76): Mage_Core_Model_Locale->date(false)
#4 /home/wpfsl/public_html/app/design/adminhtml/default/default/template/customer/tab/view.phtml(36): Mage_Adminhtml_Block_Customer_Edit_Tab_View->getCreateDate()
#5 /home/wpfsl/public_html/app/code/core/Mage/Core/Block/Template.php(241): include('/home/wpfsl/pub...')
#6 /home/wpfsl/public_html/app/code/core/Mage/Core/Block/Template.php(272): Mage_Core_Block_Template->fetchView('adminhtml/defau...')
#7 /home/wpfsl/public_html/app/code/core/Mage/Core/Block/Template.php(286): Mage_Core_Block_Template->renderView()
#8 /home/wpfsl/public_html/app/code/core/Mage/Adminhtml/Block/Template.php(81): Mage_Core_Block_Template->_toHtml()
#9 /home/wpfsl/public_html/app/code/core/Mage/Core/Block/Abstract.php(863): Mage_Adminhtml_Block_Template->_toHtml()
#10 /home/wpfsl/public_html/app/code/core/Mage/Adminhtml/Block/Widget/Tabs.php(303): Mage_Core_Block_Abstract->toHtml()
#11 /home/wpfsl/public_html/app/design/adminhtml/default/default/template/widget/tabs.phtml(38): Mage_Adminhtml_Block_Widget_Tabs->getTabContent(Object(Mage_Adminhtml_Block_Customer_Edit_Tab_View))
#12 /home/wpfsl/public_html/app/code/core/Mage/Core/Block/Template.php(241): include('/home/wpfsl/pub...')
#13 /home/wpfsl/public_html/app/code/core/Mage/Core/Block/Template.php(272): Mage_Core_Block_Template->fetchView('adminhtml/defau...')
#14 /home/wpfsl/public_html/app/code/core/Mage/Core/Block/Template.php(286): Mage_Core_Block_Template->renderView()
#15 /home/wpfsl/public_html/app/code/core/Mage/Adminhtml/Block/Template.php(81): Mage_Core_Block_Template->_toHtml()
#16 /home/wpfsl/public_html/app/code/core/Mage/Core/Block/Abstract.php(863): Mage_Adminhtml_Block_Template->_toHtml()
#17 /home/wpfsl/public_html/app/code/core/Mage/Core/Block/Text/List.php(43): Mage_Core_Block_Abstract->toHtml()
#18 /home/wpfsl/public_html/app/code/core/Mage/Core/Block/Abstract.php(863): Mage_Core_Block_Text_List->_toHtml()
#19 /home/wpfsl/public_html/app/code/core/Mage/Core/Block/Abstract.php(582): Mage_Core_Block_Abstract->toHtml()
#20 /home/wpfsl/public_html/app/code/core/Mage/Core/Block/Abstract.php(526): Mage_Core_Block_Abstract->_getChildHtml('left', true)
#21 /home/wpfsl/public_html/app/design/adminhtml/default/default/template/page.phtml(58): Mage_Core_Block_Abstract->getChildHtml('left')
#22 /home/wpfsl/public_html/app/code/core/Mage/Core/Block/Template.php(241): include('/home/wpfsl/pub...')
#23 /home/wpfsl/public_html/app/code/core/Mage/Core/Block/Template.php(272): Mage_Core_Block_Template->fetchView('adminhtml/defau...')
#24 /home/wpfsl/public_html/app/code/core/Mage/Core/Block/Template.php(286): Mage_Core_Block_Template->renderView()
#25 /home/wpfsl/public_html/app/code/core/Mage/Adminhtml/Block/Template.php(81): Mage_Core_Block_Template->_toHtml()
#26 /home/wpfsl/public_html/app/code/core/Mage/Core/Block/Abstract.php(863): Mage_Adminhtml_Block_Template->_toHtml()
#27 /home/wpfsl/public_html/app/code/core/Mage/Core/Model/Layout.php(529): Mage_Core_Block_Abstract->toHtml()
#28 /home/wpfsl/public_html/app/code/core/Mage/Core/Controller/Varien/Action.php(391): Mage_Core_Model_Layout->getOutput()
#29 /home/wpfsl/public_html/app/code/core/Mage/Adminhtml/controllers/CustomerController.php(151): Mage_Core_Controller_Varien_Action->renderLayout()
#30 /home/wpfsl/public_html/app/code/core/Mage/Core/Controller/Varien/Action.php(420): Mage_Adminhtml_CustomerController->editAction()
#31 /home/wpfsl/public_html/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(250): Mage_Core_Controller_Varien_Action->dispatch('edit')
#32 /home/wpfsl/public_html/app/code/core/Mage/Core/Controller/Varien/Front.php(176): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#33 /home/wpfsl/public_html/app/code/core/Mage/Core/Model/App.php(347): Mage_Core_Controller_Varien_Front->dispatch()
#34 /home/wpfsl/public_html/app/Mage.php(640): Mage_Core_Model_App->run(Array)
#35 /home/wpfsl/public_html/index.php(80): Mage::run('', 'store')
#36 {main}";s:3:"url";s:80:"/index.php/wpfsl_admin/customer/edit/id/11/key/4e2ec034dd470035e31f5f55242e0811/";s:11:"script_name";s:10:"/index.php";s:4:"skin";s:5:"admin";}

Извините, я также понял, что хотя код, который я написал по крайней мере, позволяет мне редактировать свои записи без каких-либо ошибок, но все равно изменяет значение Customer Since на случайное значение даты, например 30 Нет -01 01: 00: 00.

Но также, если я пытаюсь создать заказ из серверной части для клиента, также созданного с помощью серверной части magento, я получаю следующую ошибку

a:5:{i:0;s:825:"Invalid method Mage_Adminhtml_Block_Sales_Order_View_Tab_History::isCustomerNotificationNotApplicable(Array ( [0] => Array ( [title] => Pending [notified] => 0 [comment] => [created_at] => Zend_Date Object ( [_locale:Zend_Date:private] => en_GB [_fractional:Zend_Date:private] => 0 [_precision:Zend_Date:private] => 3 [_unixTimestamp:Zend_Date_DateObject:private] => 1323946274 [_timezone:Zend_Date_DateObject:private] => Europe/London [_offset:Zend_Date_DateObject:private] => -3600 [_syncronised:Zend_Date_DateObject:private] => 0 [_dst:protected] => 1 )</p> <pre><code> )

) ) "; i: 1; s: 4197:" # 0 /home/wpfsl/public_html/app/design/adminhtml/default/default/template/sales/order/view/tab/history.phtml(38): Varien_Object- > __ call ('isCustomerNotif ...', Array) #1 /home/wpfsl/public_html/app/design/adminhtml/default/default/template/sales/order/view/tab/history.phtml(38): Mage_Adminhtml_Block_Sales_Order_View_Tab_History->isCustomerNotificationNotApplicable(Array) #2 /home/wpfsl/public_html/app/code/core/Mage/Core/Block/Template.php(241): include('/home/wpfsl/pub...') #3 /home/wpfsl/public_html/app/code/core/Mage/Core/Block/Template.php(272): Mage_Core_Block_Template->fetchView('adminhtml/defau...') #4 /home/wpfsl/public_html/app/code/core/Mage/Core/Block/Template.php(286): Mage_Core_Block_Template->renderView() #5 /home/wpfsl/public_html/app/code/core/Mage/Adminhtml/Block/Template.php(81): Mage_Core_Block_Template->_toHtml() #6 /home/wpfsl/public_html/app/code/core/Mage/Core/Block/Abstract.php(863): Mage_Adminhtml_Block_Template->_toHtml() #7 /home/wpfsl/public_html/app/code/core/Mage/Adminhtml/Block/Widget/Tabs.php(303): Mage_Core_Block_Abstract->toHtml() #8 /home/wpfsl/public_html/app/design/adminhtml/default/default/template/widget/tabs.phtml(38): Mage_Adminhtml_Block_Widget_Tabs->getTabContent(Object(Mage_Adminhtml_Block_Sales_Order_View_Tab_History)) #9 /home/wpfsl/public_html/app/code/core/Mage/Core/Block/Template.php(241): include('/home/wpfsl/pub...') #10 /home/wpfsl/public_html/app/code/core/Mage/Core/Block/Template.php(272): Mage_Core_Block_Template->fetchView('adminhtml/defau...') #11 /home/wpfsl/public_html/app/code/core/Mage/Core/Block/Template.php(286): Mage_Core_Block_Template->renderView() #12 /home/wpfsl/public_html/app/code/core/Mage/Adminhtml/Block/Template.php(81): Mage_Core_Block_Template->_toHtml() #13 /home/wpfsl/public_html/app/code/core/Mage/Core/Block/Abstract.php(863): Mage_Adminhtml_Block_Template->_toHtml() #14 /home/wpfsl/public_html/app/code/core/Mage/Core/Block/Text/List.php(43): Mage_Core_Block_Abstract->toHtml() #15 /home/wpfsl/public_html/app/code/core/Mage/Core/Block/Abstract.php(863): Mage_Core_Block_Text_List->_toHtml() #16 /home/wpfsl/public_html/app/code/core/Mage/Core/Block/Abstract.php(582): Mage_Core_Block_Abstract->toHtml() #17 /home/wpfsl/public_html/app/code/core/Mage/Core/Block/Abstract.php(526): Mage_Core_Block_Abstract->_getChildHtml('left', true) #18 /home/wpfsl/public_html/app/design/adminhtml/default/default/template/page.phtml(58): Mage_Core_Block_Abstract->getChildHtml('left') #19 /home/wpfsl/public_html/app/code/core/Mage/Core/Block/Template.php(241): include('/home/wpfsl/pub...') #20 /home/wpfsl/public_html/app/code/core/Mage/Core/Block/Template.php(272): Mage_Core_Block_Template->fetchView('adminhtml/defau...') #21 /home/wpfsl/public_html/app/code/core/Mage/Core/Block/Template.php(286): Mage_Core_Block_Template->renderView() #22 /home/wpfsl/public_html/app/code/core/Mage/Adminhtml/Block/Template.php(81): Mage_Core_Block_Template->_toHtml() #23 /home/wpfsl/public_html/app/code/core/Mage/Core/Block/Abstract.php(863): Mage_Adminhtml_Block_Template->_toHtml() #24 /home/wpfsl/public_html/app/code/core/Mage/Core/Model/Layout.php(529): Mage_Core_Block_Abstract->toHtml() #25 /home/wpfsl/public_html/app/code/core/Mage/Core/Controller/Varien/Action.php(391): Mage_Core_Model_Layout->getOutput() #26 /home/wpfsl/public_html/app/code/core/Mage/Adminhtml/controllers/Sales/OrderController.php(119): Mage_Core_Controller_Varien_Action->renderLayout() #27 /home/wpfsl/public_html/app/code/core/Mage/Core/Controller/Varien/Action.php(420): Mage_Adminhtml_Sales_OrderController->viewAction() #28 /home/wpfsl/public_html/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(250): Mage_Core_Controller_Varien_Action->dispatch('view') #29 /home/wpfsl/public_html/app/code/core/Mage/Core/Controller/Varien/Front.php(176): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http)) #30 /home/wpfsl/public_html/app/code/core/Mage/Core/Model/App.php(347): Mage_Core_Controller_Varien_Front->dispatch() #31 /home/wpfsl/public_html/app/Mage.php(640): Mage_Core_Model_App->run(Array) #32 /home/wpfsl/public_html/index.php(80): Mage::run('', 'store') #33 {main}";s:3:"url";s:88:"/index.php/wpfsl_admin/sales_order/view/order_id/3/key/148f59cc3e6d14da7c22a004114985cf/";s:11:"script_name";s:10:"/index.php";s:4:"skin";s:5:"admin";}

Опять же, я предполагаю, что эта ошибка также имеет какое-то отношение к фактору даты?

Ответы [ 8 ]

4 голосов
/ 24 декабря 2011

Кажется, что это ошибка в Magento, связанная с форматами даты в разных локалях. При редактировании клиента поле create_at доступно для редактирования и отображается в текущей локали. Для меня в Великобритании это был ДД / ММ / ГГГГ. При нажатии кнопки «Сохранить» он пытается поместить это значение непосредственно в базу данных и завершается неудачно, потому что это не приемлемый формат базы данных.

Я исправил это, добавив следующую функцию в Mage_Customer_Model_Form. Гораздо лучшим решением было бы создать переписывание классов. Еще лучшим решением было бы для Magento пройти через любые поля, которые конвертируются с использованием локали, а затем преобразовать их обратно в формат iso, прежде чем пытаться вставить их обратно в базу данных. Без этой функции (и, может быть, ее там я уже не знаю) эта проблема, скорее всего, повторится, насколько я вижу.

public function compactData(array $data)
{
    if (array_key_exists('created_at', $data))
    {
        $data['created_at'] = Mage::app()->getLocale()->date($data['created_at'])->getIso();
    }

    return parent::compactData($data);
}

EDIT:

Закончено еще копать. Я заметил, что поле dob работает нормально. Это связано с тем, что само поле настроено со всеми правильными битами, чтобы указывало средство выбора даты на отправку даты в формате MM / DD / YYYY.

Кажется, Magento настроен на решение этой проблемы несколькими способами. В CustomerController есть неиспользуемая функция _filterPostData (), которая вызывает _filterDates (), которая работает лучше (я полагаю), чем мое решение выше.

Я изменил свое исправление, чтобы использовать эту функцию, хотя она должна вызываться из области видимости контроллера. Опять же, я не советую менять основной код, но мое новое исправление в Mage_Adminhtml_CustomerController :: saveAction (). Я добавил вторую из этих строк:

$formData   = $customerForm->extractData($this->getRequest(), 'account');
$formData   = $this->_filterDates($formData, array('created_at')); /// added this line
2 голосов
/ 01 ноября 2012

Как указано выше в сообщении Оскара Реалса, изменение атрибута created_at backend_model в таблице eav_attribute устранило мою проблему, однако значение, которое я использовал, было таким же, как в dob one

eav/entity_attribute_backend_datetime

Это сработало для меня, и ввод 31/10/2012 показал правильность, eav/entity_attribute_backend_time_created привел к случайной дате выше.Я проверил это, отредактировав существующие учетные записи, созданные на дату, создал учетную запись в бэкэнде и создал учетную запись в интерфейсе.Все работало нормально.Кстати, моя локаль - Великобритания.

2 голосов
/ 22 февраля 2012

У меня тоже есть эта проблема, но я нашел способ изменить ее без какой-либо кодировки.
Прежде всего, если вы получаете эту ошибку, она вызвана настройкой даты, Magento 1.6 и EE1.11 начали обновлять своиМодель базы данных, чтобы иметь возможность использовать Oracle и другие базы данных SQL.Вот почему им нужно изменить тип таблицы базы данных с datetime на timestamp, поскольку она может быть просто проанализирована самой базой данных.Ниже приведено решение:

  1. Во-первых, если у вас есть эта ошибка, вам нужно перейти в базу данных, чтобы обновить таблицу customer_entity.Поиск в поле created_at, если оно пустое, дайте ему правильное значение, я настолько потрясен, что Magento теперь позволяет вам редактировать created_at дату в админке, не знаю, насколько она будет полезна.
  2. После этого вы получите правильную дату и сможете просмотреть форму редактирования клиента-администратора.Поскольку мой сайт построен на EE1.11, он должен быть таким же, как 1.6.0 или 1.6.1.Я использовал AU в качестве локали по умолчанию, так что именно отсюда приходили ошибки.
    Вы должны перейти на Configuration -> Catalog -> Date & Time Custom Options и убедиться, что он использует формат AU DD/MM/YYY, и еслиэто делается до того, как ваш сайт заработает, все должно быть в порядке.

Надеюсь, что это поможет, так как большинство разработчиков не пройдут по всем настройкам, прежде чем начнут кодировать.Ура!

Бен Чжан

1 голос
/ 29 декабря 2011

Как я уже говорил ранее, вы можете обновить атрибут backend_model с помощью пользовательского модуля и добавить эту строку в скрипт установки:

Mage::getSingleton('customer/customer')->getAttribute('created_at')
  ->setBackendModel('eav/entity_attribute_backend_time_created')
  ->setAttributeModel(new Zend_Db_Expr('NULL'))
  ->setInputFilter('date')
  ->save();
1 голос
/ 15 декабря 2011

Борьба с такой же проблемой здесь. Итак, я попробовал его на чистой установке Magento 1.6.1.0, и происходит следующее.

  1. Создание клиента на веб-интерфейсе
  2. запись в таблице «Сущность клиента» содержит столбец созданный_ со значением = 2011-12-15 10: 14: 45
  3. В админ> клиент> управлять клиентами> редактировать клиента и нажать сохранить
  4. запись в таблице "Клиентский объект". Значение * create_at * изменено на 2015-12-11 00: 00: 00
0 голосов
/ 29 декабря 2011

Это проблема с backend_model, используемого этим атрибутом. dob использует "eav / entity_attribute_backend_datetime" backend_model, а продукт использует "eav / entity_attribute_backend_time_created", но созданный для клиента не использует его. Этот backend_model обрабатывает все даты конвертации и фильтрации, поэтому это так просто, как изменить таблицу "eav_attribute". Выполните поиск атрибута_кода = 'create_at' AND entity_type_id = 1 и обновите значение backend_model от NULL до 'eav / entity_attribute_backend_time_created', и это так. Нет необходимости изменять основные файлы.

Если вы предпочитаете, вы можете использовать Resource Setup для обновления этого атрибута из установщика вашего собственного модуля.

0 голосов
/ 15 декабря 2011

Я использую Magento ve 1.6.1.Моя функция getCreateDate () точно такая же, как вы упомянули.Я не вижу проблемы там, потому что дата действительно сохраняется должным образом, когда создается новый клиент.Он меняется только когда я редактирую свои записи.

Нашли частичное решение.Изменение lib / Zend / Date.php с помощью этого кода позволяет мне корректно редактировать и сохранять свои записи без каких-либо ошибок.

isset($parsed['year']) ? (1970 + $parsed['year']) : 1970,
                        false), $this->getUnixTimestamp(), false);

                } catch (Zend_Locale_Exception $e) {

/*-- fix BEGIN --*/Zend_Locale_Format::getDate( ) failed --*/

                    if( !is_numeric( $date ) ) {

                            $parsed = date_parse( $date . ( $locale != "" ? " " . $locale : "" ) );
                            if( $parsed === FALSE ) {
                                    $parsed = array( 'year' => 1970, 'month' => 1, 'day' => 1, 'hour' => 0, 'minute' => 0, 'second' => 0 );
                            }

                            return $this->_assign( $calc, $this->mktime(
                                            $parsed['hour'],
                                            $parsed['minute'],
                                            $parsed['second'],
                                            $parsed['month'],
                                            $parsed['day'],
                                            $parsed['year'], false ),
                                            $this->getUnixTimestamp( ), false );

                    } else {

                            #require_once 'Zend/Date/Exception.php';
                            throw new Zend_Date_Exception( $e->getMessage( ) , 0, $e, $date );
                    }
/*-- fix END --*/

                }

            }

            return $this->_assign($calc, $date, $this->getUnixTimestamp(), false);
            break; 

Но когда я редактирую какую-либо вновь добавленную запись о клиенте, Заказчик С возвращается на 30 ноября -1 01:00:00.Так это известная ошибка или как?У кого-нибудь есть работа по этой проблеме?

0 голосов
/ 15 декабря 2011

Если вы используете Magento 1.6.x (вы не упомянули версию), строки № 3 и № 4 вашего отчета

#3 /home/wpfsl/public_html/app/code/core/Mage/Adminhtml/Block/Customer/Edit/Tab/View.php(76): Mage_Core_Model_Locale->date(false)
#4 /home/wpfsl/public_html/app/design/adminhtml/default/default/template/customer/tab/view.phtml(36): Mage_Adminhtml_Block_Customer_Edit_Tab_View->getCreateDate()

указывают, что ваши клиенты created_at поле * содержит , не , содержит действительную дату / время:

public function getCreateDate()
{
    $date = Mage::app()->getLocale()->date($this->getCustomer()->getCreatedAtTimestamp());
    return $this->formatDate($date, Mage_Core_Model_Locale::FORMAT_TYPE_MEDIUM, true);
}

Обратите внимание, что Mage_Adminhtml_Block_Customer_Edit_Tab_View не удается отформатировать уже существующий (но недействительное) значение поля created_at.

Ваша проблема real находится где-то еще, ранее в жизненном цикле записей.

Я бы началне проверять, действительно ли добавление нового клиента приводит к действительным created_at записям.


*customer_since - это только виртуальное отображение created_at.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...