私は 2 つの Magento オブザーバーを作成しましたが、どちらも間違ったページで終了することを除いて、私が望むことを正確に実行します。つまり、ログ ファイルを書き込み、データベースを変更し、他のサーバーと通信しますが、ページ間のルーティングを変更します。たとえば、ログイン時に使用したオブザーバーは、データベースを変更し、Cookie を書き込み、ログに書き込みますが、ログイン後のページを次のように変更します。
http://www.my-web-site.com/index.php/customer/login/post/
その後、404エラーが発生します。「Ctrl」+「r」を押すと、にログインします
http://www.my-web-site.com/index.php/customer/account/index/
どちらが正しい。app/code/local/my_module/my_model/etc/config.xml を app/code/local/my_module/my_model/etc/config.xml.1 に変更すると (つまり、オブザーバーを取り出します)、Magento がルーティングします正しいページへ、
config.xml にルーター情報が必要だと考えています。私の現在の config.xml は次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<!-- The root node for Magento module configuration -->
<config>
<!-- The module's node contains basic information about each Magento module -->
<modules>
<!-- This must exactly match the namespace and module's folder
names, with directory separators replaced by underscores -->
<MyCompany_LogIn>
<!-- The version of our module, starting at 0.0.0 -->
<version>0.0.0</version>
</MyCompany_LogIn>
</modules>
<!-- Configure our module's behavior in the global scope -->
<global>
<!-- Defining models -->
<models>
<!-- Unique identifier in the model's node.
By convention, we put the module's name in lowercase. -->
<mycompany_login>
<!-- The path to our models directory,
with directory separators replaced by underscores -->
<class>MyCompany_LogIn_Model</class>
</mycompany_login>
</models>
</global>
<frontend>
<!-- Defining an event observer -->
<events>
<!-- The code of the event we want to observe -->
<customer_login>
<!-- Defining an observer for this event -->
<observers>
<!-- Unique identifier within the catalog_product_save_after node.
By convention, we write the module's name in lowercase. -->
<mycompany_login>
<!-- The model to be instantiated -->
<class>mycompany_login/observer</class>
<!-- The method of the class to be called -->
<method>wrtLogInCookie</method>
<!-- The type of class to instantiate -->
<type>singleton</type>
</mycompany_login>
</observers>
</customer_login>
</events>
</frontend>
</config>
Magento 内のログインがオブザーバーを使用していると推測し、それを妨害しています。
以外に、PHP Observer コードでも同様のことを達成できると思います。私のオブザーバーは次のとおりです。
<?php
/**
* Our class name should follow the directory structure of
* our Observer.php model, starting from the namespace,
* replacing directory separators with underscores.
* i.e. /www/app/code/local/MyCompany/LogIn/Model/Observer.php
*/
class MyCompany_LogIn_Model_Observer extends Varien_Event_Observer
{
/**
* Magento passes a Varien_Event_Observer object as
* the first parameter of dispatched events.
*/
public function wrtLogInCookie(Varien_Event_Observer $observer)
{
// Retrieve the product being updated from the event observer
$customer = $observer->getEvent()->getCustomer();
$email = $customer->getEmail();
Mage::log('The E-mail is: ' . $email);
$ran_nmbr = rand();
Mage::log('The random number is: ' . $ran_nmbr);
$crnt_dat = date("m-d-Y::H:i:s");
Mage::log('The date is: ' . $crnt_dat);
return $this;
}
}
?>
ルーターについて読んだことがありますが、記事では、拡張機能が実行される前にページにランディングするという観点から説明されていました。ご覧のとおり、拡張機能の実行後に正しいページに移動する必要があります。
PHP オブザーバー内で、リダイレクトも試しました。例えば、
Mage::app()->getResponse()->setRedirect(Mage::getUrl('customer/account/login'));
完全な URL アドレスか何かが必要かもしれません。これは簡単に修正できると確信していますが、私の無知が私を追いかけているようです。これについて何か知っていることがあれば助けてください。