SimplePortal

Support => International Support => Spanish => Topic started by: Tridrac on March 23, 2009, 07:15:52 PM

Title: Calendario para lateral del Simple Portal
Post by: Tridrac on March 23, 2009, 07:15:52 PM
Hola a tod@s,

A petición de alguien del foro de soporte del SMF, aquí os dejo el código de este estupendo calendario por si fuera de interés (está en castellano y creo que le hice alguna modificación más pero no recuerdo exactamente):

Code: [Select]
/*
Calender DIN1031 Version 06-01-2009-1
This is a costumizable calendar php block
It will show a calendar, and add the Today Events, Holidays and Birthdays.
Normal it's programmed and tested for SMF 1.1.X
I don't use any SSI.php, because all data that needed is loaded.
*/
global $scripturl, $modSettings, $sourcedir, $txt;

//With that you can start the calander on a other day
//-1 = Start on Saturaday, 0 = Start on Sunday, 1 = Start on Monday, 2 = Start on Thusday...
$first_day = 1;

//How many day in future should be shown in the events on today? (If you disable today nothing will work ;D)
$eventes_future = 5;

//Show Weeksnumber? 1 = on 0 = off
$show_weeknumber = 0;

//How long should the day, if the number higher 3 than the complete dayname will be shown
$day_name_length = 0; //0 is short day name 1 is full day name :)

//The background color of days with Events, birthdays or holidays, you can use css colors
$color_background_items_mixed = 'lightblue';
$color_background_items_event = 'lightblue';
$color_background_items_birthday = 'orange';
$color_background_items_holiday = 'lightgreen';

//The textcolor of days with Events, birthdays or holidays, you can use css colors
$color_text_items_mixed = 'steelblue';
$color_text_items_event = 'steelblue';
$color_text_items_birthday = 'steelblue';
$color_text_items_holiday = 'steelblue';

//The Color of the todays background / text
$color_background_today = 'white';
$color_text_today = 'brown';

//The Textcolor for the standard days
$color_text = 'blue';

//The Textcolor for the Sundays
$color_text_sunday = '#C00000';

//The Textcolor for the Week Number
$color_text_week = '#990000';

//If you have a diffrent calender you can change the link to it here
$month_href = $scripturl . '?action=calendar';

//What should the callendar show?
$show_events = 1; //0 No, 1 Yes
$show_birthdays = 1; //0 No, 1 Yes
$show_holidays = 1; //0 No, 1 Yes
//Show the single events and items of the day :)
$show_today = 1; //0 No, 1 Yes

//Dateformat of day you can use %y for year %d for day and %m for month (Only digital numbers!)
$currentDateFormat = '%d/%m';

//This Variable is only for mulitple blocks of this type, please change it only if you know what you do ;)
//If show today disabled than this will not work and is disabled!
$enableJavaScript = 1;
$javascript_idFix = 'calendarDIN1031_';

//Okay please don't do anything here if you not now what you do
/**************************************************************/
// You can't do anything if the calendar is off!
if (empty($modSettings['cal_enabled']))
fatal_lang_error('calendar_off', false);

//First try to make it compatible between versions SMF 1.1 and 2.0 ;) (Not Working, text problems ;P)
if(file_exists($sourcedir . '/Subs-Calendar.php')) {
require_once($sourcedir . '/Subs-Calendar.php');
$smcFunc['getEvents'] = 'getEventRange';
$smcFunc['getBirthdays'] = 'getBirthdayRange';
$smcFunc['getHolidays'] = 'getHolidayRange';
}
else {
require_once($sourcedir . '/Calendar.php');
$smcFunc['getEvents'] = 'calendarEventArray';
$smcFunc['getBirthdays'] = 'calendarBirthdayArray';
$smcFunc['getHolidays'] = 'calendarHolidayArray';
}

//Fix possible mistakes by user
$eventes_future = (int) $eventes_future;
$eventes_future = !empty($eventes_future) ? abs($eventes_future) : 0;

//Easier and faster to handel =).
$show_weeknumber = !empty($show_weeknumber);

//Enable the Javascript?
$enableJavaScript = !empty($enableJavaScript) && !empty($show_today);

//Built some standard dates
$now = time() + $modSettings['time_offset'] * 3600;
$today = date('j',$now);
$year = date("Y",$now);
$month = date("n",$now);
$days = array();
$pn = array();

$first_of_month = gmmktime(0,0,0,$month,1,$year);

//retrieve this month events, holydays and birthdays
$days_in_month = gmdate('t',$first_of_month);
//Built Month low and high date :)
$low_date = $year.'-'.sprintf('%02d', $month).'-01';
$high_date = $year.'-'.sprintf('%02d', $month).'-'.$days_in_month;

//Permission Checkup
$can_post_calendar = allowedTo('calendar_post');
$calendarDataToday = array('events' => array(), 'birthdays' => array(), 'holidays' => array());
$collectionDays = array(); //This is for the java script build :)
$calendarEventsFuture = array();

$todayDate = date("Y-m-d", time());

//add important days to the days array
if(!empty($show_events)) {
$insert_date = true;
//Special Case the high date of events can be more in the future than normal
$event_future_time = $now + $eventes_future * 86400;
if($eventes_future != 0) {
$month_event = date("n",$event_future_time);
//Next Month?
if($month_event != $month) {
$day_event = date("j",$event_future_time);
$year_event = date("Y",$event_future_time); //This is need, could be possible that this jan next year.
$event_future_date = $year_event.'-'.$month_event.'-'.$day_event;
}
else
$event_future_date = $high_date;
}
else
$event_future_date = $high_date;
$events = $smcFunc['getEvents']($low_date, $event_future_date);
foreach($events as $startdate => $event) {
list($cyear, $cmonth, $cday) = explode('-', $startdate);
$current_timestamp = mktime(0,0,0, $cmonth, $cday, $cyear);
//This insert the today events and future events if they exist
if($startdate == $todayDate || ($current_timestamp >= $now && $current_timestamp <= $event_future_time)) {
if($startdate == $todayDate)
$calendarDataToday['events'] = $event;
else
$calendarEventsFuture[$startdate] = $event;
}
//We must select between create or only show!
$href_calendar = $enableJavaScript ? '#day'.$cday.'" onclick="return '.$javascript_idFix.'selectCalendarDate(\'day'.$cday.'\');' : $month_href;
//Insert only the current informations
if($cmonth == $month) //Next month is not avaible ;)
$days[$cday] = '<a class="smalltext" style="color: '.$color_text_items_event.'; font-weight: bold; background-color: '.$color_background_items_event.'; padding: 0px 4px 0px 4px;" href="'.$href_calendar.'" target="_self">'.$cday.'</a>';
if($cmonth == $month && $startdate != $todayDate)
$collectionDays[$startdate] = $cday;
}
//Correct the order :)
if(!empty($calendarEventsFuture))
ksort($calendarEventsFuture, SORT_NUMERIC);
}
//Add holidays into the day array?
if(!empty($show_birthdays)) {
$birthdays = $smcFunc['getBirthdays']($low_date, $high_date);
foreach($birthdays as $startdate => $birth) {
//This insert the today events if they exist
if($todayDate == $startdate)
$calendarDataToday['birthdays'] = $birth;
$cday = (int) substr($startdate,8,2);
//We must select between create or only show!
$href_calendar = $enableJavaScript ? '#day'.$cday.'" onclick="return '.$javascript_idFix.'selectCalendarDate(\'day'.$cday.'\');' : $month_href;
//Mixed color?
$text_color = !empty($days[$cday]) ? $color_text_items_mixed : $color_text_items_birthday;
$background_color = !empty($days[$cday]) ? $color_background_items_mixed : $color_background_items_birthday;
$days[$cday] = '<a class="smalltext" style="color: '.$text_color.'; font-weight: bold; background-color: '.$background_color.'; padding: 0px 4px 0px 4px;" href="'.$href_calendar.'" target="_self">'.$cday.'</a>';
if($startdate != $todayDate)
$collectionDays[$startdate] = $cday;
}
}
//Add holidays into the day array?
if(!empty($show_holidays)) {
$holidays = $smcFunc['getHolidays']($low_date, $high_date);
foreach($holidays as $startdate => $holiday) {
//This insert the today events if they exist
if($todayDate == $startdate)
$calendarDataToday['holidays'] = $holiday;
$cday = (int) substr($startdate,8,2);
//We must select between create or only show!
$text_color = !empty($days[$cday]) ? $color_text_items_mixed : $color_text_items_holiday;
$background_color = !empty($days[$cday]) ? $color_background_items_mixed : $color_background_items_holiday;
$href_calendar = $enableJavaScript ? '#day'.$cday.'" onclick="return '.$javascript_idFix.'selectCalendarDate(\'day'.$cday.'\');' : $month_href;
$days[$cday] = '<a class="smalltext" style="color: '.$text_color.'; font-weight: bold; background-color: '.$background_color.'; padding: 0px 4px 0px 4px;" href="'.$href_calendar.'" target="_self">'.$cday.'</a>';
if($startdate != $todayDate)
$collectionDays[$startdate] = $cday;
}
}

//So Todays it's an diffrent color :D
$href_calendar = $enableJavaScript ? '#today" onclick="return '.$javascript_idFix.'selectCalendarDate(\'today\');' : $month_href;
$days[$today] = '<a class="smalltext" style="color: '.$color_text_today.'; font-weight: bold; border: solid 1px black; background-color: '.$color_background_today.'; padding: 0px 4px 0px 4px;" href="'.$href_calendar.'" target="_self">'.$today.'</a>';

//Wellcome to the smf way of Day building with existing Language strings :D
$day_names = $txt['days'];
$day_names_short = $txt['days_short'];
//So lets see $firstday = 0 means sunday this is the first day :)
//if there is a higher number than i need to resort them
//negativ values can also be used :)
if(!empty($first_day)) {
if($first_day < 0)
$first_day = 7-(abs($first_day)%7);
else
$first_day = ($first_day%7);
}
if(!empty($first_day)) {
$old = $day_names;
$old_s = $day_names_short;
$day_names = array();
$day_names_short = array();
//Create the new day order :)
for($n=0; $n<7; $n++) {
$c = (($first_day+$n)%7);
$day_names[$n] = $old[$c];
$day_names_short[$n] = $old_s[$c];
}
}

list($month, $year, $weekday) = explode(',',gmstrftime('%m,%Y,%w',$first_of_month));
$weekday = ($weekday + 7 - $first_day) % 7; //adjust for $first_day
$title = $txt['months_titles'][(int) $month].' '.$year;  //This is the SMF Text string, so it should be corrected for utf8 or iso

//Insert the Java Sciptfunction
if($enableJavaScript) {
echo '
<script language="JavaScript" type="text/javascript"><!-- // --><![CDATA[
var '.$javascript_idFix.'current_block = "'.$javascript_idFix.'today";

function '.$javascript_idFix.'selectCalendarDate (day) {
var blockid = "'.$javascript_idFix.'" + day;
if(blockid == '.$javascript_idFix.'current_block) {
return false;
}
document.getElementById('.$javascript_idFix.'current_block).style.display = "none";
'.$javascript_idFix.'current_block = blockid + "";
document.getElementById(blockid).style.display = "block";
return false;
}
// ]]></script>';
}
/* Begin calendar. Uses a real <caption>. See http://diveintomark.org/archives/2002/07/03 */
$calendar = '
<table align="center" style="display:block; width:100%;" width="100%">
<caption>'.($month_href ? '<a href="'.htmlspecialchars($month_href).'">'.$title.'</a>' : $title)."</caption>
<tr>";

//Show the weekday?
if($show_weeknumber)
$calendar .= '
<th class="smalltext" abbr="'.$txt['calendar51'].'">'.$txt['calendar51'].'</th>';

//Put out the Daynames :)
foreach($day_names as $k => $d)
$calendar .= '
<th class="smalltext" abbr="'.$d.'">'.(!empty($day_name_length) ? $d : $day_names_short[$k]).'</th>';
$calendar .= "
</tr>
<tr style=\"text-align:right;\">";

if($show_weeknumber)
$calendar .= '
<td class="smalltext" abbr="'.$txt['calendar51'].'" align="center"><span style="color:'.$color_text_week.'">'.gmdate('W', $first_of_month).'</span></td>';
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>
<tr style=\"text-align:right;\">";
if($show_weeknumber)
$calendar .= '
<td class="smalltext" abbr="'.$txt['calendar51'].'" align="center"><span style="color:'.$color_text_week.'">'.gmdate('W', gmmktime(0,0,0, $month ,$day, $year)).'</span></td>';
}
if(isset($days[$day])){
$calendar .= '
<td>'.$days[$day].'</td>';
}
else
{
$href_calendar = $enableJavaScript ? '#none" onclick="return '.$javascript_idFix.'selectCalendarDate(\'none\');' : $month_href;
$calendar .= "
<td class=\"smalltext\" style=\"padding-right:4px;\"><a";
if(((($weekday+$first_day) % 7)==0))
{
$calendar .= ' style="color:'.$color_text_sunday.';"';
}
$calendar .= " href=\"".$href_calendar."\" target=\"_self\">$day</a></td>";
}
}
if($weekday != 7) $calendar .= '
<td class="smalltext" colspan="'.(7-$weekday).'"> </td>'; //remaining "empty" days

$calendar .= '
</tr>
</table>';
echo $calendar;

if(!empty($show_today)) {
echo '
<div style="display:block; width:100%;" align="center">';
if (!empty($calendarDataToday['events']) || !empty($calendarDataToday['birthdays']) || !empty($calendarDataToday['holidays']) || !empty($calendarEventsFuture)) {
//Standard Output :)
echo '
<table id="'.$javascript_idFix.'today" align="center" style="display:block; width:100%;">';
if(!empty($calendarDataToday['holidays'])){
echo '
<tr>
<td width="15%">
<hr />
</td>
<td class="smalltext" align="center" style="color: ' . $color_text_items_holiday . ';">
<b>Festivos</b>
</td>
<td width="15%">
<hr />
</td>
</tr>
<tr>
<td colspan="3" class="smalltext" style="width:100%;">';
echo implode('<br />', $calendarDataToday['holidays']);
echo '
</td>
</tr>';
}

if(!empty($calendarDataToday['birthdays'])){
echo '
<tr>
<td width="15%">
<hr />
</td>
<td class="smalltext" align="center" style="color: ' . $color_text_items_birthday . ';">
<b>Cumpleaños</b>
</td>
<td width="15%">
<hr />
</td>
</tr>
<tr>
<td colspan="3" class="smalltext" style="width:100%;">';
foreach( $calendarDataToday['birthdays'] as $member )
echo '
<a href="', $scripturl, '?action=profile;u=', $member['id'], '">', $member['name'], isset($member['age']) ? ' (' . $member['age'] . ')' : '', '</a>', '<br />';
echo '
</td>
</tr>';
}

if(!empty($calendarDataToday['events']))
{
$dayOutput = str_replace(array('%y','%m','%d'), explode('-', $todayDate), $currentDateFormat);
echo '
<tr>
<td width="15%">
<hr />
</td>
<td class="smalltext" align="center" style="color: ' . $color_text_items_event . ';">
<b>Eventos ('.$dayOutput.')</b>
</td>
<td width="15%">
<hr />
</td>
</tr>
<tr>
<td colspan="3" class="smalltext" align="left" style="width:100%;">';
foreach ($calendarDataToday['events'] as $event)
{
if ($event['can_edit'])
echo '
<a href="' . $event['modify_href'] . '" style="color: #FF0000;">*</a> ';
echo '
' . $event['link'] . '<br />';
}
echo '
</td>
</tr>';
}
if(!empty($calendarEventsFuture))
{
echo '
<tr>
<td width="15%">
<hr />
</td>
<td class="smalltext" align="center" style="color: ' . $color_text_items_event . ';" style="width:100%;">
<b>Eventos cercanos</b>
</td>
<td width="15%">
<hr />
</td>
</tr>
<tr>
<td colspan="3" class="smalltext" align="left">';
foreach ($calendarEventsFuture as $startdate => $future_events)
{
//Okay tell the user the date of this even...
$dayOutput = str_replace(array('%y','%m','%d'), explode('-', $startdate), $currentDateFormat);
foreach($future_events as $event) {
if ($event['can_edit'])
echo '
<a href="' . $event['modify_href'] . '" style="color: #FF0000;">*</a> ';
echo '
' . $dayOutput . ' ' . $event['link'] . '<br />';
}
}
echo '
</td>
</tr>';
}
echo '
</table>';
}
else
echo '
<table id="'.$javascript_idFix.'today" align="center" width="100%" style="display:block; width:100%;">
<tr>
<td>
<i>(Hoy no hay nada ...)</i>
</td>
</tr>
</table>';

//Okay Start he Java Script insert :)
if($enableJavaScript) {
//First the Table for none ;)
echo '
<table id="'.$javascript_idFix.'none" align="center" width="100%" style="display:none; width:100%;">
<tr>
<td class="smalltext">
<i>(No hay nada)</i>
</td>
</tr>
</table>';
foreach($collectionDays as $startdate => $day) {
echo '
<table id="'.$javascript_idFix.'day'.$day.'" align="center" width="100%" style="display:none; width:100%;">';
if(!empty($holidays[$startdate])){
echo '
<tr>
<td width="15%">
<hr />
</td>
<td class="smalltext" align="center" style="color: ' . $color_text_items_holiday . ';">
<b>Festivos</b>
</td>
<td width="15%">
<hr />
</td>
</tr>
<tr>
<td colspan="3" class="smalltext" style="width:100%;">';
echo implode('<br />', $holidays[$startdate]);
echo '
</td>
</tr>';
}
if(!empty($birthdays[$startdate])){
echo '
<tr>
<td width="15%">
<hr />
</td>
<td class="smalltext" align="center" style="color: ' . $color_text_items_birthday . ';">
<b>Cumpleaños</b>
</td>
<td width="15%">
<hr />
</td>
</tr>
<tr>
<td colspan="3" class="smalltext" style="width:100%;">';
foreach( $birthdays[$startdate] as $member )
echo '
<a href="', $scripturl, '?action=profile;u=', $member['id'], '">', $member['name'], isset($member['age']) ? ' (' . $member['age'] . ')' : '', '</a>', '<br />';
echo '
</td>
</tr>';
}
if(!empty($events[$startdate]))
{
$dayOutput = str_replace(array('%y','%m','%d'), explode('-', $startdate), $currentDateFormat);
echo '
<tr>
<td width="15%">
<hr />
</td>
<td class="smalltext" align="center" style="color: ' . $color_text_items_event . ';">
<b>Eventos ('.$dayOutput.')</b>
</td>
<td width="15%">
<hr />
</td>
</tr>
<tr>
<td colspan="3" class="smalltext" align="left" style="width:100%;">';
foreach ($events[$startdate] as $event)
{
if ($event['can_edit'])
echo '
<a href="' . $event['modify_href'] . '" style="color: #FF0000;">*</a> ';
echo '
' . $event['link'] . '<br />';
}
echo '
</td>
</tr>';
}
echo '
</table>';
}
}
echo '
</div>';
}

Empleo:

Para incorporarlo en tu portal, simplemente crea un bloque de PHP y copia/pega el código.

Nota:

Si leéis las primeras líneas en inglés del código, veréis que se pueden personalizar diferentes aspectos de este calendario: modificar el primer día de la semana, si queréis ver el número de la semana, longitud de los nombres de los días, colores, etc.

Un abrazo,  :)
Title: Re: Calendario para lateral del Simple Portal
Post by: 130860 on March 24, 2009, 09:57:51 AM
Hola a tod@s,

A petición de alguien del foro de soporte del SMF...

jejeje, ese alguien soy yo.. ::)


gracias de nuevo por el aporte !!!
Title: Re: Calendario para lateral del Simple Portal
Post by: Edson on August 19, 2010, 11:18:22 AM
Es recomendable también para versión RC3 ?

O mejor sería usar el Calendario del SP ?
Title: Re: Calendario para lateral del Simple Portal
Post by: falco on August 21, 2010, 12:29:17 PM
Muchas gracias yo ya lo he añadido a mi portal y queda requete bien y chulo.
Title: Re: Calendario para lateral del Simple Portal
Post by: 130860 on August 21, 2010, 08:48:03 PM
Es recomendable también para versión RC3 ?

O mejor sería usar el Calendario del SP ?

es básicamente una version anterior de el bloque de calendario que ya trae por defecto SP en la última version.

toma nota que habilitar el calendario supone un incremento en la carga para tu servidor,  si no usas extensamente el calendario es mejor no activarlo.
SimplePortal 2.3.8 © 2008-2024, SimplePortal