Empfehlungen: Erweiterte Suche

Login auf Startseite einbinden

Ausgabedaten formatieren und darstellen

Login auf Startseite einbinden

Beitragvon doppelD » Sa 22. Mai 2010, 19:19

Hallo,
bin noch relativ neu bei CakePHP und etwickle gerade meine erste eigene mit diesem Framework erstellte HP.

Nun möchte ich auf der Startseite ein div haben in dem das "Login-Feld" gezeigt wird.

Ich habe "views/users/login.ctp" sowie "pages/home.ctp".
Wie bekomme ich das Loginview in die home.ctp oder muss ich meine Startseite anders erreichen um das machen zu können?
doppelD
 
Beiträge: 21
Registriert: Di 20. Apr 2010, 20:55

Re: Login auf Startseite einbinden

Beitragvon mbrod » Sa 22. Mai 2010, 22:31

Eine Möglichkeit wäre, login.ctp nach views/elements/login.ctp zu verschieben.

In die Datei views/users/login.ctp dann folgenden Code schreiben:
Code: Alles auswählen
echo $this->element('login');
Somit sollte beim Aufruf von .../users/login das Gleiche wie vorher angezeigt werden.

In der pages/home.ctp kann man dann ebenfalls das Element wieder einbinden:
Code: Alles auswählen
echo '<div id="login">';
echo $this->element('login');
echo '</div>';

Das Arbeiten mit den elements ist äußerst praktisch und benutze ich sehr gern und häufig.
mbrod
 
Beiträge: 193
Registriert: Mi 20. Mai 2009, 18:09
Wohnort: Frankfurt am Main
CakePHP-Version: 1.3.8
OS: Mac OS X

Re: Login auf Startseite einbinden

Beitragvon doppelD » So 23. Mai 2010, 12:12

Danke, hat wunderbar funktioniert.

Nun habe ich in dem Zusammenhang gleich die nächste Frage.
Wie kann ich diesem Login jetzt ein Redirect zu einer anderen Seite machen, die dann auch ein anderes Design hat.

Die Funktionalität, dass bei nicht erbrachter Authentifizierung das Loginfeld gezeigt und er bei richtigem Login wieder auf die zuletzt besuchte Seite geleitet wird, soll aber trotzdem noch funktioneren.

Normalerweise macht man ja das Redirect im Controller, aber die home.ctp hat ja keinen.

Edit:
Hab jetzt noch ein Problem mit meinem Login.

Ich verwende eine Tabelle users und eine players, die mit hasOne miteinander verknüpft sind.

Nun bekomme ich folgende Debugmeldung:
1 DESCRIBE `cake_users` 10 10 11
2 DESCRIBE `cake_players` 38 38 11
3 SELECT `User`.`id`, `User`.`username`, `User`.`password`, `User`.`email`, `User`.`anb`, `User`.`created`, `User`.`modified`, `User`.`lastlogin`, `User`.`group`, `User`.`enable`, `Player`.`user_id`, `Player`.`punkte`, `Player`.`vname`, `Player`.`vname_anzeige`, `Player`.`nname`, `Player`.`nname_anzeige`, `Player`.`bild`, `Player`.`bild_id`, `Player`.`bild_anzeige`, `Player`.`land`, `Player`.`land_anzeige`, `Player`.`bland`, `Player`.`bland_anzeige`, `Player`.`stadt`, `Player`.`stadt_anzeige`, `Player`.`hobby`, `Player`.`hobby_anzeige`, `Player`.`dmi`, `Player`.`dmi_anzeige`, `Player`.`dmin`, `Player`.`dmin_anzeige`, `Player`.`buch`, `Player`.`buch_anzeige`, `Player`.`film`, `Player`.`film_anzeige`, `Player`.`icq`, `Player`.`icq_anzeige`, `Player`.`skype`, `Player`.`skype_anzeige`, `Player`.`msn`, `Player`.`msn_anzeige`, `Player`.`gdat`, `Player`.`gdat_anzeige`, `Player`.`website`, `Player`.`website_anzeige`, `Player`.`job`, `Player`.`job_anzeige`, `Player`.`modified` FROM `cake_users` AS `User` LEFT JOIN `cake_users` AS `User` ON (`User`.`user_id` = `User`.`id`) LEFT JOIN `cake_players` AS `Player` ON (`Player`.`user_id` = `User`.`id`) WHERE `User`.`username` = 'Test' AND `User`.`password` = 'be31855d4095fc6d1449c4a12a8676eb9e8ae029' AND `User`.`anb` = 1 LIMIT 1
1066: Not unique table/alias: 'User'

Mein Code dafür sieht wie folgt aus:
Code: Alles auswählen
<?php
class Player extends AppModel {

    var $name = 'Player';
}
?>

Code: Alles auswählen
<?php
class User extends AppModel {

    var $name = 'User';
    var $belongsTo = array('User');
    var $hasOne = array('Player');

    var $validate = array(
        'username' => array('notempty'),
        'password' => array('notempty'),
        'email' => array('notempty'),
        'group' => array('notempty')
    );
}
?>

Code: Alles auswählen
<?php
class UsersController extends AppController {

    var $name = 'Users';
        var $components = array('Auth');

        function login() {
       
    }

        //Weitere Funktionen
}
?>


Hat jemand ne Idee, was ich da machen kann?
doppelD
 
Beiträge: 21
Registriert: Di 20. Apr 2010, 20:55

Re: Login auf Startseite einbinden

Beitragvon mbrod » So 23. Mai 2010, 18:25

Normalerweise macht man ja das Redirect im Controller, aber die home.ctp hat ja keinen.
home.ctp hat den pages_controller

Wie kann ich diesem Login jetzt ein Redirect zu einer anderen Seite machen

Code: Alles auswählen
$this->Auth->loginRedirect=array('controller'=>'...','action'=>'...');

, die dann auch ein anderes Design hat.
http://book.cakephp.org/view/1080/Layouts

Könnte die Fehlermeldung daher rühren, das User belongsTo User definiert ist?
Code: Alles auswählen
class User extends AppModel {

    var $name = 'User';
    var $belongsTo = array('User');
    var $hasOne = array('Player');
 
Braucht es im Model die Relation auf sich selbst? Vielleicht probehalber mal diese Zeile auskommentieren.
mbrod
 
Beiträge: 193
Registriert: Mi 20. Mai 2009, 18:09
Wohnort: Frankfurt am Main
CakePHP-Version: 1.3.8
OS: Mac OS X

Re: Login auf Startseite einbinden

Beitragvon Flo » So 23. Mai 2010, 18:28

Code: Alles auswählen
<?php
class User extends AppModel {

    var $name = 'User';
    var $belongsTo = array('User');
    var $hasOne = array('Player');

    var $validate = array(
        'username' => array('notempty'),
        'password' => array('notempty'),
        'email' => array('notempty'),
        'group' => array('notempty')
    );
}
?>
 

das ist der Fehler
Du verwendest 2 mal User bzw verwendest 2 mal den Selben Alias für die selbe Tabelle, das kannst du einfach umgehen.
Code: Alles auswählen

    var $belongsTo = array('UpUser'=>array('className' => 'User'));
 

das sollte schon reichen.
Flo
 
Beiträge: 85
Registriert: Mi 11. Jun 2008, 20:48
Wohnort: Bielefeld
CakePHP-Version: 1.3
OS: Mac OSX 10.6

Re: Login auf Startseite einbinden

Beitragvon doppelD » So 23. Mai 2010, 19:52

Der Fehler ist jetzt weg, aber er leitet mich nicht dahin weiter, wo er soll.

Ich habe im pages_controller folgendes eingetragen:
Code: Alles auswählen
if ($path[0] == 'home') {
            $title = 'Start';
            $this->Auth->loginRedirect=array('controller'=>'games','action'=>'index');
        }

Den Titel hat er geändert, also kommt er auch in diese Abfrage rein.
doppelD
 
Beiträge: 21
Registriert: Di 20. Apr 2010, 20:55

Re: Login auf Startseite einbinden

Beitragvon Jörg » Di 8. Jun 2010, 22:02

Hi,

hast du deine "loginRedirect"-Funktion der Auth-Component in einem "beforeFilter()" eingesetzt?
Wenn nicht, dann ist es auch kein Wunder, dass du nicht weitergeleitet wirst.

Auszug aus dem CookBook:
Usually you add these settings in your Controller's beforeFilter() method. Or, if you need to apply such settings site-wide, you would add them to App Controller's beforeFilter()



http://book.cakephp.org/view/248/AuthCo ... -Variables
Jörg
 
Beiträge: 105
Registriert: Di 13. Mai 2008, 13:45
Wohnort: Bremen
CakePHP-Version: 2.0.3, 1.3.x
OS: Win7/Ubuntu


Zurück zu Views

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste