Anmeldemodul - Alternativer Platz für Meldungen

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • tblumrich
    Contao-Urgestein
    • 25.06.2009
    • 2239

    #1

    Anmeldemodul - Alternativer Platz für Meldungen

    Hallo!

    Ich benutze Avisota bei einem aktuellen Projekt (keine Ahnung warum ich bis dato immer mit dem Core-Modul hantiert habe - genial das Ding!).

    Nun habe ich ein kleines Platzproblemchen. Der An-/Abmeldeteil hat einen fest definierten Platz mit festen Ausmaßen.
    Da passt vertikal eben genau der Preamble-Text, die Feldbezeichnung, das Feld und die Absendebuttons. Horizontal geht auch nicht mehr. Schriftgrößen und Bezeichnungen sind auch ausgereizt.

    Das Problem sind die Messages beim Anmelden, Abmelden, Fehlermeldungen etc... die das ganze vertikal "dehnen".

    Hat jemand eine Idee wie man das vermeiden könnte, bevor ich selbst Hand ans Template lege - oder einen Denkansatz...?
    Meine Ideen:
    • Bei Message-Ausgabe verschwinden Feld, Feldbezeichnung und Submits (ok, ist bei Fehlermeldungen bzw. Tippfehlern nicht so gut)
    • der Messagetext erscheint an völlig anderer Stelle oder gar in einer Lightbox
    • eine Ajax(?)Lösung wie formcheck


    Auf die Schnelle rumgefummelt habe ich bis dato am CSS - MessageContainer absolute positioniert innerhalb der Anmeldebox ganz oben. Mit Background und anderer Farbe - ist aber auch nicht so schick.

    Eigentlich kann ich das ganze zum besseren Verständnis auch zeigen...
    http://www.suppenkult.com/ (oben rechts)

    Danke schonmal...

    Gruß
    Thomas
    blucomp | Webdesign & Onlinelösungen
  • tril
    Contao-Urgestein
    • 07.01.2010
    • 2939

    #2
    Ich lasse bei derartigen Problemen die Nachrichten gerne als alert-PopUp anzeigen, dann weiß man sofort, aha, man hat was falsch gemacht

    Kommentar

    • tblumrich
      Contao-Urgestein
      • 25.06.2009
      • 2239

      #3
      Hi.

      Ich bin da leider nicht der große JS Experte und hab das jetzt nach etwas rumprobieren vorerst aufgegeben... kannst du mir ein konkretes Beispiel sagen, wie ich sowas einbaue? Im Template an der Stelle hab ich einige probiert... leider ohne Erfolg.

      Gruß
      Thomas
      blucomp | Webdesign & Onlinelösungen

      Kommentar

      • tril
        Contao-Urgestein
        • 07.01.2010
        • 2939

        #4
        So kann man es machen, mit Fallback, falls kein JS aktiviert ist.

        EDIT: falsches Template gepostet, entfernt um die Verwirrung zu verringern *siehe unten*
        Zuletzt geändert von tril; 06.05.2011, 13:01.

        Kommentar

        • tblumrich
          Contao-Urgestein
          • 25.06.2009
          • 2239

          #5
          Danke für den Tipp.
          Ist wahrscheinlich aus irgendeiner Seite von dir, oder? Oder haben die ausgeklammerten Sprachvariablen (Preamble etc...) irgendeinen Einfluß auf die Funktion?

          Leider erscheint bei mir kein PopUp Alert. JS ist eingeschaltet und Adblock aus... Nur die normale Message - wie sonst auch.

          Gruß
          Thomas
          blucomp | Webdesign & Onlinelösungen

          Kommentar

          • tril
            Contao-Urgestein
            • 07.01.2010
            • 2939

            #6
            Ey, wie dumm, auch noch das falsche File gepostet

            Hier der Ausschnitt für die Messages:
            PHP-Code:
            <?php if (count($this->messages)): ?>
            <script type="text/javascript">
            <!--//--><![CDATA[//><!--
            window.addEvent('domready', function() { alert('<?php echo implode('\n', $this->messages); ?>'); });
            //--><!]]>
            </script>
            <noscript>
            <?php foreach ($this->messages as $strMessage): ?>
            <p class="message"><?php echo $strMessage ?></p>
            <?php endforeach; ?>
            </noscript>
            <?php endif; ?>

            Kommentar

            • tblumrich
              Contao-Urgestein
              • 25.06.2009
              • 2239

              #7

              Funktioniert. Ich denke das ist eine ganz gute Lösung.

              Danke nochmal fürs konstruktive Feedback.

              Gruß
              Thomas
              blucomp | Webdesign & Onlinelösungen

              Kommentar

              • elukas
                Contao-Nutzer
                • 19.09.2010
                • 28

                #8
                Hallo Thomas,

                irgenwie bekomme ich das nicht hin... wo soll der Code von Tristan eingefügt werden?

                Ich hab das Newsletter-Widget ganz unten auf der Seite eingefügt um das Bild der Seite nicht zu zerstören und nun wäre es toll wenn jemand den Newsletter abonniert das ein Fenster (PopUp-Alert) aufgeht so das er nicht wieder bis nach unten scrollen muss...

                Liebe Grüße
                elukas

                Kommentar

                • tril
                  Contao-Urgestein
                  • 07.01.2010
                  • 2939

                  #9
                  Das nur ein PopUp kommt und die Seite nicht neu geladen wird, geht so leider nicht, aber du könntest trotzdem runter scrollen mittels JS. Zuerst aber zu deiner Frage Wo der Code einzubauen ist, im mod_avisotasubscription Template werden die Nachrichten durch eine Schleife ausgegeben:
                  PHP-Code:
                  <?php if (count($this->messages)): ?>
                  <p class="message"><?php echo $strMessage ?></p> 
                  <?php endforeach; ?>
                  <?php endif; ?>
                  Dieser Bereich, muss einfach durch den Code von oben ersetzt werden.

                  Des weiteren könntest du folgendes ebenfalls dort einsetzen, um nach unten zu scrollen:
                  PHP-Code:
                  <?php if (count($this->messages)): ?>
                  <a name="newsletter"></a>
                  <script type="text/javascript">
                  window.location.hash = 'newsletter';
                  </script>
                  ...
                  <?php endif; ?>
                  Dadurch spring der Browser zu dem Anker "newsletter", der durch den A-Tag definiert wird, das geht aber auch mit jeder ID.

                  MfG Tristan

                  Kommentar

                  • elukas
                    Contao-Nutzer
                    • 19.09.2010
                    • 28

                    #10
                    Hallo Tristan,

                    danke für deine Antwort hat prima funktioniert... merkwürdig finde ich das ich es vorher auch so gemacht habe und es nicht geklappt hat... das mit dem scrollen ist auch eine gute Idee... vielen Dank

                    Liebe Grüße
                    elukas

                    Kommentar

                    • elukas
                      Contao-Nutzer
                      • 19.09.2010
                      • 28

                      #11
                      Nach Update auf 1.5 Array-Fehler

                      Hallo Tristan,

                      ich hab leider einen Array-Fehler seit dem Avisota-Update 1.5...

                      wenn ich die Startseite aufrufe geht jetzt immer das Popup auf und
                      schreib 3 mal untereinander Array und springt zum Newsletter.

                      Liebe Grüße
                      elukas

                      Kommentar

                      • elukas
                        Contao-Nutzer
                        • 19.09.2010
                        • 28

                        #12
                        Ist fast erledigt

                        Hallo Tristan,

                        Problem fast gelöst...

                        Ich hab das alte Template gelöscht und nur den Teil vom alten Code eingefügt...
                        und funktioniert schon mal wenn ich aber auf ein nächste Seite gehe und zurück
                        springt es zum Newsletter und nicht am Anfang der Seite...???

                        PHP-Code:
                        <?php if (count($this->messages)): ?>
                        <a name="newsletter"></a>
                        <script type="text/javascript">
                        window.location.hash = 'newsletter';
                        </script>
                        <?php endif; ?>
                        aber das Popup funktioniert jetzt nicht mehr da der Code dafür nicht mehr passt.

                        Danke Tristan eine echt geile Sache dein Newsletter-System

                        Liebe Grüße
                        elukas
                        Zuletzt geändert von elukas; 26.08.2011, 22:55.

                        Kommentar

                        • tril
                          Contao-Urgestein
                          • 07.01.2010
                          • 2939

                          #13
                          Die Variable $this->messages ist jetzt in 3 Kategorien unterteilt:
                          PHP-Code:
                          $this->messages = array
                          (
                              'confirmation' => array(),
                              'info'         => array(),
                              'error'        => array()
                          ) 
                          
                          Deshalb müsste der Code jetzt anders lauten:

                          PHP-Code:
                          $blnMessages = (count($this->messages['confirmation']) + count($this->messages['info']) + count($this->messages['error'])) > 0; 
                          
                          PHP-Code:
                          <?php if ($blnMessages): ?> 
                          <a name="newsletter"></a> 
                          <script type="text/javascript"> 
                          window.location.hash = 'newsletter'; 
                          </script> 
                          <?php endif; ?>
                          PHP-Code:
                          <?php if ($blnMessages): ?> 
                          <script type="text/javascript"> 
                          <!--//--><![CDATA[//><!-- 
                          window.addEvent('domready', function() { alert('<?php echo implode('\n', array_merge($this->messages['confirmation'], $this->messages['info'], $this->messages['error'])); ?>'); }); 
                          //--><!]]> 
                          </script> 
                          <noscript> 
                          <?php
                          foreach ($this->messages as $strClass => $arrMessages):
                          foreach ($arrMessages as $strMessage):
                          ?>
                          <p class="message <?php echo $strClass; ?>"><?php echo $strMessage ?></p>
                          <?php
                          endforeach;
                          endforeach;
                          ?>
                          </noscript> 
                          <?php endif; ?>

                          Kommentar

                          • elukas
                            Contao-Nutzer
                            • 19.09.2010
                            • 28

                            #14
                            Hallo Tristan,

                            danke für Deine Hilfe... hab mehrere Varianten probiert und diese Code-Variante
                            ist die besste es funktioniert jetzt fast alles, im Newsletter-Modul wird jetzt über
                            der Meldung eine 1 angezeigt.


                            PHP-Code:
                            <!-- indexer::stop -->
                            <div class="<?php echo $this->class; ?> block"<?php echo $this->cssID; ?><?php if ($this->style): ?> style="<?php echo $this->style; ?>"<?php endif; ?>>
                            <?php if ($this->headline): ?>
                            
                            <<?php echo $this->hl; ?>><?php echo $this->headline; ?></<?php echo $this->hl; ?>>
                            <?php endif; ?>
                            
                            <form action="<?php echo $this->formAction ?>" method="post" id="<?php echo $this->formId ?>">
                            <div class="formbody">
                            <input type="hidden" name="FORM_SUBMIT" value="<?php echo $this->formId; ?>" />
                            
                            <p class="preamble"><?php echo $GLOBALS['TL_LANG']['avisota']['subscription']['preamble'] ?></p>
                            
                            <?php echo $blnMessages = (count($this->messages['confirmation']) + count($this->messages['info']) + count($this->messages['error'])) > 0; ?> 
                            <?php if ($blnMessages): ?> 
                            <script type="text/javascript"> 
                            <!--//--><![CDATA[//><!-- 
                            window.addEvent('domready', function() { alert('<?php echo implode('\n', array_merge($this->messages['confirmation'], $this->messages['info'], $this->messages['error'])); ?>'); }); 
                            //--><!]]> 
                            </script> 
                            <noscript> 
                            <?php
                            foreach ($this->messages as $strClass => $arrMessages):
                            foreach ($arrMessages as $strMessage):
                            ?>
                            <p class="message <?php echo $strClass; ?>"><?php echo $strMessage ?></p>
                            <?php
                            endforeach;
                            endforeach;
                            ?>
                            </noscript> 
                            <?php endif; ?>
                            
                            <?php if ($blnMessages): ?> 
                            <a name="newsletter"></a> 
                            <script type="text/javascript"> 
                            window.location.hash = 'newsletter'; 
                            </script> 
                            <?php endif; ?>
                            
                            <?php
                            foreach ($this->messages as $strClass => $arrMessages):
                            foreach ($arrMessages as $strMessage):
                            ?>
                            <p class="message <?php echo $strClass; ?>"><?php echo $strMessage ?></p>
                            <?php
                            endforeach;
                            endforeach;
                            ?>
                            
                            
                            <?php if (!$this->hideForm): ?>
                            <?php if (!$this->tableless): ?>
                            <table cellspacing="0" cellpadding="0" summary="">
                                <tbody>
                                    <?php echo $this->fields; ?>
                                    <tr class="<?php echo $this->rowLast; ?> row_last">
                                        <td class="col_0 col_1 col_submit col_first col_last" colspan="2">
                                            <div class="submit_container">
                                                <input type="submit" name="subscribe" value="<?php echo specialchars($GLOBALS['TL_LANG']['avisota']['subscribe']['submit']); ?>" />
                                                <input type="submit" name="unsubscribe" value="<?php echo specialchars($GLOBALS['TL_LANG']['avisota']['unsubscribe']['submit']); ?>" />
                                            </div>
                                        </td>
                                    </tr>
                                </tbody>
                            </table>
                            <?php else: ?>
                            <div class="fields">
                                <?php echo $this->fields; ?>
                            </div>
                            <div class="submit_container">
                                <input type="submit" name="subscribe" value="<?php echo specialchars($GLOBALS['TL_LANG']['avisota']['subscribe']['submit']); ?>" />
                                <input type="submit" name="unsubscribe" value="<?php echo specialchars($GLOBALS['TL_LANG']['avisota']['unsubscribe']['submit']); ?>" />
                            </div>
                            <?php endif; ?>
                            <?php endif; ?>
                            
                            </div>
                            </form>
                            
                            </div>
                            <!-- indexer::continue -->

                            Vielen Dank für deine Hilfe
                            elukas

                            Kommentar

                            • tril
                              Contao-Urgestein
                              • 07.01.2010
                              • 2939

                              #15
                              PHP-Code:
                              <?php echo $blnMessages = (count($this->messages['confirmation']) + count($this->messages['info']) + count($this->messages['error'])) > 0; ?>
                              Das echo gehört da NICHT hin

                              Kommentar

                              Lädt...