2013-08-14 3 views
5

Come posso rilevare se l'utente si trova nella home page del mio sito Web con CakePhp?Come rilevare se la pagina corrente è la homepage con CakePhp?

Posso utilizzare $this->webroot?

L'obiettivo è di fare qualcosa solo se la pagina corrente è la homepage.

+0

Non so su cakephp ma '__file__' farò mostra il percorso del file e puoi verificare se il percorso è uguale al percorso della homepage .. –

risposta

10

Semplicemente si può provare questo:

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

Inoltre è bene leggere questa parte della documentation:

È possibile utilizzare CakeRequest per introspezione una varietà di cose circa la richiesta . Oltre i rilevatori, è inoltre possibile trovare altre informazioni da varie proprietà e metodi.

$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

Esattamente quello che stavo cercando! Grazie! – Dacobah

+0

Grazie! Ho scoperto una nuova variabile) –

+1

Questo non funzionerà sotto la sottocartella, ad es. 'Http: // localhost/cakephp /'. In tal caso puoi provare questa [risposta] (http://stackoverflow.com/a/23868165/1787600) –

0

È possibile utilizzare $ this-> request-> query [ 'pagina'] per determinare dove siete,

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

Edit:

assegno di $ this-> oggetto richiesta utilizzando il debug di eco ($ this-> request), contiene molte informazioni che puoi usare. Ecco un esempio di quello che si ottiene:

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

L'ho provato ma non funziona. Suppongo che $ this-> request-> query ['page'] significhi avere una querystring. Ma il mio url è più simile a www.example.com che a www.example.com?page = ... – Dacobah

+0

Vedi la mia modifica, probabilmente troverai quello che ti serve in $ this-> request object – kaklon

0

Supponendo che si sta per fare qualcosa dal AppController, è meglio per vedere se la corrente paio di controller/azione è quello che si definisce come "home page" (come Cake può instradare un utente ovunque dalla rotta '/' e probabilmente si desidera che la logica venga attivata quando l'azione viene richiamata direttamente con l'intero URI /controller/action e non solo su /. Nel vostro AppController basta aggiungere un controllo:

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

In questo modo si innescherà ogni volta che viene richiesta l'azione bar dal FooController. Ovviamente puoi anche mettere questa logica nell'azione specifica del controllore stesso (e questo potrebbe avere più senso dal momento che è meno sovraccarico).

0

si può ottenere in modo corretto controllando contro params come di seguito:

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

in questo modo è possibile verificare la presenza di qualsiasi pagina di cakephp sulla vista laterale

4

Puoi trovare confrontando il presente pagina con Webroot o base

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

O

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

Se la vostra home page è home.ctp Come citato dalla convenzione cakePHP.In PagesController, è possibile modificare la funzione di visualizzazione a guardare come:

(codice aggiunto inizia al commento/* inizio codice personalizzato * /)

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(); 
    } 
}