nachladen und drag & drop

  • nachladen und drag & drop

    hallo zusammen,

    ich habe folgendes problem:
    1. per ajax soll eine liste nachgeladen werden
    2. die liste soll sortierbar sein

    so bei dem quelltext funktioniert 1., aber 2. nicht.
    unten habe ich den quelltext meiner index.tml und der insert.php angegeben, damit koennt ihr mein problem bestimmt besser nach voll ziehen. danke schon mal fuer eure muehe! :D

    datei index.html:

    Quellcode

    1. <html><head><title></title>
    2. <style>
    3. #content #examplelist {
    4. list-style-type:none;
    5. margin:0;
    6. padding:0;
    7. }
    8. #content #examplelist li {
    9. width:200px;
    10. font:13px Verdana;
    11. margin:0;
    12. margin-left:20px;
    13. padding-left:20px;
    14. padding:4px;
    15. cursor:move;
    16. }
    17. div.dropmarker {
    18. height:6px;
    19. width:200px;
    20. background: url(dropmarker.png) left top;
    21. margin-top:-3px;
    22. margin-left:-5px;
    23. z-index:1000;
    24. overflow: hidden;
    25. }
    26. </style>
    27. <script src="prototype.js" type="text/javascript"></script>
    28. <script src="scriptaculous.js" type="text/javascript"></script>
    29. <script type="text/javascript">
    30. <!--
    31. var please_wait = null;
    32. function open_url(url, target) {
    33. if ( ! document.getElementById) {
    34. return false;
    35. }
    36. if (please_wait != null) {
    37. document.getElementById(target).innerHTML = please_wait;
    38. }
    39. if (window.XMLHttpRequest) { // Mozilla, Safari,...
    40. link = new XMLHttpRequest();
    41. if (link.overrideMimeType) {
    42. link.overrideMimeType('text/xml');
    43. // zu dieser Zeile siehe weiter unten
    44. }
    45. }
    46. else if (window.ActiveXObject) { // IE
    47. try {
    48. link = new ActiveXObject("Msxml2.XMLHTTP");
    49. }
    50. catch (e) {
    51. try {
    52. link = new ActiveXObject("Microsoft.XMLHTTP");
    53. }
    54. catch (e) {}
    55. }
    56. }
    57. if (link == undefined) {
    58. return false;
    59. }
    60. link.onreadystatechange = function() { response(target); };
    61. link.open("GET", url, true);
    62. link.send(null);
    63. }
    64. function response(target) {
    65. if (link.readyState == 4) {
    66. if (link.status == 200) {
    67. document.getElementById(target).innerHTML = link.responseText;
    68. }
    69. else {
    70. alert('Bei dem Request ist ein Problem aufgetreten.');
    71. }
    72. }
    73. }
    74. function set_loading_message(msg) {
    75. please_wait = msg;
    76. }
    77. set_loading_message("kommt sofort ...");
    78. //-->
    79. </script>
    80. </head><body>
    81. <a href="#" onClick="open_url('insert.php','liste')">Liste mit ajax nachladen</a>
    82. <div id="liste">
    83. <ul id="examplelist">
    84. <li>hans</li>
    85. <li>achim</li>
    86. <li>berta</li>
    87. <li>lisa</li>
    88. <li>tom</li>
    89. </ul>
    90. </div>
    91. <script type="text/javascript" language="javascript">
    92. Sortable.create('examplelist',{ghosting:true,constraint:false})
    93. </script>
    94. </body></html>
    Alles anzeigen


    datei insert.php:

    Quellcode

    1. <?php
    2. echo "
    3. <ul id=\"examplelist\">
    4. <li>Lorem ipsum dolor</li>
    5. <li>sit amet</li>
    6. <li>consectetur adipisicing</li>
    7. <li>elit</li>
    8. <li>sed do eiusmod</li>
    9. <li>tempor incididunt</li>
    10. <li>ut labore et dolore</li>
    11. <li>magna aliqua</li>
    12. </ul>
    13. ";
    14. ?>
    Alles anzeigen
  • joo, vielen dank fuer den hinweis.

    sorry :oops:, aber ich frage jetzt noch bischen weiter, wollte gerne die liste vom user sortieren lassen, per "drag and drop". soll eine wunschliste werden, also jeweiter oben desdo wichtiger. und um das ganze komfortabel zu gestallten find ich ajax (drag and drop) sehr gut. ander variante mit knopf hinter dem artikel, hab ich schon in der aktuellen version.

    also wie geht das denn mit DOM?
  • naja.. dann würde ich es doch nicht serverseitig machen
    Ich dachte es ging um die Sortierung einer Kategorie oder Ähnlichem.

    Dann genügt es ja mit JavaScript (also ohne ajax) zu sortieren und dann nur noch per AJAX zu speichern

    Hast du dein Sortable Objekt denn schon fertig?
    Ansonsten ist das hier eine schöne Komplettlösung:
    http://demo.script.aculo.us/ajax/sortable_elements
  • hallo vielen danke! die loesung ist echt nett aber leider keine für meinen fall. das problem ist lediglich, das anzeigen einer liste mit ajax die dann aber drag and drop faehig ist.

    was soll passieren:
    - man geht auf die seite
    - dort gibt es beliebig viele listen zur auswahl (nur die ueberschrift - also ein register oder inhaltsverzeichnis)
    - davon waehlt man eine liste aus (per link)
    - mit ajax wird nun, in einem speziellen div - "bereich", die ganze liste angezeigt (das fukst ja schon oben im skript)
    - diese liste soll aber jetzt drag and drop faehig sein (das funktioniert oben im skript nicht :( ) ! genau hier liegt also meine problem !

    will wirklich nicht das forum mit unnoetigen zeug füllen, aber ich muss das eben so umsetzen und bis jetzt hab ich keine ahnung wie ich weiter vorgehen sollte.
  • Vergiss meinen letzten Beitrag. Ich habe mir deinen Code eben erst intensiver angeschaut und mir ist aufgefallen, dass du scriptaculous bereits nutzt.

    Du rufst die scriptaculous Funktion aber nur nur beim Laden der Seite auf.
    Dabei musst du diese immer aufrufen, wenn du eine neue Liste lädst

    folgenden code habe ich getestet:

    Quellcode

    1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    4. <head>
    5. <title>script.aculo.us sortable functional test file</title>
    6. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    7. <script src="../../lib/prototype.js" type="text/javascript"></script>
    8. <script src="../../src/scriptaculous.js" type="text/javascript"></script>
    9. <script type="text/javascript">
    10. <!--
    11. function ajax() {
    12. try {
    13. req = window.XMLHttpRequest?new XMLHttpRequest():
    14. new ActiveXObject("Microsoft.XMLHTTP");
    15. } catch (e) {
    16. //Kein AJAX Support
    17. }
    18. req.onreadystatechange = function() {
    19. if ((req.readyState == 4) && (req.status == 200)) {
    20. document.getElementById('inhalt').innerHTML = req.responseText;
    21. Sortable.create('examplelist', {onUpdate:function(){ new Ajax.Updater('list-info', '/ajax/order', {
    22. onComplete:function(request){new Effect.Highlight('list',{});},
    23. parameters:Sortable.serialize('list'),
    24. evalScripts:true, asynchronous:true})}})
    25. }
    26. };
    27. req.open('GET', 'insert.php');
    28. req.send(null);
    29. }
    30. //-->
    31. </script>
    32. </head>
    33. <body onload="ajax()">
    34. <div id="inhalt">
    35. </div>
    36. </body>
    37. </html>
    Alles anzeigen