2011-01-22 10 views
4

私はMagentoで新しいモジュールを作成し、それを「記事」と命名しました。それは2つのフロントエンドコントローラインデックスと記事を持っています。Magentoモジュール用のURL書き換え

記事のコントローラには、アーカイブに基づいてフロントエンド/ウェブサイトの記事を一覧表示する「アーカイブ」というアクションがあります。 URLを除いてすべてが問題ありません。今

ワーキングURLは次のとおりです。[のhttp://] mydemostore /記事/記事/アーカイブ/ 01/2011

私は実際に必要なもの、私はしたくないhttp://mydemostore/article/archives/01/2011

です余分な「記事」(コントローラー名)

私のモジュール名とコントローラー名は同じですから、私はこれを知っています。私がindexcontrollerの中に自分の行動を入れたら、これを済ませたでしょう。しかし、それは動作していませんでした。

だから私が今必要とするものである私は、「記事」からの私の行動を移動したくない「インデックス」のコントローラーではなく、私はちょうど

から

を変更したい[のhttp://]

にmydemostore /記事/記事/アーカイブ/ 01/2011 [のhttp://] mydemostore /記事/アーカイブ/ Zendのルーティングや基本的なPHを使用して01/2011

P .htaccessファイルのURL書き換え。

これらの2つの方法のいずれかまたは両方を使用してこれを行う方法を教えてください。

ご質問ありがとうございます。あなたに

答えて

3

私はこれを自分で行っていませんでした、だけでそれについてhereを読みますが、ここに...

のconfig.xmlファイル:

<config> 
    <global> 
     <rewrite> 
      <article_article_archives> 
       <from><![CDATA[#^/article/archives/#]]></from> 
       <to><![CDATA[/article/article/archives/]]></to> 
      </article_article_archives> 
     </rewrite> 
    </global> 
</config> 

ノード<article_article_archives>は厳密に形成されていません他の書き換えから一意である必要があります。 .htaccessファイルでこのよう

+0

私はこの非htaccessオプションについて興味があります...私はこのタグがコードファイルの書き換えとオーバーライドに焦点を当てていると思います。 URLパスではありませんか?とにかく、これはうまくいかないようです。 – thaddeusmt

+0

もう一度質問を見ると、より良い方法は[URLの書き換えを保存する]かもしれないと思います(http://stackoverflow.com/questions/4900135/magento-rewrites-for-deeply-nested-category-pages/4927988#4927988 )毎月のページを表示します。年に12回しかないので、それほど大したことではありません。 – clockworkgeek

+0

Mm yeah私はMagentoのカスタムURL書き換えを管理領域(あなたのリンクの答えは、それらをプログラム的に作成する方法を示しています)で遊んでいます。これまでの運はないけど、うまくいくはずです。ありがとう! – thaddeusmt

0

何かが

RewriteEngine On 
RewriteRule ^(article/)* article/ [L] 

重複を削除することが、私は重複のために、それは

より一般的なケースを選ぶではないでしょう:

RewriteEngine On 
RewriteRule ^([^/]+/)* $1 [L] 
0

さて、あなたあなたのモジュールにいくつかのコントローラがある場合、このオプションにはオープンしていないかもしれませんが、あなたの.htaccessなどに余分な書き換えルールを作成することなく有効な解決策です。 "ar ArticleController.phpの代わりにIndexController.phpを使用して、「ticles」モジュールを作成します。次に、[http://] mydemostore/article/archives/01/2011 ....のページにアクセスできます。ここでarchivesAction()はIndexController.phpのメソッドです。 Magentoは自動的にIndexController.phpを/ yourmod/index /にマッピングするか、単に/ yourmod /にマッピングします。

0

まあ、それは することが可能であるなど、あなたのモジュールにいくつかの のコントローラを持っている場合は、このオプションにオープンではないかもしれませんが、それは があなたの.htaccessに余分な書き換えルールを作成することなく、有効なソリューションです。 ArticleController.phpの の代わりにIndexController.phpを使って "articles"モジュールを設定してください。その後、 [http://] mydemostore/article/archives/01/2011 ....のページにアクセスできます。 archivesAction()はIndexController.phpのメソッドです。 Magento は自動的にIndexController.phpを/ yourmod/index /にマップします。または単に simply/yourmod /にマップします。


残念ながら、mydemostore/article/archives/01/2011は、PHPのメソッド/関数は唯一のアンダースコアや文字で開始することができますので、エラーになりますIndexController->archivesActionが、 archivesController->01Actionを参照しています。

ただし、以下のURLが挙げコントローラとアクションのペアを参照します:

  • mydemostore /記事/インデックス/アーカイブ/
  • mydemostore /記事//アーカイブ/

について元の質問は、Magento内のプログラムによるURLの書き換えを保存することがベストプラクティスとなるが、必ずしも実装するのが最も実用的または最も速い ではない。もちろん、Apacheディレクティブ(例:.htaccessやサイトのconfファイル)は、ベストプラクティスを最もよく観察するのが最も速いが、 ではありません。