Как получить 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 в файле компонента:
<?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')
.
*** Войдите чтобы писать комментарии.