0
// Include Magento application
require_once ( "../app/Mage.php" );
umask(0);

// Initialize Magento
Mage::app("default");

// Load the session
// This has to be done before getLayout() below or the blocks won't see the session
$session Mage::getSingleton("core/session", array("name" => 'frontend'));

// Get the primary layout
global $mageLayout;
$mageLayout = Mage::app()->getLayout();

// Set the layout XML to look for default and wordpress
$mageLayout->getUpdate()
    ->addHandle('default')
    ->addHandle('customer_logged_in')
    ->load();

(customer_logged_in ハンドルを常に設定するべきではないことに気付きました。$session->isLoggedIn() を介してこれを動的に行うことができます。もっと大きな問題があります。)

このコードを使用して、追加のハンドルを正常に設定できました。(たとえば、WordPress に読み込まれるブロックを変更するために使用する「wordpress」というハンドルがあります。) ただし、customer_logged_in を手動で設定しても機能しません。

なぜ手動で設定するのですか?controller_action_layout_load_before のカスタマー モジュールのオブザーバーが起動しないためです。このオブザーバーをスタックオーバーフローの他の場所で提案されているコードを使用してディスパッチする方法を見つけましたが、$observer->getEvent()->getLayout() が null を返すため、オブザーバー コードは失敗します。

したがって、私の問題は、ブロックの phtml ファイルでセッションに直接アクセスし、PHP でロジックを実行できますが、レイアウト XML ファイルに存在するログイン/ログアウトロジックを利用できないことです。設定されている customer_logged_in ハンドルで。

作成したワードプレスのハンドルが正しく設定できる理由がわかりませんが、customer_logged_in ハンドルは無視されます。(customer_logged_out と同様)

誰でも助けることができますか?

4

1 に答える 1