News: When asking for support, it helps us and you, if you read the Posting Guidelines

Login  |  Register
HTML5 Icon HTML5 Icon HTML5 Icon
TP on Social Media
Welcome, Guest. Please login or register.
Did you miss your activation email?

December 10, 2019, 04:17:33 AM

Login with username, password and session length

Recent

Members
Stats
  • Total Posts: 189279
  • Total Topics: 20775
  • Online Today: 111
  • Online Ever: 629
  • (November 08, 2018, 01:36:54 PM)
Users Online
Users: 0
Guests: 58
Total: 58

Author Topic: MiniCalender integration and linking  (Read 492 times)

0 Members and 1 Guest are viewing this topic.

Offline Wichtlmex

  • Full Member
  • ***
  • Posts: 100
MiniCalender integration and linking
« on: May 16, 2019, 05:35:25 AM »
I have seen a minicalender block where all events are listed below the calender in just a short text line and each one with a link to the calender.... how can this be done (in general the documentation of the calender seems quite "minimal" ;-)

SMF 2.1 RC1, TP 1.6.3

Offline @rjen

  • Support Team
  • *
  • Posts: 1931
    • FJR-club Nederland
Re: MiniCalender integration and linking
« Reply #1 on: May 16, 2019, 07:02:00 AM »
You may have seen it on my site... this is an adaptation of the mini calendar that I made myself...

Paste below code into a PHP block... there is dutch text in there that you will need to translate, no guarantees, no warranty...  ;)

Code: [Select]
global $scripturl, $smcFunc;

$now = time();
$today = date('j',$now);
$year = date("Y",$now);
$month = date("n",$now);
$days = array($today => array(NULL, NULL, '<a class="smalltext" style="color: steelblue; font-weight: bold; border: solid 1px black; background-color: white; padding: 0px 3px 0px 3px;" href="'.$scripturl.'?action=calendar;sa=view;month='.$month.';year='.$year.';day='.$today.'" target="_self">'.$today.'</a>'));

$day_name_length = 2;
$month_href = $scripturl . '?action=calendar';
$first_day = 1;
$pn = array();

$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   = $smcFunc['htmlspecialchars'](ucfirst($month_name)).' '.$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="smalltext">'.($pl ? '<a href="'.htmlspecialchars($pl).'">'.$p.'</a>' : $p).'</span> ';
if($n)
$n = ' <span class="smalltext">'.($nl ? '<a href="'.htmlspecialchars($nl).'">'.$n.'</a>' : $n).'</span>';
$calendar = '<table>'."\n".
'<caption >'.$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 class="smalltext" abbr="'.htmlentities($d).'" style="padding: 4px 2px;">'.htmlentities($day_name_length < 4 ? substr($d,0,$day_name_length) : $d).'</th>';

$calendar .= "</tr>\n<tr style=\"text-align:right;\">";
}

if($weekday > 0)
$calendar .= '<td class="smalltext" colspan="'.$weekday.'"> </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 style=\"text-align:right;\">";
}
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).'" style="padding:1px 6px 1px 1px;">' : ' style="padding:1px 6px 1px 1px;">').
($link ? '<a href="'.htmlspecialchars($link).'?">'.$content.'</a>' : $content).'</td>';
}
else
{
$calendar .= "<td class=\"smalltext\" style=\"padding:1px 6px 1px 1px;\"><a";
if(((($weekday+$first_day) % 7)==0)||((($weekday+$first_day) % 7)==6))
{
$calendar .= ' style="color:#C00000;"';
}
$calendar .= " href=\"".$scripturl."?action=calendar;sa=view;month=".$month.";year=".$year.";day=".$day."\" target=\"_self\">$day</a></td>";
}
}
if($weekday != 7)
$calendar .= '<td class="smalltext" colspan="'.(7-$weekday).'"> </td>'; //remaining "empty" days

echo $calendar."</tr>\n</table>\n";

echo '<br/>';
$result = ssi_todaysEvents('array');

if (!empty($result))
{
   echo '<div class="smalltext"><b>Planned events:</b></div>';
   echo '<div class="supersmalltext">';
   foreach ($result as $event)
      {
      $temp = explode('-', $event['date']);
      $event['date'] = $temp[2] . '-' . $temp[1] . '-' . $temp[0];
    echo '<a href="' . $event['href'] . '">' . $event['date'] . ' : ' . $event['title'] . '</a><br />';
      }
   echo '</div>';
}
else
{
      echo '<div class="supersmalltext">No events found.<br /><br /></div>';
  }
Running TP1.6.4 on SMF2.0 at: www.fjr-club.nl

Testing TP on SMF2.0
Testing TP on SMF2.1 RC2
Want to check what php version I am testing on? See: PHP Info

Offline Wichtlmex

  • Full Member
  • ***
  • Posts: 100
Re: MiniCalender integration and linking
« Reply #2 on: May 16, 2019, 07:16:47 AM »
WOW, Great, thanks.
I used "setlocale" to fix it a bit language setting (I need Spanish). The TP language setting does not work, but that is a minor glitch.

Anyway, you should publish your mod.... it is SUPER!
 
SMF 2.1 RC1, TP 1.6.3

Offline Wichtlmex

  • Full Member
  • ***
  • Posts: 100
Re: MiniCalender integration and linking
« Reply #3 on: May 25, 2019, 11:06:56 AM »
Hi @jren:

I modified your code.... just in order to get the spanish short day names:

Code: [Select]
global $scripturl, $smcFunc;
setlocale(LC_TIME,"es_ES");

Do you have any idea, why the saturday ("Sa") is not showing up?
SMF 2.1 RC1, TP 1.6.3

Offline lurkalot

  • Administrator
  • *
  • Posts: 6355
    • Camera Craniums
Re: MiniCalender integration and linking
« Reply #4 on: May 26, 2019, 03:15:06 AM »

I modified your code.... just in order to get the spanish short day names:


Do you have any idea, why the saturday ("Sa") is not showing up?

Was it working before you modified it?  The stock mini calendar shows the Saturday just fine.

Offline Wichtlmex

  • Full Member
  • ***
  • Posts: 100
Re: MiniCalender integration and linking
« Reply #5 on: May 26, 2019, 09:36:11 AM »
Yes, setting English setlocale back, it works fine!
Something in Spanisch must be weird!
SMF 2.1 RC1, TP 1.6.3