Kategorie laden ala Ebay-Kleinanzeigen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Kategorie laden ala Ebay-Kleinanzeigen

    Hallo liebe programmierer Freunde,

    wie der Titel schon sagt suche ich ein auf ajax basierendes Script was es möglich macht die Kategorien nach zu laden,
    vom Design her wie Ebay-Kleinanzeigen ( Bsp. kleinanzeigen.ebay.de/anzeigen/p-anzeige-aufgeben.html# )

    Ich habe schon das [wiki]Select-Auswahl mit AJAX Abhängigkeit und verschiedenen Tabellen[/wiki] ausprobiert und für mich angepasst,
    leider sind dies Select Option Boxen, wie wird dies bei ebay-kleinanzeigen macht, spielt da Javascript eine große Rolle ?

    Meine Tabelle ist wie folgt aufgebaut.....

    Eine Kategorie Tabelle mit den Kategorien > id, name, parentID.

    Wenn ihr mir weiter helfen könntet würde ich mich sehr freuen.

    Großes Lob an die Tutorial Schreiber!!!

    Einen schönen Sonntag euch noch :)
    Nur wer seinen eigenen Weg geht, kann von niemandem überholt werden.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von mopsel ()

  • Ah alles klar, danke.

    Das geht dann natürlich nicht.
    Ich habe versucht Listenelemente draus zu machen, merke das es garnicht so einfach ist, dachte durch ein einfaches ersetzen einer Zeile ist es schick ;)

    Aber das were zu einfach, ich bin leider nur in PHP und CSS mit den Basics mal mehr mal weniger vertraut, mit Javascript bzw. Ajax habe ich
    mich noch garnicht beschäftigt, muss auch leider gestehen das ich es nur in meiner Freizeit mache und ganz schön viel ist :)

    Ich ziehe mein Hut vor dir Torben, dass du das alles hier auseinander halten und so viele Fragen immer beantworten kannst, egal in welche Richtung !
    Dein Lebenslauf spricht für sich ;)

    Siehst du eine einfache & schnelle Möglichkeit das ganze auf Listenelemnte umzuschreiben?
    Nur wer seinen eigenen Weg geht, kann von niemandem überholt werden.
  • Da hast du wohl recht, was mich ein wenig Stört ist ist das Design, im Firefox bleibt die Scrollleiste immer zu sehen, im IE schick ;)

    Ich habe eine schöne Art gefunden so eine Select Box etwas zu verschönern....

    ka-mediendesign.de/blog/indivi…ect-und-checkbox-styling/

    Habe sie versucht einzubauen nur leider füllt er die Felder nicht aus, er zeigt mir keins zur Auswahl und öffnet sich auch nur mit einer einzelnen Zeile nach unten
    obwohl ich 3 Datensätze habe, ich denke aber da wird sich irgendwas mal wieder nicht miteinander verstehen :)

    Aber dieses Design würde schon richtig schick sein, nur leider bekomme ich es nicht zum laufen :(

    Kennst du eine andere Art es etwas aufzuschmücken, außer die leider wenigen Möglichkeiten mit CSS ?
    Nur wer seinen eigenen Weg geht, kann von niemandem überholt werden.
  • Stimmt, ein weißer Balken ist dann auch noch möglich :)

    Sage mal ich versuche die Ausgabe nebeneinander sprich horizontal auszugeben , aber irgendwie will es nicht, was mach ich falsch ?

    Quellcode

    1. <table>
    2. <tr>
    3. <td id="elem1" style="display:none">
    4. <select name="hauptkategorie" size="5" onchange="sendRequest(this, 'elem2')">
    5. <option value=""></option></select></td>
    6. <td id="elem2" style="display:none">
    7. <select name="unterkategorie" size="3" onchange="sendRequest(this, 'elem3')">
    8. <option value=""></option></select></td>
    9. <td id="elem3" style="display:none">
    10. <select name="unterunterkategorie" size="3" onchange="sendRequest(this, 'elem4')">
    11. <option value=""></option></select></td>
    12. <td id="elem4" style="display:none">
    13. <select name="unterunterkategorie" size="3" onchange="sendRequest(this, 'elem5')">
    14. <option value=""></option></select></td>
    15. <td id="elem5" style="display:none">
    16. <select name="unterunterkategorie" size="3" onchange="sendRequest(this, 'elem6')">
    17. <option value=""></option></select></td>
    18. <td id="elem6" style="display:none">
    19. <select name="unterunterkategorie" size="1" onchange="sendRequest(this)">
    20. <option value=""></option></select></td>
    21. </tr>
    22. </table>
    Alles anzeigen


    Ist es möglich im letzten Select eine Art Fertig Meldung auszugeben, dass nicht einfach zum Schluss eine leere Select Box da steht ?
    Nur wer seinen eigenen Weg geht, kann von niemandem überholt werden.
  • Dank dir, hat gut geklappt mit den divs... für alle die es auch brauchen .....

    Quellcode

    1. <div>
    2. <div id="elem1" style="display:none; float:left;">
    3. <select name="hauptkategorie" size="5" onchange="sendRequest(this, 'elem2')">
    4. <option value=""></option></select></div>
    5. <div id="elem2" style="display:none; float:left;">
    6. <select name="unterkategorie" size="5" onchange="sendRequest(this, 'elem3')">
    7. <option value=""></option></select></div>
    8. <div id="elem3" style="display:none; float:left;">
    9. <select name="unterkategorie" size="5" onchange="sendRequest(this, 'elem4')">
    10. <option value=""></option></select></div>
    11. <div id="elem4" style="display:none; float:left;">
    12. <select name="unterkategorie" size="5" onchange="sendRequest(this, 'elem5')">
    13. <option value=""></option></select></div>
    14. <div id="elem5" style="display:none; float:left;">
    15. <select name="unterkategorie" size="5" onchange="sendRequest(this, 'elem6')">
    16. <option value=""></option></select></div>
    17. <div id="elem6" style="display:none; float:left;">
    18. <select name="unterkategorieende" size="5" onchange="sendRequest(this)">
    19. <option value=""></option></select></div>
    20. </div>
    21. <br style="clear: left;" />
    Alles anzeigen





    Kannst du mir auch sagen, was ich ändern muss,
    dass eine Art Fertig Meldung erschein wenn man die letzte Select Box ausgewählt hat,
    zur Zeit kommt zum Schluss einfach nur eine leere Select Box.

    Vielen Dank schonmal!
    Nur wer seinen eigenen Weg geht, kann von niemandem überholt werden.
  • Naja, das ist im Mini Tutorial nicht vorgesehen. Wenn du es programmieren magst, dann würde ich empfehlen, dass du im letzten Select einen zusätzlichen Parameter angibst.

    Quellcode

    1. ... onchange="return sendRequest(this, false, 'success')"


    Den JavaScript änderst du wie folgt:

    Quellcode

    1. function sendRequest(domref, target, success) {
    2. if(success) {
    3. success = document.getElementById(success);
    4. success.style.display = 'block';
    5. }
    6. // skip if no target specified
    7. if(!target) return false;


    Und im HTML platzierst du eine Success Meldung innerhalb von <div id="success"></div>
  • Morgen Torben,

    dass klappt ganz gut, nur leider klappt es nur wenn ich auch wirklich bei dem letzten Select Element ankomme,
    dass heißt ist die Kategorientiefe nicht so tief sondern nur 1 oder 2 Unterkategorien tief, greift es nicht, weil er ja das nächste Elemente anspricht
    was aber dann keinen Inhalt hat.

    Kann man den Parameter "success" nicht einfach immer übergeben und im Javascript abfragen, wenn Rückgabewert leer,
    dann gebe Success aus ?
    Nur wer seinen eigenen Weg geht, kann von niemandem überholt werden.
  • [wiki]Select-Auswahl mit AJAX Abhängigkeit[/wiki]

    script.js Zeile 52 - Dort kannst du prüfen ob die Daten leer sind und success ausgeben.
    In dem Fall darf domref natürlich nicht leer sein, da Zeile 22 sonst zum Abbruch führt.

    Quellcode

    1. /**
    2. * clears a select form element
    3. *
    4. * @param targetSel - dom reference to the select element
    5. */
    6. function clearSelect(targetSel) {
    7. for (var i=targetSel.length; i>=0; i--) {
    8. targetSel.options[i] = null;
    9. }
    10. }
    11. /**
    12. * sends a request under usage of a loading graphic - targettable has to be positioned relative
    13. *
    14. * @param srcref - reference to the select element with chosen data
    15. * @param target - form element name of target element
    16. */
    17. function sendRequest(domref, target) {
    18. // skip if no target specified
    19. if(!target) return false;
    20. // save reference to next target
    21. if(domref) domref.followup = target;
    22. var req;
    23. try {
    24. req = window.XMLHttpRequest ? new XMLHttpRequest():
    25. new ActiveXObject("Microsoft.XMLHTTP");
    26. } catch (e) {
    27. // no AJAX Support
    28. }
    29. req.onreadystatechange = function() {
    30. if ((req.readyState == 4) && (req.status == 200)) {
    31. // merge empty line with response
    32. var data = eval('(' + req.responseText + ')');
    33. var targetRef = document.getElementById(target);
    34. var targetSel = targetRef.getElementsByTagName('select')[0];
    35. // make it visible
    36. targetRef.style.display = 'block';
    37. // clear old data
    38. clearSelect(targetSel);
    39. // fill with data from json response
    40. var i=0;
    41. for(var x in data) {
    42. targetSel.options[i++] = new Option(
    43. data[x].text,
    44. data[x].id
    45. );
    46. }
    47. // clear all followups
    48. while(targetSel.followup) {
    49. targetRef = document.getElementById(targetSel.followup);
    50. // make it hidden
    51. targetRef.style.display = 'none';
    52. // mark next select
    53. targetSel = targetRef.getElementsByTagName('select')[0];
    54. // clear old data
    55. clearSelect(targetSel);
    56. }
    57. }
    58. }
    59. req.open('post', 'ajax.php');
    60. req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    61. // send empty post with initial load
    62. req.send(domref !== null ? 'id='+domref.value+'&name='+domref.name : '');
    63. return false; // return false to avoid reload/recentering of the page
    64. }
    Alles anzeigen
  • In welcher Variablen steckt der der Ausgabewert, den ich abfragen müsste ?

    Ich habe jetzt in jedem

    Quellcode

    1. <div id="elem2" style="display:none; float:left;">
    2. <select name="unterkategorie" size="5" onchange="sendRequest(this, 'elem3', 'success')">
    3. <option value=""></option></select></div>

    success mit übergeben.

    Und an Zeile 52

    Quellcode

    1. if(success) {
    2. success = document.getElementById(success);
    3. success.style.display = 'block';
    4. }

    eingefügt.

    Was muss noch in der if Abfrage rein, dass er es auch nur dann aus gibt wenn das Select leer wäre, also die Datenbankanfrage kein Ergebnis zurück gibt ?
    Nur wer seinen eigenen Weg geht, kann von niemandem überholt werden.
  • Hey Torben, ich bin deinem Rat gefolgt,
    und werfe nun ein Div Container mit einer Fertigmeldung über alle Select Boxen, wenn die letzt mögliche Auswahl getroffen wurde.

    Nach langem suchen und probieren, muss ich doch nochmal nachfragen :)

    Gibt es die Möglichkeit, wenn ja wie, die Select Boxen zu resetten bzw. den ganzen Div Container der Select Box/en neuzuladen?
    Problem ist wenn die Auswahl getroffen wurde und die Fertigmeldung nun über allen Select Boxen liegt, kann ich sie nicht mehr ändern.

    Danke schonmal!
    Schönen Abend noch :)
    Nur wer seinen eigenen Weg geht, kann von niemandem überholt werden.
  • Noch eine Zusatzfunktion? Ohje... na dann lass uns Callbacks unterstützen

    Quellcode

    1. function sendRequest(domref, target, success) {
    2. if(success) {
    3. if(typeof success == 'function') {
    4. success();
    5. } else {
    6. success = document.getElementById(success);
    7. success.style.display = 'block';
    8. }
    9. }


    Außerdem musst du folgende Methode bekannt machen:

    Quellcode

    1. function easyfunc1() {
    2. // zeige success
    3. success = document.getElementById(success);
    4. success.style.display = 'block';
    5. // verstecke die selects
    6. selectdiv = document.getElementById('div_um_select');
    7. selectdiv.style.display = 'none';
    8. }


    und so aufrufen:

    Quellcode

    1. ... onchange="sendRequest(this, 'elem3', easyfunc1)">