Как получить Url страницы из PHP аналогично Twig-фильтру page

Наверника вы знаете, что в разметке WinterCMS можно получить ссылку на страницу при помощи Twig-фильтра |page следующим образом:

<a href="{{ 'contact'|page }}">Контакты</a>

Фильтр сгенерирует нам url из файла contact.htm расположенный в директории pages активной темы приложения:

themes/
`-- nameTheme/
    |-- assets/
    |-- layouts/
    |-- pages/
    |    |-- blog/
    |    |    |-- category.htm
    |    |    `-- post.htm
    |    |-- contact.htm
    |    `-- home.htm
    |-- partials/
    `-- theme.yaml

Если по каким то причинам параметр url будет отредатировано в файле contact.htm, нам не придётся редактировать ссылки по всему сайту.

Как аналогично Twig-фильтру |page получить ссылку из PHP

Всё просто, аналог твиговскому {{ 'contact'|page }} в PHP выглядит так:

\Cms\Classes\Page::url('contact')

Так же в Twig-фильтр можно передавать параметры для генерации урла когда параметр url в параметрах страницы указан как динамический. Пример: url = "/blog/catagories/:slug"

<a href="{{ 'blog/category'|page({ slug: post.category.slug }) }}">
    {{ post.category.title }}
</a>

Аналогично этому в PHP параметры передаются следующим образом:

\Cms\Classes\Page::url('blog/category', ['slug' => $post->category->slug])

Для наглядного примера большой пример получения урла страницы из PHP в файле компонента:

plugins/authorName/blog/components/Post.php
<?php namespace AuthorName\Blog\Components;

use Cms\Classes\ComponentBase;
use Cms\Classes\Page;
use AuthorName\Blog\Models\Post;

class Post extends ComponentBase
{
    public function componentDetails(): array
    {
        return [
            'name'        => 'Пост блога',
            'description' => 'Выводит страницу записи блога.'
        ];
    }

    public function defineProperties(): array
    {
        return [
            'slug' => [
                'title'   => 'Ссылка',
                'default' => '{{ :slug }}'
            ]
        ];
    }

    public function onRun()
    {
        $post = $this->page['post'] = Post::whereSlug($this->property('slug'))->first();

        if (empty($post)) {
            return $this->controller->run('404');
        }

        $urlCategory = Page::url('blog/category', ['slug' => $post->category->slug]);
        
        // ... какой то код
    }
}

Примечание: в примере класс подключен в юзах как use Cms\Classes\Page;, а вызов его метода идёт из короткой формы Page::url('blog/category').

Дата и время сохранения CMS страницы
Дата и время сохранения CMS страницы Как в Winter CMS получить дату и время сохранения (последнего редактирования) CMS-страницы. Примеры вывода через Twig и получения в блоке PHP-кода.
Доступ к элементам на фронте только для админов
Доступ к элементам на фронте только для админов Как в Winter CMS сделать доступ к отдельным элементам или фрагментам выводимым на фронтенде только для бэкенд пользователей которые авторизованы в бэкенде.
Как вывести текущий год
Как вывести текущий год В этой записи будет показан пример того, как в Winter CMS вывести текущий год через twig. Простое решение часто применяемое в шаблонах сайтов.
Как добавить каноническую ссылку
Как добавить каноническую ссылку Небольшая инструкция как легко и просто через Twig добавить каноническую ссылку для страниц сайта в Winter CMS.
Как замаскировать email-адрес
Как замаскировать email-адрес Как замаскировать адрес электронной почты при его выводе в HTML чтобы его не смогли распознать спам-боты. Хелпер-функция html_email и применение её в Twig.
Комментарии 0

*** чтобы писать комментарии.