Meta Tag hinzufügen

Hallo,

ich möchte bestimmte Seiten von Google ausschließen. Um das zurealisieren, muss ich folgendes in meinen <head></head> Bereich schreiben


<meta name="robots" content="noindex">

Wo liegt das Problem?

Das Problem nun da, dass ich nicht weiß wie ich in mein Layout diesen Schnippsel rein schreibe.

Schließlich läuft doch die Layout Ausgabe folgendermaßen ab

[list=1]

[*]Layout ausgeben

[*]render() - aufrufen

[*]Fertig

[/list]

tja, wie kriege ich das nun hin?

Einfügen kannst du den Tag hiermit: http://www.yiiframework.com/doc/api/1.0.10/CClientScript#registerMetaTag-detail

Müsste dann ungefähr so aussehen:


Yii::app()->clientScript->registerMetaTag('noindex', 'robots');

Ich würde das dann so lösen:




<?php


// Hauptcontroller


class BaseController extends CController

{


  public $pageNoIndex;


  public function init()

  {

    $this->addClientScripts();

  }


  public function addClientScripts()

  {


    if (true === $this->pageNoIndex)

    {

      Yii::app()->clientScript->registerMetaTag('noindex', 'robots');

    }


  }


}


?>



Wenn nun ein Controller (also eine bestimmte Seite) den MetaTag haben soll, machst du einfach:


<?php


class TestController extends BaseController

{


  public $pageNoIndex = true;


  // .......


}


?>

Vielleicht willst du den MetaTag ja auch per Controller-Action setzen, dann wäre eine andere Lösung natürlich sinnvoller da du hier nur global je Controller setzen kannst.

nur mal so zum verständnis.

Warum werden Variablen in den Klassen bei yii immer public deklariert. Aus Java weiß ich, das Variablen stehts Private deklariert werden und dazu passende Getter und Setter Methoden erstellt werden.

Zu deiner Lösung

D.h. ich leite jeden Controller von einem "Vor-Controller" ab, den dann wiederrum von CController ableitet. Ich glaube, dass das Symfony - Framework genau soarbeitet, für den Fall, dass man Methoden deklarieren will die für alle Controller verfügbar sein sollen.

Fehler

Den BaseController habe ich in protected/controllers/BaseController.php definiert

Folgenden Fehler kriege ich nun zurück


Fatal error: Class 'BaseController' not found in E:\Workspace\blog2\protected\controllers\EngineController.php on line 3

Ja so funktioniert das. In einem Projekt habe ich z.B. 2 Controller die vor dem eigentlichen Controller kommen. Ein Hauptcontroller mit dem ich $this->forceSuffix usw. machen kann und dann für bestimmte Bereiche (z.B. Admin-Panel) noch einen weiteren Controller mit dem ich dann automatisch auf https umleite und sowas halt.

Haupt-Controller -> Bereichs/Context-Controller -> Controller

Der BaseController muss in den components Ordner. Ich erstelle da immer einen extra Ordner "controllers" um mehr Struktur reinzubringen.




- protected

  - components

    - controllers

      - BaseController.php



In der config müsstest du dann glaube ich noch einen import Eintrag für diesen Ordner hinzufügen (application.components.controllers.*).

Das ist einfach Konvention. Prado hat das z.B. auch so gemacht, dass man immer getter/setter schreiben musste, die dann den eigentlich Wert in einer privaten Variable gespeichert/aus ihr gelesen haben. Das verursacht mehr Schreibarbeit und ist für viele Parameter einfach nicht nötig. Yii möchte es ja einfach halten.

Und wenn doch mal getter/setter nötig sind, um z.B. einen Wert beim Beschreiben noch zu prüfen, kann man ja welche schreiben. Für den "Anwender" der Klasse spielt das keine Rolle, da dank CComponent (definiert __get(),__set(),…) transparent auf Klasseneigenschaften zugegriffen werden kann, ohne zu merken, ob man einen getter verwendet oder eine öffentliche Variable direkt ausliest.

Warum löst du diese Aufgabe nicht mit mod_rewrite?

Das wäre doch Performance-technisch schneller und leichter zu programmieren.

Ist nicht immer sinnvoll.

Beispielsweise wenn man nicht Apache als Webserver benutzt, oder die Applikation auch auf anderen Webservern laufen soll. (Oder mod_rewrite nicht aktiviert ist)