0

Magento のディスパッチ システムがどのように機能するかを正確に理解しようとしています。

レイアウトの特定の部分 (ボディなど) をアプリケーション ディレクトリの外からディスパッチしたいと考えています。

私がこれまでに持っているもの;

<?php
$app          = Mage::app();
$myRequestUri = '/checkout/cart';

$front        = $app->getFrontController();
$request      = $front->getRequest();

$request->setRequestUri($myRequestUri);

// dispatch everything
$front->dispatch();
?>

ディスパッチは問題ありませんが、これを本体または特定のブロックだけに分解する必要があります。また、生成された HTML は、直接出力するのではなく、返す必要があります (出力バッファリングを使用しない方がよいでしょう)。

// ローランド

編集:私が行った進歩を追加しましたが、まだいくつか質問があります。

4

2 に答える 2

1

私はこれを試したことはありませんが、慣習を破って独自の URL を $_SERVER['REQUEST_URI'] にぶつけてしまう可能性があります。フォームが悪いと思われますが、コアをハッキングする前にそれを行います。

編集:あなたの編集に基づいて、あなたが何らかの反応を得てうれしい. では、問題は、すべての HTML がページに返されていることですか? 一部のページでは、HTML を削除しても意味がない場合があります。実際に取得しようとしている情報は何か。

したがって、本当にページを削除する必要がある場合は、ページのレイアウトを変更する必要があります。この情報は、レイアウト xml ファイルに保存されます。これにはかなりの変更が必要ですが、アイデアは、コマンド ライン操作をチェックするモジュールを追加し (isset($_SERVER['argc']) が機能する可能性があります)、カスタム ハンドル ( $this->getLayout()->getUpdate()->addHandle('my_custom_handle');) をロードして、すべてのヘッダー情報をエコーする phtml ファイル。これは、コア ファイルをハッキングせずに確実に行うには問題があるため、デフォルトで情報なしで新しいページを作成することを検討することをお勧めします。

お役に立てば幸いです、ジョー

于 2010-02-26T12:46:48.170 に答える
0

ジョーを助けてくれてありがとう、それまでの間、私は再び多くの進歩を遂げましたが、まだそこにはありません;-)

私が実際に達成したいのは、magento の任意のページをディスパッチできることです。たとえば、/customer/account/login への有効な http ポスト リクエストは、引き続きログインする必要があります。

応答の本文のレンダリングを除く。レイアウトをデフォルトでレンダリングしたくありません。代わりに、ブロック (対応する要求されたレイアウト xml で定義) をプログラムでフェッチしたいと考えています。

私がそれをどのように見ているかの短いコード例。

<?php
// code from previous post
// - load, set request uri, dispatch

$someBlock = getABlock('breadcrumbs'); // e.g. name attribute value in the xml
echo $someBlock->toHtml();
?>

ローカル コード プールでこれを処理するのが最善ですが、(可能であれば) フロント コントローラーを拡張することをお勧めします。

レイアウト更新ハンドルについて知りませんでした..レイアウトは更新できますか? 彼らはそれでどういう意味ですか...

于 2010-03-02T19:47:30.443 に答える