WebsiteBaker Community Forum

WebsiteBaker Support (2.13.x) => General Help & Support => Hilfe & Support (deutsch) => Topic started by: FrankHA on February 02, 2023, 10:20:40 AM

Title: ProCalendar, Eventlist, falsches Datenformat
Post by: FrankHA on February 02, 2023, 10:20:40 AM
Hallo Zusammen,

ich habe jetzt auf die neueste WB-Version upgedatet und auch entsprechende Module erneuert.
So nutze ich das Droplet Eventlist von ProCalendar.
Bei mir wird aber anstelle der Jahreszahl die Uhrzeit angegeben.
Wie kann ich das ändern?

www.nordwestdeutscher-philatelistenverband.de (http://www.nordwestdeutscher-philatelistenverband.de)
Zu sehen auf der rechten Seitenleiste.

Vielen Dank schon einmal für Eure Hilfe  :-)
Title: Re: ProCalendar, Eventlist, falsches Datenformat
Post by: hgs on February 02, 2023, 12:00:10 PM
Also meine Seite sieht das so aus
Testseite (https://efg.umojasingers.de/) /WebsiteBaker 2.13.3 | php 8.1.13 | ProCalendar 1.8.0
Das Droplet "eventlist" wird mit dem Modul mitgeliefert. Die alten vorandenen Droplet, die es da mal gab, laufen mit dieser Version nicht
Der Monat und das Jahr steht als Überschrift über der ListeDer Aufruf im Template lautet:
Code: [Select]
[[eventlist?section_id=xx&flags=5&days=14]]Damit bekomme ich die nächsten 14 Tage vom aktuellen Datum an angezeigt.
Title: Re: ProCalendar, Eventlist, falsches Datenformat
Post by: ruebenwurzel on February 02, 2023, 12:53:48 PM
Hallo,

ist das aktuell mitgelieferte Droplet aktiv, oder das einer vorangegangenen version? Falls ein älteres noch aktiv ist, hilft es vielleicht auch das droplet auf das neueste zu aktualisieren. Ich kenne den Procalender nicht. Wird das Droplet aus dem Modulverzeichnis des Calendars aufgerufen oder ist es ein in Dropletmodul importiertes Droplet?
Title: Re: ProCalendar, Eventlist, falsches Datenformat
Post by: hgs on February 02, 2023, 01:49:33 PM
Im Droplet die zn 20 so ergänzen, dann wir das Jahr 4 Stellig ausgegeben.
Das .Y muss in dieser Codezeile hinzugefügt werden.
Großes Y = 4stellig.
kleines y = 2stellig.
Original
Code: [Select]
$dateformat    = ($dateformat ?? 'd.m H:i'); // Standard php date formats 'd-m-Y'geändert

Code: [Select]
$dateformat    = ($dateformat ?? 'd.m.Y H:i'); // Standard php date formats 'd-m-Y'Auf der Testseite (https://efg.umojasingers.de/) zum nachschauen schon geändert
Title: Re: ProCalendar, Eventlist, falsches Datenformat
Post by: FrankHA on February 02, 2023, 02:07:19 PM
Habe ich jetzt geändert, dann kommt folgende Fehlermeldung:

Thu, 02 Feb 2023 12:59:26 +0000 [E_USER_NOTICE] /modules/procalendar/functions.php:[1258] from /modules/procalendar/functions.php:[1258] trigger_error "[1258] Can't call ShowActionEntry section_id = 12 count(action) = 1 id = 133 day = 1 show = 0 dayview = 0""
Title: Re: ProCalendar, Eventlist, falsches Datenformat
Post by: hgs on February 02, 2023, 02:32:34 PM
Ok, Grundlagenabfragen
WebsiteBaker-Version= ?
php-Version = ?
ProCalendar-Version = ?
Und mit welchem Aufruf wird das Droplet eingebunden
Bei mir sieht es ja so aus
Code: [Select]
[[eventlist?section_id=xx&flags=5&days=14]]
Title: Re: ProCalendar, Eventlist, falsches Datenformat
Post by: FrankHA on February 02, 2023, 02:54:39 PM
WebsiteBaker-Version= 2.13.3 r166
php-Version= 8.1
ProCalendar-Version=v1.8.0

Code: [Select]
[[eventlist?section_id=12&max=5]]
Title: Re: ProCalendar, Eventlist, falsches Datenformat
Post by: sternchen8875 on February 02, 2023, 02:59:29 PM
Zeig mal bitte diese Zeile 20 des Droplets oder die Zeilen drum herum auch
Title: Re: ProCalendar, Eventlist, falsches Datenformat
Post by: hgs on February 02, 2023, 03:02:05 PM
Zum vergleichen hier schon mal meins
Code: [Select]
$oReg = bin\WbAdaptor::getInstance();
$database = $oDb = $oReg->getDatabase();
$wb = $oReg->getApplication();
$oTrans = $oReg->getTranslate();
$oTrans->enableAddon('modules\\procalendar');
if (!defined('PHP_TAB')){define("PHP_TAB", "\t");}
if (!defined('PHP_TAB2')){define("PHP_TAB2", "\t\t");}
if (!defined('PHP_TAB3')){define("PHP_TAB3", "\t\t\t");}
if (!function_exists('fillActionArray')){require(WB_PATH."/modules/procalendar/functions.php");}
$page_id       = 0;
$page_link     = '';
$eventlist     = '';
$sOldMonth     = 0;
$sNewMonth     = 0;
$year          = ((isset($year)  && $year)   ? intval($year)  : date('Y'));
$month         = ((isset($month) && $month)  ? intval($month) : 1);
$days          = ((isset($days)  && $days)   ? intval($days)  : 0);
$flags         = ((isset($flags) && $flags)  ? $flags : 1);
// Set dateformat to suit your needs, add timeformat if needed
$dateformat    = ($dateformat ?? 'd.m.y H:i'); // Standard php date formats 'd-m-Y'
$startnow      = $flags & 1;   //  BIT #0  = 1
$bTimeEnd      = $flags & 2;   //  BIT #1  = 2
$bMonthHeading = $flags & 4;   //  BIT #2  = 4
$iDateWidth    = ($bTimeEnd ? 140 : 90);
if (isset($year) && $year) {
//    $month = ((isset($month) && empty($month)) ? '1' : $month);
    $t1      = (($year > date('Y')) ? strtotime($year.'-'.$month.'-01') : time());
//    $t1      = strtotime($year.'-'.$month.'-01');
    $t2      = strtotime($year.'-12-31');
    $diff    = (floor(abs($t2-$t1)));
    $divisor = 86400; # a day has 24*60*60 sec
    $days    = isset($days) && $days ? $days : (floor($diff / $divisor));
//    $time = time (); date('Y-n-j',$t2)
//    $part = $time - $time % $divisor;
    $aTimeDiff = [
        'year'=> $year,
        'month'=> $month,
        'act_year'=> date('Y'),
        'start_date'=> date('Y-m-d',$t1),
        'end_date'=> date('Y-m-d',$t2),
        'days'=> $days,
    ];
}
$fixdays    = isset($days);
//$startnow   = isset($startnow)        ? intval($startnow)   : 0;
$max        = isset($max) && $max     ? intval($max)        : 1000;
//$section_id = isset($section_id)      ? intval($section_id) : 0 ;
// Fetch base page link
if ($section_id != 0) {
    $sql  = 'SELECT `p`.`link` FROM `'.TABLE_PREFIX.'sections` `s` '
          . 'INNER JOIN `'.TABLE_PREFIX.'pages` `p` ON (`s`.`page_id` = `p`.`page_id`) '
          . 'WHERE `s`.`section_id` = '.$section_id.' ';
    if (($link = $oDb->get_one($sql))){
      $page_link = $wb->page_link($link);
    }
}
// Set start- and end date for query
$datestart = ($startnow ? date('Y-m-d') : $year.'-'.$month.'-1');
$sParm1    = date('Y-m-d', strtotime("+".($days-1)." day"));
$sParm2    = date('Y-n-j', strtotime($datestart." + ".($days-1)." day"));
$sRequest1 = ("$year-$month-".($days < cal_days_in_month(CAL_GREGORIAN, $month,$year)));
$sParam3   = cal_days_in_month(CAL_GREGORIAN, $month,$year);
$dateend   = ($startnow ? $sParm1 : ($fixdays ? $sParm2 : ($sRequest1 ? $days : $sParam3)));
/*  */
if (isset($archive)) {
    $dateend   = date('Y-n-j');
    $datestart = date('Y-n-j', strtotime(" ".($days-1)." day"));
}
$aDebug = [
        'year' => $year,
        'month' => $month,
        'days' => $days,
        'datestart' => $datestart,
        'dateend' => $dateend,
        'date_start' => date('Y-n-j', strtotime(" ".($days-1)." day")),
        'date_end' => date('Y-n-j'),
    ];
$eventlist .= '<div class="info_body" style="text-align:left;font-family:sans-serif,monospace;">';
// Fetch the items
if (!isset($actions) || (isset($actions) && empty($actions))){
    $actions  = fillActionArray($datestart, $dateend, $section_id);
}
if (is_array($actions) && sizeof($actions)){
    $eventlist .= '<ul class="event-list w3-ul" style="margin-left:0;padding-left:0;list-style-type: none !important;">'.PHP_EOL;
    $sOldMonth = strtotime($datestart);
    $sNewMonth = 0;
    if ($bMonthHeading && ($year) || ($bMonthHeading && (date('m',$sNewMonth) != date('m',$sOldMonth)))){
        $iMonth = date('n',$sOldMonth);
        $sTmpMonat = "monthnames_".$iMonth;
        $sMonthName = $oTrans->$sTmpMonat;
        $eventlist .= '<li class="event-header"><h4>'.$sMonthName.' '.date('Y',$sOldMonth).'</h4></li>'.PHP_EOL;
    }
    foreach($actions as $row){
        if ($max > 0) {
            if (!isset($kat) || (isset($kat) && in_array($row["acttype"], explode(',',$kat)))) {
                $max--;
                $ds = ($row['date_start'].' '.$row['time_start']);
                $de = ($row['date_end']  .' '.$row['time_end']);
                $sNewMonth = strtotime($ds);
                if ($bMonthHeading && (date('m',$sNewMonth) != date('m',$sOldMonth))){
                    $sOldMonth = strtotime($ds);
                    $iMonth = date('n',$sOldMonth);
                    $sTmpMonat = "monthnames_".$iMonth;
                    $sMonthName = $oTrans->$sTmpMonat;
                    $eventlist .= '<li class="event-header"><h4>'.$sMonthName.' '.date('Y',$sOldMonth).'</h4></li>'.PHP_EOL;
                }
                // Build url like : pages/kalendar.php?year=1900&month=01&day=03&id=2&detail=1
                $page_url = $page_link.'?year='.(substr($ds,0,4)).'&month='.(substr($ds,5,2)).'&day='.(substr($ds,8,2)).'&id='.$row['id'].'&amp;detail=1';
                $datetime_start = mktime(substr($ds,11,2),substr($ds,14,2),0,substr($ds,5,2),substr($ds,8,2),substr($ds,0,4));
                $datetime_end   = mktime(substr($de,11,2),substr($de,14,2),0,substr($de,5,2),substr($de,8,2),substr($de,0,4));
                $time_end       = ($bTimeEnd ? ' - '.(substr($de,11,2).':'.substr($de,14,2)) : '');
                $eventlist .= '<li class="eventlist" style="padding:4px 0;">'.PHP_EOL;
                $eventlist .= PHP_TAB.'<div class="w3-display-container">'.PHP_EOL;
                if ($bTimeEnd && ($datetime_start != $datetime_end)) {
                    $eventlist .= PHP_TAB2.'<span style="width:'.$iDateWidth.'px;" class="c_date1 w3-display-topleft" >'.date($dateformat,$datetime_start).' -'.date('H:i',$datetime_end).'</span>'.PHP_EOL;
                } else {
                    $eventlist .= PHP_TAB2.'<span style="width:'.$iDateWidth.'px;" class="c_date2 w3-display-topleft" >'.date($dateformat,$datetime_start).$time_end.'</span>'.PHP_EOL;
                }
                $eventlist .= PHP_TAB.'<span style="margin:0px;display:inline-block;">'.PHP_EOL.PHP_TAB2.'<a href="'.$page_url.'">'.PHP_EOL.PHP_TAB3.'<span class="c_name"><b>'.$row["name"].'</b></span>'.PHP_EOL.PHP_TAB2.'</a>'.PHP_EOL.PHP_TAB.'</span>'.PHP_EOL;
                $eventlist .= PHP_TAB.'</div>'.PHP_EOL;
                if ($row["custom1"]) {
                    $eventlist .= PHP_TAB.'<div class="c_desc">'.$row["custom1"].'</div>'.PHP_EOL;
                }
                $eventlist .= '</li>'.PHP_EOL;
                }
            }
    } // end for
    $eventlist .= '</ul>';
}
return $eventlist .= "</div>";
Title: Re: ProCalendar, Eventlist, falsches Datenformat
Post by: hgs on February 02, 2023, 03:12:12 PM
WebsiteBaker-Version= 2.13.3 r166
php-Version= 8.1
ProCalendar-Version=v1.8.0

Code: [Select]
[[eventlist?section_id=12&max=5]]

Ich habe jetzt mal deinen Aufruf mit meiner sid ins Template eingefügt.

Das läuft ohne Fehlermeldungen und ich sehe nur noch 5 Termine mit Jahreszahl
Title: Re: ProCalendar, Eventlist, falsches Datenformat
Post by: sternchen8875 on February 02, 2023, 03:37:44 PM
Nur, weil es zum Thema passt...

Möglichkeit 1 zur Formatierung ist die Anpassung im Droplet, so wie von hgs beschrieben. Angepasst wird dabei der hier rot markierte Teil nachfolgender Zeile
Quote
$dateformat    = ($dateformat ?? 'd.m.y H:i');
Diese Datumsformatierung gilt dann für alle Ausgaben, die über den Dropletaufruf ausgegeben werden

Möglichkeit 2 ist individuell für jeden Aufruf anpassbar. Dabei verbleibt der Code im Droplet so, wie es das Original vorsieht. Angepasst wird aber der Dropletaufruf. Als Beispiel

Code: [Select]
[[eventlist?section_id=XX&flags=X&days=XX&dateformat='F j, Y, g:i a'&year=23&month=02]]
Hinweis: während bei einer Änderung im Droplet-Code die Hochkommas zwingend erforderlich sind, spielt es beim Dropletaufruf keine Rolle, dort funktioniert die Datumsformatierung auch ohne Hochkommas

Code: [Select]
[[eventlist?section_id=XX&flags=X&days=XX&dateformat=d.m.Y&year=23&month=02]]ergibt eine Datumsformatierung in dieser Art: March 10, 2001, 5:16 pm

Weitere Möglichkeiten auf dieser Seite -> https://www.php.net/manual/en/function.date.php#refsect1-function.date-parameters

andere Varianten findet man z.b. in den Datumseinstellungen der WB-Optionen
(https://i.gyazo.com/3aa8e1c17f7caab9a8262fa1d6ca2205.png)

P..S.: Möglich ist auch eine Kombination aus beiden Varianten (Änderungen im Droplet-Code und Anpassung des Dropletaufrufes). Dabei stellt die Datumsformatierung im Dropletcode immer den Default-Wert dar, der verwendet wird, wenn vom Droplet-Aufruf keine anderen Werte übermittelt werden.
Eine Datumsformatierung im Droplet-Aufruf überschreibt immer den Default-Sert des Droplet-Codes


Title: Re: ProCalendar, Eventlist, falsches Datenformat
Post by: sternchen8875 on February 02, 2023, 03:58:03 PM
In den Beispielen des letzten Beitrages sind die Ausgabedarstellung des ersten Beispiels unter den zweiten Aufruf gerutscht und lassen sich auf Grund der Zeitsperre nicht mehr korrigieren, darum noch einmal korrekt

Der Droplet-Call mit dieser Datumsformatierung
Code: [Select]
[[eventlist?section_id=XX&flags=X&days=XX&dateformat='F j, Y, g:i a'&year=23&month=02]]ergibt diese Datumsausgabe -> March 10, 2001, 5:16 pm

das zweite Beispiel
Code: [Select]
[[eventlist?section_id=XX&flags=X&days=XX&dateformat=d.m.Y&year=23&month=02]]ergibt die in Deutschland eher gebräuchliche Datumsausgabe -> 02.02.2022
Title: Re: ProCalendar, Eventlist, falsches Datenformat
Post by: FrankHA on February 02, 2023, 04:26:23 PM
In den Beispielen des letzten Beitrages sind die Ausgabedarstellung des ersten Beispiels unter den zweiten Aufruf gerutscht und lassen sich auf Grund der Zeitsperre nicht mehr korrigieren, darum noch einmal korrekt

Der Droplet-Call mit dieser Datumsformatierung
Code: [Select]
[[eventlist?section_id=XX&flags=X&days=XX&dateformat='F j, Y, g:i a'&year=23&month=02]]ergibt diese Datumsausgabe -> March 10, 2001, 5:16 pm

das zweite Beispiel
Code: [Select]
[[eventlist?section_id=XX&flags=X&days=XX&dateformat=d.m.Y&year=23&month=02]]ergibt die in Deutschland eher gebräuchliche Datumsausgabe -> 02.02.2022

Super, mit der direkten Droplet-Call Datumsformatierung funktioniert es,
vielen lieben Dank Dir und auch den anderen Kommentatoren
für die tolle und schnelle Hilfe.  (Y) :-) :-) :-)