2

これはグーグルを見つけるのが不可能であることを証明しているので、誰かがこれで私を助けてくれたら幸いです。私はMagentoに比較的慣れていないので、これに関する公式ドキュメントもある可能性があります。

引用オブジェクトを取得してgetAllItems()を呼び出す次の場合、getAllItems()で呼び出すことができるすべてのメソッドをどこで確認できますか?

$cart = Mage::getModel('checkout/cart')->getQuote();

foreach ($cart->getAllItems() as $item) {
    $productId = $item->getProduct()->getId();
    $productPrice = $item->getProduct()->getPrice();
}

つまり、getId()などを見たことがありますが、他にどのようなメソッドを使用できますか?

さらに、quoteオブジェクトにカスタムデータを入れたい場合、このデータにアクセスするためのカスタムgetメソッドをどこに作成しますか?

ありがとうポール

4

3 に答える 3

3

クラスメソッドの取得

呼び出すことができるメソッドを知りたいだけの場合は$item

var_dump(get_class_methods($item));

クラスメソッドのリストを取得します。

クラスファイルの識別

のクラス定義が含まれているファイルを知りたい場合は$item、最初に

var_dump(get_class($item));

クラス名を取得します(Mage_Sales_Model_Quote_Itemこの場合)。

次に、すべての下線(_)をスラッシュ(/)に置き換えて追加.phpします。これにより、クラスファイル(Mage/Sales/Model/Quote/Item.phpこの場合)の相対ファイルパスがわかります。

次に、フォルダを確認します

app/code/local/
app/code/community/
app/code/core/
lib/

相対パスに指定された順序で。通常、最初に一致するのは必要なクラスファイルです。

カスタム見積もり属性にアクセスするためのメソッドの作成

あなたはする必要はありません。Magentoがこれを行います。

他の多くのMagentoモデルと同様に、quoteオブジェクトはに基づいていVarien_Objectます。後者は、_call()PHPの魔法のメソッドの1つであるメソッドを提供します。

public function __call($method, $args)
{
    switch (substr($method, 0, 3)) {
        case 'get' :
            //Varien_Profiler::start('GETTER: '.get_class($this).'::'.$method);
            $key = $this->_underscore(substr($method,3));
            $data = $this->getData($key, isset($args[0]) ? $args[0] : null);
            //Varien_Profiler::stop('GETTER: '.get_class($this).'::'.$method);
            return $data;

        case 'set' :
            //Varien_Profiler::start('SETTER: '.get_class($this).'::'.$method);
            $key = $this->_underscore(substr($method,3));
            $result = $this->setData($key, isset($args[0]) ? $args[0] : null);
            //Varien_Profiler::stop('SETTER: '.get_class($this).'::'.$method);
            return $result;

        case 'uns' :
            //Varien_Profiler::start('UNS: '.get_class($this).'::'.$method);
            $key = $this->_underscore(substr($method,3));
            $result = $this->unsetData($key);
            //Varien_Profiler::stop('UNS: '.get_class($this).'::'.$method);
            return $result;

        case 'has' :
            //Varien_Profiler::start('HAS: '.get_class($this).'::'.$method);
            $key = $this->_underscore(substr($method,3));
            //Varien_Profiler::stop('HAS: '.get_class($this).'::'.$method);
            return isset($this->_data[$key]);
    }
    throw new Varien_Exception("Invalid method ".get_class($this)."::".$method."(".print_r($args,1).")");
}

これで、quoteオブジェクトにカスタムデータを含める場合は、

$quote->setMyCustomAttribute(911);

このような呼び出し時に、PHPはquoteオブジェクトで定義されたメソッドをチェックしますsetMyCustomAttribute()。そのようなメソッドが見つからない場合は、オブジェクトに魔法の__call()メソッドがあるかどうかを確認し、代わりにこれを呼び出します。

この例では、のsetケース__call()が一致します。

ここで何が起こるかというと、Magentoは最初にキャメルケースの文字列setMyCustomAttributeを下線付きのキーに変換しますmy_custom_attribute911次に、保護されたプロパティに値を格納しますVarien_Object::_data['my_custom_attribute']

見積もりオブジェクトからカスタムデータを読み取るには、次のように呼び出すだけです。

$value = $quote->getMyCustomAttribute();

原則は同じです。getMyCustomAttributeに変換されmy_custom_attribute、の現在の値Varien_Object::_data['my_custom_attribute']が返されます。

それがすべての魔法です。

ただし、これは一時的なものであることに注意してください。カスタム属性を保存/ロードできるようにする場合は、quoteオブジェクトを拡張する必要があります。しかし、それは別の話です。

于 2012-06-22T09:42:04.793 に答える
2

見積もり項目の種類はMage_Sales_Model_Quote_Item

これを確認するには、次のようにします。get_class($item)

したがって、調査はここから始まります。app/code/core/mage/sales/model/quote/item.php

getProduct()注:引用項目が表す製品を返す、非常に便利でよく使用されるメソッドがあります。タイプのモデルが提供されるMage_Catalog_Model_Productため、多くの状況で非常に役立つ製品属性にアクセスできます。

getQuote()メソッドも注目に値します。

それとは別に、quote itemクラスファイルとそれが拡張するファイルを見て、何が起こっているのか、何が利用できるのかを見つけてください。

最終的に、見積もり項目は次のように拡張さMage_Core_Model_AbstractれますVarien_Objectlib/varien/object.php

見ると、 &メソッド+魔法のゲッターとセッターVarien_Objectが見つかります。これらは、モデル(拡張)の属性を取得および設定するために使用できるメソッドの一部です。これにより、質問の2番目の部分に答えることができます。getData()setData()Varien Object

于 2012-06-21T21:26:20.990 に答える
0

間違っている場合は訂正してください。ただし、販売注文アイテムモデルのすべてのメソッドを使用できると思います:http://docs.magentocommerce.com/Mage_Sales/Mage_Sales_Model_Order_Item.html

ほとんどのメソッドは、アイテムのステータスや、他のアイテムとは別に出荷されているかどうかなどを確認するためのものですが、多数のメソッドも継承します。

古い$item->getData('attribute')を使用して、特定の製品属性のデータを取得することもできます。

于 2012-06-21T20:47:15.687 に答える