Как установить заголовок страницы Dynami c из данных компонента в octoberCMS? - PullRequest
0 голосов
/ 12 июля 2020

Моя страница city.htm

title = "city"
url = "/data/:countryslug/:cityslug"
layout = "default"
is_hidden = 0

[cities]
==
function onEnd()
{
    $this->page->title = '?';
}
==
{% set city = cities.getCity %}

<div class="content">
</div>

Учитывая, что я получаю данные из компонента «cities», и что фактические данные извлекаются, когда я вызываю метод getCity в twig, как мне динамически передать переменная для функции onEnd () для вставки настраиваемого заголовка на основе содержимого?

Обновление # 1: @Hardik Satasiya Я хочу установить заголовок из компонента, но не Я хочу вызвать определенный c метод в onRender (), поскольку это предполагает, что каждый раз, когда мне нужен этот компонент, мне нужно вызывать getCity, что не всегда так.

Однако ваш пример (метод 2) возвращает

Trying to get property 'name' of non-object

для

function onEnd()
{
    $this->page->title = $this['city']->name; //error
}

, потому что он, вероятно, не передается на страницу, как моя первая попытка. Я думаю, чего-то не хватает. Я хочу в этом порядке

  • установить компонент и метод в ветке (НЕ в разделе PHP)
  • установить в компоненте переменную, которая будет доступна для страницы PHP section
  • установить заголовок из PHP раздела страницы на основе вывода comportment

Возможно, это невозможно из-за того, как спроектирован цикл страницы?

1 Ответ

2 голосов
/ 12 июля 2020

Есть 2 способа доступа к городу.

  1. Very easy one если вам не нужны другие функции
function onEnd()
{
    $city = $this->components['cities'].getCity();
    $this->page->title = $city->name;
}

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

В вашем cities компоненте onRender метод

public function onRender()
{
    // to just share variable to page
    $this->page['city'] = $this->getCity();

    // to share variable top page and component partial
    $this->city = $this->page['city'] = $this->getCity();
}

Теперь со страницы code раздел

function onEnd()
{
    // $this->page['city'] <- we do this in component 
    // So, here we can access it directly   
    $this->page->title = $this['city']->name;
}

Это должно решить вашу проблему.

Если есть сомнения, прокомментируйте.

...