Author Topic: Droplet -> Generate_Calender  (Read 47496 times)

Offline tiesy

  • Posts: 125
    • Wir in Wallenhorst
Re: Droplet -> Generate_Calender
« Reply #25 on: November 17, 2009, 07:01:38 PM »
OK, I found out one thing (and yes, with your code not opened with Word, WebBird! ):

on a WB2.7-installation (online) the "n"s are shown.
on a WB2.8-installation (xampp) there are no "n"s. Everything is right there 

Where is the problem, deleting all "\n" in the calendar_droplet.ph p? Without them, it works in 2.7 and 2.8


Offline pcwacht

  • Posts: 2923
  • Gender: Male
    • Dutch ICT info
Re: Droplet -> Generate_Calender
« Reply #26 on: November 18, 2009, 08:25:50 AM »
The \n only generates a linebreak in your html source, not in your output on your screen.
It is only there for source reading purposes

It is safe to delete them all.

Have fun,
John
http://www.ictwacht.nl = Dutch ICT info
http://www.pcwacht.nl = My first
both still work in progress, since years.....

WebBird

  • Guest
Re: Droplet -> Generate_Calender
« Reply #27 on: November 18, 2009, 10:47:57 AM »
I tried with 2.7 and can confirm that. Seems to be a bug in the Droplets module.

Edit: Found this in line 59 of the droplets.php:

Code: [Select]
$content = stripslashes($fetch_content['code']);

Droplets 1.0.1 (WB 2.8 ) does this:

Code: [Select]
$codedata = ($fetch_content['code']);

So, the problem is caused by the droplets module. There are two ways to get around it:

* Remove all \-thingies from droplet codes (ALL droplet codes!)
* Correct the Droplets module (remove "stripslashes" in line 59)

But, I think the best way is: Upgrade to 2.8!
« Last Edit: November 18, 2009, 10:56:59 AM by WebBird »

Offline tiesy

  • Posts: 125
    • Wir in Wallenhorst
Re: Droplet -> Generate_Calender
« Reply #28 on: November 24, 2009, 04:27:55 PM »
Ok, I think the mysterious "\n"-problem is solved so far. I have a little enhancement that shows a tooltip with the short decscription of the calendar entries. That was easy to do, only add the "title"-attribute to "a href":

Change line:
Code: [Select]
$days[ $row['day'] ] = array( NULL, NULL, "<span style='font-weight: bold; border: 1px solid #f00;'><a href='".$row['url']."' target='_blank'>".$row['day']."</a></span>" );
To:
Code: [Select]
$days[ $row['day'] ] = array( NULL, NULL, "<span style='font-weight: bold; border: 1px solid #f00;'><a href='".$row['url']."' title='".$row['descr']."'  target='_blank'>".$row['day']."</a></span>" );


What would make it to a really very nice droplet:
- make previous and next-Links work
- automatically link (not hardcoded) to the page where the Event Calendar-Module is placed.


WebBird

  • Guest
Re: Droplet -> Generate_Calender
« Reply #29 on: November 24, 2009, 06:21:56 PM »
- make previous and next-Links work

Sorry, but this is not possible with Droplets.

Edit: You may include the droplet more than once to have the previous and next month shown, too.

- automatically link (not hardcoded) to the page where the Event Calendar-Module is placed.

An easy way is to set a variable in the droplet.


taurus66

  • Guest
Re: Droplet -> Generate_Calender
« Reply #30 on: January 17, 2010, 07:18:30 PM »
Hi Webbird,

l like this Droplet a lot!

Little Problem: The Droplet doesn't switch to German, it stays in english.
Something I could have done wrong?
Eventcalendar -as all parts of my site www.sft98.de runs in german.

Thanks,

Bernd
« Last Edit: February 02, 2010, 08:02:19 PM by mr-fan »

Offline pcwacht

  • Posts: 2923
  • Gender: Male
    • Dutch ICT info
http://www.ictwacht.nl = Dutch ICT info
http://www.pcwacht.nl = My first
both still work in progress, since years.....

taurus66

  • Guest
Re: Droplet -> Generate_Calender
« Reply #32 on: January 17, 2010, 08:20:14 PM »

Offline pcwacht

  • Posts: 2923
  • Gender: Male
    • Dutch ICT info
Re: Droplet -> Generate_Calender
« Reply #33 on: January 17, 2010, 08:37:41 PM »
At that post there is an explanation how to set this droplet to work with German-time  output

John
http://www.ictwacht.nl = Dutch ICT info
http://www.pcwacht.nl = My first
both still work in progress, since years.....

WebBird

  • Guest
Re: Droplet -> Generate_Calender
« Reply #34 on: January 18, 2010, 10:21:03 AM »
Hi Webbird,

l like this Droplet a lot!

Thank you, but please note that the droplet was provided by "pcwacht". I only added the "Events" binding. ;)

taurus66

  • Guest
Re: Droplet -> Generate_Calender
« Reply #35 on: January 18, 2010, 07:17:20 PM »
Hi Webbird,

l like this Droplet a lot!

Thank you, but please note that the droplet was provided by "pcwacht". I only added the "Events" binding. ;)

Oooops, sorry Webbird, sorry pcwacht.  :roll:

Quote
At that post there is an explanation how to set this droplet to work with German-time  output

Ahhh, ok, unterstand. I have these lines in the Droplet. Shouldn't that work?

$locale          = 'de_DE';

if ( isset( $locale ) ) {
    // store old locale
    $oldlocale = setlocale(LC_TIME, NULL); #save current locale
    setlocale( LC_TIME, $locale );
}


Offline pcwacht

  • Posts: 2923
  • Gender: Male
    • Dutch ICT info
Re: Droplet -> Generate_Calender
« Reply #36 on: January 18, 2010, 08:16:22 PM »
Yups it should
What it does is it tells php date and time output should be in German format

Look here for more info and other locale entries

http://nl2.php.net/manual/en/function.setlocale.php

Especially this might be interesting:
http://nl2.php.net/manual/en/function.setlocale.php#77795
http://nl2.php.net/manual/en/function.setlocale.php#62748

And here some more info :
http://www.freeopenbook.com/php5manual/function.setlocale.html


Good luck,
John
http://www.ictwacht.nl = Dutch ICT info
http://www.pcwacht.nl = My first
both still work in progress, since years.....

WebBird

  • Guest
Re: Droplet -> Generate_Calender
« Reply #37 on: January 19, 2010, 11:32:49 AM »
You can try to check the correct locale setting adding this code AFTER the code you quoted above:

Code: [Select]
echo "Current locale setting: ", setlocale(LC_TIME, NULL), "<br />";

WebBird

  • Guest
Re: Droplet -> Generate_Calender
« Reply #38 on: January 28, 2010, 05:37:44 PM »
I found that the locale is resetted BEFORE the month name is generated. So do the following:

FIND (~line 68)
Code: [Select]
// reset locale
setlocale(LC_TIME, $oldlocale);

CUT and INSERT AFTER:

Code: [Select]
$title   = htmlentities(ucfirst($month_name)).'&nbsp;'.$year;  #note that some locales don't capitalize month and day names

(After cutting, about 4 lines later.)

Complete new code I am working with:

Code: [Select]
global $wb, $database;

$days = array();
$day_name_length = 2;
$month_href = NULL;
$where = NULL;
$first_day = 1;
$pn = array();
$events = 0;

$oldlocale = setlocale(LC_TIME, NULL); #save current locale
setlocale(LC_TIME, 'de_DE');

if(!isset($year))  {$year  = date('Y', time()); };
if(!isset($month)) {$month = date('n', time()); };
if ( isset( $section ) ) { $where = "AND section_id='$section'"; }

$today = date('j',time());

// Get Events from "Event Calendar" Module (1.8c)
$sql    = "SELECT DAY(date) AS day, event_desc AS descr, evweb_url AS url FROM ".TABLE_PREFIX."mod_event_dates WHERE YEAR(date) = '$year' AND MONTH(date) = '$month' $where";
$result = $database->query($sql);
if ( $result->numRows() > 0 ) {
    while( $row = $result->fetchRow() ) {
        $text = $row['day'];
        if ( ! empty( $row['descr'] ) ) {
            $text .= ' <span>'.$row['descr'].'</span>';
        }
        if ( ! empty( $row['url'] ) ) {
            $days[ $row['day'] ]
                = array(
                      NULL,
                      NULL,
                      "<span style='font-weight: bold; border: 1px solid #f00;'>"
                    . "<a class='tooltip' href='".$row['url']."' target='_blank'>"
                    . $text
                    . "</a></span>"
                  );
        }
        else {
            $days[ $row['day'] ]
                = array(
                      NULL,
                      NULL,
                      "<span style='font-weight: bold; border: 1px solid #f00;'>"
                    . "<a class='tooltip' href='#'>"
                    . $text
                    . "</a></span>"
                  );
        }
        $events++;
    }
}

if ( ! isset( $days[$today] ) ) {
    $days[$today] = array( NULL, 'calendar-today' );
}

$first_of_month = gmmktime(0,0,0,$month,1,$year);
#remember that mktime will automatically correct if invalid dates are entered
# for instance, mktime(0,0,0,12,32,1997) will be the date for Jan 1, 1998
# this provides a built in "rounding" feature to generate_calendar()

$day_names = array(); #generate all the day names according to the current locale
for($n=0,$t=(3+$first_day)*86400; $n<7; $n++,$t+=86400) #January 4, 1970 was a Sunday
   $day_names[$n] = ucfirst(gmstrftime('%A',$t)); #%A means full textual day name

list($month, $year, $month_name, $weekday) = explode(',',gmstrftime('%m,%Y,%B,%w',$first_of_month));
$weekday = ($weekday + 7 - $first_day) % 7; #adjust for $first_day
$title   = htmlentities(ucfirst($month_name)).'&nbsp;'.$year;  #note that some locales don't capitalize month and day names

// reset locale
setlocale(LC_TIME, $oldlocale);

#Begin calendar. Uses a real <caption>. See http://diveintomark.org/archives/2002/07/03
@list($p, $pl) = each($pn); @list($n, $nl) = each($pn); #previous and next links, if applicable
if($p) $p = '<span class="calendar-prev">'.($pl ? '<a href="'.htmlspecialchars($pl).'">'.$p.'</a>' : $p).'</span>&nbsp;';
if($n) $n = '&nbsp;<span class="calendar-next">'.($nl ? '<a href="'.htmlspecialchars($nl).'">'.$n.'</a>' : $n).'</span>';
$calendar = '<table class="calendar">'."\n".
   '<caption class="calendar-month">'.$p.($month_href ? '<a href="'.htmlspecialchars($month_href).'">'.$title.'</a>' : $title).$n."</caption>\n<tr>";

if($day_name_length){ #if the day names should be shown ($day_name_length > 0)
   #if day_name_length is >3, the full name of the day will be printed
   foreach($day_names as $d)
      $calendar .= '<th abbr="'.htmlentities($d).'">'.htmlentities($day_name_length < 4 ? substr($d,0,$day_name_length) : $d).'</th>';
   $calendar .= "</tr>\n<tr>";
}

if($weekday > 0) $calendar .= '<td colspan="'.$weekday.'">&nbsp;</td>'; #initial 'empty' days
for($day=1,$days_in_month=gmdate('t',$first_of_month); $day<=$days_in_month; $day++,$weekday++){
   if($weekday == 7){
      $weekday   = 0; #start a new week
      $calendar .= "</tr>\n<tr>";
   }
   if(isset($days[$day]) and is_array($days[$day])){
      @list($link, $classes, $content) = $days[$day];
      if(is_null($content))  $content  = $day;
      $calendar .= '<td'.($classes ? ' class="'.htmlspecialchars($classes).'">' : '>').
         ($link ? '<a href="'.htmlspecialchars($link).'">'.$content.'</a>' : $content).'</td>';
   }
   else $calendar .= "<td>$day</td>";
}
if($weekday != 7) $calendar .= '<td colspan="'.(7-$weekday).'">&nbsp;</td>'; #remaining "empty" days
$calendar .= "</tr>\n</table><br />\n";

if ( $events == 0 ) {
    $calendar .= 'Keine Termine f&uuml;r diesen Monat.<br />';
}
else {
    $calendar .= $events.' '.'Termin'
              .  ( $events > 1 ? 'e' : '' )
              .  ' f&uuml;r diesen Monat.<br />';
}

return $calendar;


Offline crnogorac081

  • Posts: 2101
  • Gender: Male
Re: Droplet -> Generate_Calender
« Reply #39 on: January 28, 2010, 09:08:02 PM »
Is it possible to have a droplet inside droplet, for example something like:

Code: [Select]
$pn              = array('&lt;'=>'[[evcal?year=$year&month=$month-1]]','&gt;'=>'[[evcal?year=$year&month=$month+1]]');


And somehow like this to generate prev and next links :)

BTW droplet is great !!! It would be nice to have something like this for news and topics modules as well..
Web developer

WebBird

  • Guest
Re: Droplet -> Generate_Calender
« Reply #40 on: January 29, 2010, 10:50:33 AM »
Stefek made a topic version of this droplet. Try the Forum Search.

taurus66

  • Guest
Re: Droplet -> Generate_Calender
« Reply #41 on: February 05, 2010, 03:11:28 PM »
You can try to check the correct locale setting adding this code AFTER the code you quoted above:

Code: [Select]
echo "Current locale setting: ", setlocale(LC_TIME, NULL), "<br />";

Hi Webbird,

System tells me "Current locale setting: C"

Gruß,

Bernd

taurus66

  • Guest
Re: Droplet -> Generate_Calender
« Reply #42 on: February 05, 2010, 03:13:31 PM »
I found that the locale is resetted BEFORE the month name is generated. So do the following:

FIND (~line 68)
Code: [Select]
// reset locale
setlocale(LC_TIME, $oldlocale);

CUT and INSERT AFTER:

Code: [Select]
$title   = htmlentities(ucfirst($month_name)).'&nbsp;'.$year;  #note that some locales don't capitalize month and day names

(After cutting, about 4 lines later.)


No, this doesn't work, too  :-(

WebBird

  • Guest
Re: Droplet -> Generate_Calender
« Reply #43 on: February 05, 2010, 03:40:59 PM »
Are you sure you did it right?

taurus66

  • Guest
Re: Droplet -> Generate_Calender
« Reply #44 on: February 05, 2010, 05:09:39 PM »
Are you sure you did it right?

I'm only sure, that 'm not sure  :-D
Here's the code I took from you and changed as you told ... I hope I did

Code: [Select]
global $wb, $database;

$days = array();
$day_name_length = 2;
$month_href = NULL;
$where = NULL;
$first_day = 1;
$pn = array();
$events = 0;

$oldlocale = setlocale(LC_TIME, NULL); #save current locale
setlocale(LC_TIME, 'de_DE');

if(!isset($year))  {$year  = date('Y', time()); };
if(!isset($month)) {$month = date('n', time()); };
if ( isset( $section ) ) { $where = "AND section_id='$section'"; }

$today = date('j',time());

// Get Events from "Event Calendar" Module (1.8c)
$sql    = "SELECT DAY(date) AS day, event_desc AS descr, evweb_url AS url FROM ".TABLE_PREFIX."mod_event_dates WHERE YEAR(date) = '$year' AND MONTH(date) = '$month' $where";
$result = $database->query($sql);
if ( $result->numRows() > 0 ) {
    while( $row = $result->fetchRow() ) {
        $text = $row['day'];
        if ( ! empty( $row['descr'] ) ) {
            $text .= ' <span>'.$row['descr'].'</span>';
        }
        if ( ! empty( $row['url'] ) ) {
            $days[ $row['day'] ] = array(NULL,NULL,"<span style='font-weight: bold; border: 1px solid #f00;'>"."<a class='tooltip' href='http://www.sft98.de/pages/kalender.php'>".$row['day']."</a></span>" );
        }
        else {
            $days[ $row['day'] ] = array(NULL,NULL,"<span style='font-weight: bold; border: 1px solid #f00;'>"."<a class='tooltip' href='http://www.sft98.de/pages/kalender.php'>".$row['day']."</a></span>");
        }
        $events++;
    }
}

if ( ! isset( $days[$today] ) ) {
    $days[$today] = array( NULL, 'calendar-today' );
}

$first_of_month = gmmktime(0,0,0,$month,1,$year);
#remember that mktime will automatically correct if invalid dates are entered
# for instance, mktime(0,0,0,12,32,1997) will be the date for Jan 1, 1998
# this provides a built in "rounding" feature to generate_calendar()

$day_names = array(); #generate all the day names according to the current locale
for($n=0,$t=(3+$first_day)*86400; $n<7; $n++,$t+=86400) #January 4, 1970 was a Sunday
   $day_names[$n] = ucfirst(gmstrftime('%A',$t)); #%A means full textual day name

list($month, $year, $month_name, $weekday) = explode(',',gmstrftime('%m,%Y,%B,%w',$first_of_month));
$weekday = ($weekday + 7 - $first_day) % 7; #adjust for $first_day

$title = htmlentities(ucfirst($month_name)).'&nbsp;'.$year;  #note that some locales don't capitalize month and day names
// reset locale
setlocale(LC_TIME, $oldlocale);

#Begin calendar. Uses a real <caption>. See http://diveintomark.org/archives/2002/07/03
@list($p, $pl) = each($pn); @list($n, $nl) = each($pn); #previous and next links, if applicable
if($p) $p = '<span class="calendar-prev">'.($pl ? '<a href="'.htmlspecialchars($pl).'">'.$p.'</a>' : $p).'</span>&nbsp;';
if($n) $n = '&nbsp;<span class="calendar-next">'.($nl ? '<a href="'.htmlspecialchars($nl).'">'.$n.'</a>' : $n).'</span>';
$calendar = '<table class="calendar">'."\n".
   '<caption class="calendar-month">'.$p.($month_href ? '<a href="'.htmlspecialchars($month_href).'">'.$title.'</a>' : $title).$n."</caption>\n<tr>";

if($day_name_length){ #if the day names should be shown ($day_name_length > 0)
   #if day_name_length is >3, the full name of the day will be printed
   foreach($day_names as $d)
      $calendar .= '<th abbr="'.htmlentities($d).'">'.htmlentities($day_name_length < 4 ? substr($d,0,$day_name_length) : $d).'</th>';
   $calendar .= "</tr>\n<tr>";
}

if($weekday > 0) $calendar .= '<td colspan="'.$weekday.'">&nbsp;</td>'; #initial 'empty' days
for($day=1,$days_in_month=gmdate('t',$first_of_month); $day<=$days_in_month; $day++,$weekday++){
   if($weekday == 7){
      $weekday   = 0; #start a new week
      $calendar .= "</tr>\n<tr>";
   }
   if(isset($days[$day]) and is_array($days[$day])){
      @list($link, $classes, $content) = $days[$day];
      if(is_null($content))  $content  = $day;
      $calendar .= '<td'.($classes ? ' class="'.htmlspecialchars($classes).'">' : '>').
         ($link ? '<a href="'.htmlspecialchars($link).'">'.$content.'</a>' : $content).'</td>';
   }
   else $calendar .= "<td>$day</td>";
}
if($weekday != 7) $calendar .= '<td colspan="'.(7-$weekday).'">&nbsp;</td>'; #remaining "empty" days
$calendar .= "</tr>\n</table><br />\n";

if ( $events == 0 ) {
    $calendar .= 'Keine Termine f&uuml;r diesen Monat.<br /><br />';
}
else {
    $calendar .= $events.' '.'Termin'
              .  ( $events > 1 ? 'e' : '' )
              .  ' f&uuml;r diesen Monat.<br /><br />';
}

return $calendar;


WebBird

  • Guest
Re: Droplet -> Generate_Calender
« Reply #45 on: February 06, 2010, 06:25:17 PM »
Hm, looks okay. And works for me. :? Don't know what's wrong. Maybe your webserver doesn't implement that locale. :? Just don't know.

taurus66

  • Guest
Re: Droplet -> Generate_Calender
« Reply #46 on: February 06, 2010, 06:29:21 PM »
Hm, looks okay. And works for me. :? Don't know what's wrong. Maybe your webserver doesn't implement that locale. :? Just don't know.

Ok, thanks a million anyway.

Offline spoonxaver

  • Posts: 1
Re: Droplet -> Generate_Calender - modification Look Calendar
« Reply #47 on: June 05, 2010, 10:20:57 PM »
Here is my modifikation this droplet:
This modification writte events for actual month inline.
Code: [Select]
global $wb, $database;

$days = array();
$day_name_length = 8;
$month_href = NULL;
$where = NULL;
$first_day = 1;
$pn = array();
$events = 0;

$oldlocale = setlocale(LC_TIME, NULL); #save current locale
setlocale(LC_TIME, 'en_EN');

if(!isset($year))  {$year  = date('Y', time()); };
if(!isset($month)) {$month = date('n', time()); };
if ( isset( $section ) ) { $where = "AND section_id='$section'"; }

$today = date('j',time());

// Get Events from "Event Calendar" Module (1.8c)
$sql    = "SELECT DAY(date) AS day, date AS mesic, event_desc AS descr, evweb_url AS url FROM ".TABLE_PREFIX."mod_event_dates WHERE YEAR(date) = '$year' AND MONTH(date) = '$month' $where";
$result = $database->query($sql);
if ( $result->numRows() > 0 ) {
    while( $row = $result->fetchRow() ) {
        $text = $row['mesic'];
$textMonth = $row['mesic'];
        if ( ! empty( $row['descr'] ) ) {
            $text .= ' <span>'.$row['descr'].'</span>';
        }
        if ( ! empty( $row['url'] ) ) {
            $days[ $row['day'] ]
                = array(
                      NULL,
                      NULL,
                      "<span class='menuCalendar'>"
                    . "<a href='".$row['url']."' title='".$row['descr']."'  target='_blank'>".$row['textMonth']."</a></span>"
                  );
        }
        else {
            $days[ $row['day'] ]
                = array(
                      NULL,
                      NULL,
                     "<span class='menuCalendar'>"
                    . "<a class='tooltip' href='#'>"
                    . $text
                   // . $textMonth
                    . "</a></span>"
                  );
        }
        $events++;
    }
}

if ( ! isset( $days[$today] ) ) {
    $days[$today] = array( NULL, 'calendar-today' );
}

$first_of_month = gmmktime(0,0,0,$month,1,$year);
#remember that mktime will automatically correct if invalid dates are entered
# for instance, mktime(0,0,0,12,32,1997) will be the date for Jan 1, 1998
# this provides a built in "rounding" feature to generate_calendar()

$day_names = array(); #generate all the day names according to the current locale
for($n=0,$t=(3+$first_day)*86400; $n<7; $n++,$t+=86400) #January 4, 1970 was a Sunday
   $day_names[$n] = ucfirst(gmstrftime('%A',$t)); #%A means full textual day name

list($month, $year, $month_name, $weekday) = explode(',',gmstrftime('%m,%Y,%B,%w',$first_of_month));
$weekday = ($weekday + 7 - $first_day) % 7; #adjust for $first_day
$title   = htmlentities(ucfirst($month_name)).'&nbsp;'.$year;  #note that some locales don't capitalize month and day names

// reset locale
setlocale(LC_TIME, $oldlocale);

#Begin calendar. Uses a real <caption>. See http://diveintomark.org/archives/2002/07/03
@list($p, $pl) = each($pn); @list($n, $nl) = each($pn); #previous and next links, if applicable
if($p) $p = '<span class="calendar-prev">'.($pl ? '<a href="'.htmlspecialchars($pl).'">'.$p.'</a>' : $p).'</span>&nbsp;';
if($n) $n = '&nbsp;<span class="calendar-next">'.($nl ? '<a href="'.htmlspecialchars($nl).'">'.$n.'</a>' : $n).'</span>';
$calendar = '<table class="calendar">'."\n".'<caption class="calendar-month">'.$p.($month_href ? '<a href="'.htmlspecialchars($month_href).'">'.$title.'</a>' : $title).$n."</caption>\n<tr>";
/*
if($day_name_length){ #if the day names should be shown ($day_name_length > 0)
   #if day_name_length is >3, the full name of the day will be printed
   foreach($day_names as $d)
      $calendar .= '<th abbr="'.htmlentities($d).'">'.htmlentities($day_name_length < 4 ? substr($d,0,$day_name_length) : $d).'</th>';
   $calendar .= "</tr>\n<tr class='calendar-month'>";
}
*/
/*if($weekday > 0) $calendar .= '<td colspan="'.$weekday.'">&nbsp;</td>';*/ #initial 'empty' days
for($day=1,$days_in_month=gmdate('t',$first_of_month); $day<=$days_in_month; $day++,$weekday++){
   if($weekday == 7){
      $weekday   = 0; #start a new week
      $calendar .= "</tr>\n<tr>";
   }
  
   if(isset($days[$day]) and is_array($days[$day])){

      @list($link, $classes, $content) = $days[$day];
      if(is_null($content))  $content  = $day;
      $calendar .= '<tr><td'.($classes ? ' class="'.htmlspecialchars($classes).'">' : '>').
         ($link ? '<a href="'.htmlspecialchars($link).'">'.$content.'</a>' : $content).'</td></tr>';
   }

}
#remaining "empty" days
//if($weekday != 7) $calendar .= '<td colspan="'.(7-$weekday).'">&nbsp;</td>';
$calendar .= "</tr>\n</table><br />\n";

if ( $events == 0 ) {
    $calendar .= 'Nothing for this Month.<br />';
}
else {
    $calendar .= $events.' '.'Termins'
              .  ( $events > 1 ? 'e' : '' )
              .  ' for this Month.<br />';
}

return $calendar;
« Last Edit: June 06, 2010, 11:59:47 AM by spoonxaver »

Offline BlackBird

  • Posts: 2573
Re: Droplet -> Generate_Calender
« Reply #48 on: June 05, 2010, 10:30:39 PM »
Please explain your modification. What did you do? Why?

Offline capt_funk

  • Posts: 2
  • Gender: Male
    • SC Villip
Re: Droplet -> Generate_Calender
« Reply #49 on: April 10, 2012, 03:40:25 PM »
I modified the droplet some to display the upcoming events (next 7 days) beneath the calendar. This droplet shows the weekday and the title of the event from the Envent Calendar.
Code: [Select]
global $wb, $database;

$days = array();
$day_name_length = 2;
$month_href = NULL;
$first_day = 1;
$pn = array();

$oldlocale = setlocale(LC_TIME, NULL); #save current locale
setlocale(LC_TIME, 'de_DE');

if(!isset($year))  {$year  = date('Y', time()); };
if(!isset($month)) {$month = date('n', time()); };

// Get Events from "Event Calendar" Module (1.8c)
$sql    = "SELECT DAY(date) AS day, event_desc AS descr, evweb_url AS url FROM ".TABLE_PREFIX."mod_event_dates WHERE YEAR(date) = '$year' AND MONTH(date) = '$month'";
$result = $database->query($sql);
if ( $result->numRows() > 0 ) {
    while( $row = $result->fetchRow() ) {
        if ( ! empty( $row['url'] ) ) {
            $days[ $row['day'] ] = array( NULL, NULL, "<span style='font-weight: bold; color: #006;'><a href='".$row['url']."' target='_blank'>".$row['day']."</a></span>" );
        }
        else {
            $days[ $row['day'] ] = array( NULL, NULL, "<span style='font-weight: bold; color: #006;'>".$row['day']."</span>" );
        }
    }
}

$first_of_month = gmmktime(0,0,0,$month,1,$year);
#remember that mktime will automatically correct if invalid dates are entered
# for instance, mktime(0,0,0,12,32,1997) will be the date for Jan 1, 1998
# this provides a built in "rounding" feature to generate_calendar()

$day_names = array(); #generate all the day names according to the current locale
for($n=0,$t=(3+$first_day)*86400; $n<7; $n++,$t+=86400) #January 4, 1970 was a Sunday
   $day_names[$n] = ucfirst(gmstrftime('%A',$t)); #%A means full textual day name
 
// reset locale
setlocale(LC_TIME, $oldlocale);

list($month, $year, $month_name, $weekday) = explode(',',gmstrftime('%m,%Y,%B,%w',$first_of_month));
$weekday = ($weekday + 7 - $first_day) % 7; #adjust for $first_day
$title   = htmlentities(ucfirst($month_name)).'&nbsp;'.$year;  #note that some locales don't capitalize month and day names

#Begin calendar. Uses a real <caption>. See http://diveintomark.org/archives/2002/07/03
@list($p, $pl) = each($pn); @list($n, $nl) = each($pn); #previous and next links, if applicable
if($p) $p = '<span class="calendar-prev">'.($pl ? '<a href="'.htmlspecialchars($pl).'">'.$p.'</a>' : $p).'</span>&nbsp;';
if($n) $n = '&nbsp;<span class="calendar-next">'.($nl ? '<a href="'.htmlspecialchars($nl).'">'.$n.'</a>' : $n).'</span>';
$calendar = '<table width=140 class="calendar">'."\n".
   '<caption class="calendar-month" style="font-weight: bold;">'.$p.($month_href ? '<a href="'.htmlspecialchars($month_href).'">'.$title.'</a>' : $title).$n."</caption>\n<tr>";

if($day_name_length){ #if the day names should be shown ($day_name_length > 0)
   #if day_name_length is >3, the full name of the day will be printed
   foreach($day_names as $d)
      $calendar .= '<th style="font-size: 10px; font-weight: normal;" abbr="'.htmlentities($d).'">'.htmlentities($day_name_length < 4 ? substr($d,0,$day_name_length) : $d).'</th>';
   $calendar .= "</tr>\n<tr>";
}

if($weekday > 0) $calendar .= '<td colspan="'.$weekday.'">&nbsp;</td>'; #initial 'empty' days
for($day=1,$days_in_month=gmdate('t',$first_of_month); $day<=$days_in_month; $day++,$weekday++){
   if($weekday == 7){
      $weekday   = 0; #start a new week
      $calendar .= "</tr>\n<tr>";
   }
   if(isset($days[$day]) and is_array($days[$day])){
      @list($link, $classes, $content) = $days[$day];
      if(is_null($content))  $content  = $day;
      $calendar .= '<td'.($classes ? ' class="'.htmlspecialchars($classes).'">' : '>').
         ($link ? '<a href="'.htmlspecialchars($link).'">'.$content.'</a>' : $content).'</td>';
   }
   else $calendar .= "<td>$day</td>";
}
if($weekday != 7) $calendar .= '<td colspan="'.(7-$weekday).'">&nbsp;</td>'; #remaining "empty" days

$month_events=array();
$today=date('j')."<br>\n";
$weekday=date('N');
$days_de=array("Mo","Di","Mi","Do","Fr","Sa","So");
$sql="SELECT DAY(date) AS day, event_desc AS descr, evweb_url AS url FROM ".TABLE_PREFIX."mod_event_dates WHERE YEAR(date) = '$year' AND MONTH(date) = '$month'";
$result=$database->query($sql);
while($row=$result->fetchrow()){
$temp=date('N',mktime(0,0,0,$month,$row['day'],$year));
$weekday=$days_de[$temp-1];
$month_events[$row['day']].=substr("<tr><td>$weekday</td><td><span style='font-weight: bold;'>&nbsp;".$row['descr'],0,75)."</span></td></tr>\n";
}
for($i=0;$i<7;$i++){     //get events for the next 7 days
$week_events.=$month_events[$today+$i];
}

return $calendar."</tr>\n</table>\n"."\n<table width=140 cellpadding=0>$week_events\n</table>";

To modify the amout of days ahead displayed under the calendar, modify the for-loop at the end (change 7 to whatever you need). An example of the droplet in action can be viewed here: http://scvillip.de/