Ankündigung

Einklappen
Keine Ankündigung bisher.

Cookie bei Popup einbauen?!

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Cookie bei Popup einbauen?!

    Hallo liebe Community,
    ich versuche verzweifelt ein Popup, welches beim Seitenaufruf erscheint, zusätzlich durch ein Cookie zu steuern, leider vergebens.

    Der Quellcode des Popups sieht wie folgt aus. Es handelt sich dabei um eine Eintragung in die Newsletter-Datenbank bei Cleverreach.

    Wenn ich es richtig verstanden habe, benötige ich als Grundlage das jQuery cookie plugin, nur komme ich damit in Verbindung mit dem Quellcode nicht ganz zurecht und hoffe auf etwas Hilfe

    PHP-Code:
    <script>
        
    window.jQuery || 
    document.write('<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"><\/script>')
    </script>
    <script>
        var $cr = jQuery.noConflict();
        var old_src;
        $cr(document).ready(function () {
            $cr(".cr_form").submit(function () {
    $cr(this).find('.clever_form_error').removeClass('clever_form_error');
                $cr(this).find('.clever_form_note').remove();
                $cr(this).find(".musthave").find('input, textarea').each(function () {
                    if (jQuery.trim($cr(this).val()) == "" || ($cr(this).is(':checkbox')) || ($cr(this).is(':radio'))) {
                        if ($cr(this).is(':checkbox') || ($cr(this).is(':radio'))) {
                            if (!$cr(this).parent().find(":checked").is(":checked")) {
    $cr(this).parent().addClass('clever_form_error')
                            }
                        } else {
                            $cr(this).addClass('clever_form_error')
                        }
                    }
                });
                if ($cr(this).attr("action").search(document.domain) > 0 && $cr(".cr_form").attr("action").search("wcs") > 0) {
                    var cr_email = $cr(this).find('input[name=email]');
                    var unsub = false;
                    if ($cr("input['name=cr_subunsubscribe'][value='false']").length) {
                        if ($cr("input['name=cr_subunsubscribe'][value='false']").is(":checked")) {
                            unsub = true
                        }
                    }
                    if (cr_email.val() && !unsub) {
                        $cr.ajax({
                            type: "GET",
                            url: $cr(".cr_form").attr("action").replace("wcs", "check_email") + $cr(this).find('input[name=email]').val(),
                            success: function (data) {
                                if (data) {
    cr_email.addClass('clever_form_error').before("<div class='clever_form_note cr_font'>" + data + "</div>");
                                    return false
                                }
                            },
                            async: false
                        })
                    }
                    var cr_captcha = $cr(this).find('input[name=captcha]');
                    if (cr_captcha.val()) {
                        $cr.ajax({
                            type: "GET",
                            url: $cr(".cr_form").attr("action").replace("wcs", "check_captcha") + $cr(this).find('input[name=captcha]').val(),
                            success: function (data) {
                                if (data) {
    cr_captcha.addClass('clever_form_error').after("<div style='display:block' class='clever_form_note cr_font'>" + data + "</div>");
                                    return false
                                }
                            },
                            async: false
                        })
                    }
                }
                if ($cr(this).find('.clever_form_error').length) {
                    return false
                }
                return true
            });
            $cr('input[class*="cr_number"]').change(function () {
                if (isNaN($cr(this).val())) {
                    $cr(this).val(1)
                }
                if ($cr(this).attr("min")) {
                    if (($cr(this).val() * 1) < ($cr(this).attr("min") * 1)) {
                        $cr(this).val($cr(this).attr("min"))
                    }
                }
                if ($cr(this).attr("max")) {
                    if (($cr(this).val() * 1) > ($cr(this).attr("max") * 1)) {
                        $cr(this).val($cr(this).attr("max"))
                    }
                }
            });
            old_src = $cr("div[rel='captcha'] img").attr("src");
            if ($cr("div[rel='captcha'] img").length != 0) {
                captcha_reload()
            }
        });

        function captcha_reload() {
            var timestamp = new Date().getTime();
            $cr("div[rel='captcha'] img").attr("src", "");
            $cr("div[rel='captcha'] img").attr("src", old_src + "?t=" + timestamp);
            return false
        }

        $cr(document).ready(function () {
            setTimeout(function () {
                $cr("#cr_embeded_form").fadeIn();
            }, 2000);

            $cr("#cr_embed_close_form").click(function () {
                $cr("#cr_embeded_form").hide();
            });
        });
    </script> 

  • #2
    Was genau willst du denn erreichen?

    Wenn ich nichts übersehen habe findet sich in deinem Code nämlich nirgends
    auch nur ein Versuch irgendein Cookie zu setzen oder auszulesen.

    Willst du z.B. etwas in dem PopUp selbst ändern je nach Inhalt des Cookies, oder
    ggf ganz verhindern, dass das PopUp geöffnet wird, falls entsprechendes Cookie gesetzt?

    Letzteres würde ich nämlich nicht per JS machen, sondern einfach per PHP und
    ggf halt den PopUp Code gar nicht erst ausgeben.

    BTW: Die jQuery Version, die du da nutzt, ist veraltet, aktuell wäre 2.1.1 (bzw
    1.11.1 falls du Unterstützung für veraltete IEs benötigst).

    Kommentar


    • #3
      Puh ist das ne menge Javascript
      Kannst du dir quasi alles sparen: AngularJS
      Mit Angular ist das alles unglaublich simpel was du da machst.

      Kommentar


      • #4
        danke soweit...

        Kommentar


        • #5
          Ich bin mir nicht sicher, inwieweit angularjs als Empfehlung da weiterhilft - v.a. bei der steilen Lernkurve.

          @TE: Ich würde den code erstmal aufräumen (jshint hilft), synchrones Ajax und viele globale Variablen machen die Wartung unnötig komplex.

          Das über einen Cookie zu steuern, ist eigentlich recht einfach. Pseudo-Code:

          PHP-Code:
          openLayerOnce : function() {
              if( $.
          cookie && $.cookie'foo' ) ) {
                  return;
              }
              
          // irgendie den layer öffnen
              
          this.$layer.open();

              if( $.
          cookie ) {
                  
          // session cookie
                  
          $.cookie'foo''1', { path'/' });
              }

          Viele Grüße


          Basti
          I like cooking my family and my pets.
          Use commas. Don't be a psycho.
          [URL="http://jscouch.de"]Blog[/URL] - [URL="http://coverflowjs.github.io/coverflow/"]CoverflowJS[/URL]

          Kommentar


          • #6
            Zitat von rudygotya Beitrag anzeigen
            Ich bin mir nicht sicher, inwieweit angularjs als Empfehlung da weiterhilft - v.a. bei der steilen Lernkurve.
            Angular ist für sowas gemacht. Auf lange Sicht denke ich sogar, dass Angular jq verdrängen wird. Und warum steile Lernkurve?
            http://www.angularjshub.com/examples/

            Kommentar


            • #7
              Backbone, Ember, React und co sind ebenfalls für sowas gemacht. MMn. in dem Fall viel eher als angular, da es sich in dem Fall eher nicht um eine Single-Page-Applikation handelt.
              Als erfahrener Profi weißt du doch selbst, wie lange es dauert, sich in ein neues Framework richtig einzuarbeiten. Und wie lange die Einarbeitung in ein erstes, größeres Framework gedauert hat. Zur Lernkurve von angular kann ich nicht viel sagen, da ich damit noch nichts umgesetzt habe. Dennoch:


              @jQuery-Verdrängung: Ich kann mir nicht vorstellen, dass das weitverbreiteste DOM-Framework von einem MVVM/MVC-Framework verdrängt wird. Bisher dachte ich, dass Angular jQuery als DOM-Framework verwendet?! Ah, kurz nachgesehen ist dem auch so: https://docs.angularjs.org/misc/faq#...query-library- und https://github.com/angular/angular.j.../src/jqLite.js

              Viele Grüße

              Basti
              I like cooking my family and my pets.
              Use commas. Don't be a psycho.
              [URL="http://jscouch.de"]Blog[/URL] - [URL="http://coverflowjs.github.io/coverflow/"]CoverflowJS[/URL]

              Kommentar


              • #8
                Das liegt daran, dass angular und jquery 2 voellig unterschiedliche Ansätze für das eigentlich gleiche Problem haben: Daten im DOM darzustellen. Dazu Angular selbst:

                Why AngularJS?
                HTML is great for declaring static documents, but it falters when we try to use it for declaring dynamic views in web-applications. AngularJS lets you extend HTML vocabulary for your application. The resulting environment is extraordinarily expressive, readable, and quick to develop.

                Alternatives
                Other frameworks deal with HTML’s shortcomings by either abstracting away HTML, CSS, and/or JavaScript or by providing an imperative way for manipulating the DOM. Neither of these address the root problem that HTML was not designed for dynamic views.
                Nein, Angular ist kein weiteres Framework wie Backbone, Ember oder React. Es ist etwas anderes. Wie machst du sowas mit jquery? http://jsfiddle.net/c6gwY/2/

                Kommentar


                • #9
                  data.tags.indexOf(tag) < 0
                  Endlich ein weiterer Logiklayer. Hurra!
                  [COLOR="#F5F5FF"]--[/COLOR]
                  [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                  „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                  [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                  [COLOR="#F5F5FF"]
                  --[/COLOR]

                  Kommentar


                  • #10
                    Ach herr je. So was hast du bei jQuery die ganze Zeit. Der Punkt ist, dass du fuer AngularApps gefuehlt 90% weniger Code brauchst, wenn du aufwändige Formulare oder sonstige dynamische Elemente baust. Und der Code ist unglaublich leicht nachvollziehbar. Dass Javascript nunmal gewisse Tooling-Schwaechen hat (.indexOf(), .splice()), kann Angular dann auch nicht ändern. Wenigstens muss ich meine Daten nicht erst in irgendein Model-Contrainer reinwrappen um damit zu arbeiten. Man muss es einfach mal getestet haben. Nach Jahren mit Jquery hat mit Angular echt die Augen geöffnet.

                    Kommentar


                    • #11
                      So was hast du bei jQuery die ganze Zeit.
                      jQuery ist auch Programmiersprache (Javascript), während Angular inline-Konfiguration, Markup oder wie auch immer man es nennen will, ist. Ein bischen Datenanbindung, ein bischen Templatelogik...
                      [COLOR="#F5F5FF"]--[/COLOR]
                      [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                      [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                      [COLOR="#F5F5FF"]
                      --[/COLOR]

                      Kommentar


                      • #12
                        Zitat von nikosch Beitrag anzeigen
                        jQuery ist auch Programmiersprache (Javascript), während Angular inline-Konfiguration, Markup oder wie auch immer man es nennen will, ist. Ein bischen Datenanbindung, ein bischen Templatelogik...
                        Mein Beispiel zeigt nur einen minimalen Ausschnitt dessen, was du mit Angular machen kannst. Du kannst auch jquery und Angular mischen (bis auf ein paar nachvollziehbare Ausnahmen).
                        Du kannst auch mit Angular so arbeiten wie mit jQuery. Nur das willst du nicht!
                        Am Ende des Tages kann Angular fast alles was jQuery kann - und eben auch noch die Angular-Sachen Du brauchst deine Anwendung auch idR nicht umstellen - Angular sollte sich in jede bestehende jqAnwendung integrieren lassen.

                        http://jsfiddle.net/hcLPj/

                        Kommentar


                        • #13
                          Nein, Angular ist kein weiteres Framework wie Backbone, Ember oder React. Es ist etwas anderes.
                          Inwiefern? Nur, weil es andere Konventionen und Herangehensweisen hat? Bidirektional kann ich auch in anderen Frameworks Daten an die View binden.

                          Das liegt daran, dass angular und jquery 2 voellig unterschiedliche Ansätze für das eigentlich gleiche Problem haben: Daten im DOM darzustellen
                          jQuery bietet doch nur das Interface für den DOM-Zugriff. Angular, Backbone und co bedienen jQuery (oder ein anderes DOM-Framework) und bieten dem Programmierer ein Gerüst für Applikationen.

                          Und um auf das angular-Zitat zurückzukommen: Bspw. in Backbone könntest du für solche Problemstellungen ein Modul (übergeordnete View) definieren. Dieses Modul verwaltet seine SubViews. Dabei kann ich die Template-Engine beliebig austauschen und mit vorkompilierten Handlebars-Templates arbeiten => verdammt hohe Flexibilität.

                          In ExtJS bekomm ich alles aus einem Guss, dazu wahnsinnig mächtige Widgets. Folgt dabei dem MVC-Ansatz, dafür ist das bidirektionale Binding für eine typische Applikation lächerlich einfach verglichen zu anderen Frameworks. Jedoch nur, solange man sich innerhalb der vordefinierten Module/Grids/Widgets bewegt.

                          Aber bevor ich mir hier einen abtippe, vergleich doch mal selbst: https://github.com/tastejs/todomvc/t...cture-examples

                          Ich will dir angular nicht ausreden - ich wollte ja demnächst eh mal damit eine kleine Single-Page-App bauen, um tiefer einzusteigen
                          I like cooking my family and my pets.
                          Use commas. Don't be a psycho.
                          [URL="http://jscouch.de"]Blog[/URL] - [URL="http://coverflowjs.github.io/coverflow/"]CoverflowJS[/URL]

                          Kommentar


                          • #14
                            Zitat von rudygotya Beitrag anzeigen
                            Inwiefern? Nur, weil es andere Konventionen und Herangehensweisen hat? Bidirektional kann ich auch in anderen Frameworks Daten an die View binden.
                            Es geht viel mehr um das Gefühl beim Entwickeln.
                            Es gibt ja einen Grund, warum man recht bald nach dem man ein HTML-Grundgerüst aufbaut schon jquery mit vorgesehen hat. Ich glaube, es gibt kaum noch eine ernstzunehmende Anwendung, die nicht mit etwas zumindest jQuery-ähnlichem daherkommt. Eben weil man den Weg über die im Browser mitgelieferten Tools nicht gehen will. Zu umständlich. Viel zu viel BoilerplateCode.

                            Und ja, wegen den anderen Konventionen und Herangehensweisen. Ich kann damit großspurig entwickeln. Aber ich muss nicht. Ich kann mit Angular auch eine beliebige Template-Engine verwenden. Aber warum sollte ich das tun, wenn es praktisch keine Templateengine gibt, die mächtiger ist wie der Angularansatz.

                            Zitat von rudygotya Beitrag anzeigen
                            jQuery bietet doch nur das Interface für den DOM-Zugriff. Angular, Backbone und co bedienen jQuery (oder ein anderes DOM-Framework) und bieten dem Programmierer ein Gerüst für Applikationen.
                            Irgendwo im Hintergrund werkelt da vielleicht ein jQuery (bzw. ein jqLite) und manipuliert das DOM. Das bleibt für mich als Entwickler aber vorborgen. Du arbeitest so, als hätte jede Änderung an deinen Javascript-Objekten direkte Auswirkung auf das DOM. Ohne, dass du eine Änderung erst mal triggern musst*. Es ist aber schwierig das Prinzip in einen kurzen Beitrag zu packen, da Angular im Vergleich zu jQuery einen kompletten Paradigmenwechsel darstellt: Du erzeugst nicht mehr Daten aus DOM-Elementen, sondern DOM-Elemente aus Daten. Du gibst deinen Input-Elementen keinen Name mehr, sondern arbeitest direkt mit einem Javascript-Model, dass seine Daten über 2-Way-Bindung bekommt. Wenn du ein Ajax-Request (über $http etc) machst, dann ändert sich bei einem asynchronen(!)** Response und darin geschehener Änderung deines Models der jeweilige HTML-Code automatisch.

                            Ember und Backbone sind die großen Alternativen zu Angular. Und bei beiden ist das Setup aufwändiger. Rein von den Features nehmen sich beide Welten eigentlich nicht viel. Ich höre nur immer wieder, dass Ember und Backbone im abstrakten Vergleich wie jQuery und Prototype sind. Ich selbst habe nur wenig Erfahrung mit Ember und Backbone!

                            Vielleicht sind Angular und Ember/Backbone im abstrakten Vergleich eher wie PHP und Java

                            * Diese Magie kommt natürlich nicht einfach so. Unter bestimmten Umständen musst du dich dann doch um das DOM-Update selbst kümmern. Dann weisst du das in der Regel aber auch.
                            ** Natürlich nur, wenn du mit dem Angular-Eigenen Tools wie $http arbeitest. Wenn du mit jQuery.ajax arbeiten willst (das gleiche in Grün), dann musst du bei einem Response selbst ein Update triggern.

                            Zitat von rudygotya Beitrag anzeigen
                            Und um auf das angular-Zitat zurückzukommen: Bspw. in Backbone könntest du für solche Problemstellungen ein Modul (übergeordnete View) definieren. Dieses Modul verwaltet seine SubViews. Dabei kann ich die Template-Engine beliebig austauschen und mit vorkompilierten Handlebars-Templates arbeiten => verdammt hohe Flexibilität.
                            Genau das gleiche kannst du mit Angular und Ember auch machen.

                            Zitat von rudygotya Beitrag anzeigen
                            In ExtJS bekomm ich alles aus einem Guss, dazu wahnsinnig mächtige Widgets. Folgt dabei dem MVC-Ansatz, dafür ist das bidirektionale Binding für eine typische Applikation lächerlich einfach verglichen zu anderen Frameworks. Jedoch nur, solange man sich innerhalb der vordefinierten Module/Grids/Widgets bewegt.
                            ExtJS ist super. Aber du musst unheimlich viel machen, damit du das für deine Applikation benutzen kannst. Und wehe du willst irgendwas machen, was bei ExtJS nicht im Core implementiert ist - oder wenn du eigene Komponenten brauchst.

                            Paar kleine Beispiele: Versuch mal eine Currency-Inputbox zu bauen. Eine, die onBlur ein € samt schön formatierten Dezimalwert darstellt und onFocus dann zumindest den Dezimalseparator lokalisiert. Dann ist das ganze System noch sehr anfällig, wenn du irgendwo kleine Syntax-Fehler oder Logikfehler einbaust. Es ist verdammt schwer nachzuvollziehen, warum eine durch 5 Komponenten geroutete Information falsch ankommt. Der Vorteil, den du durch das reiche Komponentensystem erst hast, wird schnell durch die vielen Anpassungen aufgefressen, die du noch machen musst. Ein prominentes deutsches Beispiel ist Shopware. Die Jungs haben den Core von ExtJS angepasst, damit man dort Subapplikationen nutzen konnte - damit die komplette Applikation samt aller Module, Stores und Models nicht direkt beim Start der Applikation mit reingeladen wird. Sencha kennt das Problem - seit Jahren.

                            Naja, wenn es man nüchtern betrachtet, dann lebt ExtJs vor allem vom Grid. Und vom Treeview/Treegrid. Der Rest ist nice, aber bietet einem Entwickler dann auch nichts richtig spannendes mehr.

                            Version 5 ist jetzt mit MVVM und Routing gekommen. Interessantes Konzept!

                            Zitat von rudygotya Beitrag anzeigen
                            Aber bevor ich mir hier einen abtippe, vergleich doch mal selbst: https://github.com/tastejs/todomvc/t...cture-examples
                            Ein paar davon kannte ich bislang nur vom Namen

                            Kommentar

                            Lädt...
                            X