2012-11-25 114 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 –