+ Antworten
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: Javascript und ein paar Cookies

  1. #1
    War schon öfter hier Avatar von simsalabim
    Registriert seit
    07.07.2005
    Ort
    Allschwil
    Beiträge
    144
    Bedankte sich
    18
    Erhielt 4 Danksagungen
    in 4 Beiträgen

    Standard Javascript und ein paar Cookies

    Hallo

    Ich baue ein Template, worin die einzelne angezeigte Module per Drag-and-drop verschoben werden können (dom-drag.js). Es funktioniert ganz gut. Die Funktion wird am Ende der index.php vor dem body-tag aufgerufen:

    PHP-Code:
    Drag.init(document.getElementById("mein-drag'n'drop-layer")); 
    Beim Aufruf der nächsten Seite sollen die Werte dieser Funktion erhalten bleiben. Dazu wären Cookies hilfreich. Damit backe ich aber mein allererstes (digitales) Cookie.

    Mit der Struktur komme ich nicht ganz klar. Soviel: Cookies lese ich im Header ein. Wo aber setzt man das Cookie? Am Ende des obigem PHP-Snippels oder im Javascript?

    Vielen Dank.
    Simsalabim

  2. #2
    Ex-Über-Mod Avatar von rico
    Registriert seit
    04.12.2005
    Ort
    Potsdam
    Alter
    47
    Beiträge
    1.699
    Bedankte sich
    237
    Erhielt 466 Danksagungen
    in 383 Beiträgen

    Standard

    Zitat Zitat von simsalabim Beitrag anzeigen
    Wo aber setzt man das Cookie? Am Ende des obigem PHP-Snippels oder im Javascript?
    Das bleibt Dir überlassen Du kannst Cookies per Javascript oder PHP generieren.

    Hier was für Javascript.
    Hier was für PHP.

    MFG. Ricola
    Kleines Tutorial zum Objektorientierten Programmieren mit PHP

  3. #3
    War schon öfter hier Avatar von simsalabim
    Registriert seit
    07.07.2005
    Ort
    Allschwil
    Beiträge
    144
    Bedankte sich
    18
    Erhielt 4 Danksagungen
    in 4 Beiträgen

    Standard

    Danke ricola. Zwei hochkarätige Links.

    Ich setze in den Head:

    Code:
    <script type="text/javascript">
    meindragleft = document.cookie;
    meindragtop = document.cookie;
    </script>
    Und im Script:
    Code:
    document.cookie = 'meindragleft=wertx;';
    document.cookie = 'meindragleft=werty;';
    Frage 1: Könnte es so funktionieren?

    Klappt jetzt nicht so auf Anhieb. Nun die Frage 2: Kann ich unter Firefox/Einstellungen/Sicherheit die Cookies nun betrachten? Den gesetzten Cookie-Namen kann ich nicht finden. Irgendwo haperts noch.

  4. #4
    Ex-Über-Mod Avatar von rico
    Registriert seit
    04.12.2005
    Ort
    Potsdam
    Alter
    47
    Beiträge
    1.699
    Bedankte sich
    237
    Erhielt 466 Danksagungen
    in 383 Beiträgen

    Standard

    Also ich würde es so probieren:

    Da Du ja ein schon vorhandenes Javascript nutzt (dom-drag.js), würde ich die Cookie-Sache in eine neue Funktion schreiben, z.B.

    Code:
    function setCookie()
    {
    document.cookie = 'meinCookie';
    }
    Diese Funktion würde ich in die dom-drag.js einfügen und in die
    Code:
    end : function()
    der dom-drag.js
    Code:
    setCookie();
    einfügen, also so:

    Code:
    	end : function()
    	{
    		document.onmousemove = null;
    		document.onmouseup   = null;
    		Drag.obj.root.onDragEnd(	parseInt(Drag.obj.root.style[Drag.obj.hmode ? "left" : "right"]), 
    									parseInt(Drag.obj.root.style[Drag.obj.vmode ? "top" : "bottom"]));
    		Drag.obj = null;
    setCookie();
    	}
    MFG. Ricola
    Kleines Tutorial zum Objektorientierten Programmieren mit PHP

  5. #5
    Ex-Über-Mod Avatar von rico
    Registriert seit
    04.12.2005
    Ort
    Potsdam
    Alter
    47
    Beiträge
    1.699
    Bedankte sich
    237
    Erhielt 466 Danksagungen
    in 383 Beiträgen

    Standard

    Allerdings fällt mir dazu noch ein:

    Du willst anscheinend das ganze über die XY-Position per Java-Script machen. Das ganze hat einen Haken: Zum einen sind a) die XY-Koordinaten nicht in allen Browsern gleich, b) müsste dann das ganze auch noch entweder absolut positioniert werden, oder es muss (wie bei SimplePin2) einen Referenzcontainer geben, an denen sich die XY-Werte ausrichten können. Selbst dann, sind die neuen Modulpositionen aber immer noch "pixelgenau" ausgerichtet.
    Was Du aber eigentlich willst, ist ja: Wenn ich einen betimmten Bereich irgendwohin ziehe, dann soll der Bereich auch dort bleiben. Es ist also eine Art Einrastfunktion für Bereiche in Bereichen.

    Dazu sieh Dir mal am besten diesen Beitrag an. Hier wird mit Tabellen und JQuery gearbeitet.

    MFG. Ricola
    Kleines Tutorial zum Objektorientierten Programmieren mit PHP

  6. #6
    War schon öfter hier Avatar von simsalabim
    Registriert seit
    07.07.2005
    Ort
    Allschwil
    Beiträge
    144
    Bedankte sich
    18
    Erhielt 4 Danksagungen
    in 4 Beiträgen

    Standard

    Hallo ricola!

    Das macht mir jetzt richtig Spass. Die Cookies werden gebacken.

    Ich habe einen eingemitteten Container mit 2 relativ positionierten Layern darin. Falls ich den Einwand richtig verstanden habe, dann könnte Drag'n'drop schon funktionieren, zumindest relativ zur Startposition. Nun bin ich mit obiger Aufgabe noch nicht ganz am Ziel.

    Du hast inzwischen in das Script reingeschaut. Vielleicht hast du auch schon verstanden, wie ich die Variable bei Drag.end mit Drag.start in Übereinstimmung bringen könnte? Jaja, es ist nicht so, dass ich dich arbeiten lasse. Ich versuche dem Cookie auch selber auf die Sprünge zu helfen...
    Code:
    document.cookie = 'DragStart=DragEnd';
    Anderenfalls: jQuery schaue ich mir gerne an. Die Aufgabe, die ich mir gestellt habe, ist weit einfacher: 2 Layer, die zudem +/- transparent sind, sollen übereinander geschoben werden. Der Ansatz ist spielerisch. Nicht ganz so ambitioniert wie bei jQuery.

    Simsalabim

  7. #7
    Ex-Über-Mod Avatar von rico
    Registriert seit
    04.12.2005
    Ort
    Potsdam
    Alter
    47
    Beiträge
    1.699
    Bedankte sich
    237
    Erhielt 466 Danksagungen
    in 383 Beiträgen

    Standard

    Zitat Zitat von simsalabim Beitrag anzeigen
    Die Aufgabe, die ich mir gestellt habe, ist weit einfacher
    Naja, genau das glaube ich eben nicht Schau Dir mal SimplePin2 an, dort wird zum einen der Layer "Draggable" gemacht und zum anderen auch die XY-Position des Layers ausgelesen und nach einem Klick auf ein Icon an dieser Stelle fest positioniert. Das geschieht hier zwar ohne Cookies, verdeutlicht aber das Prinzip das Du meinst.

    Ich denke aber, das ist nicht das was Du willst. Wenn wir in Joomla von Modulpositionen sprechen, so sind diese doch aber im Template mit einer bestimmten Position (z.B. <?php mosLoadModules( 'left', -3 ); ?>) fixiert. Diese Modulposition wiederum steht in einer Tabelle oder einem DIV-Container. Um die Modulposition per Javascript auszutauschen, muss die Kennung des Containers verändert werden, damit das ganze Modul auch verschoben werden kann. Das wiederum würde bedeuten, dass Dein Template von vornherein schon ein Javascript enthält, dass a) z.B. ohne ein Cookie in einem Phantasiecontainer <div id="modulleft"><?php mosLoadModules( 'left', -3 ); ?></div> lädt, oder mit einem Cookie <div id="modulleft"><?php mosLoadModules( 'right', -3 ); ?></div>. Das wiederum heisst, dass es hier gar nicht um XY-Koordinaten geht, sondern nur darum, bestimmten Containern neue Eigenschaften per JavaScript zuzuweisen, oder?

    Oder verstehe ich jetzt was völlig falsch???

    Bestimmt meinst Du so etwas.

    MFG. Ricola
    Kleines Tutorial zum Objektorientierten Programmieren mit PHP

  8. #8
    War schon öfter hier Avatar von simsalabim
    Registriert seit
    07.07.2005
    Ort
    Allschwil
    Beiträge
    144
    Bedankte sich
    18
    Erhielt 4 Danksagungen
    in 4 Beiträgen

    Standard

    Lieber ricola

    Zitat Zitat von ricola Beitrag anzeigen
    Ich denke aber, das ist nicht das was Du willst. Wenn wir in Joomla von Modulpositionen sprechen, so sind diese doch aber im Template mit einer bestimmten Position (z.B. <?php mosLoadModules( 'left', -3 ); ?>) fixiert.
    Die Joomla-Module-Position lasse wir einfach mal aussen vor. Gehen wir davon aus, es gibt eine Position pro Layer. Ist nicht joomla-like, aber es funzt.
    Zitat Zitat von ricola Beitrag anzeigen
    ... dass a) z.B. ohne ein Cookie in einem Phantasiecontainer <div id="modulleft"><?php mosLoadModules( 'left', -3 ); ?></div> lädt, oder mit einem Cookie <div id="modulleft"><?php mosLoadModules( 'right', -3 ); ?></div>. Das wiederum heisst, dass es hier gar nicht um XY-Koordinaten geht, sondern nur darum, bestimmten Containern neue Eigenschaften per JavaScript zuzuweisen, oder?

    Oder verstehe ich jetzt was völlig falsch???
    Das hast du völlig richtig verstanden. Also a). Im Phantasiecontainer liegt die Moduleposition. Es geht mir aber doch schlicht um die Positionierung X/Y und nichts anderes. Im Header habe ich nebst dem obigen Script die CSS für #haensel sowie #gretel. Vor dem </body> -Tag habe ich folgendens Javascript:

    Code:
    <script type="text/javascript">
    Drag.init(document.getElementById("haensel"));
    Drag.init(document.getElementById("gretel"));
    </script>
    Und jetzt wo du es sagst, ich muss eine haensel_und_gretel.css.php erstellen... Ich muss das grüblen auf Morgen verlegen. Vorerst, vielen vielen Dank für die spontante und intensive Anteilnahme.

    n8, Simsalabim

    Bestimmt meinst Du so etwas.
    Nein, nein, ganz bestimmt nicht. A) ist genau da, was ich vor habe.

  9. #9
    Ex-Über-Mod Avatar von rico
    Registriert seit
    04.12.2005
    Ort
    Potsdam
    Alter
    47
    Beiträge
    1.699
    Bedankte sich
    237
    Erhielt 466 Danksagungen
    in 383 Beiträgen

    Standard

    Ok, dann also würde ich folgenden Code in einem zusätzlich eingebundenen Javascript probieren:

    Code:
    var IE = document.all?true:false
    if (!IE) document.captureEvents(Event.MOUSEMOVE)
    document.onclick = getPosition;
    
    var dragobjekt = null;
    var dragx = 0;
    var dragy = 0;
    var posx = 0;
    var posy = 0;
    
    function getPosition(e) {
    
       if (IE) { // IE
         tempX = event.clientX - document.getElementById("referenzcontainer").offsetLeft;
         tempY = event.clientY - document.getElementById("referenzcontainer").offsetTop;
       } else {  // NS
         tempX = e.pageX - document.getElementById("referenzcontainer").offsetLeft;
         tempY = e.pageY - document.getElementById("referenzcontainer").offsetTop;
       }
    }
    
    function draginit() {
    
    	document.onmousemove = drag;
    	document.onmouseup = dragstop;
    }
    
    function dragstart(element) {
    
    	dragobjekt = element;
    	dragx = posx - dragobjekt.offsetLeft;
    	dragy = posy - dragobjekt.offsetTop;
    }
    
    function dragstop() {
    
    	dragobjekt=null;
    }
    
    function drag(ereignis) {
    
    	posx = document.all ? window.event.clientX : ereignis.pageX;
    	posy = document.all ? window.event.clientY : ereignis.pageY;
    
    		if(dragobjekt != null) {
    		dragobjekt.style.left = (posx - dragx) + "px";
    		dragobjekt.style.top = (posy - dragy) + "px";
    	}
    }
    und in Deiner dom-drag.js

    Code:
    	end : function()
    	{
    		document.onmousemove = null;
    		document.onmouseup   = null;
    		Drag.obj.root.onDragEnd(	parseInt(Drag.obj.root.style[Drag.obj.hmode ? "left" : "right"]), 
    									parseInt(Drag.obj.root.style[Drag.obj.vmode ? "top" : "bottom"]));
    		Drag.obj = null;
    
      var x = tempX;
      var y = tempY;
    document.cookie = x + '|' + y;
    	}

    Ich bin mir jetzt nicht sicher ob das funktioniert, aber in meinem Originalscript wird auf diese Weise die XY-Position ausgelesen, a) vor dem Drag und b) nach dem Drag.
    Im eigentlichen Layer müssen natürlich noch die Befehle rein.

    Code:
    onmouseover=\"draginit();\" onmousedown=\"dragstart(this);\"
    MFG. Ricola
    Kleines Tutorial zum Objektorientierten Programmieren mit PHP

  10. #10
    War schon öfter hier Avatar von simsalabim
    Registriert seit
    07.07.2005
    Ort
    Allschwil
    Beiträge
    144
    Bedankte sich
    18
    Erhielt 4 Danksagungen
    in 4 Beiträgen

    Standard

    Hallo ricola

    Cookie schreiben und mit php auslesen, das klappt endlich:
    PHP-Code:
    <? echo $_COOKIE['x']?>
    Nicht so einfach ist für mich das Übergeben eines Wertes an die Variable 'x'. *räusper*

    Etwa so:
    PHP-Code:
    document.cookie 'x = ex' 
    Das Cookie 'x' soll statt 'ex' eine Zahl ausgeben. Kannst du mir hierzu weiterhelfen?

    Tausend Dank.
    Simsalabim


    Edit: Ich muss jetzt die grundlegen Regeln zur Cookienotation raffen. Sonst blicke ich Obiges nicht. Nach der Extraschlaufe komme ich natürlich gerne wieder auf die Ideen zurück. Allerherzlichsten Dank an dieser Stelle an meinen Jamie Oliver der js-Küche. :-)

+ Antworten
Seite 1 von 2 1 2 LetzteLetzte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein