0

顧客が独自の製品を作成し、有効にする前に管理者に承認してもらうためのモジュールを使用して、フロントエンドからmagento製品を更新する際に問題が発生しました(この部分は機能しています)。

問題は、顧客が管理者が承認した製品を更新しようとした場合です(承認前と同様に、製品は新しく作成された製品が保留中であると述べていますが、製品の作成機能中に作成されたデータ/属性は更新できません。同じ属性は更新されません。コントローラを使用して)

まず第一に、承認された/保留中の顧客製品を更新するアクションを備えたコントローラーがあります

public function editPostAction() {

        $id = $this->getRequest()->getParam('productid');

        if ( $id !== false ) {

            list($data, $errors) = $this->validatePost();
            if ( !empty($errors) ) {
                foreach ($errors as $message) {
                    $this->_getSession()->addError($message);
                }
                $this->_redirect('customer/products/edit/', array(
                        'id'    => $id
                    ));
            } else {

                $customerId = $this->_getSession()->getCustomer()->getid();
                $product = Mage::getResourceModel('customerpartner/customerpartner_product_collection')
                            ->addAttributeToSelect('*')
                            ->addAttributeToFilter('customer_id', $customerId)
                            ->addAttributeToFilter('entity_id', $id)
                            ->load()
                            ->getFirstItem();

                $product->setName($this->getRequest()->getParam('name'));
                $product->setSku($this->getRequest()->getParam('sku'));
                $product->setDescription($this->getRequest()->getParam('description'));
                $product->setShortDescription($this->getRequest()->getParam('short_description'));
                $product->setPrice($this->getRequest()->getParam('price'));
                $product->setWeight($this->getRequest()->getParam('weight'));
                $product->setStock($this->getRequest()->getParam('stock'));
                $product->save();

                if ( isset($_FILES) && count($_FILES) > 0 ) {
                    foreach($_FILES as $image ) {
                        if ( $image['tmp_name'] != '' ) {
                            if ( ( $error = $this->uploadImage($image, $id) ) !== true ) {
                                $errors[] = $error;
                            }
                        }

                    }
                }

                if ( empty($errors) ) {
                    $this->_getSession()->addSuccess($this->__('Your product was successfully updated'));
                } else {
                    $this->_getSession()->addError('Product info was saved but was imposible to save the image');
                    foreach ($errors as $message) {
                        $this->_getSession()->addError($message);
                    }
                }

                $this->_redirect('customer/products/');

            }
        }
}

送信時に製品の属性と画像を更新することになっているフォームと同様に、送信時にページがリロードされ、正常に保存されたメッセージが表示されますが、属性は更新されず、その製品の編集フォーム(作成された製品ごと)に戻ります更新フォームの値には、送信したばかりの更新の値が含まれていますが、製品の属性もカタログで更新されていません(これらは、新しい作成プロセスで入力した値と同じままです)。

何が問題になっているのかを把握し続けるか、APIを使用するかSQLを直接使用して作業を完了するかを選択してください。

4

2 に答える 2

0

.phtmlで呼び出す新しいアクションに更新されました。必要に応じて製品データを更新しているようですが、まだ改善したいと考えています。/ frontendname /editApprovedPost/を使用してフォームで呼び出されます。

public function editApprovedPostAction() {

        $id = $this->getRequest()->getParam('productid');
        $idproduct = $this->getRequest()->getParam('product_id');

        if ( $id !== false ) {

            list($data, $errors) = $this->validatePost();
            if ( !empty($errors) ) {
                foreach ($errors as $message) {
                    $this->_getSession()->addError($message);
                }
                $this->_redirect('customer/products/edit/', array(
                        'id'    => $id
                    ));
            } else {

-} else {..。の後に、アクションにphpコードを(この順序で)追加しました。

 require_once 'app/Mage.php';

次に、フロントエンド製品の更新用の管理ストアを追加します。

Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

次に、顧客IDを取得します...

$customerId = Mage::getSingleton('customer/session')->getCustomerId();

次に、フォームの製品IDを使用して、製品IDを更新します...

$product = Mage::getModel('catalog/product')->load("".$idproduct."");

次に、setName()を使用して、フォームの入力値から取得した属性値を更新/保存します。

$product->setName($this->getRequest()->getParam('name'));//use whatever attributes need (only text and text area tested so far)

次に、製品データを保存/更新します...

$product->save();

次に、エラーを実行するために追加します。

 if ( empty($errors) ) {
                    $this->_getSession()->addSuccess($this->__('Your product was successfully updated'));

                } else {

                    $this->_getSession()->addError('Product info was saved but was imposible to save the image');
                    foreach ($errors as $message) {
                        $this->_getSession()->addError($message);
                    }
                }

                $this->_redirect('customer/products/');

            }
    }
}

次に、顧客がログインし、顧客グループの構成をフロントエンドで送信するためのフォームを使用します

  • カスタマーグループ2にのみ表示されるカスタムフォーム(デフォルトはホールセール)

以下のフォーム...

申し訳ありませんが、ここにコードを貼り付けるための多くの作業にフォームを貼り付けることはできません。

Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

私がいくつかの投稿で読んだことは、フロントエンドで製品を更新するには、「管理者」である必要があるということです。これはうまくいくようです。前述のように、スクリプトは更新されていませんでした。これは、更新されるデータが実際の製品(異なるモデルのデータを使用して承認および作成されたもの)であり、更新されたときに、異なるモデルのデータに保存しようとしたためです。を使用して

$product = Mage::getResourceModel('customerpartner/customerpartner_product_collection')

このビルドを閉じる時間だと思っていたので、他の誰かのコメントがこれが誰かを助けることを願っています。

于 2012-08-18T05:51:41.570 に答える
0

この投稿を参照してくださいMagento1.7:PHPスクリプトに保存されていない非システム製品属性問題は異なる可能性がありますが、解決策はその投稿にあります

于 2012-08-16T13:54:11.730 に答える