2

フロントエンド ページから adminhtml ページへのリンクが必要です。Adminhtmlヘルパーメソッドを使用してみました:

Mage::helper('adminhtml')->getUrl('some/admin/path')

および Adminhtml URL モデル メソッド:

Mage::getModel('adminhtml/url')->getUrl('some/admin/path')

しかし、役に立たない。毎回管理ダッシュボードに移動します。

4

4 に答える 4

6

簡単な回答: できません (いくつかの例外を除いて、この回答の下部を参照してください)。少なくとも、管理 URL キーを無効にしない限り、セキュリティ上のリスクがあります。

Magento は、セッションの「フォーム キー」を管理 URL パスと共にハッシュして、管理 URL キーを生成します。このフォーム キーは、セッションが続く限り続くランダムな 16 文字の文字列です。問題は、Magento が異なるセッション cookie を使用するため、フロントエンドと adminhtml 領域に異なるフォーム キーを使用することです。

そのため、フロントエンドから管理 URL を生成すると、Magento はフロントエンド セッションのフォーム キーを使用します。次に、そのリンクをクリックすると、Magento は管理 URL キーを再生成してリンク内のキーと比較しますが、今回は adminhtml フォーム キーを使用します。フォーム キーが一致しないため、ハッシュされた URL キーが一致せず、リンクが機能しません。この時点での Magento の動作は、管理ダッシュボード (または管理ログイン ページ) に戻ることです。

最終的に、これは Magento の根本的な制限のようです。回避策はないと思います(ただし、誰かが私を修正できれば幸いです)。


更新: Magento の adminhtml コントローラーのいくつかを調べると、特定のコントローラー アクションは、デフォルトで URL キーの要求から除外されているようです。

  • 管理者html/catalog_product/edit
  • 管理者html/catalog_product_review/edit
  • 管理者html/sales_order/view
  • 管理者html/sales_order/index
  • すべての Oauth アクション。

から継承するコントローラーは、特定のアクションを配列Mage_Adminhtml_Controller_Actionに追加することで、管理 URL キーを必要としないようにすることができます。$_publicActionsしたがって、独自のモジュールの場合、または Magento モジュールをオーバーライドしている場合indexAction、管理コントローラーに公開したい がある場合は、次のようにします。

public $_publicActions = array('index');
于 2013-04-22T22:24:03.510 に答える
2

デフォルトではできませんが、これは magento であるため、いつでもカスタマイズできます。

フロントエンドコントローラーからの管理顧客編集へのリダイレクト (キー付き) をご覧ください。

プロキシのように機能して URL キーを取得し、管理 URL キーを無効にすることなく目的のルートにリダイレクトする管理コントローラーを作成できます。

を使用して、管理者 URL の検証を無効にすることができます$_publicActions)。

見るMage_Adminhtml_Controller_Action

protected function _validateSecretKey()
{
    if (is_array($this->_publicActions) && in_array($this->getRequest()->getActionName(), $this->_publicActions)) {
        return true;
    }

    if (!($secretKey = $this->getRequest()->getParam(Mage_Adminhtml_Model_Url::SECRET_KEY_PARAM_NAME, null))
        || $secretKey != Mage::getSingleton('adminhtml/url')->getSecretKey()) {
        return false;
    }
    return true;
}

プロキシ コントローラ

class MagePal_ProxyCustomerRedirect_Adminhtml_RedirectController extends Mage_Adminhtml_Controller_Action
{
    /**
     * Array of actions which can be processed without secret key validation
     *
     * @var array
     */
    protected $_publicActions = array('redirecttocustomer');

    public function redirecttocustomerAction()
    {
        // get the customer id pass by your observer (url key)
        Mage::app()->getResponse()->setRedirect(Mage::helper("adminhtml")->getUrl("adminhtml/customer/edit/", array("id"=>$customer_id)));
于 2015-07-01T01:04:06.503 に答える
1

フロントエンドで生成された管理画面の商品編集ページへのリンク

            $urlModel = Mage::getModel('core/url');
            $url = $urlModel->getUrl('adminhtml/catalog_product/edit', array(
                '_current' => false,
                'id' => $product->getId()
            ));
于 2013-04-23T06:21:21.373 に答える
0

この例で使用できます。

    Mage::helper("adminhtml")->getUrl("module_name/controller_name/action_name",
                                       array("param1"=>1,"param2"=>2));
于 2014-02-07T18:27:07.630 に答える