ProCalendar, Eventlist, falsches Datenformat

FrankHA

Quote from: 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
[[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
[[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) :-) :-) :-)

sternchen8875

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
[[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
[[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

sternchen8875

#11
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

[[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

[[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


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



hgs

Quote from: FrankHA on February 02, 2023, 02:54:39 PM
WebsiteBaker-Version= 2.13.3 r166
php-Version= 8.1
ProCalendar-Version=v1.8.0

[[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
LG Harald

"Fange nie an, aufzuhören - höre nie auf, anzufangen." Marcus Tullius Cicero (106-43 v.Chr.)

hgs

Zum vergleichen hier schon mal meins
$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>";
LG Harald

"Fange nie an, aufzuhören - höre nie auf, anzufangen." Marcus Tullius Cicero (106-43 v.Chr.)

sternchen8875

Zeig mal bitte diese Zeile 20 des Droplets oder die Zeilen drum herum auch

FrankHA

WebsiteBaker-Version= 2.13.3 r166
php-Version= 8.1
ProCalendar-Version=v1.8.0

[[eventlist?section_id=12&max=5]]

hgs

Ok, Grundlagenabfragen
WebsiteBaker-Version= ?
php-Version = ?
ProCalendar-Version = ?
Und mit welchem Aufruf wird das Droplet eingebunden
Bei mir sieht es ja so aus
[[eventlist?section_id=xx&flags=5&days=14]]
LG Harald

"Fange nie an, aufzuhören - höre nie auf, anzufangen." Marcus Tullius Cicero (106-43 v.Chr.)

FrankHA

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""

hgs

#4
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
$dateformat    = ($dateformat ?? 'd.m H:i'); // Standard php date formats 'd-m-Y'
geändert

$dateformat    = ($dateformat ?? 'd.m.Y H:i'); // Standard php date formats 'd-m-Y'
Auf der Testseite zum nachschauen schon geändert
LG Harald

"Fange nie an, aufzuhören - höre nie auf, anzufangen." Marcus Tullius Cicero (106-43 v.Chr.)

ruebenwurzel

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?

hgs

Also meine Seite sieht das so aus
Testseite /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:
[[eventlist?section_id=xx&flags=5&days=14]]

Damit bekomme ich die nächsten 14 Tage vom aktuellen Datum an angezeigt.
LG Harald

"Fange nie an, aufzuhören - höre nie auf, anzufangen." Marcus Tullius Cicero (106-43 v.Chr.)

FrankHA

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
Zu sehen auf der rechten Seitenleiste.

Vielen Dank schon einmal für Eure Hilfe  :-)