我正在處理日曆/計劃器應用程序,我需要一些建議。日曆應用程序 - 輸出月份的日子
我的工作我的應用程序的以下部分:
它顯示了一個月的日子裏,從1日至當月月底,28/29,30或31。我取得了這個..(here)但我的代碼是非常醜陋的,我敢肯定,必須有另一種方式來做到這一點。
我正在使用CodeIgniter。我控制器包含以下功能來用一個月的天名單:
public function init_days()
{
// post values? in case of previous/next months (ajax)
if($this->input->post('post_month') && $this->input->post('post_year'))
{
$month = $this->input->post('post_month');
$year = $this->input->post('post_year');
$data = $this->planner_model->calendar_data($month, $year);
}
else
{
$data = $this->planner_model->calendar_data();
}
// init empty calendar
$data['calendar'] = '';
// easy var names
$current_month = $data['current_month'];
$current_year = $data['current_year'];
// echo list into $data['calendar']
for($i = 1; $i <= $data['days_in_month']; $i++)
{
if($current_month == date('n') && $current_year == date('Y'))
{
if($i < $data['current_day_of_month'])
{
$data['calendar'] .= "<li class='prev_month' value='$i'>$i</li>";
}
if($i == $data['current_day_of_month'])
{
$data['calendar'] .= "<li class='today' value='$i'>$i</li>";
}
if($i > $data['current_day_of_month'])
{
$data['calendar'] .= "<li class='next_month' value='$i'>$i</li>";
}
}
if(($current_month > date('n') && $current_year == date('Y')) || ($current_year > date('Y')))
{
$data['calendar'] .= "<li class='next_month' value='$i'>$i</li>";
}
if(($current_month < date('n') && $current_year == date('Y')) || ($current_year < date('Y')))
{
$data['calendar'] .= "<li class='prev_month' value='$i'>$i</li>";
}
}
$data['month_name'] = ucfirst($this->get_month_name($current_month));
header('Content-type: application/json');
echo json_encode($data);
}
我的模型返回$數據數組被通過控制器稱爲(else子句中,第一部分):
public function calendar_data($month = '', $year = '')
{
if(! empty($month) && ! empty($year))
{
$data['current_year'] = $year;
$data['current_month'] = $month;
$data['current_day_of_month'] = date('j');
$data['current_day_of_week'] = date('w');
$data['days_in_month'] = cal_days_in_month(CAL_GREGORIAN, $month, $year);
}
else
{
$data['current_year'] = date('Y');
$data['current_month'] = date('n');
$data['current_day_of_month'] = date('j');
$data['current_day_of_week'] = date('w');
$data['days_in_month'] = cal_days_in_month(CAL_GREGORIAN, $data['current_month'], $data['current_year']);
}
return $data;
}
然後,我在$(document).ready的AJAX調用中輸出這個視圖。
$("#day_list").html(data['calendar']).fadeIn();
我不開心的代碼。這是一團糟,我確信我在這裏打破了MVC;我不是嗎?有人可能會提供一些建議或見解,如何以「更好」的方式做到這一點?非常感謝。
完整的數據來源是here萬一任何人都會友善地瀏覽它並告訴我是否還有其他我做錯的東西。
非常感謝;我會再次檢查我的代碼並重寫它,並記住您的建議。這使得現在更有意義,並且在開始時我會提出一些問題,以便我知道在哪裏放置哪些代碼。謝謝! – cabaret 2011-04-23 14:03:02
歡迎您。我們大多數人遇到的問題是我們管理M V&C,因此我們很難在編寫代碼時保持分離。這就是爲什麼我不得不不斷問自己的問題。 – 2011-04-23 14:26:10
嗨。只是讓你知道我使用你的建議重寫了我的代碼,現在我有一個更清潔和更容易的源代碼。與我之前的代碼相比,我還不得不做更少的「作弊」來做我想做的事情。我不能夠感謝你! – cabaret 2011-04-23 18:09:11