Маршруты каталога продуктов Zend Framework - PullRequest
0 голосов
/ 10 ноября 2010

Мне нужна помощь в создании маршрутов для моего каталога товаров. Мне нужно, чтобы URL-адреса были примерно такими:

/ продукты / электроника / 14

/ продукция / электроника / компьютеры

/ продукция / электроника / Компьютеры / ноутбуки / 4

Последние цифры в URL показывают номер текущей страницы списка.

Ответы [ 2 ]

3 голосов
/ 10 ноября 2010

Я думаю, вам нужно определить свои собственные маршруты (я предпочитаю регулярное выражение для этого из-за его скорости).

Я предполагаю, что у вас есть 3 уровня категорий - если вам нужно больше написать цикл для созданиямаршруты для вас.Изменить контроллеры и действия для ваших нужд.Я предположил, что требуется параметр страницы - если не изменить регулярное выражение.

$router = Zend_Controller_Front::getInstance()->getRouter();

//main category route
$router->addRoute(
    'category_level_0',
    new Zend_Controller_Router_Route_Regex(
        '/products/(\w+)/(\d+)',
        array(
            'controller' => 'product',
            'action'     => 'category',
            'module'     => 'default'
        ),
        array(
            1 => 'category_name',
            2 => 'page_nr'
        ),
        '/products/%s/%d'
    )
);

//sub category route
$router->addRoute(
    'category_level_1',
    new Zend_Controller_Router_Route_Regex(
        '/products/(\w+)/(\w+)/(\d+)',
        array(
            'controller' => 'product',
            'action'     => 'category',
            'module'     => 'default'
        ),
        array(
            1 => 'category_name',
            2 => 'sub_category_name'
            3 => 'page_nr'
        ),
        '/products/%s/%s/%d'
    )
);

//sub sub category route :)
$router->addRoute(
    'category_level_2',
    new Zend_Controller_Router_Route_Regex(
        '/products/(\w+)/(\w+)/(\w+)/(\d+)',
        array(
            'controller' => 'product',
            'action'     => 'category',
            'module'     => 'default'
        ),
        array(
            1 => 'category_name',
            2 => 'sub_category_name'
            3 => 'sub_sub_category_name'
            4 => 'page_nr'
        ),
        '/products/%s/%s/%s/%d'
    )
);
1 голос
/ 10 ноября 2010

Вы должны добавить несколько маршрутов, что-то вроде

$router->addRoute('level1cat', new Zend_Controller_Router_Route(
    'products/:cat1/:page',
    array(
        'controller' => 'product',
        'action'     => 'index',
        'page'       => 1
    ),
    array(
        'cat1' => '\w+',
        'page' => '\d+'
    )
));

$router->addRoute('level2cat', new Zend_Controller_Router_Route(
    'products/:cat1/:cat2/:page',
    array(
        'controller' => 'product',
        'action'     => 'index',
        'page'       => 1
    ),
    array(
        'cat1' => '\w+',
        'cat2' => '\w+',
        'page' => '\d+'
    )
));

$router->addRoute('level3cat', new Zend_Controller_Router_Route(
    'products/:cat1/:cat2/:cat3/:page',
    array(
        'controller' => 'product',
        'action'     => 'index',
        'page'       => 1
    ),
    array(
        'cat1' => '\w+',
        'cat2' => '\w+',
        'cat3' => '\w+',
        'page' => '\d+'
    )
));

Возможно, вы захотите использовать разные действия контроллера для маршрута, от вас зависит, как вы на самом деле будете обрабатывать данные.

Обратите внимание, это полностью не проверено и на данный момент является моим лучшим предположением (сейчас я работаю в .NET, даже не могу его смоделировать)

...