2013-08-29 19 views
5

Mam zaimplementowane tytuły stron, a wszystkie strony wyświetlają starannie tytuły. Teraz chcę również, aby nazwa strony była wyświetlana. mogę zakodować go jakJak ustawić nazwę strony za pomocą pagetitle w Yii

<title><?php echo Yii::app()->name . $this->pageTitle ?></title> 

Ale dla tych stron, których tytuły nie są ustawione (czyli są ustawione domyślnie przez CController) nazwa_lokacji będzie się powtarzać.

Chcę po prostu przesłonić metodę setPageTitle mojego kontrolera, aby wstawić nazwę strony. Jak to zrobić?

+0

Nazywane jest to programowaniem normalnym. Jeśli chcesz przesłonić, zajrzyj do istniejącego kodu, który chcesz zastąpić, aby uzyskać kilka wskazówek. Co widziałeś i gdzie trafiłeś na blokadę? (w twoim pytaniu brakuje prób rozwiązania przesłonięć) – hakre

Odpowiedz

3

To właśnie rozwiązany problem z próbą przesłonięcia metody setPageTitle metody CController

class MyController extends Controller 
{ 
    public function setPageTitle($value){ 
    $this->pageTitle = Yii::app()->name ." >> ". $value ; 
    } 
} 

Teraz wartość ta zostanie ustawiona w układzie bez nazwy aplikacji tj

<title><?php echo CHtml::encode($this->pageTitle); ?></title> 

iw widoku usunąć nazwę aplikacji.

$this->pageTitle = Yii::app()->name . ' >> Custom Title' ;//remove this to show instead 
$this->pageTitle = 'Custom Title' ;//Plain title 

Teraz wyjście będzie

My Name App >> Własny tytuł

Jeśli niektóre strony już łączone nazwę aplikacji w widoku dla tych kontrolerów, które trzeba zastąpić setPageTitle tylko w tych kontrolerach. Lepszym rozwiązaniem jest jednak podążanie za zwykłą rzeczą, przez co przesłonię setPageTitle w kontrolerze bazowym.

0

W każdym kontrolerze, dodać tę właściwość zmiennej:

class MyController extends Controller { 

    public $pageTitle = 'My Custom Title'; 

Podobnie można zastąpić układ dla każdego kontrolera:

class MyController extends Controller { 

    public $layout = '//layouts/myCustomLayout'; 
+0

Dlaczego nie umieszczasz tego w AppControllerze? O wiele mniej do napisania. – Fortuna

+0

op żąda innego domyślnego tytułu sekcji dla każdego kontrolera. –

4

Nie trzeba dodawać $pageTitle do kontrolera to jest już zmienną w klasie Controller, więc tak długo, jak kontrolery extend Controller powinieneś być w porządku. Następnie możesz ustawić tytuł strony w dowolnym miejscu. Możesz go zmienić dla całego kontrolera, dla pojedynczej akcji lub nawet dla widoku.

class MyController extends Controller { 
    public function actionAdmin() { 
     $this->pageTitle = 'I got set by action'; //only for this action 
    } 
} 

Albo w widoku

<?php 
$this->pageTitle = 'I got set by the view'; //anytime this view gets called 
?> 
<h1>View File</h1> 

Jeśli chcesz nazwę strony zawsze na końcu tytułu wystarczy zmodyfikować główny układ:

<title><?php echo CHtml::encode($this->pageTitle); ?> <?php echo Yii::app()->name; ?></title> 
1

Jeśli chcesz coś bardziej 'automatyczny', na przykład:

  • Zawsze pokazuj "działania + kontroler" w PageTitle. Przykład: Wyświetl użytkownika, Usuń użytkownika ...

Możesz utworzyć filtr podobny do tego: (działa również z wieloma językami !!!)

1- Tworzenie PageTitleFilter.php chronionych plików w/podzespołów/

class PageTitleFilter extends CFilter { 

    public $controller; 

    protected function preFilter($filterChain) { 
     // logic being applied before the action is executed 
     $this->controller->pageTitle = Yii::t('app', Yii::app()->controller->action->id) . ' ' . Yii::t('app', Yii::app()->controller->id); 
     return true; // false if the action should not be executed 
    } 

    protected function postFilter($filterChain) { 
     // logic being applied after the action is executed 
    } 

} 

2- w kontroler:

class MyController extends Controller { 

    public function filters() { 
     return array(
      'accessControl', // perform access control for CRUD operations 
      array(
       'PageTitleFilter + view, create, update, delete, admin', 
       'controller' => $this 
      ), 
     ); 
    } 
} 

, a następnie umieścić plik protected/messages/es/app.php z tłumaczeniami każdego działania, jak:

return array(
    'view'=>'ver', 
    'delete'='eliminar' 
); 

Link: http://www.yiiframework.com/doc/guide/1.1/es/topics.i18n#locale-and-language

Jeśli chcesz zmienić domyślny PageTitle, można to zrobić w dowolnym działania:

$this->pageTitle= 'My page title'; 

Jeśli nie chcesz wielojęzyczne, usuń Yii :: t funkcję („app”)!

Powiązane problemy