[英]PHP / MySQL: Group items by month
早上好,
我正在尝试更改网站的日历WordPress插件的输出。 我需要能够按月对项目进行分组。 理想情况下,我将拥有月份和年份,然后是该月份中所有对象的列表。 除了按月和按年分组以外,我一切都很好。
该表的结构如下:
id | event_start | event_end | event_title | event_desc
2 | 1309935600 | 309939200 | 测试 ec ... ......
我是PHP和MySQL的新手,但这是当前正在使用的代码(我没有编写此代码,我已将其修改为自己使用-删除了大多数html / css):
// Add the shortcode for displaying the event on pages
function displayevents( $atts ) {
global $wpdb;
setlocale(LC_ALL, get_locale());
$table_name = $wpdb->prefix . "simple_events";
// VARIATIONS: EXPIRED / ALL / UPCOMING
if($atts['age']) {
$age = $atts['age'];
if($age == "expired") {
$range = "event_end <= " . time();
} elseif($age == "all") {
$range = "event_end > 946706400"; // timestamp for jan 1st 2000 - assuming no event will be creted before that date
} else {
$range = "event end > " . time();
}
}
if($atts['label']) $label = strtolower($atts['label']);
if($atts['limit'] > 0) { $limit = "LIMIT 0, " . $atts['limit']; } else { $limit = ""; }
if( $age && $label ) {
$allevents = $wpdb->get_results(" SELECT * FROM $table_name WHERE event_label = '$label' AND $range ORDER BY event_start $limit", "ARRAY_A");
} elseif($age) {
$allevents = $wpdb->get_results(" SELECT * FROM $table_name WHERE $range ORDER BY event_start $limit", "ARRAY_A");
} elseif($label) {
$currentTime = time();
$allevents = $wpdb->get_results(" SELECT * FROM $table_name WHERE event_label = '$label' AND event_end >= $currentTime ORDER BY event_start $limit", "ARRAY_A");
} else {
$currentTime = time();
$allevents = $wpdb->get_results(" SELECT * FROM $table_name WHERE event_end >= $currentTime ORDER BY event_start $limit", "ARRAY_A");
}
foreach ($allevents as $event) {
// decide if the year needs to be mentioned
if(date('Y',$event['event_start']) == date('Y',time())) {
$eventtime = strftime( __('%l:%M',SE_TEXTDOMAIN),$event['event_start']);
} else {
$eventtime = strftime( __('%l:%M',SE_TEXTDOMAIN),$event['event_start']);
}
$the_events[] =
strftime( __('%d',SE_TEXTDOMAIN),$event['event_end']).
stripslashes($event['event_title']).
stripslashes($event['event_desc']).
$eventtime.
' to '.
strftime( __('%l:%M',SE_TEXTDOMAIN),$event['event_end']).
$evt_loc.
$evt_url;
} // end foreach ($allevents as $event)
$items = implode($the_events);
return($items);
}
任何帮助将不胜感激。 当前输出可以在这里看到: http : //nwtechanddesign.com/jariccodance/calendar/
所需的输出(分开显示)可以在此处找到: http : //nwtechanddesign.com/wp-content/blogs.dir/11/calendar.jpg
TIA
我不确定100%是否对返回的字符串在做什么,所以我不能真正以只能插入的方式回答问题,但是鉴于从内爆数组创建一些大字符串,我想您只是想知道如何在正确的位置放置标头。
假设您的数组排序正确,根据查询,它看起来应该按顺序排列,您可以执行以下操作:
$curMonth = "";
$curYear = "";
foreach($allEvents as $event)
{
// If we encounter a new month or year, change our curMonth/curYear values
// and output a new header.
if ((date('Y',$event['event_start']) != $curYear) || (date('M',$event['event_start']) != $curMonth))
{
$curMonth = date('M',$event['event_start']);
$curYear = date('Y',$event['event_start']);
// Outputs in 'Jan.2011' style
// You'll just have to deal with this somehow, like you deal with the rest of the stuff
$eventString = $curMonth.".".$curYear;
}
else
$eventString = "";
// Then instead of:
// $the_events[] =
// use
$eventString .=
... rest of your code ...
$the_events[] = $eventString;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.