1

Zend Framework を使用して、SEO に適した URL への URL を構築しようとしています。

http://ww.website.com/public/index/categories/category/2
によってマッピングする必要がありますhttp://ww.website.com/public/index/categories/category.html

http://ww.website.com/public/index/products/category/2/subcategory/2
によってマッピングする必要がありますhttp://ww.website.com/public/index/products/product.html

私のBootstrapファイルでこれを試しました

protected function _initRoutes()
{ 
    $frontController = Zend_Controller_Front::getInstance ();
    $router = $frontController->getRouter ();
    $route = new Zend_Controller_Router_Route_Regex(
        'index/categories/category/(\d*)/',
        array('module' => 'default','controller' => 'index','action' => 'categories'), 
        array(1 => 'category'),
        'index/categories/%d-%s.html');

    $router->addRoute('category', $route);
}

今私の質問は、この URL を書き換える方法ですか? また、次を使用して、URL の ID に基づいて製品またはカテゴリを取得しています。

$id = $this->_getParam('category', 0 ); 

誰でも私を助けることができますか?

4

2 に答える 2

1

必要なものに正規表現ルートは必要ないと思います。たとえば、次の URL が必要な場合は、Zend_Controller_Router_Route を使用するだけで十分ですhttp://mysite.com/category/cars.htmlhttp://mysite.com/categories/category/id/2

Zend Router がマップするカテゴリの ID を認識しないという問題が 1 つだけあります。このため、カスタム ルートをデータベースまたはファイルに保存する必要があります。各カスタム ルートには、マップする URL と必要なパラメーター (コントローラー名、アクション名、カテゴリの ID) が含まれます。

それができたら、ブートストラップ ファイルへのカスタム ルートを登録する関数、または次のようなプラグインを作成できます。

public function setRoute($params){
    $router = Zend_Controller_Front::getInstance()->getRouter();
    $params = array(
        'controller' => $params['controller'],
        'action'     => $params['action'],
        'id'         => $params['id']
        );
    $route = new Zend_Controller_Router_Route($params['url'], $params);
    $router->addRoute($params['url'], $route);
}

ここで$params['url']値があるとします:http://mysite.com/category/cars.htmlブラウザから URL ZF がカスタム ルートと一致し、指定されたコントローラーに要求を転送するように要求された$params['controller']場合、指定されたアクションを呼び出し、コントローラーから取得できる$params['action']id 値という名前のパラメーターとして設定されます。$params['id']$id = $this->_getParam('id',0);

于 2012-09-23T16:43:27.027 に答える
1

「 http://www.promotepassion.com/classical/rock 」のようにベースURLの後に製品名が始まる場合、SEOフレンドリーは.htmlまたは.phpの意味を持たないため、間違ったパスを使用していると思います。ベースパス、次にカテゴリ名を意味します製品名を使用すると、すべての検索エンジンがすばやくページを呼び出します。

于 2013-12-27T10:03:04.423 に答える