我正在从数据库中获取事件列表,并尝试将类似日期与一个标题关联起来。截至目前,我正在根据请求使用<dl>
<dt>
<dd>
等。这可能会改变,但我认为这不会影响我的问题的整体影响。
基本上我试图通过查询抓住5个最新的事件:
global $wpdb;
$sql = "SELECT e.*, c.*, ese.start_time, ese.end_time
FROM wp_events_detail e
JOIN wp_events_category_rel r ON r.event_id = e.id
JOIN wp_events_category_detail c ON c.id = r.cat_id
LEFT JOIN wp_events_start_end ese ON ese.event_id= e.id
WHERE e.is_active = 'Y'
AND c.category_identifier = 'main'
ORDER BY e.start_date ASC
LIMIT 0, 5";
$results = $wpdb->get_results($sql);
然后我将它们循环到foreach()
:
if(count($results) > 0) {
echo '<div class="calendar-list">';
foreach($results as $event) {
$event_id = $event->id;
$event_name = $event->event_name;
$start_date = $event->start_date;
$start_time = $event->start_time;
$start_time = strtotime($start_time);
$start_time = date('g:ia', $start_time);
$the_time = strtotime($start_date);
$the_day = date('d', $the_time);
$the_month = date('M', $the_time);
echo '<dl class="calendar-day first-child">';
echo '<dt>';
echo '<p class="the-month">' . $the_month . '</p>';
echo '<p class="the-day">' . $the_day . '</p>';
echo '</dt>';
echo '<dd>';
echo '<h4><a href="' . $event_id . '">' . $event_name . '</a></h4>';
echo '<h5><span class="time">' . $start_time . '</span></h5>';
echo '</dd>';
echo '</dl>';
}
echo '</div>';
}
我的主要问题是我需要想办法将日期彼此关联起来。例如,6月27日。如果有两个日期,我希望它看起来像:
<div class="calendar-list">
<dl class="calendar">
<dt>
<p class="the-month">JUN</p>
<p class="the-day">27</p>
</dt>
<dd>
<h4><a href="#">Title</a></h4>
<h5><span class="time">Time</span></h5>
</dd>
<dd>
<h4><a href="#">Title</a></h4>
<h5><span class="time">Time</span></h5>
</dd>
</dl>
<dl class="calendar">
<dt>
<p class="the-month">JUN</p>
<p class="the-day">28</p>
</dt>
<dd>
<h4><a href="#">Title</a></h4>
<h5><span class="time">Time</span></h5>
</dd>
</dl>
</div>
我不确定如何实现这一目标。我一直在玩设置和取消一些变量,但一直无法达到理想的结果。
如果有人能指出我正确的方向,那将是非常感激的。
谢谢!
滓
答案 0 :(得分:1)
基本上,您必须记住循环结束时每行的$the_time
,并将其与当前$the_time
进行比较,以确定是否必须回显新的<dt>
。不过,事实上每天都有自己的<dl>
使事情变得复杂。这是一个丑陋的解决方案:
// Init empty previous time
$previous_time = null;
// Open first definition list
echo '<dl class="calendar-day first-child">';
foreach($results as $event) {
$event_id = $event->id;
$event_name = $event->event_name;
$start_date = $event->start_date;
$start_time = strtotime($event->start_time);
$the_time = $start_time;
$the_day = date('d', $start_time);
$the_month = date('M', $start_time);
$start_time = date('g:ia', $start_time);
// Date changed
if($the_time != previous_time) {
// Unless first iteration, close previous list
if(!empty($previous_time)) {
echo '</dl>';
}
// Open new list
echo '<dl class="calendar-day first-child">'
// Show definition term for the group of events
echo '<dt>';
echo '<p class="the-month">' . $the_month . '</p>';
echo '<p class="the-day">' . $the_day . '</p>';
echo '</dt>';
}
// Display current event
echo '<dd>';
echo '<h4><a href="' . $event_id . '">' . $event_name . '</a></h4>';
echo '<h5><span class="time">' . $start_time . '</span></h5>';
echo '</dd>';
// Remember date from previous row
previous_time = $the_time;
}
// Close last definition list
echo '</dl>';
答案 1 :(得分:0)
<?php
//***************************************
/// Read the readme.txt file before using ///////
// This is downloaded from www.plus2net.com //
/// You can distribute this code with the link to www.plus2net.com ///
// Please don't remove the link to www.plus2net.com ///
// This is for your learning only not for commercial use. ///////
//The author is not responsible for any type of loss or problem or damage on using this script.//
/// You can use it at your own risk. /////
//*****************************************
$dbservertype='mysql';
$servername='ur host';
// username and password to log onto db server
$dbusername='ur user';
$dbpassword='ur pwd';
// name of database
$dbname='ur db';
////////////////////////////////////////
////// DONOT EDIT BELOW /////////
///////////////////////////////////////
connecttodb($servername,$dbname,$dbusername,$dbpassword);
function connecttodb($servername,$dbname,$dbuser,$dbpassword)
{
global $link;
$link=mysql_connect ("$servername","$dbuser","$dbpassword");
if(!$link){die("Could not connect to MySQL");}
mysql_select_db("$dbname",$link) or die ("could not open db".mysql_error());
}
//////// End of connecting to database ////////
// Init empty previous time
$previous_time = null;
// Open first definition list
echo '<dl class="calendar-day first-child">';
$q1="SELECT * FROM msg WHERE sendto = '1' || sender = '1' ORDER BY time desc";
$n1=mysql_query($q1);
while($nt1=mysql_fetch_array($n1)){
$start_time = strtotime($nt1['time']); //change to string
$the_time = date('j m', $start_time); //select wat u need i.e day and month
//$the_time = $nt1['time']); //for troublshooting db
// Date changed
if($the_time != $previous_time) {
// Unless first iteration, close previous list
if(!empty($previous_time)) {
echo '</dl>';
}
// Open new list
echo '<dl class="calendar-day first-child">';
// Show definition term for the group of events
echo '<h4>'.$nt1['time'].'</h4>';
}
// Display current event
echo '<dd>';
echo $nt1['message'] .' '. $nt1['time'];
echo '</dd>';
// Remember date from previous row
$previous_time = $the_time;
}
// Close last definition list
echo '</dl>';
?>
</body>
</html>
通过这段经过编辑的代码,你可以按时间分组任何东西