2016-03-17 3 views
1

У меня есть страница, например, /около.Yii2 Установить заголовок страницы с позиции компонента

На странице просмотра я могу установить заголовок страницы: $this->title = "abc" - он работает нормально.

Также у меня есть компонент заголовка в/компонентов с его собственной точки зрения /components/views/Header.php

Как я могу изменить свою страницу название с точки зрения моего компонента? $this->title не работает, потому что я нахожусь в компоненте, а не на странице.

ответ

1

Не знаете, как вы вызываете свой компонент, но чтобы изменить заголовок, который вам нужно указать, вы хотите изменить текущий вид.

Вот пример, по мнению добавить что-то подобное (или использовать любой метод, который вы уже используется, но убедитесь, что вы вставили вид в качестве параметра):

MyComponent::changeTitle($this); 

И в компоненте (Какой бы метод вы хочу сделать это):

public static function changeTitle($view) 
{ 
    $view->title = 'changed'; 
} 

Если это не связано с ситуацией, пожалуйста, добавьте пример представления и компонента, чтобы мы могли лучше понять, что сценарий.

+0

Я упростил проблему - у меня есть макет «main.php» в этом макете я устанавливаю $ this-> title = "test title"; И это работа - название еще пусто. Когда я делаю то же самое в файле представления контроллера, он работает нормально. – Dmitry

+0

В вашем макете должен быть html-код, который вызывает заголовок, что-то вроде '<? = Html :: encode ($ this-> title)?>'. Вам нужно изменить заголовок перед этой строкой. Я просто проверил здесь без проблем. – Clyff

+0

Да, понял это - я разместил код после тега title. Благодаря! – Dmitry

0

Вставить объект страницы в компонент. Затем измените свойства объекта страницы с помощью агрегационной композиции.

Класс компонент будет что-то читать, как ...

class MyComponent extends Component 
{ 
    private $pageObject; 
    public $title; 

    public function __construct(yii\web\View $view) 
    { 
     $this->pageObject = $view; 
    } 

    // this would change the title of the component 
    public function setTitle(string $newTitle) 
    { 
     $this->title = $newTitle; 
    } 

    public function changePageTitle(string $newTitle) 
    { 
     $this->pageObject->title = $newTitle; 
    } 
} 

Где, если вы в просмотре и вы хотите использовать компонент в этой точке зрения, вы можете создать его экземпляр с помощью

$comp = new MyComponent($this); 
// where `$this` is the current page object 

Теперь из области видимости компонента $this->title = 'bleh'; изменит название компонента, в то время как $this->changePageTitle('bleh'); изменит название страницы.

Смежные вопросы