3

このURL構造は、SEO最適化のために提案されています。したがって、別の構造を提案しても機能しません。提案された構造は

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

example.com/en/spainそれぞれの見方が違うので、指摘したいCountryController indexActionのですが、レイアウトにも変化があると思うこともあります。

スペインの国についてのコンテンツを英語で表示します。また、リクエストにexample.com/en/indiaは、インドについて英語でexample.com/es/spain表示し、スペインの国のスペイン語のページを表示する必要があります。

example.com/en/spain/barcelonaに指差すCountryController provinceAction

スペインのバルセロナ県の英語のコンテンツページ。

example.com/en/spain/barcelona/barcelonaに指差すCountryController cityAction

スペイン国バルセロナ県のバルセロナ市のコンテンツページ(英語)。

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'))
);

ただし、この場合、国のリスト全体をルートに追加する必要があります。すなわち、インド、中国、パキスタン、米国など。

次に、country_provinceを追加します

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

したがって、50の州がある場合、国の数にその国の州の数を掛けたものを加算するのは恐ろしいことであり、これは都市や製品に移動するときに、より多くのルートになります。

あなたは次のようなものを追加すると言うかもしれません

$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であり、すべてが1つのアクションに移動することです。見た目が全然違うので汚れてしまいます。私が使用できるパーシャルのようなものかもしれません。しかし、これを解決するための問題に対する別の良い解決策があるかどうか疑問に思います。これはレガシープロジェクトなので、制限があり、#ZFバージョンは1.6です。

似たような例があります

http://www.travelportal.info/ http://www.travelportal.info/asia http://www.travelportal.info/asia/india http://www.travelportal.info/asia/india/business-通貨経済

彼らはこれをどのように行ったと思いますか、彼らは少なくともアジア、ヨーロッパのためにそのようなルートを追加しましたか?

私はそれを次のように機能させることができました

example.com/en/spainを指していますCountryController indexAction

example.com/en/spain/barcelonaを指していますCountryController provinceAction

example.com/en/spain/barcelona/barcelonaを指していますCountryController cityAction

example.com/en/spain/barcelona/barcelona/taxisを指していますCountryController productAction

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

それをより良くするための提案や批判は大歓迎です。

4

1 に答える 1

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'
    ))
);
于 2012-02-03T12:37:34.610 に答える