We are moving our forum in GitHub Discussions. For questions about Phalcon v3/v4 you can visit here and for Phalcon v5 here.

Solved thread

This post is marked as solved. If you think the information contained on this thread must be part of the official documentation, please contribute submitting a pull request to its repository.

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 http://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
    }
}

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

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