[Gelöst] jQuery, AJAX tep_draw_button (osCommerce) Problem

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

  • [Gelöst] jQuery, AJAX tep_draw_button (osCommerce) Problem

    Moin Moin Liebe Coder,

    Ich hab ein kleine Problem und ich hoffe Ihr könnt mir dabei helfen.

    Vorab zum Sachverhalt:

    Ich schreibe für das osc4pragmamx Modules, basierend auf den osCommerce Shop, eine Customer Account Erweiterung.
    Diese Erweiterung soll in das Your Account Modules des PragmaMX CMS eingebunden werden.
    Das klappt auch alles.

    Nun schreibe ich an einen Wunschzettel, wie er auch bei Alternate im Kundenkonto zu finden ist.

    Der Wunschzettel wird über ein jQuery Sub-Tab aufgerufen.

    Da ich jetzt aber schon in der CA Erweiterung drei Tabebenen habe, wollte ich jetzt nicht noch eine Tabebene in den Wunschzetteln einbauen und habe mich nach einer Alternative umgesehen:

    Quellcode

    1. [syntax="javascript"]
    2. <script type="text/javascript">
    3. /* <![CDATA[ */
    4. // code direkt nach seitenaufbau starten
    5. $(document).ready(function() {
    6. // allen links im div 'navigation' & 'content' eine click()-funktion zuweisen.
    7. // es wird auch auf alle links von der dynamisch nachgeladenen
    8. // seiten reagiert (solange die seiten in das content-div geladen werden)!
    9. $(".accountWishListLinks a").live("click",function() {
    10. // das link-ziel jeweils auslesen & zwischenspeichern
    11. var pageToLoad = $(this).attr("href");
    12. // dem div 'content' den inhalt der aufgerufenen seite zuweisen
    13. $(".accountWishListContentContainer").load(pageToLoad);
    14. // wichtig! sonst wird der a-link im browser aufgerufen!
    15. return false;
    16. });
    17. });
    18. /* ]]> */
    19. </script>
    20. [/syntax]
    Alles anzeigen


    Das Script wird in der Wunschzettel Hautseite ausgeführt und dient dazu bestimmt Links innerhalb des Wunschzettel Tabs, bei Klick, in den Tab zu laden.
    das klappt auch alles soweit wie es soll, bis auf ein kleines Problem.

    Im Wunschzettel wird eine Funktion, die Identisch ist mit der tep_draw_button des osCommerce ist, beim Laden der Verlinkten Seiten ignoriert (siehe Anhänge Löschen Buttons):

    Die Funktion:

    Quellcode

    1. [syntax="php"]
    2. ////
    3. // Output a jQuery UI Button
    4. function osc4pmx_draw_button($title = null, $icon = null, $link = null, $priority = null, $params = null) {
    5. static $button_counter = 1;
    6. $types = array('submit', 'button', 'reset');
    7. if ( !isset($params['type']) ) {
    8. $params['type'] = 'submit';
    9. }
    10. if ( !in_array($params['type'], $types) ) {
    11. $params['type'] = 'submit';
    12. }
    13. if ( ($params['type'] == 'submit') && isset($link) ) {
    14. $params['type'] = 'button';
    15. }
    16. if (!isset($priority)) {
    17. $priority = 'secondary';
    18. }
    19. $button = '<span class="tdbLink">';
    20. if ( ($params['type'] == 'button') && isset($link) ) {
    21. $button .= '<a id="tdb' . $button_counter . '" href="' . $link . '"';
    22. if ( isset($params['newwindow']) ) {
    23. $button .= ' target="_blank"';
    24. }
    25. } else {
    26. $button .= '<button id="tdb' . $button_counter . '" type="' . osc4pmx_output_string($params['type']) . '"';
    27. }
    28. if ( isset($params['params']) ) {
    29. $button .= ' ' . $params['params'];
    30. }
    31. $button .= '>' . $title;
    32. if ( ($params['type'] == 'button') && isset($link) ) {
    33. $button .= '</a>';
    34. } else {
    35. $button .= '</button>';
    36. }
    37. $button .= '</span><script type="text/javascript">$("#tdb' . $button_counter . '").button(';
    38. $args = array();
    39. if ( isset($icon) ) {
    40. if ( !isset($params['iconpos']) ) {
    41. $params['iconpos'] = 'left';
    42. }
    43. if ( $params['iconpos'] == 'left' ) {
    44. $args[] = 'icons:{primary:"ui-icon-' . $icon . '"}';
    45. } else {
    46. $args[] = 'icons:{secondary:"ui-icon-' . $icon . '"}';
    47. }
    48. }
    49. if (empty($title)) {
    50. $args[] = 'text:false';
    51. }
    52. if (!empty($args)) {
    53. $button .= '{' . implode(',', $args) . '}';
    54. }
    55. $button .= ').addClass("ui-priority-' . $priority . '").parent().removeClass("tdbLink");</script>';
    56. $button_counter++;
    57. return $button;
    58. }
    59. [/syntax]
    Alles anzeigen


    Wenn ich aber die jQuery UI Buttons normal mit den

    Quellcode

    1. [syntax="html"]
    2. <button>Ich bin ein jQuery-UI Button</button>
    3. [/syntax]


    Und den dazugehörigen jQuery Code setze, werden diese Buttons auch mit dem AJAX Code korrekt geladen, wie auf den Screenshots zu sehen ist (die drei Buttuns über der Tabelle).

    Gebt mir mal einen Denkanstoß wie ich es auch ohne das AJAX Sript lösen könnte oder wie ich das Problem beheben kann.
    Und mit dem ModalDialog zu arbeiten, um das Problem zu Umgehen ist auch nicht die schönste Variante.
    Da ich bei den Gespeicherten Warenkörben schon mit Dialogboxen gearbeitet habe und diese sollten auch nach Möglichkeit dem AJAX Model weichen.

    MfG

    Peter
    Bilder
    • Customer_Account-Wunschliste_nach_Browser_reload.png

      106,95 kB, 795×804, 221 mal angesehen
    • Customer_Account-Wunschliste_mit_fehler.png

      104,11 kB, 748×805, 239 mal angesehen

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

  • Ok konnte das Problem lösen:

    Ich muste den UI Buttons mit der Class ansprechen.

    Also nicht so:

    Quellcode

    1. [syntax="javascript"]
    2. <script type="text/javascript">
    3. /* <![CDATA[ */
    4. // code direkt nach seitenaufbau starten
    5. $(document).ready(function() {
    6. $( "#deleteButton" ).button({
    7. icons: {
    8. primary: "ui-icon-trash"
    9. }
    10. });
    11. });
    12. /* ]]> */
    13. </script>
    14. [/syntax]
    15. [syntax="html"]
    16. <button id="deleteButton">Ich bin ein jQuery-UI Button</button>
    17. [/syntax]
    Alles anzeigen


    sondern so:

    Quellcode

    1. [syntax="javascript"]
    2. <script type="text/javascript">
    3. /* <![CDATA[ */
    4. // code direkt nach seitenaufbau starten
    5. $(document).ready(function() {
    6. $( ".deleteButton" ).button({
    7. icons: {
    8. primary: "ui-icon-trash"
    9. }
    10. });
    11. });
    12. /* ]]> */
    13. </script>
    14. [/syntax]
    15. [syntax="html"]
    16. <button id="deleteButton" class="deleteButton">Ich bin ein jQuery-UI Button</button>
    17. [/syntax]
    Alles anzeigen


    Dann klappt das auch im Array und ich benötige dann auch die Funktion "osc4pmx_draw_button" nicht mehr.

    MfG

    Peter