We have moved our forum to GitHub Discussions. For questions about Phalcon v3/v4/v5 you can visit here and for Phalcon v6 here.

Routing for url species category/subcategory /.../post

Hi All. Sorry for my English , I use Google Translate . How do phalcon routing in Wordpress, type %category%/%postname%. Is this possible?



3.5k
Accepted
answer
edited Nov '14

Hi. Yes it is possible. for example (you can see this in https://docs.phalcon.io/en/latest/reference/routing.html)

$router->add(
    "/([a-zA-Z]+)/([a-zA-Z0-9_]+)",
    array(
        "controller" => "posts",
        "action"     => "show",
        "category"       => 1, //([a-zA-Z]+)
        "postname"      => 2, //([a-zA-Z0-9_]+)
    )
);

And show action will be like

public function showAction()
    {

        // Return "category" parameter
        $category = $this->dispatcher->getParam("category");

        // Return "postname" parameter
        $postname = $this->dispatcher->getParam("postname");

    }
edited Nov '14

А на русском тут можно писать?

You gave an example of that , as I understand it , work for links of the form category/post. And if there are sub -type categories/subcategories/post , the route will have to change or make another one?

Думаю. да )

Только не много людей помоч смогут )

Думаю. да ) Виталий, спасибо за быстрый ответ. Вы привели пример который, как я понял, работает для ссылок вида категория/пост. А если будут подкатегории типа категория/подкатегоря/пост, то роут нужно менять или делать еще один?

Да я боюсь, что перевод гугла смогут понять тоже не многие )))

я так понимаю, что линки формируются динамически, то есть, может быть даже

category/sub_category/sub_sub_category/..../sub_sub_...sub_category/post

я так понимаю, что линки формируются динамически, то есть, может быть даже

category/sub_category/sub_sub_category/..../sub_sub_...sub_category/post

Ну что ж счас прокину мозгоми может чота и придумае вместе )

Это вопрос или ответ? )

Вообще все сложно. Вот в Wordpress есть страницы и есть записи. Записи могут быть в категориях. И url можно легко настроить, чтоб для страниц он был site.com/page, а для записей типа site.com/category1/post или site.com/category/subcategory/post. Как подобное сделать в phalcon ума не приложу. Неужели никто не пытался подобное сделать.

О да, как ты думаеш, подойдет ли тибе такой вариант,

$router->add(
    "/([a-zA-Z]+//)/([a-zA-Z0-9_]+)",
    array(
        "controller" => "posts",
        "action"     => "show",
        "category"       => 1, //([a-zA-Z]+)
        "postname"      => 2, //([a-zA-Z0-9_]+)
    )
);

Тоесть , что изминилось, вот здесь ([a-zA-Z]+//) есть єкранированый /

Тогда

 $category = $this->dispatcher->getParam("category");

переменную (оно же будет строкой) можна будет разбить по елементу / Таким образом у тебе будет для примера масив даных

array(
    'category' => "value",
    'sub_category' => "value",
    'sub_sub_category' => "value"

)

Вроде как вариант, надо пробовать. А как быть с такой ситуацией, что в ссылке типа site.com/link link может быть и страницей и категорией. В принципе можно в контроллере этот link брать и смотреть в базе slug'и, чтоб определить что это - пост или категория.

Или проще сделать - для категорий ввести category, чтоб если категория, то ссылка была типа site.com/category/first, а для постов - site.com/first

вот сдесь провтык

([a-zA-Z]+//)

должно быть

([a-zA-Z//]+)

На счет последнего

можна попробовать сделать так

    $blog->add('/category', array(
    'action' => 'catgory'
));

    $blog->add('/{post}', array(
    'action' => 'category'
));

И в этом экшене

public function categoryAction($post = null)
{
    if($post == null){
        тогда запрос на категорию в другом случае, это post
    }
}

Еще раз спасибо, что уделили время бестолковому быдлокодеру. Успехов Вам!

И тибе успехов