WBCE CMS Forum

WBCE CMS – Way Better Content Editing.

Du bist nicht angemeldet.

#1 31.01.2019 14:05:31

stephano
Mitglied

Droplets ProCalendar

Hallo,

aktuelle werden Termine auf der Startseite angezeigt für 30 Tage in der Zukunft und 14 Termine.
Aufruf mit

[[EventList?section_id=12&max=14]]

Nun wollte ich das ganze auf 90 Tage erweitern.
So steht es dann da

[[EventList?section_id=12&max=14&days=90]]

Funktioniert nicht.
Dann habe ich in das Droplet geschaut

[== PHP ==]
//
// Shows an event list from procalendar >= 1.3
// usage: [[eventlist?section_id=<xx>&max=<xx>&kat=<xx>,<xx>&days=<xx>&year=<xx>&month=<xx>&startnow=1]]
// parameters:
// 	 section_id : Section id from procalendar module
// on default all events of the current month are shown but you can custumize by using options:
//   max (integer) 		: limits event list to max items (if no other limit is reached already)
//	 kat (integer) 		: only show defined kategories, kat ids can be found in prcalendar backend options
//											more than one kategorie can be used by seperating ids with commas (no spaces) 
//   days (integer) 	: limits event list to items for <days> (if no other limit is reached already)
// 	 year (integer) 	: year of start date
// 	 month (integer)	: month of start date
// 	 dateformat (string): fomat of date representation as described in http://www.php.net/manual/en/function.date.php#refsect1-function.date-parameters
// 	 startnow (0/1) 	: 0 or not set = show calendar month, 1 = start at current day
// 	 archive (integer): if set, elapsed events are shown
	
global $database;
require_once(WB_PATH."/modules/procalendar/functions.php");

//define the Names for later rerplacement - replace the german names by your prefered language
$de_month = array(1=>"Januar", "Februar", "M&auml;rz", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember");
$de_day = Array(1=>"Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag");

$en_month = array(1=>"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
$en_day = Array(1=>"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday");

$startnow = isset($startnow) ?  intval($startnow) : 0;
$max = isset($max) ? intval($max) : 10000;
$days = isset($days) ? intval($days) : 100;
$year = isset($year) ? intval ($year) : date('Y', time());
$month = isset($month) ? intval($month) : date('n', time());
$section_id = isset($section_id) ? intval($section_id) : 0 ;

// Set dateformat to suit your needs, add timeformat if needed
$dateformat = 'l j F Y'; // Standard php date formats

// Fetch base page link
$page_id = 2;
$page_link ='';

if ($section_id<>0) { 
  $sql = "SELECT link FROM ".TABLE_PREFIX."sections AS s, ".TABLE_PREFIX."pages AS p WHERE s.section_id = '".$section_id."' AND s.page_id = p.page_id";
  $page_link = WB_URL.PAGES_DIRECTORY.$database->get_one($sql).PAGE_EXTENSION;
}

// Set start- and end date for query
// Set start- and end date for query
if ($month == date('n', time())){
	$datestart = (date('Y-n-j', time()));
	$dateend = (date('Y-n-j', strtotime('+1Month')));
} else {
	$datestart = "$year-$month-1";
	$dateend = "$year-$month-".cal_days_in_month(CAL_GREGORIAN, $month,$year);
}

$mod_list = '<table style="border-collapse: collapse;">';

// Fetch the items
if (!isset($actions) || empty($actions))
  $actions  = fillActionArray($datestart, $dateend, $section_id);

if (is_array($actions)){
	foreach($actions as $row){
		if ($max > 0) {
			if (!isset($kat) || (isset($kat) && in_array($row["acttype"], explode(',',$kat)))) {
			   $max--;
			   // Build url like : pages/kalendar.php?id=2&detail=1    
			   $page_url = $page_link.'?id='.$row['id'].'&amp;detail=1';
			   $ds = $row['date_start']." ".substr($row['time_start'],0,5);
			   $de = $row['date_end']." ".substr($row['time_end'],0,5);
			   $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));
			   if ($datetime_start<> $datetime_end) {  
			      // mit Start und Ende Terminanzeige orginal Zeile $mod_list .= '<tr style="background-color: '.$row["act_format"].'"><td><span class="c_date">'.date($dateformat,$datetime_start).' - '.date($dateformat,$datetime_end) .'</span> &nbsp;</td> ';
			      $mod_list .= '<tr style="background-color: '.$row["act_format"].'"><td style="width: 200px"><span class="c_date">'.date($dateformat,$datetime_start).'</span> &nbsp;</td> ';
			   } else {
			      $mod_list .= '<tr style="background-color: '.$row["act_format"].'"><td style="width: 200px"><span class="c_date">'.date($dateformat,$datetime_start).'</span> &nbsp;</td> ';
			   }	
			   $mod_list .= '<tr style="background-color: '.$row["act_format"].'"><td style="width: 200px"><a href="'.$page_url.'"><span class="c_name"><b>'.$row["name"].'</b></span></a></td></tr>';
			   $mod_list .= '<td><div class="c_desc">'.$row["custom1"].'</div></td>';
			   $mod_list .= "</tr>";
			}
		}
	}
}
// replace the English by German Names
$mod_list = str_replace($en_month, $de_month, $mod_list);
$mod_list = str_replace($en_day, $de_day, $mod_list);

return $mod_list."</table><hr>";

hier dann bei days 100 Tage eingetragen.
Es funktioniert immer noch nicht.

Wo könnten diese 30 Tage noch eingetragen sein?

Offline

#2 31.01.2019 16:07:01

bernd
Developer

Re: Droplets ProCalendar

Zunächst einmal die Werte im Droplet (z.B. 100 für days) sind Vorgabe-Werte die nur gelten, wenn beim Droplet-Aufruf keine Paramter übergeben werden.

Laut der Kommentare im Droplet beeinflussen sich "days" und "max" gegenseitig.
Da wäre es schön, wenn du dein "funktioniert nicht" etwas genauer definieren könntest:
Was (wieviel) wird bei welchem Aufruf angezeigt.
Und auchmal probieren was passiert wenn du beim Aufruf sowohl max als auch days wegläßt damit die Vorgabe-Werte greifen.


... nein in Europa verwenden wir beim Programmieren nicht € statt $ ...

Offline

#3 31.01.2019 16:16:11

mrbaseman
Developer

Re: Droplets ProCalendar

oder beides beim Aufruf des Droplets erhöhen. Wenn in den nächsten 30 Tagen schon 14 Termine drin sind, werden auch keine weiteren mehr angezeigt, auch wenn in den darauffolgenden 60 Tagen noch welche eingetragen wären

Offline

#4 31.01.2019 17:03:38

stephano
Mitglied

Re: Droplets ProCalendar

Danke für die Antwort.

Funktioniert nicht bedeutet es wird hier nur die nächsten 30 Tage angezeigt. Dabei kann ich den Programmaufruf ohne max und day eingeben und dabei beim Droplet  dies eingeben

[== PHP ==]
$days = isset($days) ? intval($days) : 100; //30 Tage war Original

Ausgabe sind die nächsten 30 Tage alle Termine wenn Max entfernt wurde.
Test1 = Anzeige 30 Tage

[== PHP ==]
[[EventList?section_id=12&days=90]]

Test 2 = Anzeige 30 Tage

[[EventList?section_id=12]]

Irgendwo muss doch die 30 Tage Ansicht eingegeben sein im Droplet.

Beitrag geändert von stephano (31.01.2019 17:06:56)

Offline

#5 31.01.2019 17:12:32

bernd
Developer

Re: Droplets ProCalendar

Verstehe ich das richtig?
Wenn du im droplet die 100 angibst und es dann ohne Parameter aufrufst

[[EventList?section_id=1]]

werden trotzdem nur 30 Tage ausgegeben?


... nein in Europa verwenden wir beim Programmieren nicht € statt $ ...

Offline

#6 31.01.2019 17:26:15

stephano
Mitglied

Re: Droplets ProCalendar

Ja so ist es
Im Droplet stehen die 100 Tage drin und Ausgabe ist immer nur die nächsten 30 Tage.

Offline

#7 31.01.2019 18:02:52

bernd
Developer

Re: Droplets ProCalendar

Welche Versionen Procal und Droplets verwendest du, die aktuellen aus dem Addon Repository?


... nein in Europa verwenden wir beim Programmieren nicht € statt $ ...

Offline

#8 31.01.2019 18:22:43

stephano
Mitglied

Re: Droplets ProCalendar

Das Droplet habe ich oben komplett eingefügt.
Ist etwas angepasst Tage und Monate auf Deutsch und Endzeit wurde bei der Ausgabe entfernt.

proCalender 1.3.4  // P.S. habe gerade ein Update auf 1.3.9 durchgeführt. Droplet ist weiterhin das oben angezeigte

Meiner Meinung nach ist doch das Droplet für die Anzeige zuständig. Daher sollte doch im Droplet die Anzeigentage eingegeben werden.

Ich bin kein Programmierer sehe aber zwischen dem Droplet was hier zum Download bereitsteht und dem was ich benutze Unterschiede zwischen
// Set start- and end date for query und // Fetch the items
Dabei fällt mir diese Zeile auf

$dateend = (date('Y-n-j', strtotime('+1Month')));

Sind das die berühmten nächsten 30 Tage?

Beitrag geändert von stephano (31.01.2019 18:34:47)

Offline

#9 31.01.2019 18:36:37

bernd
Developer

Re: Droplets ProCalendar

Das neuere Droplet berechnet das ganze Tagesgeraffel auf eine andere Art, deshalb meine Frage weil ich eben auch in deiner Dropletversion über das +1Month gestolpert bin.

Vergangene Termine sollten eigentlich nicht angezeigt werden solange nicht $archive explizit gesetzt ist.
Des weiteren wäre da noch $startnow - bei 0 beginnt es mit dem aktuellen Kalendermonat, bei 1 mit dem aktuellen Tag.


... nein in Europa verwenden wir beim Programmieren nicht € statt $ ...

Offline

#10 31.01.2019 19:09:02

stephano
Mitglied

Re: Droplets ProCalendar

Danke für die Anregungen
Also ich habe mal auf die Gefahr hin das alles schief geht aus den +1Month +3Month gemacht. Damit geht es.
$startnow stand beim alten Code auch auf 0 und dort wurde kein alter Termin angezeigt

Beide Varianten funktionieren jetzt. Daher die Frage, die ich es oben gelöscht habe. Ist vom neuen Droplet der Code besser geeignet? Oder ist der alte Code weiterhin nutzbar ohne das hier Sicherheitslücken sind?

Offline

#11 31.01.2019 19:23:05

bernd
Developer

Re: Droplets ProCalendar

Also eine Sicherheitslücke würde ich jetzt bei der Verwendung des alten Droplet-Codes nicht wirklich sehen.
Du nimmst dir halt durch das hartcodierte +3Month die Möglichkeit es flexibel einzusetzen.
Wenn das neue Droplet mit Übergabe der Parameter (ohne was im Droplet hart zu codieren) funktioniert würde ich das neue nehmen - mußt halt dann da das deutsche Namen Gedöhns wieder reinfrickeln - aber der Aufwand ist ja überschaubar ;-)


... nein in Europa verwenden wir beim Programmieren nicht € statt $ ...

Offline

Liked by:

stephano

Fußzeile des Forums

up