Trade Republic - Provisionsfrei Aktien handeln
Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Uhrzeit eingeben

    webald

    • modified Team
    • Beiträge: 2.795
    Uhrzeit eingeben
    am: 08. Juni 2016, 15:48:21
    Ich suche etwas um die Uhrzeit einzugeben analog zum Datepicker im BE in 2.0.

    Ist da in der aktuellen Version noch irgendwo etwas versteckt oder muss ich was externens nutzen?

    Linkback: https://www.modified-shop.org/forum/index.php?topic=35164.0
    Shop Hosting

    hpzeller

    • Experte
    • Beiträge: 4.130
    • Geschlecht:
    Re: Uhrzeit eingeben
    Antwort #1 am: 08. Juni 2016, 19:48:35
    Bereits in 2.0 vorhanden ist folgendes Widget 'admin/includes/javascript/jQueryDateTimePicker'.
    Details findet man hier -> http://xdsoft.net/jqplugins/datetimepicker/

    Ein weiteres jQuery Plugin habe ich hier gefunden -> http://jonthornton.github.io/jquery-timepicker/

    Gruss
    Hanspeter

    webald

    • modified Team
    • Beiträge: 2.795
    Re: Uhrzeit eingeben
    Antwort #2 am: 09. Juni 2016, 09:39:57
    Danke, mir war entgangen, dass damit auch Uhrzeiten umgesetzt werden können.

    Allerdings ist mir aufgefallen, dass der Code in admin/includes/javascript/jQueryDateTimePicker/datepicker.js.php ein wenig unlogisch ist.

    Es wird 5x die gleiche Nutzung/Darstellung eingestellt, nur weil das in unterschiedlichen Seiten im BE genutzt wird.

    Code: PHP  [Auswählen]
    <script type="text/javascript">
      $(document).ready(function(){
        $.datetimepicker.setLocale('<?php echo $_SESSION["language_code"]; ?>');    
        // banner manager, coupon admin
        $('#Datepicker1').datetimepicker({
          dayOfWeekStart:1,
          timepicker:false,
          format:'Y-m-d'
        });
        $('#Datepicker2').datetimepicker({
          dayOfWeekStart:1,
          timepicker:false,
          format:'Y-m-d'
        });    
        // specials
        $('#DatepickerSpecials').datetimepicker({
          dayOfWeekStart:1,
          timepicker:false,
          format:'Y-m-d'
        });
        $('#DatepickerSpecialsStart').datetimepicker({
          dayOfWeekStart:1,
          timepicker:false,
          format:'Y-m-d'
        });  
        // product
        $('#DatepickerProduct').datetimepicker({
          dayOfWeekStart:1,
          timepicker:false,
          format:'Y-m-d'
        });
      });
    </script>
     

    Wäre es nicht besser 3 oder 4 fortlaufend nummeriert vorzudefinieren, dazu noch 2 nur für Uhrzeiten und 2 x Datum+Uhrzeit?

    Erweiterungen die Datumsfelder benötigen wären sonst gezwungen wieder eine Core-Datei zu bearbeiten. Etwa so:
    Code: PHP  [Auswählen]
    <link type="text/css" href="includes/javascript/jQueryDateTimePicker/jquery.datetimepicker.css" rel="stylesheet" />
    <script type="text/javascript" src="includes/javascript/jQueryDateTimePicker/jquery.datetimepicker.full.min.js"></script>
    <script type="text/javascript">
      $(document).ready(function(){
        $.datetimepicker.setLocale('<?php echo $_SESSION["language_code"]; ?>');    
        // banner manager, coupon admin
        $('#Datepicker1').datetimepicker({
          dayOfWeekStart:1,
          timepicker:false,
          format:'Y-m-d'
        });
        $('#Datepicker2').datetimepicker({
          dayOfWeekStart:1,
          timepicker:false,
          format:'Y-m-d'
        });    
        $('#Datepicker3').datetimepicker({
          dayOfWeekStart:1,
          timepicker:false,
          format:'Y-m-d'
        });    
        $('#DateTimepicker1').datetimepicker({
          dayOfWeekStart:1,
          format:'Y-m-d H:i'
        });    
        $('#DateTimepicker2').datetimepicker({
          dayOfWeekStart:1,
          format:'Y-m-d H:i'
        });    
        $('#Timepicker1').datetimepicker({
          dayOfWeekStart:1,
          datepicker:false,
              format:'H:i'
        });    
        $('#Timepicker2').datetimepicker({
          dayOfWeekStart:1,
          datepicker:false,
              format:'H:i'
        });    
        // specials
        // todo: alten Modul-Code anpassen
     
        // product
        // todo: alten Modul-Code anpassen

      });
    </script>
     

    webald

    • modified Team
    • Beiträge: 2.795
    Re: Uhrzeit eingeben
    Antwort #3 am: 09. Juni 2016, 10:50:25
    Ich habe das in Ticket #922 festgehalten.

    hpzeller

    • Experte
    • Beiträge: 4.130
    • Geschlecht:
    Re: Uhrzeit eingeben
    Antwort #4 am: 09. Juni 2016, 13:49:36
    [...]
    Wäre es nicht besser 3 oder 4 fortlaufend nummeriert vorzudefinieren, dazu noch 2 nur für Uhrzeiten und 2 x Datum+Uhrzeit?
    [...]
    [/code]

    Das löst doch das Problem nicht webald, nun kommt ein anderer Shopbetreiber der möchte aber im Setting für die Zeit z.B. nicht 'step: 15' sondern 'step:12', soll man dann das Core-Skript nochmal erweitern, nein man soll/muss doch die 'auto_include'-funktionalität die es in 2.0 jetzt gibt nutzen.

    Hier ein Beispiel:
    Folgende Datei erstellen 'admin/includes/extra/javascript/custom_load_datetimepicker.php' und mit diesem Inhalt füllen.

    Code: PHP  [Auswählen]
    <?php
    /* -----------------------------------------------------------------------------------------
       $Id: custom_load_datetimepicker.php 2016-06-09 modified-shop $

       modified eCommerce Shopsoftware
       http://www.modified-shop.org

       Copyright (c) 2009 - 2016 [www.modified-shop.org]
       -----------------------------------------------------------------------------------------
       Released under the GNU General Public License
       ---------------------------------------------------------------------------------------*/


    // Hier können Bedingungen für das Laden des JavaScripts gesetzt werden
    // If (in_array(basename($PHP_SELF), array(FILENAME_CAMPAIGNS, FILENAME_CUSTOMERS, FILENAME_CONTENT_MANAGER))) { // START if
    ?>

    <script>
        $(function(){

            if(!jQuery().datetimepicker) {

                $('head').append('<link type="text/css" href="includes/javascript/jQueryDateTimePicker/jquery.datetimepicker.css" rel="stylesheet" />');

                jQuery.getScript('includes/javascript/jQueryDateTimePicker/jquery.datetimepicker.full.min.js', function(){

                    // Dieser Code wird nach dem erfolgreichen Nachladen des DateTimePicker Plugin ausgeführt            
                    $.datetimepicker.setLocale('<?php echo $_SESSION["language_code"]; ?>');

                    $('#Timepicker1').datetimepicker({
                      dayOfWeekStart:1,
                      datepicker:false,
                          format:'H:i'
                    });

                    $('#Timepicker2').datetimepicker({
                      dayOfWeekStart:1,
                      datepicker:false,
                          format:'H:i'
                    });

                });

            } else {

                // Dieser Code wird ausgeführt wenn das DateTimePicker Plugin bereits geladen und funktionsfähig ist
                $.datetimepicker.setLocale('<?php echo $_SESSION["language_code"]; ?>');

                $('#Timepicker1').datetimepicker({
                  dayOfWeekStart:1,
                  datepicker:false,
                      format:'H:i'
                });

                $('#Timepicker2').datetimepicker({
                  dayOfWeekStart:1,
                  datepicker:false,
                      format:'H:i'
                });

            }

        });
    </script>

    <?php
    // } // END if
    ?>
     

    Gruss
    Hanspeter

    karsta.de

    • Experte
    • Beiträge: 3.082
    Re: Uhrzeit eingeben
    Antwort #5 am: 09. Juni 2016, 14:07:50
    Zitat
    Danke, mir war entgangen, dass damit auch Uhrzeiten umgesetzt werden können.

    Allerdings ist mir aufgefallen, dass der Code in admin/includes/javascript/jQueryDateTimePicker/datepicker.js.php ein wenig unlogisch ist.

    Ich habe das jetzt auch mal getestet, man kann ja in der Datei admin/includes/javascript/jQueryDateTimePicker/datepicker.js.php
    timepicker:false, auf true stellen und format:'Y-m-d' um format:'Y-m-d H:i:s' erweitern. Das funktioniert super in der admin/specials.php, admin/banner_manager.php und auch für das Erscheinungsdatum (products_date_available) in der admin/modules/new_product.php nur in der admin/modules/categories_specials.php haut er damit die Daten komplett raus. Konnte dafür noch keine Erklärung finden.

    Eigentlich eine super Sache, wenn es auch in der categories_specials.php funktionieren würde.

    webald

    • modified Team
    • Beiträge: 2.795
    Re: Uhrzeit eingeben
    Antwort #6 am: 09. Juni 2016, 16:05:17
    Ich habe mal die Kritik von Hanspeter aufgenommen und das ganz felxibler gestaltet. Setzt man für di Variablen unten Werte im Code bevor man den Datepicker einbindet kann man die Ausgabe gestalten.
    Code: PHP  [Auswählen]
            //jQueryDatepicker
            $step_timepicker = '15';
            require (DIR_WS_INCLUDES.'javascript/jQueryDateTimePicker/datepicker.js.php');
     
    erzeugt eine 15 Minuten Staffelung - oder jede andere.

    Code: PHP  [Auswählen]
    <?php  ....
    $disable_datepicker = ((strlen($disable_datepicker) == 0) ? '1' : $disable_datepicker);
    $disable_timepicker = ((strlen($disable_timepicker) == 0) ? '1' : $disable_timepicker);
    $format_datepicker =  ((strlen($format_datepicker) == 0) ? 'Y-m-d' : $format_datepicker);
    $format_timepicker = ((strlen($format_timepicker) == 0) ? 'H:i' : $format_timepicker);
    $format_datetimepicker = ((strlen($format_datetimepicker) == 0) ? 'Y-m-d H:i' : $format_datetimepicker);
    $dayOfWeekStart =  ((strlen($dayOfWeekStart) == 0) ? '1' : $dayOfWeekStart);
    $step_timepicker = ((strlen($step_timepicker) == 0) ? '60' : $step_timepicker);

    ?>
    <link type="text/css" href="includes/javascript/jQueryDateTimePicker/jquery.datetimepicker.css" rel="stylesheet" />
    <script type="text/javascript" src="includes/javascript/jQueryDateTimePicker/jquery.datetimepicker.full.min.js"></script>
    <script type="text/javascript">
      $(document).ready(function(){
        $.datetimepicker.setLocale('<?php echo $_SESSION["language_code"]; ?>');    
                           
                            // Date only
                            $('#Datepicker1').datetimepicker({
                              dayOfWeekStart:<?php echo $dayOfWeekStart; ?>,
                              timepicker:false,
                              format:'<?php echo $format_datepicker; ?>'
                            });
                            $('#Datepicker2').datetimepicker({
                              dayOfWeekStart:<?php echo $dayOfWeekStart; ?>,
                              timepicker:false,
                              format:'<?php echo $format_datepicker; ?>'
                            });    
                            $('#Datepicker3').datetimepicker({
                              dayOfWeekStart:<?php echo $dayOfWeekStart; ?>,
                              timepicker:false,
                              format:'<?php echo $format_datepicker; ?>'
                            });    
       
                            // Date and Time
                            $('#DateTimepickerStep1').datetimepicker({
                              dayOfWeekStart:<?php echo $dayOfWeekStart; ?>,
                              format:'<?php echo $format_datetimepicker; ?>',
                              step:<?php echo $step_timepicker; ?>
                            });    
                            $('#DateTimepickerStep2').datetimepicker({
                              dayOfWeekStart:<?php echo $dayOfWeekStart; ?>,
                              format:'<?php echo $format_datetimepicker; ?>',
                              step:<?php echo $step_timepicker; ?>
                            });    
       
                            // Time only
                            $('#TimepickerStep1').datetimepicker({
                              dayOfWeekStart:<?php echo $dayOfWeekStart; ?>,
                              datepicker:false,
                              format:'<?php echo $format_timepicker; ?>',
                              step:<?php echo $step_timepicker; ?>
                            });    
                            $('#TimepickerStep2').datetimepicker({
                              dayOfWeekStart:<?php echo $dayOfWeekStart; ?>,
                              datepicker:false,
                              format:'<?php echo $format_timepicker; ?>',
                              step:<?php echo $step_timepicker; ?>
                            });    

       // specials
    // sollte dann weg
        $('#DatepickerSpecials').datetimepicker({
          dayOfWeekStart:1,
          timepicker:false,
          format:'Y-m-d'
        });
        $('#DatepickerSpecialsStart').datetimepicker({
          dayOfWeekStart:1,
          timepicker:false,
          format:'Y-m-d'
        });  
        // product
        $('#DatepickerProduct').datetimepicker({
          dayOfWeekStart:1,
          timepicker:false,
          format:'Y-m-d'
        });
      });
    </script>
     

    karsta.de

    • Experte
    • Beiträge: 3.082
    Re: Uhrzeit eingeben
    Antwort #7 am: 10. Juni 2016, 13:21:36
    Zitat
    /categories_specials.php haut er damit die Daten komplett raus. Konnte dafür noch keine Erklärung finden.

    Erklärung gefunden:
    Habe in der admin\includes\classes\categories.php folgendes geändert.
    suchen:
    Code: PHP  [Auswählen]
    $expires_date = isset($products_data['specials_expires']) && !empty($products_data['specials_expires']) ? date('Y-m-d H:i:s', strtotime($products_data['specials_expires'].' 23:59:59')) : '';
          $start_date = isset($products_data['specials_start']) && !empty($products_data['specials_start']) ? date('Y-m-d H:i:s', strtotime($products_data['specials_start'].' 00:00:00')) : '';

    geändert:
    Code: PHP  [Auswählen]
    $expires_date = isset($products_data['specials_expires']) && !empty($products_data['specials_expires']) ? date('Y-m-d H:i:s', strtotime($products_data['specials_expires'])).' 23:59:59' : '';
          $start_date = isset($products_data['specials_start']) && !empty($products_data['specials_start']) ? date('Y-m-d H:i:s', strtotime($products_data['specials_start'])).' 00:00:00' : '';

    Nun funktioniert es auch die Uhrzeit für Sonderangebote explizit einzugeben. Entscheidend für das korrekte Abspeichern war, die Klammern zu versetzen.
    Einfach super, wenn man über den Admin die Zeit bei jedem Artikel festlegen kann.

    hpzeller

    • Experte
    • Beiträge: 4.130
    • Geschlecht:
    Re: Uhrzeit eingeben
    Antwort #8 am: 10. Juni 2016, 13:35:16
    Hallo kgd,

    funktioniert denn jetzt nach deiner Codeanpassung im Backend die Freigabe bzw. das Sperren der Sonderangebote im Frontend auch auf die Minute genau?

    Gruss
    Hanspeter

    karsta.de

    • Experte
    • Beiträge: 3.082
    Re: Uhrzeit eingeben
    Antwort #9 am: 10. Juni 2016, 13:49:11
    Das müßte ich testen. Gebe dann Bescheid.
    Aber mir ist beim Arbeiten an den Uhrzeiten für Sonderangebote ein schwerwiegender Fehler in der specials.php aufgefallen.

    Bearbeitet man die Sonderangebote(über die specials.php) z.B. Anzahl der Angebote wird der Preis neu berechnet, weil beim Öffnen des Angebots ein falscher Preis in das Preisfeld geschrieben wird. (obwohl brutto Preis festgelegt ist, wird der eingegebene Wert als Nettowert behandet. Daraus wird dann, vohergehenden brutto-Preis + Mwst)

    Ist auch so im Demoshop nachvollziehbar.

    karsta.de

    • Experte
    • Beiträge: 3.082
    Re: Uhrzeit eingeben
    Antwort #10 am: 10. Juni 2016, 14:01:18
    Getestet, funktioniert auf die Sekunde genau.

    web0null

    • Experte
    • Beiträge: 1.998
    Re: Uhrzeit eingeben
    Antwort #11 am: 10. Juni 2016, 15:28:28
    @kgd, dein Beitrag #7 stimmt nicht ganz.
    Code: PHP  [Auswählen]
    date('Y-m-d H:i:s', strtotime($products_data['specials_start'])).' 00:00:00'
    Dabei kommt folgendes heraus, 2016-07-07 00:00:00 00:00:00
    ...da wird die Uhrzeit, falls sie nicht mitgegeben wurde, automatisch aufgefüllt (mit 00:00:00).
    Das heißt es kommt immer ein Datum mit Uhrzeit zurück, da darf dann nichts mehr dran gehängt werden.

    Wenn die Daten ohne Uhrzeit kommen ist die "alte Version" schon richtig.
    Code: PHP  [Auswählen]
    date('Y-m-d H:i:s', strtotime($products_data['specials_start'].' 00:00:00'))
    ...dann kommt z. B. 2016-07-07 und die ' 00:00:00' werden dran gehängt.

    Wenn die Daten mit Uhrzeit kommen muss es so sein.
    Code: PHP  [Auswählen]
    date('Y-m-d H:i:s', strtotime($products_data['specials_start']))
    ...dann kommt z. B. 2016-07-07 00:00:00 und die ' 00:00:00' dürfen nicht dran gehängt werden.

    Nur nebenbei,
    Das ist überflüssig
    Code: PHP  [Auswählen]
    isset($products_data['xxx']) && !empty($products_data['xxx'])

    es reicht
    Code: PHP  [Auswählen]
    !empty($products_data['xxx'])

    Gruß

    karsta.de

    • Experte
    • Beiträge: 3.082
    Re: Uhrzeit eingeben
    Antwort #12 am: 10. Juni 2016, 15:41:31
    Ok, danke.
    Werde es dann gleich mal korrigieren.

    hpzeller

    • Experte
    • Beiträge: 4.130
    • Geschlecht:
    Re: Uhrzeit eingeben
    Antwort #13 am: 10. Juni 2016, 19:47:08
    Getestet, funktioniert auf die Sekunde genau.

     :thumbs:

    Persönlich halte ich die Möglichkeit die Zeit zusätzlich zum Datum eingeben zu können, insbesondere bei Sonderangeboten, für ein sehr nützliches Feature, damit hat man die Möglichkeit im Shop ein Schnäppchen zeitlich streng limitiert zu schalten, so wie man das bei anderen Shop des öfteren ja auch sieht.

    Ich hoffe das dieses Feature in die nächste Shopversion mit aufgenommen wird.

    Gruss
    Hanspeter

    web28

    • modified Team
    • Beiträge: 9.404
    Re: Uhrzeit eingeben
    Antwort #14 am: 13. Juni 2016, 17:55:19
    1. Die Speicherroutine muss angepasst werden:
    Überprüfung ob eine Uhrzeit mit übergeben wurde, eine Möglichkeit wäre die Länge des Strings zu prüfen, bei > 10 ist eine Uhrzeit dabei.

    2. Einleseroutine muss wohl auch angepasst werden:
    In meinem Denoshop habe ich das Problem wenn das übergebene Format nicht mit dem Format im Datepicker übereinstimmt, bei Klick in das Inputfeld nur das aktuelle Datum geladen wird und nicht das vorher eingestellte.
    Übergabeformat ist z.B. 'Y-m-d H:i:s' und im Datepicker 'Y-m-d H:i'
    0 Antworten
    1552 Aufrufe
    19. Januar 2014, 19:18:49 von Dewitt
    0 Antworten
    1522 Aufrufe
    11. April 2013, 11:19:56 von magicpepper
    4 Antworten
    2481 Aufrufe
    31. Januar 2018, 14:00:52 von andrusch
    1 Antworten
    2207 Aufrufe
    30. Januar 2014, 00:57:31 von noRiddle (revilonetz)