1

Magentoインスタンスに登録するすべてのユーザーに、ビジネスを登録したことを示す証明書をアップロードしてもらいたいです。

テンプレートにフィールドを追加しました。しかし、どうすればファイルをフェッチしてファイル名/内容を顧客レコードに保存できますか?

コントローラの機能を拡張する方法はありますか?

4

3 に答える 3

2

これは実際にはさらに簡単です。

config.xmlで次のパラメータを設定していることを確認してください。

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

これにより、管理バックエンドに優れたエディターが追加されます。

于 2011-10-13T17:03:38.327 に答える
0

私がこれをした方法:

登録フォームにファイルフィールドを追加しました:

<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>

また、フォームのenctypeが「multipart/form-data」に設定されていることを確認してください。

その後、「user-register-success」イベントをサブスクライブするクラスを作成しました。Magentoには、非常に堅固なイベント/オブザーバーメカニズムが組み込まれています。

これを行うには、カスタムモジュールが必要です。モジュール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のイベントハンドラーが登録されます。モジュールのModelフォルダーにObserver.phpファイルを作成してください。

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フォルダーに保存されます(必ずこのフォルダーを作成し、書き込み可能にしてください)。また、ファイル名をカスタム顧客属性に保存します。

于 2011-09-30T09:40:01.147 に答える
0

モジュール インストーラー ファイルで、このような属性を作成すると、顧客のバックエンドに表示されます。

新しいバージョンの Magento には追加のパーツが必要です (いつからかは正確にはわかりませんが、Magento Community Edition 1.6 以降ではそうです)。

「used_in_forms」キーは、addAttribute 呼び出しに直接渡される配列に含めることはできません (機能しません)。おそらく、顧客モデルが値を受け入れ、保存時に無視しないフォームの名前が含まれています。

既知の値は、この質問の回答にあります: Can't no longer add registration fields in 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 です)。そのため、これはカスタム作業のない製品属性では機能しません。

お役に立てれば !

于 2012-05-17T12:52:52.433 に答える