Данные пользовательской вкладки клиента не могут быть сохранены в администраторе
У меня есть пользовательский модуль, который используется для добавления пользовательского модуля в раздел "Клиент" в разделе "Администратор". Я успешно добавил эту вкладку и теперь пытаюсь сохранить пользовательские данные, полученные с помощью пользовательской вкладки, в пользовательской таблице. Для этого я использую метод наблюдателя, который показан ниже
<config>
-----------------
<global>
<events>
<adminhtml_customer_prepare_save>
<observers>
<save_customnewtab_data>
<type>singleton</type>
<class>customernewtab/observer</class>
<method>saveCustomerNewTabData</method>
</save_customnewtab_data>
</observers>
</adminhtml_customer_prepare_save>
</events>
--------------
</global>
---------
</config>
И мой наблюдатель показан ниже
<?php
class Mysite_Customernewtab_Model_Observer
{
public function saveCustomerNewTabData($observer){
if (isset($observer['customer']))
{
$customer = $observer['customer']->getData();
echo "<pre>";
print_r($customer);
die();
}
else
{
//Do something with the customer
}
}
}
Это извлечение файла phtml, который я использую для отображения содержимого моей пользовательской вкладки
<!-- some contents here -->
<tr>
<td>
<table class="form-list" cellspacing="0">
<tbody>
<tr>
<td class="value">
<input id="customer_nick_name" class=" required-entry input-text required-entry" type="text" value="" name="customernewtab[customer_nick_name]" />
</td>
</tr>
</tbody>
</table>
</td>
</tr>
<?php /*profile pic section*/ ?>
<tr>
<td>
<table class="form-list" cellspacing="0">
<tbody>
<tr>
<td>
<div id="customernewtab-prof-pic" style=" margin-left: 250px;margin-top: 30px;">
<input id="customernewtab_file_name" type="hidden" name="customernewtab[customer_photo]" value="" />
<input id="customnewtab_file" type="file" name="customer_prof_pic" value="" />
</div>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
Теперь смотрите мой вывод наблюдателя при редактировании существующих данных клиента с помощью моих пользовательских данных был установлен вместе с ними.
Array
(
[entity_id] => 3
[entity_type_id] => 1
[attribute_set_id] => 0
[website_id] => 1
[email] => [email protected]
[group_id] => 1
[increment_id] =>
[store_id] => 1
[created_at] => 2014-03-10T04:23:00-07:00
[updated_at] => 2014-03-12 07:22:00
[is_active] => 1
[disable_auto_group_change] => 0
[firstname] => test
[lastname] => test
[password_hash] => 4de63e833f14934a3c5fd4213496a13c:n0seA0z1a135nmY3rtbTkUAmkTpiomzw
[created_in] => English
[prefix] =>
[middlename] =>
[suffix] =>
[taxvat] =>
[dob] =>
[gender] =>
[is_subscribed] =>
)
Как вы можете видеть, мои пользовательские данные отсутствуют в выходных данных. Мой вопрос
1) Почему мои пользовательские данные customer_nick_name
и customer_photo
не отображаются в выходных данных?
2) Что не так в моем коде?
3) Это правильный способ сохранения пользовательских данных вкладки?
1 answers
Почему мои пользовательские данные customer_nick_name и customer_photo не отображаются в выходных данных?
Поскольку они не обрабатываются, это происходит здесь:
\Mage_Adminhtml_CustomerController::saveAction
/** @var $customerForm Mage_Customer_Model_Form */
$customerForm = Mage::getModel('customer/form');
$customerForm->setEntity($customer)
->setFormCode('adminhtml_customer')
->ignoreInvisible(false)
;
$formData = $customerForm->extractData($this->getRequest(), 'account');
Вам нужно добавить атрибуты, которые должны быть проанализированы, в таблицу customer_form_attribute
, если вы не используете логику magento.
Что не так в моем коде? Это правильный способ сохранения пользовательских данных вкладки?
Но почему бы вам просто не добавить новый атрибут и не позволить magento сделать все остальное? Magento должен отобразить атрибуты и показать их вам... и, конечно, спасти их.
В блоге есть много статей о том, как добавить атрибут клиента, например эта из elsondesigns.
$this->addAttribute($entity, 'some_attribute', array(
'type' => 'text', /* input type */
'label' => 'Some Attribute', /* Label for the user to read */
'input' => 'text', /* input type */
'visible' => TRUE, /* users can see it */
'required' => FALSE, /* is it required, self-explanatory */
'default_value' => 'default', /* default value */
'adminhtml_only' => '1' /* use in admin html only */
));
Добавление поля изображения возможно, часть с enctype немного сложнее (хороший улов!), И я думаю, что для этого вам нужен наблюдатель... и я ОШИБАЮСЬ. Все в порядке:
\Mage_Adminhtml_Block_Customer_Edit_Form
protected function _prepareForm()
{
$form = new Varien_Data_Form(array(
'id' => 'edit_form',
'action' => $this->getData('action'),
'method' => 'post',
'enctype' => 'multipart/form-data'
));