タグ付けされた質問 「event-observer」

イベント/オブザーバーは、コアコードを変更せずにMagentoと動的に連携するために使用されます。


2
Magentoイベントオブザーバー:シングルトンとモデル
そのため、Magentoはオブザーバーを宣言する2つの方法を提供します。シングルトンとモデル(新しいインスタンス)<type>。Magento1.xでタグを指定しshared、Magento 2で属性を指定します。 Magentoの1つの方法。 <events> <event_name> <observers> <unique_observer_name> <type>model|object|singleton|null</type> <class>class/alias_here</class> <method>methdNameHere</method> </unique_observer_name> </observers> </event_name> </events> Magento 2バージョン: <event name="event_name"> <observer name="unique_observer_name" instance="Class\Name\Here" method="methodNameHere" shared="true|false" /> </event> そのため、Magento 1の場合、<type>タグがモデルまたはオブジェクトの場合、クラスはでインスタンス化されMage::getModel()ます。存在する場合、singletonまたは存在しない場合は、を使用してインスタンス化されますMage::getSingleton()。 Magentoの2の場合には、IFがsharedありfalse、その後使用してインスタンス化されたクラス$this->_observerFactory->create() (新しいインスタンス)。trueの 場合、(シングルトン)sharedを使用してインスタンス化されます$this->_observerFactory->get()。 2つのバージョン間でのイベントオブザーバーの考え方は非常に似ていますが、Magento 1のほとんどのオブザーバーはシングルトンとして使用されます。typeタグがないため、Magento 2のほとんど(すべて)がオブザーバーshared="false"です。 私は困惑しています。いつシングルトンを使用し、オブザーバーに新しいインスタンスを使用する必要がありますか? Magentoバージョン(1または2)はここでは重要ではありません。 シンプルなユースケースは、各アプローチ(新しいインスタンスまたはシングルトン)で行います

2
ユーザーがmagentoにログインしているかどうかを確認する方法は?
モバイルアプリを実行していますが、ユーザーが既にログインしているかどうかを確認する方法を知りたいです。追跡するオブザーバーイベントはありますか?アカウントがログインしていることが検出されると、ユーザーは[アカウント情報]ページに移動します。そうでない場合、ユーザーはログインまたは登録ページにリダイレクトされます。

4
カート見積品目の税率を変更し、再計算します
特定の数量を超えて注文する場合は、(法的に)税率を変更する必要がある製品のカテゴリがあります。さまざまな税モデルを拡張して、新しい製品をカートに追加するときにこれが機能するようにしましたが、ユーザーがカート内の数量を更新するか、カート内の数量がしきい値を超える追加の製品を追加するときに問題が発生します量。 問題1: まず第一に、私は100%のイベントを監視するわけではありません。私は次のことを試しました。 checkout_cart_save_after(これに基づいて-> https://stackoverflow.com/questions/14362702/magento-programatically-update-cart-via-event) checkout_cart_update_items_after(これに基づいて-> https://stackoverflow.com/questions/5104482/programmatically-add-product-to-cart-with-price-change) sales_quote_save_before(これに基づいて-> https://stackoverflow.com/questions/7638858/magento-recalculate-cart-total-in-observer) 問題2: 私はカートから見積もりアイテムにアクセスできますが、それを行う方法はたくさんあるようです。また、カート内の個々のアイテムを反復処理し、それらのアイテムのプロパティを更新してから、アイテムを(少なくとも一時的に)保存することもできます。ただし、見積を保存してチェックアウトで税金を再計算することはできません。 理由の一部は、カートの見積もりにアクセスできる一方で、どのメソッドを使用して書き込みできるかわからないことです。 私が試したこと: カートの中身にアクセスするという観点で私が試したことは、私が観察したイベントに依存していましたが、次のすべてを試しました。 1. $item = $observer->getQuoteItem; 2. $cart = Mage::getSingleton('checkout/cart'); $cartItems = $cart->getCart()->getItems(); 3. $cart = $observer->getData('cart'); $quote = $cart->getData('quote'); $cartItems = $quote->getAllVisibleItems(); 4. $cartHelper = Mage::helper('checkout/cart'); $cartItems = $cartHelper->getCart()->getItems(); 5. $quote = Mage::getModel('checkout/cart'); $cartItems = $quote->getItems(); 少なくとも見積もりにアクセスし、それらを実行してアイテムを更新できるようにしているようです …

4
注文ID、注文増分ID、および20001201として注文IDが得られないという混乱
私は注文IDと注文増分IDと少し混同していますので、これらの2つの違いを理解するのに役立つ人はいますか? sales_order_place_afterにオブザーバーがあり、カスタムテーブルに販売の詳細を格納しています。 しかし、 $orderId = $observer->getEvent()->getOrder()->getId(); 注文IDを、20001201ではなく112または113または110などの通常のIDとして取得します。 実際の注文IDは20001201と112のどちらですか? この注文IDに基づいて注文データをさらに処理する必要があり、112、113などを使用しますが、動作しますが、これを明確にする必要があります。

4
オブザーバーの後に$ thisを返す
インターネットとサードパーティのモジュールで矛盾する情報がいくつかあります- $thisオブザーバーメソッドの最後に戻ることは要件ですか、それともベストプラクティスですか? 例えば: MyCompany_Module_Model_Observer.php public function salesOrderSaveAfter($observer){ //do stuff return $this; }

2
Magento 2:プラグインとオブザーバー
Magento 2では、何かを達成するためにプラグインとオブザーバーを使用することの長所と短所は何ですか? オブザーバーはイベントにサブスクライブするのに対し、プラグインはMagentoクラスでパブリックメソッドが呼び出される前および/または後にジャンプできることを理解していますが、確かにそれらはパスを交差するところに近づいていますか?

1
イベントcatalog_product_save_beforeで新しいオブザーバーを作成する方法
次のコードを使用して、catalog_product_save_beforeイベントに新しいオブザーバーを作成することにより、製品のメタ記述を自動生成します。 public function autoMetaDescription($observer) { $product = $observer->getEvent()->getProduct(); $metaDescription = "Buy ". $product->getName()." for Rs ".number_format($product->getFinalPrice(), 2)." at sitename.com | New Book | Authorised seller for ". $product->getAttributeText('publisher'); $product->setMetaDescription($metaDescription); } どのフォルダー/ファイルにコードを記述する必要がありますか?

2
在庫変更の検出
製品の在庫レベルが変化するたびに検出する必要があります。cataloginventory_stock_item_save_afterバックエンドで在庫が変更されたとき、またはフロントエンドで注文がキャンセルされたときに(Paypalを介して)トリガーされるイベントを使用して成功しましたが、フロントエンドから製品が購入されたときにトリガーされません。 私はcataloginventory_stock_item_save_afterこのようなイベントにフックしています: <global> <events> <cataloginventory_stock_item_save_after> <observers> <cataloginventory_stock_item_save_after_handler> <type>model</type> <class>stockchange/observer</class> <method>stockChange</method> </cataloginventory_stock_item_save_after_handler> </observers> </cataloginventory_stock_item_save_after> </events> <?php class FashionBunker_StockChange_Model_Observer { public function stockChange(Varien_Event_Observer $observer) { 顧客が何かを購入したときに在庫の変更をキャプチャするために別のイベントを使用する必要がありますか、それともイベントにフックした方法に何か問題がありますか?

3
製品の保存時にカスタムオプションを作成する
製品が作成されるたびに、製品のカスタムオプションの自動作成に取り組んでいます。これまでに取得したのは、catalog_product_save_beforeイベントを発生させて次のコードを実行するオブザーバーです。 //check that we haven't made the option already $options = $product->getProductOptions(); foreach ($options as $option) { if ($option['title'] == 'Auto Date & Time' && $option['type'] == 'date_time' && !$option['is_delete']) { //we've already added the option return; } } $options[] = array( 'title' => $product->getDateLabel(), 'type' => 'date_time', 'is_require' => …


1
SOAP v2 WS-I呼び出しが非常に遅い(製品の更新ごとに7〜10秒)のはなぜですか?
WS-IでMagento SOAP v2 APIを使用しています。 問題は、SOAP呼び出しが非常に遅いことです(製品ごとに7〜10秒!)。画像なしでcatalogProductUpdateを呼び出しています。ショップ自体は正常に動作しますが、SOAP呼び出しが遅いだけです。キャッシュをアクティブにし、パフォーマンスを向上させるためにインデックスを非アクティブ化しました(SOAPインポートが遅いときに他の多くのショップで役立ちました)。 ログメッセージをさまざまなファイルに入れて、どこが悪いのかを見つけます。これは、関数呼び出しとディスパッチイベントからの組み合わせログです。 20.03.2013 14:17:43: Mage_Api_V2_SoapController 20.03.2013 14:17:43: dispatchEvent: controller_action_postdispatch_api_v2_soap_index 20.03.2013 14:17:43: dispatchEvent: controller_action_postdispatch_api 20.03.2013 14:17:43: dispatchEvent: controller_action_postdispatch 20.03.2013 14:17:43: dispatchEvent: controller_front_send_response_before 20.03.2013 14:17:43: dispatchEvent: http_response_send_before 20.03.2013 14:17:43: dispatchEvent: controller_front_send_response_after 20.03.2013 14:17:43: Mage::run 20.03.2013 14:17:51: dispatchEvent: resource_get_tablename 20.03.2013 14:17:51: dispatchEvent: resource_get_tablename 20.03.2013 14:17:51: dispatchEvent: resource_get_tablename 20.03.2013 14:17:51: …

5
Magento 2で製品画像とURLを取得する方法は?
これは私のオブザーバーです: public function execute(\Magento\Framework\Event\Observer $observer) { $orderIds = $observer->getEvent()->getOrderIds(); $order = $this->_orderRepositoryInterface->get($orderIds[0]); $items =$order->getAllVisibleItems(); $productQuantity = array(); $productPrice = array(); $productName = array(); $productIds = array(); foreach($items as $item) { $productIds[]= $item->getProductId(); $productName[]= $item->getSku(); $productPrice[] = $item->getPrice(); $productQuantity[]= floor($item->getQtyOrdered()); } } アイテムから製品画像と製品URLを取得するにはどうすればよいですか?

3
Magento 2でイベント/オブザーバーを取得する方法
Magento 1では、以下のようなdispatchEvent()メソッドをデバッグすることにより、イベント/オブザーバーのリストを取得できMage.phpます。 /** * Dispatch event * * Calls all observer callbacks registered for this event * and multiple observers matching event name pattern * * @param string $name * @param array $data * @return Mage_Core_Model_App */ public static function dispatchEvent($name, array $data = array()) { Mage::log($name,null,'Events'); Varien_Profiler::start('DISPATCH EVENT:'.$name); $result …

2
フロントエンドのイベントオブザーバー内で製品を保存しようとすると、Magentoが失敗しますか?
イベントオブザーバーに関連付けられている関数があります 要件の1つは、注文項目データをループするときに、特定の製品属性が空の場合、別のモデルを介して特定のデータを取得する要求を発行することです(正常に動作します)。 問題コードは基本的にこれに要約されます foreach ($order->getAllItems() as $key => $item) { /** @var Tantor_Catalog_Model_Product $productData */ $productData = $item->getProduct(); $_item = Mage::getModel('catalog/product')->load($productData->getId()); $_item->setNetsuiteItemIid('foo'); $_item->save(); } ただし、Magentoは次の例外をスローしています。 2014-03-05T21:14:14+00:00 ERR (3): exception 'Exception' with message 'Warning: Invalid argument supplied for foreach() in /var/www/html/app/code/core/Mage/Eav/Model/Entity/Abstract.php on line 1180' in /var/www/html/app/code/core/Mage/Core/functions.php:245 Stack trace: #0 /var/www/html/app/code/core/Mage/Eav/Model/Entity/Abstract.php(1180): mageCoreErrorHandler(2, …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.