SimplePortal
Customization => Custom Coding => Topic started by: joeylc on October 10, 2008, 08:55:32 PM
-
Is there anyway way to add a Today's Birthdays to a block? 8)
One which has a link to the users profile and shows a cake? something like this.
(if no Birthdays it just says) No Birthday's Today with a grayed out cake
Thanks Joeylc
-
Nide Idea .. also calender events
-
Which version of SMF are you using?
-
Add this code into a new 'PHP' block.
For SMF 2 Beta:
global $scripturl, $modSettings, $user_info;
$eventOptions = array(
'include_birthdays' => true,
'num_days_shown' => 1,
);
$return = cache_quick_get('calendar_index_offset_' . ($user_info['time_offset'] + $modSettings['time_offset']), 'Subs-Calendar.php', 'cache_getRecentEvents', array($eventOptions));
foreach ($return['calendar_birthdays'] as $member)
echo '
<a href="', $scripturl, '?action=profile;u=', $member['id'], '">' . $member['name'] . (isset($member['age']) ? ' (' . $member['age'] . ')' : '') . '</a>' . (!$member['is_last'] ? ', ' : '');
For SMF 1.1.x:
global $context, $scripturl;
if (!smf_loadCalendarInfo() || empty($context['calendar_birthdays']))
return array();
foreach ($context['calendar_birthdays'] as $member)
echo '
<a href="', $scripturl, '?action=profile;u=', $member['id'], '">' . $member['name'] . (isset($member['age']) ? ' (' . $member['age'] . ')' : '') . '</a>' . (!$member['is_last'] ? ', ' : '');
-
Damn it L, you beat me to it!
-
hmmmm this is what we got with SMF 1.1.6
Fatal error: Call to undefined function smf_loadCalendarInfo() in /home/newlife/public_html/nlg/Sources/SPortal.php(1586) : eval()'d code on line 3
-
hmmmm this is what we got with SMF 1.1.6
Fatal error: Call to undefined function smf_loadCalendarInfo() in /home/newlife/public_html/nlg/Sources/SPortal.php(1586) : eval()'d code on line 3
Getting the same error, except mine is on line 1584
Fatal error: Call to undefined function: smf_loadcalendarinfo() in /home/adrianw/public_html/forum/Sources/SPortal.php(1584) : eval()'d code on line 3
-
:) any news on this ???
-
Try the code below:
global $context, $scripturl, $boarddir;
require_once($boarddir.'/SSI.php');
if (!smf_loadCalendarInfo() || empty($context['calendar_birthdays']))
return array();
foreach ($context['calendar_birthdays'] as $member)
echo '
<a href="', $scripturl, '?action=profile;u=', $member['id'], '">' . $member['name'] . (isset($member['age']) ? ' (' . $member['age'] . ')' : '') . '</a>' . (!$member['is_last'] ? ', ' : '');
-
Kool thanks, that works ;D
ONly problem is thou, can you make it that it only displays when there is infact a birthday, casue the way it is now it shows upcoming birthdays which may get confusing if a user doesnt know birthdays are in bold
or split it into
Upcoming Birthdays
Name Name Name Name
Today's Birthdays
Name Name Name
-
OK big problem ... in the birthday block, it does not show people birthday in bold when its actually their birthday :bandaged:
-
global $context, $scripturl, $boarddir;
require_once($boarddir.'/SSI.php');
if (!smf_loadCalendarInfo() || empty($context['calendar_birthdays'])) {
echo 'No Upcoming Birthdays.';
return array();
}
//The problem is to detect todays birthday on all versions, but smf give some informations about this since smf 1.1
$context['todays_birthdays'] = array();
$context['future_birthdays'] = array();
foreach ($context['calendar_birthdays'] as $member) {
if($member['is_today'])
$context['todays_birthdays'] = '<a href="', $scripturl, '?action=profile;u=', $member['id'], '">' . $member['name'] . (isset($member['age']) ? ' (' . $member['age'] . ')' : '') . '</a>';
else
$context['future_birthdays'] = '<a href="', $scripturl, '?action=profile;u=', $member['id'], '">' . $member['name'] . (isset($member['age']) ? ' (' . $member['age'] . ')' : '') . '</a>';
}
//Output it :)
if(!empty($context['todays_birthdays']))
echo '
Today\'s Birthdays:<br />'.
implode(',', $context['todays_birthdays']).'<br /><br />';
if(!empty($context['future_birthdays']))
echo '
Upcoming Birthdays:<br />'.
implode(',', $context['future_birthdays']).'<br />';
Bye
DIN1031
-
Getting error now
Parse error: syntax error, unexpected ',' in /home/adrianw/public_html/forum/Sources/SPortal.php(1584) : eval()'d code on line 15
-
Getting error now
Parse error: syntax error, unexpected ',' in /home/adrianw/public_html/forum/Sources/SPortal.php(1584) : eval()'d code on line 15
same error
-
Strange okay try this
global $context, $scripturl, $boarddir;
require_once($boarddir.'/SSI.php');
if (!smf_loadCalendarInfo() || empty($context['calendar_birthdays'])) {
echo 'No Upcoming Birthdays.';
return array();
}
//The problem is to detect todays birthday on all versions, but smf give some informations about this since smf 1.1
$context['todays_birthdays'] = array();
$context['future_birthdays'] = array();
foreach ($context['calendar_birthdays'] as $member) {
if($member['is_today'])
$context['todays_birthdays'] = '<a href="'.$scripturl.'?action=profile;u='.$member['id'].'">'.$member['name'].(isset($member['age']) ? ' (' . $member['age'].')' : '').'</a>';
else
$context['future_birthdays'] = '<a href="'.$scripturl.'?action=profile;u='.$member['id'].'">'.$member['name'].(isset($member['age']) ? ' (' . $member['age'].')' : '').'</a>';
}
//Output it :)
if(!empty($context['todays_birthdays']))
echo '
Today\'s Birthdays:<br />'.
implode(', ', $context['todays_birthdays']).'<br /><br />';
if(!empty($context['future_birthdays']))
echo '
Upcoming Birthdays:<br />'.
implode(', ', $context['future_birthdays']).'<br />';
(I should test my php codes *drop*).
Bye
DIN1031
-
not working, put in dummy dates, not showing
-
cant remember where i got this from as i closed of the page i was reading but this works, also grabs members avartar
$current_date = getdate();
$month_number = sprintf("%02d", $current_date['mon']);
$justify = 'left'; // Valid options: 'left', 'center', or 'right'
$limit = 0; // Integer value for length of list
$avatar_on = true; // Use avatar in output: true or false
$avatar_height = '45'; // Set height of avatar
$avatar_width = '45'; // Set width of avatar
$blank_image = 'http://www.abcdefghijklmnop/images/blank_1x1.gif'; // URL to where you placed the blank avatar file...
$display_age = true; // Display member's age: true or false
// Warranty void if edited past this line! ;)
if(!empty($_GET['justify'])) $justify = $_GET['justify'];
if(!empty($_GET['limit'])) $limit = $_GET['limit'];
if(!empty($_GET['month'])) $month_number = $_GET['month'];
if(!empty($_GET['day'])) $current_date['mday'] = $_GET['day'];
if($limit == 0) $count = -1;
global $db_prefix, $scripturl;
$query = db_query(
"SELECT ID_MEMBER, memberName, birthdate
FROM {$db_prefix}members
WHERE birthdate LIKE '%-%$month_number%-%'
AND birthdate NOT LIKE '0001-01-01'
ORDER BY birthdate ASC", __FILE__, __LINE__);
while (($row = mysql_fetch_array($query)) && ($count < $limit))
{
if($limit != 0) $count++;
if(empty($row['birthdate'])) return;
$dob_year = strtok($row['birthdate'], '-');
$dob_month = strtok('-');
$dob_day = strtok('-');
$age = sprintf("%2d", ($current_date['year'] - $dob_year));
if($current_date['mday'] <= $dob_day)
{
if($current_date['mday'] == $dob_day)
{
$class = 'highlight';
}
else
{
$class = '';
}
$current_ID = $row['ID_MEMBER'];
$avatar = '';
if($avatar_on) // query to retrieve member's avatar # in attachment directory; bypass if avatar_on = false
{
$avatar = '<img src="' . $blank_image . '" height="' . $avatar_height . '" width=" '. $avatar_width . '" border="0" />';
$query2 = db_query(
"SELECT ID_ATTACH
FROM {$db_prefix}attachments
WHERE ID_MEMBER = '$current_ID'", __FILE__, __LINE__);
$result = mysql_fetch_array($query2);
if(!empty($result['ID_ATTACH']))
{
$avatar = '<img src="' . $scripturl . '?action=dlattach;attach=' . $result['ID_ATTACH'] .
';type=avatar" height="' . $avatar_height . '" width=" '. $avatar_width . '" border="0" />';
}
else
{
$query3 = db_query(
"SELECT avatar
FROM {$db_prefix}members
WHERE ID_MEMBER = '$current_ID'", __FILE__, __LINE__);
$result = mysql_fetch_array($query3);
if(!empty($result['avatar']))
{
$avatar = '<img src="' . $modSettings['avatar_url'] . '/' . $result['avatar'] . '" height="' .
$avatar_height . '" width=" '. $avatar_width . '" border="0" />';
}
}
}
$link = '<a href="' . $scripturl . '?action=profile;u=' . $row['ID_MEMBER'] . '">';
if($display_age)
{
$age = ' (' . $age . ') ';
}
else
{
$age = ' ';
}
if(strtolower($justify) == 'left')
{
echo'<div class="smalltext" align="left"><span class="'.$class.'">';
echo $link . $avatar . '</a>' . $age . $link . $row['memberName'] . '</a>';
echo '</span></div>';
}
elseif(strtolower($justify) == 'right')
{
echo'<div class="smalltext" align="right"><span class="'.$class.'">';
echo $link . $row['memberName'] . '</a>';
echo $age . $link . $avatar . '</a></span></div>';
}
elseif(strtolower($justify) == 'center')
{
echo'<div class="smalltext" align="center"><span class="'.$class.'">';
echo $link . $avatar . '</a> ' . $link . $row['memberName'] . '</a>';
echo $age . '</span></div>';
}
else
{
echo '<b>Invalid justification specified: ("'.$justify.'")</b><br>';
echo 'Use "left", "center", or "right" for script.<hr>';
die();
}
}
}
but it shouldnt be this complex as all the codes are within your ssi, but it dosnt grab appropiate queries unless it points in the root directory of where your ssi is. i mean you can run your ssi_example at any given time through your browser and it lists / displays / runs all available queries for your smf :ill:
-
ibm450,
Thanks for that. It's great.
Just wish it did something for when there are no birthdays for the day.
As a quick fix, I just did the block title as:
Birthdays: (Blank=None)
Hey, it works....LOL
-
ibm450,
Thanks for that. It's great.
Just wish it did something for when there are no birthdays for the day.
As a quick fix, I just did the block title as:
Birthdays: (Blank=None)
Hey, it works....LOL
Will you be able to constantly edit this when necessary ??
-
Why edit it? If there are no birthdays, it tells them in the title.
If there are, then why pay attention to the title, when the block shows a birthday? ;)
-
Why edit it? If there are no birthdays, it tells them in the title.
If there are, then why pay attention to the title, when the block shows a birthday? ;)
lol, ok kool, i get what your sayinng :headphones:
-
I´ve tested all the posted code and only the LHVWB code works.
the others gave me
Fatal error: Call to undefined function db_query() in /htdocs/Sources/SPortal2.php(1609) : eval()'d code on line 25
perhaps because i´ve use SMF 2.0b4.
I´ve got an working pice of code from my TinyPortal phpbox. But it wont work at my 2.0b4.
My coding skills are to low to see the problem ... hope someone can fit it or port it to SMF 2.0b4.
global $db_prefix, $scripturl;
//number of days before birthday is shown
$number_of_days = 30;
$last_year = date('U') - (365 * 24 * 60 * 60);
$low_date = strftime('%Y-%m-%d', forum_time(false) - 24 * 3600);
$high_date = strftime('%Y-%m-%d', forum_time(false) + $number_of_days * 24 * 3600);
if (substr($low_date, 0, 4) != substr($high_date, 0, 4))
$allyear_part = "birthdate BETWEEN '0004" . substr($low_date, 4) . "' AND '0004-12-31'
OR birthdate BETWEEN '0004-01-01' AND '0004" . substr($high_date, 4) . "'";
else
$allyear_part = "birthdate BETWEEN '0004" . substr($low_date, 4) . "' AND '0004" . substr($high_date, 4) . "'";
$year_low = (int) substr($low_date, 0, 4);
$year_high = (int) substr($high_date, 0, 4);
$query= db_query("
SELECT ID_MEMBER, realName, YEAR(birthdate) AS birthYear, birthdate
FROM {$db_prefix}members
WHERE YEAR(birthdate) != '0001'
AND ($allyear_part
OR DATE_FORMAT(birthdate, '{$year_low}-%m-%d') BETWEEN '$low_date' AND '$high_date'" . ($year_low == $year_high ? '' : "
OR DATE_FORMAT(birthdate, '{$year_high}-%m-%d') BETWEEN '$low_date' AND '$high_date'") . ")
AND lastLogin > '$last_year'
ORDER BY memberName", __FILE__, __LINE__);
if(db_affected_rows() != 0)
{
$birthdays = array();
$member = array();
while ($row = mysql_fetch_assoc($query))
{
$day = substr($row['birthdate'],8,2);
$month = substr($row['birthdate'],5,2);
$birthdays[$row['realName']] = $month . $day;
$member[$row['realName']] = $row['ID_MEMBER'];
}
echo '<table>';
asort($birthdays);
$yesterday = 0;
foreach ($birthdays as $key => $value)
{
if ($value <> $yesterday)
{
if (substr($value,0,2) == date("m"))
$showdate = date("M") . ' ' . substr($value,2,2);
else
$showdate = date("M",time() + ($number_of_days * 24 * 3600)) . ' ' . substr($value,2,2);
if ($yesterday > 0)
echo '</td></tr>';
echo '<tr valign="top"><td>' , $showdate , '</td><td>';
}
echo '<a class="normaltext" href="' . $scripturl . '?action=profile;u=' . $member[$key] . '">' . htmlspecialchars_decode($key) . '</a><br />';
$yesterday = $value;
}
echo '</td></tr></table>';
}
else
echo 'No birthdays in the next ' . $number_of_days . 'days';
-
global $context, $scripturl, $boarddir, $txt;
global $db_prefix, $scripturl, $modSettings;
require_once($boarddir.'/SSI.php');
$current_date = getdate();
$month_number = sprintf("%02d", $current_date['mon']);
$justify = 'left'; // Valid options: 'left', 'center', or 'right'
$limit = 0; // Integer value for length of list
$avatar_on = true; // Use avatar in output: true or false
$avatar_height = '45'; // Set height of avatar
$avatar_width = '45'; // Set width of avatar
$blank_image = 'http://www.abcdefghijklmnop/images/blank_1x1.gif'; // URL to where you placed the blank avatar file...
$display_age = true; // Display member's age: true or false
// Warranty void if edited past this line! ;)
if(!empty($_GET['justify']))
$justify = $_GET['justify'];
if(!empty($_GET['limit']))
$limit = $_GET['limit'];
if(!empty($_GET['month']))
$month_number = $_GET['month'];
if(!empty($_GET['day']))
$current_date['mday'] = $_GET['day'];
if($limit == 0)
$count = -1;
$query = db_query(
"SELECT ID_MEMBER, memberName, birthdate
FROM {$db_prefix}members
WHERE birthdate LIKE '%-%{$month_number}%-%'
AND birthdate != '0001-01-01' AND birthdate != '0000-00-00'
ORDER BY birthdate ASC", __FILE__, __LINE__);
while (($row = mysql_fetch_array($query)) && ($count < $limit))
{
if($limit != 0) $count++;
if(empty($row['birthdate'])) return;
$dob_year = strtok($row['birthdate'], '-');
$dob_month = strtok('-');
$dob_day = strtok('-');
$age = sprintf("%2d", ($current_date['year'] - $dob_year));
if($current_date['mday'] <= $dob_day)
{
if($current_date['mday'] == $dob_day)
{
$class = 'highlight';
}
else
{
$class = '';
}
$current_ID = $row['ID_MEMBER'];
$avatar = '';
if($avatar_on) // query to retrieve member's avatar # in attachment directory; bypass if avatar_on = false
{
$avatar = '<img src="' . $blank_image . '" height="' . $avatar_height . '" width=" '. $avatar_width . '" border="0" />';
$query2 = db_query(
"SELECT ID_ATTACH
FROM {$db_prefix}attachments
WHERE ID_MEMBER = '$current_ID'", __FILE__, __LINE__);
$result = mysql_fetch_array($query2);
if(!empty($result['ID_ATTACH']))
{
$avatar = '<img src="' . $scripturl . '?action=dlattach;attach=' . $result['ID_ATTACH'] .
';type=avatar" height="' . $avatar_height . '" width=" '. $avatar_width . '" border="0" />';
}
else
{
$query3 = db_query(
"SELECT avatar
FROM {$db_prefix}members
WHERE ID_MEMBER = '$current_ID'", __FILE__, __LINE__);
$result = mysql_fetch_array($query3);
if(!empty($result['avatar']))
{
$avatar = '<img src="' . $modSettings['avatar_url'] . '/' . $result['avatar'] . '" height="' .
$avatar_height . '" width=" '. $avatar_width . '" border="0" />';
}
}
}
$link = '<a href="' . $scripturl . '?action=profile;u=' . $row['ID_MEMBER'] . '">';
if($display_age)
{
$age = ' (' . $age . ') ';
}
else
{
$age = ' ';
}
if(strtolower($justify) == 'left')
{
echo'<div class="smalltext" align="left"><span class="'.$class.'">';
echo $link . $avatar . '</a>' . $age . $link . $row['memberName'] . '</a>';
echo '</span></div>';
}
elseif(strtolower($justify) == 'right')
{
echo'<div class="smalltext" align="right"><span class="'.$class.'">';
echo $link . $row['memberName'] . '</a>';
echo $age . $link . $avatar . '</a></span></div>';
}
elseif(strtolower($justify) == 'center')
{
echo'<div class="smalltext" align="center"><span class="'.$class.'">';
echo $link . $avatar . '</a> ' . $link . $row['memberName'] . '</a>';
echo $age . '</span></div>';
}
else
{
echo '<b>Invalid justification specified: ("'.$justify.'")</b><br>';
echo 'Use "left", "center", or "right" for script.<hr>';
die();
}
}
}
This should normal work ;).
global $context, $scripturl, $boarddir, $txt;
global $db_prefix;
require_once($boarddir.'/SSI.php');
//number of days before birthday is shown
$number_of_days = 30;
$last_year = date('U') - (365 * 24 * 60 * 60);
$low_date = strftime('%Y-%m-%d', forum_time(false) - 24 * 3600);
$high_date = strftime('%Y-%m-%d', forum_time(false) + $number_of_days * 24 * 3600);
if (substr($low_date, 0, 4) != substr($high_date, 0, 4))
$allyear_part = "birthdate BETWEEN '0004" . substr($low_date, 4) . "' AND '0004-12-31'
OR birthdate BETWEEN '0004-01-01' AND '0004" . substr($high_date, 4) . "'";
else
$allyear_part = "birthdate BETWEEN '0004" . substr($low_date, 4) . "' AND '0004" . substr($high_date, 4) . "'";
$year_low = (int) substr($low_date, 0, 4);
$year_high = (int) substr($high_date, 0, 4);
$query= db_query("
SELECT ID_MEMBER, realName, YEAR(birthdate) AS birthYear, birthdate
FROM {$db_prefix}members
WHERE YEAR(birthdate) != '0001'
AND ({$allyear_part}
OR DATE_FORMAT(birthdate, '{$year_low}-%m-%d') BETWEEN '$low_date' AND '$high_date'" . ($year_low == $year_high ? '' : "
OR DATE_FORMAT(birthdate, '{$year_high}-%m-%d') BETWEEN '$low_date' AND '$high_date'") . ")
AND lastLogin > '{$last_year}'
ORDER BY memberName", __FILE__, __LINE__);
if(db_affected_rows() != 0)
{
$birthdays = array();
$member = array();
while ($row = mysql_fetch_assoc($query))
{
$day = substr($row['birthdate'],8,2);
$month = substr($row['birthdate'],5,2);
$birthdays[$row['realName']] = $month . $day;
$member[$row['realName']] = $row['ID_MEMBER'];
}
echo '<table>';
asort($birthdays);
$yesterday = 0;
foreach ($birthdays as $key => $value)
{
if ($value <> $yesterday)
{
if (substr($value,0,2) == date("m"))
$showdate = date("M") . ' ' . substr($value,2,2);
else
$showdate = date("M",time() + ($number_of_days * 24 * 3600)) . ' ' . substr($value,2,2);
if ($yesterday > 0)
echo '</td></tr>';
echo '<tr valign="top"><td>' , $showdate , '</td><td>';
}
echo '<a class="normaltext" href="' . $scripturl . '?action=profile;u=' . $member[$key] . '">' . $key . '</a><br />';
$yesterday = $value;
}
echo '</td></tr></table>';
}
else
echo 'No birthdays in the next ' . $number_of_days . 'days';
Work now, too.
Bye
DIN1031
-
@ ???1031
First give me on SMF 2.0b4
Fatal error: Call to undefined function db_query() in /var/www/htdocs/Sources/SPortal2.php(1609) : eval()'d code on line 33
Second
Fatal error: Call to undefined function db_query() in /var/www/htdocs/Sources/SPortal2.php(1609) : eval()'d code on line 23
-
@ ???1031
First give me on SMF 2.0b4
Fatal error: Call to undefined function db_query() in /var/www/htdocs/Sources/SPortal2.php(1609) : eval()'d code on line 33
Second
Fatal error: Call to undefined function db_query() in /var/www/htdocs/Sources/SPortal2.php(1609) : eval()'d code on line 23
Both are not compatible with SMF 2.0 Beta. I thought i wrote this :x. (But it seams i did it not xD).