2012-04-16 7 views
6

Ich weiß, wie man überprüft, ob der Benutzer über PHP angemeldet ist, aber ich muss etwas stylen, wenn ein Ereignis eintritt, und ich habe dafür eine separate JavaScript-Datei erstellt. Ist das eine Drupal-Variable oder etwas, auf das ich mich beziehen kann?Wie überprüft man, ob ein Benutzer auf einer Drupal-Site über JavaScript eingeloggt ist?

+1

Sie tun Styling in Javascript? Sei sehr vorsichtig bei dem, was du in Javascript auf der Basis der Benutzerauthentifizierung tust. Es ist SEHR einfach für jedermann, das JS auf Ihrer Seite zu manipulieren. – Webnet

Antwort

13

Erstellen Sie eine new custom module mit hook_init Implementierung.

function [YOUR_MODULE]_init() 
{ 
    global $user; 
    drupal_add_js(array('user_js_uid' => $user->uid), 'setting'); 
} 

Dann in Ihrem JavaScript-Code, überprüfen Sie den Wert der Variablen in dem Modul definiert user_js_uid.

if(Drupal.settings.user_js_uid == 0) 
{ 
    // execute code for non logged in users 
} 
else 
{ 
    // execute code for logged in users 
} 

hoffe, das hilft ... Muhammad

+1

'jQuery.cookie (" DRUPAL_UID ");' gibt immer 'null' zurück – FLY

+2

Es gibt kein Cookie" DRUPAL_UID "in 7.12 – jhoff

+0

+1. Ich habe eine Lösung für diesen Fall hinzugefügt. Vielen Dank. –

11

Wenn Sie warten auf das DOM bereit zu sein, und verwenden Standard-generierten Klassen Drupal CSS, Sie etwas tun könnte, wie (mit jQuery):

if($("body.not-logged-in").length) 
{ 
    // user is not logged in 
} 
+1

Auf diese Weise müssen Sie keine Bibliothek zur Überprüfung hinzufügen. – Haje

+0

Dies ist eine großartige Lösung, und Sie müssen kein benutzerdefiniertes Modul schreiben, wenn Sie nicht Varnish oder ähnliches verwenden – Bery

+0

Wie dieser. Diese Methode benötigt kein PHP, sondern nur reines JavaScript. – Sunry

1

Die "nicht eingeloggte" Klasse scheint nicht in Vanille Drupal 8 zu existieren. Aber es gibt "Benutzer eingeloggt" statt. Hier ist eine Zeile CSS Ich bin mit dem benutzerdefinierten „Register“ Menüpunkt auszublenden, wenn ein Benutzer angemeldet ist:

body.user-logged-in a[href="/user/register"] {display: none; } 
1

Für Drupal 8, wenn Sie Drupal.behaviors verwenden, können Sie die Benutzer-UID in Einstellungen zugreifen :

(function($, Drupal, viewport, settings) { 
    "use strict"; 
    Drupal.behaviors.ifCE = { //the name of our behavior 
    attach: function (context, settings) { 
    var userUID = settings.user.uid; 
    //your code... 
    } 
})(jQuery, Drupal, ResponsiveBootstrapToolkit, drupalSettings); 

Also, wenn die userUID === 0 dann Benutzer ist nicht angeschlossen.

Verwandte Themen