AJAX Ukládání objektů po přesunu na stránce

Někdy je zapotřebí ukládat pozici volně přesouvatelných prvků na stránce. Může se jednat například o boxy na nějakém větším administračním panelu, přičemž uživatelé si chtějí boxy rozmístit podle svého uvážení. Není problém nastavit box jako „draggable“ pomocí jQuery UI, ale jak uložit jeho pozici automaticky bezprostředně po přesunu?

Problém: Chci ukládat pozici myší přesunutého boxu ihned po přesunutí.

test.html

Výše uvedený skript umožňuje objekt boxdraggable přesouvat, nicméně po obnovení okna (F5) je načtena výchozí pozice. Potřebujeme po každém přetažení myší uložit aktuální souřadnice a dále je nutné zařídit, aby se výchozí souřadnice načítaly z databáze.

Problém vyřešíme v těchto krocích:

  1. Vytvoříme databázi a tabulku s daty
  2. Nakonfigurujeme připojení k databázi
  3. Vytvoříme skript pro obsluhu ajaxu
  4. Doplníme výše uvedený odladěný html kód o php a jQuery
  5. Otestujeme (např. ve Firebug)

Databázi vytvořte nejlépe v phpmyadmin (nebo v admineru).
Každý řádek v tabulce info_box bude obsahovat jednoznačný identifikátor id (zajištěno pomocí PRIMARY KEY (‚id‘)), souřadnice [x,y] a v posledním sloupci obsah boxu (text).

 

Připojení k databázi můžete napsat například takto:
config.php

V této ukázce budeme používat procedurální rozhraní. Chcete-li pracovat s objekty, lze samozřejmě využít i objektové rozhraní.

 

Ajax volání bude obsluhovat skript:

ajax-update-box-position.php

 

 

Pro nás je klíčové, jaké jsou souřadnice bezprostředně po uvolnění tlačítka myši. Ke zjištění využijeme sledování události mouseup() a takto zjistíme souřadnice: $(this).position() .
Soubor test.html vylepšíme o php kód a jQuery a přejmenujeme na index.php. Změníme také název selektoru jednotlivých <div> boxů a sice z boxdraggable na box_1, kde číslo za podtržítkem bude identifikátor (shodný s id v tabulce info_box).

index.php

Po zjištění pole souřadnic z něj vezmeme levou a horní vzdálenost od kraje obrazovky. Obě hodnoty vložíme do pole box_data spolu s identifikátorem id a předáme k odeslání funkci ajax(). Požadavek bude odeslán na adresu url. Vytvořené pole předáme pomocí data. Jde v podstatě o předání zapouzdřených dat typu POST, což jsme určili pomocí parametru type.
V souboru pro obsluhu ajax volání pracujeme již přímo s $_POST[‚x‘], $_POST[‚y‘], $_POST[‚id‘], která pouze preventivně ošetříme. Předaná data se nemusí nijak „rozbalovat“.

 

Běh skriptu sledujte pomocí konzole. Ve Firefoxu to vypadá následovně:

Firebug console

Při úspěšném uložení souřadnic je volána funkce done(). Při neúspěšném fail().

Soubory ke stažení: ukladani-objektu-po-presunu-na-strance.zip