2013-08-14 4 views
5

Wie kann ich feststellen, ob sich der Benutzer auf der Startseite meiner Website mit CakePhp befindet?Wie erkennt man, ob die aktuelle Seite die Startseite mit CakePhp ist?

Darf ich $this->webroot verwenden?

Ziel ist es nur etwas zu tun, wenn die aktuelle Seite die Homepage ist.

+0

Ich weiß nicht, über cakephp aber '__file__' wird Geben Sie den Pfad der Datei aus und Sie können überprüfen, ob der Pfad dem Pfad der Homepage entspricht. –

Antwort

10

einfach können Sie dies versuchen:

if ($this->request->here == '/') { 
     // some code 
} 

Auch ist es gut, diesen Teil documentation zu lesen:

Sie CakeRequest können Sie eine Vielzahl von Dingen, über die Anfrage an introspect. Über die Detektoren hinaus können Sie weitere Informationen aus verschiedenen Eigenschaften und Methoden herausfinden.

$this->request->webroot contains the webroot directory. 
$this->request->base contains the base path. 
$this->request->here contains the full address to the current request 
$this->request->query contains the query string parameters. 
+1

Genau das, was ich gesucht habe! Vielen Dank! – Dacobah

+0

Danke! Ich entdeckte eine neue Variable) –

+1

Dies funktioniert nicht unter Unterordner, z. 'http: // localhost/cake php /'. In diesem Fall können Sie dies versuchen [Antwort] (http://stackoverflow.com/a/23868165/1787600) –

0

Sie können $ this-> Anfrage-> query [ 'Seite'] verwenden, um zu bestimmen, wo Sie sind,

if ($this->request->query['page'] == '/'){ 
    //do something 
} 

Edit:

Scheck $ this-> Request-Objekt unter Verwendung von Echo debug ($ this-> request), es enthält viele Informationen, die Sie verwenden können. Hier ist ein Beispiel von dem, was man bekommt:

object(CakeRequest) { 
    params => array(
     'plugin' => null, 
     'controller' => 'pages', 
     'action' => 'display', 
     'named' => array(), 
     'pass' => array(
      (int) 0 => 'home' 
     ) 
    ) 
    data => array() 
    query => array() 
    url => false 
    base => '' 
    webroot => '/' 
    here => '/' 
} 
+0

Ich habe es versucht, aber es funktioniert nicht. Ich nehme an, dass $ this-> request-> query ['page'] bedeutet, dass Sie eine Querystring haben. Aber meine URL ist mehr wie www.example.com als www.example.com?page = ... – Dacobah

+0

Sehen Sie meine Bearbeitung, werden Sie wahrscheinlich finden, was Sie brauchen in $ this-> Anfrage Objekt – kaklon

0

Angenommen, Sie etwas von den AppController tun werden, ist es am besten, um zu sehen, ob das aktuelle Controller/Aktions-Paar ist, die Sie als „Homepage“ definieren (wie Kuchen kann einen Benutzer beliebig von der '/' Route leiten und Sie möchten wahrscheinlich immer noch, dass die Logik ausgelöst wird, wenn die Aktion direkt mit dem vollen /controller/action URI und nicht nur unter / aufgerufen wird. In Ihrem AppController fügen Sie einfach einen Scheck:

if ($this->name == 'Foo' && $this->action == 'bar') { 
    // Do your stuff here, like 
    echo 'Welcome home!'; 
} 

auf diese Weise es auslösen wird, wenn die bar Aktion aus dem FooController angefordert wird. Sie können diese Logik natürlich auch in die spezifische Controller-Aktion selbst einfügen (und das könnte mehr Sinn machen, da es weniger Overhead ist).

0

Sie können es wie unten durch die Prüfung gegen params richtig erhalten:

if($this->params['controller']=='homes' && $this->params['action']=='index')

auf diese Weise Sie für jede Seite von CakePHP auf Sichtseite

4

überprüfen können Sie finden Sie es durch den Vergleich der vorliegenden Seite mit Webroot oder Basis

if ($this->here == $this->webroot){ // this is home page } 

OR

if ($this->here == $this->base.'/'){ // this is home page } 
0

Wenn Ihre Startseite home.ctp ist, wie durch die CakePHP Konvention erwähnt.In PagesController, können Sie die Anzeigefunktion ändern aussehen:

(hinzugefügt Code beginnt mit dem Kommentar/* Custom Code Start * /)

public function display() 
{ 
    $path = func_get_args(); 

    $count = count($path); 
    if (!$count) { 
     return $this->redirect('/'); 
    } 
    $page = $subpage = null; 

    if (!empty($path[0])) { 
     $page = $path[0]; 
    } 
    if (!empty($path[1])) { 
     $subpage = $path[1]; 
    } 
    /* Custom code start*/ 
    if("home"==$page){ 
     // your code here 
    } 
    /* Custom code end*/ 
    $this->set(compact('page', 'subpage')); 

    try { 
     $this->render(implode('/', $path)); 
    } catch (MissingTemplateException $e) { 
     if (Configure::read('debug')) { 
      throw $e; 
     } 
     throw new NotFoundException(); 
    } 
}