3

私は何度もmagentoを使ってきましたが、これは究極の挑戦です。私は、400,000 を超える製品を持つ magento ストアに取り組んでおり、それぞれに独自のバリエーション / 製品オプションがあります。マスター ストア (カスタム ショッピング カート システムに基づいており、MSSQL で実行されます) では、毎日何百もの商品が追加および削除されます。

すべてのカテゴリ、製品、テキスト、説明、価格、バリエーションなどを取得し、その場で動的に製品ページを作成するように magento を構成しました ( http://www.offices-furniture.co.uk/pp?prod=mercury-受付ユニット.html

問題は、バックエンドに物理的に存在することなく、これらの製品をショッピング カートに追加できるようにする必要があることです。バックエンドに 1 つの製品を追加し、これを GENERAL テンプレート タイプの製品として使用する予定です。そのため、常にこの製品 (そのバリエーション) がカートに追加されます。

http://www.offices-furniture.co.uk/frodo.phpしかし、私は一生、価格を変更することはできません.... grrrr ..

フロントエンドでHTMLまたはPHPを介して価格を変更し、バックエンドで価格を変更せずにショッピングカートに投稿する方法について、誰かが私を正しい方向に向けることができれば

よろしくお願いします…</p>

価格を変更するために使用しようとしたコードは次のとおりです。

    <?php
require_once ("app/Mage.php");
umask(0);

Mage::app("default");

Mage::getSingleton("core/session", array("name" => "frontend"));

// get the current Magento cart
$cart = Mage::getSingleton('checkout/cart');
$product = Mage::getModel('catalog/product');
$product->setCustomPrice(99);
$product->setOriginalCustomPrice(99);
$product->getProduct()->setIsSuperMode(true);
$product->setTypeId('configurable');
$product->setTaxClassId(1); //none
$product->setSku(ereg_replace("\n","","videoTest2.2"));
$product->setName(ereg_replace("\n","","videoTest2.2"));
$product->setDescription("videoTest2.2");
$product->setPrice("129.95");
$product->setShortDescription(ereg_replace("\n","","videoTest2.2"));
$cart->save();

if(isset($_POST['submit'])){

// call the Magento catalog/product model

$product = Mage::getModel('catalog/product')
// set the current store ID
->setStoreId(Mage::app()->getStore()->getId())
// load the product object
->load($_POST['product']);
*/

////////////////////////////
// get the current Magento cart
$cart = Mage::getSingleton('checkout/cart');
$product = Mage::getModel('catalog/product')
// set the current store ID
->setStoreId(Mage::app()->getStore()->getId())
// load the product object
->load($_POST['product']);
$product->setCustomPrice(99);
$product->setOriginalCustomPrice(99);
$product->getProduct()->setIsSuperMode(true);
$product->setTypeId('configurable');
$product->setTaxClassId(1); //none
$product->setSku(ereg_replace("\n","","videoTest2.2"));
$product->setName(ereg_replace("\n","","videoTest2.2"));
$product->setDescription("videoTest2.2");
$product->setPrice("129.95");
$product->setShortDescription(ereg_replace("\n","","videoTest2.2"));
$cart->save();
/////////////////////////////////////

// start adding the product
// format: addProduct(<product id>, array(
// 'qty' => <quantity>,
// 'super_attribute' => array(<attribute id> => <option id>)
// )
// )
$cart->addProduct($product, array(
'qty' => $_POST['qty'],
'price' => 50,

'super_attribute' => array( key($_POST['super_attribute']) => $_POST['super_attribute'][525] )
)
);

// save the cart
$cart->save();

// very straightforward, set the cart as updated
Mage::getSingleton('checkout/session')->setCartWasUpdated(true);

// redirect to index.php
header("Location: frodo.php");

}else{
?> 
4

2 に答える 2

5

これはあなたを助けるかもしれないスニペットです... 製品がカートに追加されたときに、その場で間違いなく価格を変更できます. これをcheckout_cart_save_beforeイベント オブザーバーで使用しています。この例では、アイテムの重量が 10 ポンドを超えるとトリガーされます。

/**
 * Set the price if the weight is over 10 lbs
 * 
 * @param Varien_Event_Observer $observer
 */
public function setPriceOnCartSaveBefore(Varien_Event_Observer $observer)
{
    $cart = $observer->getCart();
    $items = $cart->getItems();

    foreach($items as $item) {
        if ($item->getWeight() > 10) {
            $item->setCustomPrice(69.99);
            $item->setOriginalCustomPrice(69.99);
        }
    }
}
于 2012-10-22T16:39:26.263 に答える
2

あなたの質問は完全に明確ではありません。これを解釈するには 2 つの方法が考えられます (最初の問題は比較的簡単に解決できるため、2 番目の問題を意味していると思います)。

1) ショッピング カートにカスタム価格のみが必要ですが、チェックアウトまで続く必要はありません
。2) Magento チェックアウトを使用してカスタム価格で製品を実際に販売できる必要があります。

広告 1: ショッピング カートの価格のみを変更

これは比較的簡単です。私は JavaScript と、AJAX 経由でアクセスでき、表示する価格を計算できるカスタム PHP スクリプトを使用します。これは、DOM 操作によって実行できます。CSS は、AJAX 計算が完了するまで価格を非表示にするのに役立ちます。

もう 1 つの方法は、価格テンプレート ファイルを編集することです。Magento phtml ファイルは、現在レンダリング中のオブジェクト (カートや見積もりなど) の View クラス内で呼び出されるため、ProductID を取得できます。次に、追加されている製品が魔法のカスタム テンプレート製品であるかどうかを確認し、それに応じて価格を変更できます。

base/default テンプレートでは、base/default/template/checkout/cart/item/default.phtml でアイテム ID を取得します。

$product_id = $_item->getProduct()->getId();

Web サイトで使用した Weee、InclTax などの組み合わせを把握すると (つまり、default.pthml のどこに価格が実際に表示されるかがわかります)、そこで if ステートメントを取得し、カスタム価格を何らかの方法で表示できます。

広告 2: チェックアウト時に価格を変更したままにする

これを行うことは不可能だと思います。特に、Magento は注文の整合性にこだわっています (カタログから製品を削除しても、その製品とその情報は常にその注文から入手できます)。

これに最も近い方法 (少なくとも私が想像できる限り) は、設定したテンプレート製品に、可変価格の使用を可能にするカスタム ドロップダウン オプションを含めることです。

そのカスタム ドロップダウン オプションの唯一の値の価格を動的に設定することもできますが、それでうまくいくとは思えません。最後に試すことができるのは、注文が行われるたびに、その製品のカスタム オプションに (カスタム価格で) 値を追加することです。そうすれば、Magento のオーバーヘッドを最小限に抑えながら、販売した物理的な製品の履歴を保持する方法を Magento に提供することで、Magento の官僚機構を満足させることができます。

別の提案

また、カスタムオプション付きの製品を本来の用途で使用できる可能性もあります。十分なカスタム オプション (シャツのサイズ、色、プリント、生地など) を備えた基本的なテンプレート製品を作成し、その場で新しいカスタム オプションの値を追加する場合。このようにして、オプションがすでに存在するかどうか、各オプションに独自の追加価格値があるかどうかを確認することもできます。

最後の提案

本当に全力を尽くしたい場合は、Magento 用のカスタム モジュールを作成してみてください。

  • バスケットに追加されたときに製品を作成します。
  • 注文が終了したとき、または顧客がバスケットから商品を削除したときに、その商品を再度削除します。
  • カスタム プロダクトを定期的に (Mage/cron などを介して) プルーニングします。

これにより、製品がまったくないのではなく、一時的な製品が作成されます。

あなたが前進するのに役立ついくつかの考えを共有できたことを願っています!

于 2012-10-18T23:59:31.290 に答える