2012-02-03 12 views
3

このURL構造は、SEO最適化のために提案されています。したがって、別の構造を提案することはできません。提案された構造は、私が各1のビューとして、CountryControllerindexActionを指すたいZend Frameworkの国、都道府県、市、製品のルーティング

example.com/<language>/<country>/<province>/<city>/<product>

example.com/en/spain異なっている、そして時にはまた、レイアウトの変更があると思います。

国スペインについてのコンテンツを英語で表示します。また、example.com/en/indiaにはインドについて英語で、example.com/es/spainにはスペインのスペイン語ページが表示されるはずです。英語でスペインのバルセロナ州のためのCountryControllerprovinceAction

コンテンツページへ

example.com/en/spain/barcelonaポイント。英語での国スペインのバルセロナ州のバルセロナ市内のためCountryControllercityAction

コンテンツページへ

example.com/en/spain/barcelona/barcelonaポイント。バルセロナ市内、英語での国スペインのバルセロナ省の製品の

example.com/en/spain/barcelona/barcelona/taxisポイントCountryControllerからproductAction

コンテンツページ。

はい、私たちは

$router = $ctrl->getRouter(); 
$router->addRoute(
    'country_spain', 
    new Zend_Controller_Router_Route('spain', 
            array('controller' => 'country', 
              'action' => 'index')) 
); 

のようにルートを追加することができますが、この場合には、我々はルートに国のリスト全体を追加する必要があります。すなわち、インド、中国、パキスタン、unitedstatesなど。

は、そのように私たちは50州を持っている場合、国のために地方の数を乗じた国の数を追加するために恐ろしいとなり、都市に移動するとき、これはより多くのルートになりますcountry_province

$router = $ctrl->getRouter(); 
$router->addRoute(
    'country_spain_barcelona', 
    new Zend_Controller_Router_Route('spain', 
            array('controller' => 'country', 
              'action' => 'province')) 
); 

を追加していく予定および製品。

あなたは

$router = $ctrl->getRouter(); 
$router->addRoute(
    'country', 
    new Zend_Controller_Router_Route('country/:country/:province/:city/:product', 
            array('controller' => 'country', 
              'action' => 'index')) 
); 

のようなものを追加すると言うかもしれないが、この場合には、その私たちは、同じアクションを指しますように、しかし、要求変更のビューとして、これは脂肪のコントローラになります。

Zend_Controller_Router_Route_Regexの問題は、 example.com/en/country/spain/barcelona/barcelona/taxisのようなものでなければならず、すべてが単一の動作に移行する必要があります。ビューが全く異なるので、それは汚れになります。私が使うことができる部分のようなものかもしれません。しかし、私は問題を解決するためのもう一つの良い解決策があるのだろうかと思います。これは従来のプロジェクトなので、制限があり、ZFバージョンは1.6です。 //www.travelportal:

http://www.travelportal.info/ http://www.travelportal.info/asia http://www.travelportal.info/asia/india HTTP同様の例のものがございます。info/asia/india/business-currency-economy

あなたはどのようにして、彼らはこれをやったと思いますか、彼らはアジアのようなヨーロッパのために最低でもルートを追加しましたか?

私はそれがCountryControllerCountryControllerCountryControllerにポインティングcityAction

example.com/en/spain/barcelona/barcelona/taxisにポインティングprovinceAction

example.com/en/spain/barcelona/barcelonaにポインティングindexAction

example.com/en/spain/barcelonaにポインティング

example.com/en/spainのように動作させることができましたproductAction

しかし、私は4つのルートを追加する必要があり、これは手動でこのようなルートを追加するのが難しくなります。

これを改善するための提案や批判は歓迎します。あなたはあなたの例シナリオごとに別々のルートをしたいよう

答えて

5

それは右の

$router->addRoute(
    'product', 
    new Zend_Controller_Router_Route(':lang/:country/:province/:city/:product', array(
     'controller' => 'country', 
     'action' => 'product' 
    )) 
); 

$router->addRoute(
    'city', 
    new Zend_Controller_Router_Route(':lang/:country/:province/:city', array(
     'controller' => 'country', 
     'action' => 'city' 
    )) 
); 

$router->addRoute(
    'province', 
    new Zend_Controller_Router_Route(':lang/:country/:province', array(
     'controller' => 'country', 
     'action' => 'province' 
    )) 
); 

$router->addRoute(
    'country', 
    new Zend_Controller_Router_Route(':lang/:country', array(
     'controller' => 'country', 
     'action' => 'index' 
    )) 
); 
+0

1:例えば、そうです。標準ルート - 正しい順序で! - それを処理する必要があります。 ;-) –

+0

このヒントをありがとう、なぜ私はこれについて考えなかったのか分からない、私は月曜日に上記の解決策に取り組み、報告するつもりです。しかし、私がすでに '$ router-> addRoute( 'differentroute'、 new Zend_Controller_Router_Route( ':lang /:something'、array( 'controller' => ')というルートを持っていればどうなるでしょうか? 'action' => 'index' )) ); 'どのルートをとるのですか? –

+0

申し訳ありませんが、このルートの問題はすべてのルートが国のコントローラに移動することです。 –

関連する問題