Php CodeIgniter日历/计划应用程序、结构和执行

Php CodeIgniter日历/计划应用程序、结构和执行,php,codeigniter,jquery,Php,Codeigniter,Jquery,这个项目简直让我失眠。我整天都在想,晚上做梦,当我躺在床上睡不着的时候,我会再想一想。这真的让我哭了,哈哈。我不知道如何构造我的应用程序,也不知道如何执行我的想法 首先是一个简短的介绍。我学习交互式多媒体设计,我有一门叫做“项目”的课程。顾名思义,我们必须想出并创建一个项目,更具体地说是一个web应用程序,使用PHP、HTML/CSS、MySQL、AJAX等等。。不管我们想用什么技术。由于我们还必须在一定程度上挑战自己,所以我决定在这个项目中学习并使用CodeIgniter框架。我们必须向教授展

这个项目简直让我失眠。我整天都在想,晚上做梦,当我躺在床上睡不着的时候,我会再想一想。这真的让我哭了,哈哈。我不知道如何构造我的应用程序,也不知道如何执行我的想法

首先是一个简短的介绍。我学习交互式多媒体设计,我有一门叫做“项目”的课程。顾名思义,我们必须想出并创建一个项目,更具体地说是一个web应用程序,使用PHP、HTML/CSS、MySQL、AJAX等等。。不管我们想用什么技术。由于我们还必须在一定程度上挑战自己,所以我决定在这个项目中学习并使用CodeIgniter框架。我们必须向教授展示我们的能力。(不过,不会部署或使用此应用程序。它只是一个展示。)

我将创建一个web应用程序,一个学生日历/计划表。他们可以跟踪自己的课程、家庭作业、空闲时间等。以下是我试图实现的目标的屏幕截图:

我已经抛出了滑块,并通过对下一个/上一个按钮使用AJAX请求解决了这个问题。您可以查看该网站的最新版本

但是,我对我的代码不满意。我对我所做的不满意。老实说,我很困惑。我完全糊涂了

我读过关于CodeIgniter和MVC模型的博客、书籍和网站;我对PHP有相当不错的了解,而且我很快就学会了这个框架。但还是很困惑

我从编写我的代码开始。一切都好。我有一个登录控制器,它有一个
index()
函数,一个
go()
函数,主要用于表单验证(使用表单验证库)和设置会话。它通过AJAX处理错误消息,并通过我的登录模型与数据库通信。我想这很好地遵循了MVC模式

然而,实际的“计划者”页面是一个完全不同的故事。我想知道的第一件事是我是否可以从视图中使用/调用函数。如果我遵循MVC准则,我会说我不能。因此,我现在要做的是将所有数据堆叠在控制器中的$data数组中,然后通过jQueryAjax调用将这些数据回显到我的网页中

这引出了我的第一个问题,简单得可笑。这样行吗?我主要关心的一个问题当然是那些没有启用javascript的用户;应用程序根本不工作。我读过关于优雅降级和渐进增强的文章,但我不确定这个应用程序在没有JS的情况下是否可以运行

另一件我不确定的事情(AJAX方面)是,我在$(document).ready上有两个不同的AJAX调用,当用户单击不同的元素时,我会再调用四个。jQuery
.html()
实际上没有将内容放在html标记中(当我查看源代码时),这也让我感到困扰

顶部的天数列表由名为
init_days()
的函数生成。我使用$(document).ready()AJAX调用之一填充列表。它工作正常,但功能非常混乱。在控制器中,我创建了一个数组
$data
,并将整个列表(包括html标记)回送到
$data['calendar']
;然后我将其直接输出到
标记中:

    // populate initial calendar
    $.ajax(
    {
        type: "POST",
        url: "/planner/init_days",
        success: function(data){
            $("#days_loader").hide();
            $(".month").prepend(data['month_name'] + " " + current_year);
            $("#day_list").html(data['calendar']).fadeIn();
        }
    });
但是,当使用“下一个”和“上一个”按钮时,我调用了相同的功能,只是使用了一个
数据:
选项来提交新的月份(如有必要,还包括年份)。这对我来说似乎有点多余;将(几乎)相同的代码放三次。我不知道如何解决这个问题

我的主要问题,我现在陷入困境的地方,是那些日子里的一部分。我有那些“4月20日的灾难”的表格标题,但在下面我需要得到我的实际事件。我不确定创建此功能的最佳方法是什么。我应该把它放在桌子上吗?但是,我怎样才能把某些事件放在正确的地方呢?目前,我所实现的功能是将某一天的所有事件输出到一个数组中,如下所示:

Array ( [0] => Array ( [id] => 1 [title] => Test Event [description] => Dit is een test event. [day_start] => 2011-04-20 [day_end] => 2011-04-20 [user_id] => 1 [time_start] => 11 [time_end] => 12 ) [1] => Array ( [id] => 2 [title] => Test Event 2 [description] => Dit is een tweede event. [day_start] => 2011-04-20 [day_end] => 2011-04-20 [user_id] => 1 [time_start] => 12 [time_end] => 13 ) )
我不确定坐桌子是否是最好的方式。最让我困扰的是,我工作的时间都很长,所有这些不同的时间在页面上都有自己的位置,如果这有意义的话。(就像上午9点在专栏顶部,晚上11点在专栏底部,嗯)

如果有人想看看我的乱七八糟的东西,或者想让我重新走上正轨,我愿意提供一个到我的源代码(github)的链接。也许我仍然走在正确的轨道上;我只是不这么想。我被困在展示事件的部分,我只是觉得很糟糕,因为我对我写的东西不满意(尽管现在大部分都是有效的)

由于我现在是复活节假期,我再过一周也无法联系我的老师,所以我愿意提供100-150的代表奖金,为这个巨大的咆哮/问题提供一个好的、有用的答案

如果有任何关于设计模式、MVC、CodeIgniter和PHP最佳实践的书籍、网站、博客我都应该阅读,也请提供它们。非常感谢

如果你说到这一点,谢谢你一直以来的阅读。我很感激

编辑:我的源代码在这里:


附言:这个问题是我的后续问题,从那时起我已经向前迈出了很多步,但我仍然不高兴,而且大部分时间都非常困惑。非常感谢您的帮助。

好的,让我看看是否可以把它分解成几部分来帮助您

首先不清楚您的术语是否一致,因此我将在这里建立一个小术语表,以便您理解我的意思:

  • 请求生命周期通过应用程序的整个HTTP请求。Ajax调用是生命周期,页面加载是生命周期,一旦发送文档并关闭连接
    var theHtmlToPutInPage = "... whatever ...";
    $("body").html(theHtmlToPutInPage);