SEO дружественные URL с Zend Router - PullRequest
       31

SEO дружественные URL с Zend Router

0 голосов
/ 20 сентября 2011

Я хочу создать SEO дружественные URL в моем приложении Zend Framework, но каков правильный синтаксис для этого:

$newsroute = new Zend_Controller_Router_Route(
   'news/:action/:id_:title',
    array( 'controller' => 'news' ));

: id_: title, очевидно, не работает, так как Zend не знал, что _такое разделитель?Нужно ли использовать для этого маршрутизатор regex или он тоже работает с обычным?

Ответы [ 2 ]

2 голосов
/ 25 октября 2011

Чтобы избежать работы со ссылками, содержащими специальные символы, вы можете использовать этот плагин для Zend Framework.

https://github.com/btlagutoli/CharConvert

$filter2 = new Zag_Filter_CharConvert(array(
               'onlyAlnum' => true,
               'replaceWhiteSpace' => '-'
           ));
echo $filter2->filter('éééé ááááá ? 90 :');//eeee-aaaaa-90

это может помочь вам разобраться со строками на других языках

2 голосов
/ 20 сентября 2011

Действительно, маршрут регулярных выражений мог бы сработать.

Если по какой-либо причине вы не хотите использовать маршрут регулярных выражений, есть простой обходной путь через плагин фронт-контроллера:

//replace the :id and :title params with a single one, mapping them both
$newsroute = new Zend_Controller_Router_Route(
        'news/:action/:article',
         array( 'controller' => 'news' )
   );

// in a front controller plugin, you extract the Id form the article param
function function dispatchLoopStartup( Zend_Controller_Request_Abstract $request ) {

    if( $request->getParam( 'article', false ) ){

        $slug = $request->getParam( 'article' );
        $parts = array();
        preg_match( '/^(\d+)/', $slug, $parts );

        // add the extracted id to the request as if there where an :id param
        $request->setParam( 'id', $parts[0] );
    } 
}

Конечно, вы также можете извлечь заголовок таким же образом, если вам это нужно.

Не забудьте создать параметр 'article', если вы хотите сгенерировать URL:

 $this->url( array( 'article' => $id.'_'.$title ) );
...