2012-11-25 155 views
0

我的問題是以下內容:蛋糕PHP登錄元素

我想使用登錄元素,而不是登錄視圖。 所以我可以在我的default.ctp中使用登錄...我希望用戶有可能從每個頁面登錄。它應該是一種下拉菜單。

我該如何告訴我的控制器使用元素並獲取元素數據而不再是視圖?

我LoginsController登錄功能:

function login() 
{ 
    $this->set('headline','Melden Sie sich an...'); 

    if($this->request->is('post')) 
    { 
     if($this->Auth->login()) 
     { 
      //$this->redirect($this->Auth->redirect); 
      $this->redirect(array('action' => 'index')); 
      $this->Session->setFlash('Ihr Login war erfolgreich!'); 
     } 
     else 
     { 
      // $this->Session->setFlash('Ihre Email/Passwort ist falsch!' . ' ' . $this->request->data['Login']['email'] . ' ' . $this->request->data['Login']['password']); 
      $this->Session->setFlash('Ihre Email/Passwort ist falsch!'); 
     } 
    } 
    $this->render('logins/login'); 
} 

我的視圖/元素:

<aside id="left"> 

<div class="whitebox einloggen"> 
    <div class="rahmen"> 
     <h2>Login</h2> 
     <div class="inside"> 

    <?php    echo $this->Html->para(null,'Sind Sie bereits als Nutzer registriert?'); 



    echo $this->Form->create('Login', array('action' => 'login')); 

    echo $this->Form->input('email', array ('label' => false, 'type'=>'text','class'=>'text', 'value'=>'E-Mail','id'=>'LoginEmail', 'onfocus'=>"resetinput(this);", 'onBlur'=>"fillinput(this);")); 
    echo $this->Form->input('password', array ('label' => false, 'type'=>'text','class'=>'text', 'value'=>'Passwort','id'=>'LoginPassword', 'onfocus'=>"resetinputpw(this);", 'onBlur'=>"fillinput(this);")); 
    echo $this->Form->end(array('label'=>'Einloggen','class' => 'button long','type' => 'submit','name'=>'submit')); 

    echo $this->Html->para('forgetpw', $this->Html->link('Passwort vergessen?', array('controller' => 'login', 'action' => 'forgotpwd'), array('label' => false, 'class' => 'forgetpw', 'title'=>'Passwort vergessen'))); 

    echo $this->Html->link('', array('controller' => 'login', 'action' => 'fblogin'), array('class' => 'facebook-button', 'title'=>'Mit Facebook einloggen')); 
    ?> 

     </div> 
    </div> 
</div> 

我把這樣的default.thtml中的元素:

<?php echo $this->element('/logins/login'); ?> 

它總是comp laining失蹤登錄視圖...

如果這個心不是一個很好的做法,請教我,否則;-)

對不起我的英文不好,並感謝!

+0

仔細檢查該文件中的應用程序存在/瀏覽/元/登錄/註冊.ctp,並且它是一個ctp擴展名,並確保您刪除語句中的開頭「/」。 $這 - >元件( '登錄/登錄'); –

回答

0

您是否嘗試禁用控制器中的視圖?

如果元素包含在default.thtml中,在你的登錄控制器代替

$this->render('logins/login'); 

加入

$this->autoRender = false; 

將停止登錄控制器試圖明確顯示視圖。

您需要將您的元素放在元素目錄(在「視圖」),然後更新您的代碼default.thtml中是

<?php echo $this->element('login'); ?> 

而且,使用設定的鏈接CakePHP的方式和形式可以幫助你的元素。

爲形式全程指導,試一下:http://book.cakephp.org/2.0/en/core-libraries/helpers/form.html

對於如何做友情鏈接的蛋糕的方式,嘗試:http://book.cakephp.org/2.0/en/core-libraries/helpers/html.html

+0

非常感謝您的快速回復。 我不使用Cake HTML-Helper,因爲我得到了一個自定義CSS和JavaScript的自定義HTML模板。 我不知道如何實現它,而不是在視圖中使用普通的HTML。使用蛋糕設置形式的方式從來不會按照它應該看起來的方式來應用我的設計。 如何禁用控制器中的登錄視圖? 我應該叫「$ this-> autoRender = false;」直接在 「$ this-> element('/ logins/login');」? – user1851634

+0

嗨,你可能想嘗試使用this-> Html->鏈接作爲最糟糕的情況,以防萬一你必須改變你的控制器路徑。 –

+0

要禁用視圖,請使用$ this-> autoRender = false替換this-> render('logins/login')。您不需要觸摸default.ctp –