Ergebnis 1 bis 10 von 10

Thema: JS-Daten bekommen und verarbeiten

  1. #1
    Contao-Fan Avatar von Dani
    Registriert seit
    19.06.2009.
    Ort
    Meilen, Schweiz
    Beiträge
    552

    Standard JS-Daten bekommen und verarbeiten

    Ich möchte folgendes nachbauen: http://davidwalsh.name/editable-cont...ools-php-mysql

    Ich habe folgenden JS-Code:
    Code:
    <script type="text/javascript">
    <!--//--><![CDATA[//><!--
    //once the dom is ready
    window.addEvent('domready', function() {
    	// Find the editable areas
    	$$('.editable').each(function(el) {
    		// Add double-click and blur events
    		el.addEvent('dblclick',function() {
    			// Form
    			var form = new Element('form', { 'id': 'f1', 'method': 'post', 'action': '{{env::request}}', 'enctype': 'application/x-www-form-urlencoded'});
    			// Replace current text/content with input or textarea element
    			if(el.hasClass('textarea'))
    			{
    				// Store "before" message
    				var before = el.get('html').trim();
    				// Input
    				var input = new Element('textarea', { 'id': 'ctrl_5', 'class':'box', 'text':before });
    			}
    			else
    			{
    				// Store "before" message
    				var before = el.get('text').trim();
    				// Input
    				var input = new Element('input', { 'class':'box', 'name': 'text', 'value':before});
    				// Blur input when they press "Enter"
    				input.addEvent('keydown', function(e) { if(e.key == 'enter') { this.fireEvent('blur'); } });
    
    			}
    			// Erase current
    			el.set('html','');
    			form.inject(el);
    			input.inject(form, 'top').select();
    
    			// Add blur event to input
    			input.addEvent('blur', function() {
    				// Get value, place it in original element
    				val = input.get('value').trim();
    				el.set('text',val).addClass(val != '' ? '' : 'editable-empty');
    				
    				// Save respective record
    				var url = '{{env::request}}' + '?text=' + el.get('text');
    				var request = new Request({
    					url:url,
    					method:'post',
    					update: $$('#f1'),
    					onComplete: function() {
    						alert('making ajax call :: ' + url);
    					}
    				}).send();
    
    			});
    		});
    	});
    });
    //--><!]]>
    </script>
    Jetzt möchte ich die JS-Daten bekommen und verabeiten, deshalb steht in meinem Module ModuleName.php folgendes in der compile-Funktion:
    PHP-Code:
    <?php     if ($this->Input->post('text'))
            {
                
    $arrData['headline'] = $this->Input->post('text');
                
    $this->Database->prepare("UPDATE tl_name %s WHERE id=?")->set($arrData)->execute(3);    
            }    
    ?>
    Jedoch wird nichts updatet. An sich ist es logisch, da die Seite nicht neu geladen wird - es sollte aber auch ohne gehen. Habe ich etwas vergessen? Ich danke für jeden Tipp!

    Danke für die Hilfe!

  2. #2
    Contao-Nutzer Avatar von p7ha
    Registriert seit
    18.02.2010.
    Ort
    Waiblingen
    Beiträge
    46

    Standard

    Hi Dani,

    wenn ich alles richtig durchdacht habe, brauchst du dafür die Ajax-Erweiterung und einen Ajax-Hook. Denn du requestest ja die gesamte Seite, evtl/vermutlich wird da nicht der gesamte Seitencode nochmal ausgeführt, was ja sonst dein Modul und die entsprechende Funktion ausführen sollte.

    Ich habe solche Ajax-Geschichten mit dem Ajax-Hook und der Ajax-Erweiterung erfolgreich umgesetzt.
    Viele Grüße, Peter

  3. #3
    Contao-Fan Avatar von Dani
    Registriert seit
    19.06.2009.
    Ort
    Meilen, Schweiz
    Beiträge
    552

    Standard

    Hallo Peter

    Danke für deine Hilfe! Ich habe noch nie was von einem Ajax-Hook gehört. Die Ajax-Erweiterung habe ich installiert. Könntest du vielleicht ein Beispiel machen und eine Webseite zeigen, bei der du das erfolgreich umgesetzt hast? Das wäre sehr nett!

  4. #4
    Contao-Nutzer Avatar von p7ha
    Registriert seit
    18.02.2010.
    Ort
    Waiblingen
    Beiträge
    46

    Standard

    Ok, du machst folgendes:
    In dein ja bereits existierendes Modul (also z.B. system/modules/deinModul/ ) schreibst du in die /config/config.php sowas wie:
    $GLOBALS['TL_HOOKS']['dispatchAjax'][] = array('MeinPHPDateiName','meineFunktion');

    Das ruft dann in deiner Klasse "MeinPHPDateiName.php" die Funktion "meineFunktion" auf, is klar.

    In "meineFunktion" schreibst du das was bisher in deiner compile-Funktion steht, also das was du gepostet hast.

    Jetzt fehlt noch der aufruf aus dem JS-Script. Den Request sendest du jetzt an die folgende URL: ajax.php?MeinPHPDateiName=meineFunktion

    Und: Tada! (Fertig )

    Weiterführendes findest du in der Beschreibung der Ajax-Erweiterung und hier im Forum. Ich hoffe es tut mit dieser Anleitung
    Viele Grüße, Peter

  5. #5
    Contao-Fan Avatar von Dani
    Registriert seit
    19.06.2009.
    Ort
    Meilen, Schweiz
    Beiträge
    552

    Standard

    Danke! Ich habe es mit deiner Hilfe und http://www.contao-community.de/showt...rung-verwenden hinbekommen.

    Anzumerken ist vielleicht noch, dass:

    1. das Modul nicht "extends Module" sein darf
    2. man alle GET oder POST, die man möchte, im js-Code definieren MUSS (man erhält keine andere, auch wenn sie definiert sind, z.B.URL: domain/seite?get=hallo&get2=hi)
    3. "ajax.php?MeinPHPDateiName=meineFunktion" muss man nicht angeben, damit es funktioniert
    Geändert von Dani (02.08.2010 um 21:31 Uhr)

  6. #6
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Dani Beitrag anzeigen
    das Modul nicht "extends Module" sein darf
    Warum nicht, wenn man fragen darf?

    Zitat Zitat von Dani Beitrag anzeigen
    man alle GET oder POST, die man möchte, im js-Code definieren MUSS (man erhält keine andere, auch wenn sie definiert sind, z.B.URL: domain/seite?get=hallo&get2=hi)
    Äh, was bedeutet das? Ich versteh nicht

    Zitat Zitat von Dani Beitrag anzeigen
    "ajax.php?MeinPHPDateiName=meineFunktion" muss man nicht angeben, damit es funktioniert
    Nein musst Du nicht, aber Du solltest trotzdem irgendwas einbauen, damit php weiss, ob dein Code gefragt ist oder nicht, sonst wird deine Funktion nämlich immer gecallt. Zudem musst Du ohnehin false returnen, wenn es sich nicht um deinen Code handelt, da Du sonst die nachfolgenden Erweiterungen, die mit der ajax.php kommunizieren wollen, kappst:

    PHP-Code:
    $myfunctionname $this->Input->get('myfunctionname');

    if(
    $myfunctionname == 'blafasel')
    {
       
    // mein code ausführen
       
    return $return;
    }
    else
    {
       return 
    false;

    So...ähnlich
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  7. #7
    Contao-Fan Avatar von Dani
    Registriert seit
    19.06.2009.
    Ort
    Meilen, Schweiz
    Beiträge
    552

    Standard

    Warum nicht, wenn man fragen darf?
    http://www.contao-community.de/showt...den#post_46358

    Äh, was bedeutet das? Ich versteh nicht
    Ja, das dachte ich mir. Ist ein bisschen unverständlich geschrieben
    Also, wenn du auf einer Seite bist, z.B. domain/suche?keywords=nachricht, etwas per Ajax sendest, per POST, und es im PHP-Code abfragen möchtest mit $this->Input->get('keywords'), erhälst du nichts. Leider!

    Nein musst Du nicht, aber Du solltest trotzdem irgendwas einbauen, damit php weiss, ob dein Code gefragt ist oder nicht, sonst wird deine Funktion nämlich immer gecallt. Zudem musst Du ohnehin false returnen, wenn es sich nicht um deinen Code handelt, da Du sonst die nachfolgenden Erweiterungen, die mit der ajax.php kommunizieren wollen, kappst.
    Danke, wusste ich nicht Was ist, wenn ich nichts returne? Muss ich dann auch return false angeben?

  8. #8
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    1. ah ja, das ist klar Ein Modul rufst Du ja auch nicht via Hook auf

    2. Natürlich erhälst Du mit $this->Input->get() nichts, wenn Du post-Daten sendest Dann musst Du mit $this->Input->post() die Daten holen

    3. Du returnst entweder deinen Code oder false.
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  9. #9
    Contao-Fan Avatar von Dani
    Registriert seit
    19.06.2009.
    Ort
    Meilen, Schweiz
    Beiträge
    552

    Standard

    2. Natürlich erhälst Du mit $this->Input->get() nichts, wenn Du post-Daten sendest Dann musst Du mit $this->Input->post() die Daten holen
    Das ist ganz und gar nicht klar. Wenn ich ohne Ajax ein Formular per Post sende, kann ich auch auf meine GET-Daten zugreifen.

  10. #10
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Es gibt Post- und Get-Daten. Du musst sie halt nur so abrufen, wie sie übergeben werden. Ich versteh nicht, was daran nicht klar sein soll
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. DCA -> aktuelle ID bekommen?
    Von timbugto im Forum Entwickler-Fragen
    Antworten: 11
    Letzter Beitrag: 28.09.2010, 13:35
  2. Kalender/Eventliste verarbeiten keine Daten vor 1970
    Von popeye im Forum Nachrichten/Events/FAQ
    Antworten: 8
    Letzter Beitrag: 27.05.2010, 18:30
  3. PHP Code Formular verarbeiten
    Von Wisi im Forum Allgemeine Inhaltselemente
    Antworten: 1
    Letzter Beitrag: 02.03.2010, 20:15
  4. geparste RSS-Feeds weiter verarbeiten
    Von Thomas im Forum Sonstiges zu Contao
    Antworten: 0
    Letzter Beitrag: 09.10.2009, 19:41

Lesezeichen

Lesezeichen

Berechtigungen

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