Magento - Загрузить файл при регистрации - PullRequest
1 голос
/ 27 сентября 2011

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

Я уже добавил поля в шаблон.Но как я могу получить файл и сохранить имя файла / содержимое в записи клиента?

Есть ли способ расширить функциональность в контроллерах?

Ответы [ 3 ]

2 голосов
/ 13 октября 2011

На самом деле это даже проще:

Просто убедитесь, что вы установили эти параметры в своем config.xml:

            'attributes' => array(
                'prooffile' => array(
                    'type'          => 'text',
                    'input'         => 'file',
                    'label'         => 'Proof file',
                    'visible'       => true,
                    'required'      => false,
                    'position'      => 100,
                    "user_defined" => false,
                ),

Это добавляет хороший редактор в бэкэнд вашего администратора.

0 голосов
/ 17 мая 2012

В файле установщика модуля создайте атрибут, подобный этому, и он появится в бэкэнде клиента.

Для более новой версии Magento необходима дополнительная часть (точно не знаю, когда именно, но это верно для Magento Community Edition 1.6 и выше).

Ключ "used_in_forms" не может быть в массиве, передаваемом вызову addAttribute напрямую (не будет работать).Вероятно, он содержит имена форм, из которых модель клиента будет принимать значения, а не игнорировать их при сохранении.

Известные значения есть в ответах на этот вопрос: Больше не может добавлять регистрационные поля в Magento 1.4.2.0 (ответ от Folker Schellenberg)

Я думаю, что это имяконтроллера и действия, которые оказали форму.Это имя также является основным дескриптором макета страницы (например, customer_account_edit).

Следует отметить, что форма клиента во внешнем интерфейсе основана на HTML.Он не отображает динамически входные данные из атрибутов, таких как формы бэкэнда.Это означает, что если эти атрибуты должны быть введены пользователем, шаблон должен быть изменен так, чтобы он также содержал надлежащие входные теги (и правильное значение, добавленное в массив used_in_forms).

$attributeCode = "uploaded_file";
$attributeLabel = "Uploaded file";

$installer->addAttribute('customer', $attributeCode, array(
    'type' => 'text',
    'input' => 'file',
    'label' => $attributeLabel,
    'global' => true,
    'visible' => true,
    'required' => false,
    'user_defined' => false
));

// For newer versions of Magento, otherwise won't show up.
$eavConfig = Mage::getSingleton('eav/config');
$attribute = $eavConfig->getAttribute('customer', $attributeCode);
$attribute->setData('used_in_forms', array('customer_account_create', 'adminhtml_customer'));
$attribute->setData('sort_order', 200);
$attribute->save();

Другой возможныйтип это 'изображение', которое отображается точно как 'файл', за исключением того, что оно показывает изображение в окне предварительного просмотра (маленькое).Может быть, это хорошо для фотографии клиента?

Также следует отметить, что это специфично для формы клиента (класс, который обрабатывает этот тип атрибута: Mage_Adminhtml_Block_Customer_Form_Element_File и Mage_Adminhtml_Block_Customer_Form_Element_Image), поэтому этот атрибут не будет работать в продуктебез кастомной работы.

Надеюсь, это поможет!

0 голосов
/ 30 сентября 2011

Как я это сделал:

Я добавил поле файла в регистрационную форму:

<li class="fields">
                <div class="field">
                                <div class="input-box">
                                                <label for="prooffile"><?php echo $this->__('Proof of business registration') ?><span class="required">*</span></label><br />
                                                <input type="file" name="prooffile" id="prooffile" title="<?php echo $this->__('Proof of business registration') ?>" class="required-entry input-text" />
                                </div>
                </div>
</li>

Кроме того, убедитесь, что вы установили для типа формы "multipart / form-".data ".

После этого я создал класс, который подписывается на событие" user-register-success ".В Magento встроен очень четкий механизм Event / Observer.

Для этого у вас должен быть собственный модуль.В модулях etc / config.xml добавьте следующие строки для прослушивателя событий:

    <events>
            <customer_register_success> <!-- The name of the Event -->
                    <observers>
                            <customfields> <!-- Your module name -->
                                    <type>singleton</type>
                                    <class>customfields/observer</class> <!-- The class name, that holds your callback function -->
                                    <method>handle_file_upload</method>
                            </customfields>
                    </observers>
            </customer_register_success>
    </events>

Это регистрирует обработчик события для события customer_register_success.Убедитесь, что вы создали файл Observer.php в папке ваших модулей Model:

Model / Observer.php:

<?php

class Komola_Customfields_Model_Observer
{
        public function __construct()
        {

        }

        public function handle_file_upload($observer)
        {
                $customer = $observer->getCustomer();
                if (isset($_FILES['prooffile']['name']) && $_FILES['prooffile']['name'] != "") {
                                $uploader = new Varien_File_Uploader("prooffile");
                                $uploader->setAllowedExtensions(array('jpg', 'jpeg', 'gif', 'png', 'pdf'));
                                $uploader->setAllowRenameFiles(false);
                                $uploader->setFilesDispersion(false);
                                $path = Mage::getBaseDir("media") . DS . "customer" . DS;
                                $logoName = $customer->getId() . "." . pathinfo($_FILES['prooffile']['name'], PATHINFO_EXTENSION);
                                $uploader->save($path, $logoName);
                                $customer->setProoffile($logoName);
                                $customer->save();
                }
        }
}

. Принимает загруженный файл и сохраняет файл в папке.media / customer (обязательно создайте эту папку и сделайте ее доступной для записи!).Он также сохраняет имя файла в пользовательском атрибуте клиента.

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