2009-02-27 44 views
2

我有submitted this previously但是因为有人投了票并表示已经回答了,没有人会回答。简单实用的PHP逻辑重复使用

我知道这里有没有类似的帖子:

但他们没有回答我的请求,这是逻辑的实用,简单和真实世界的例子对于循环日历设置,不使用直接PHP和MySQL以外的其他框架或工具/脚本。

我同意这篇文章http://martinfowler.com/apsupp/recurring.pdf是好的,但它是如此抽象,我不明白它。

我知道还有其他的“系统已经做到了这一点”,但这是我自己的白鲸,我会在某个时候想出来 - 我只是想帮助一下。

所以,问题是:如何使用PHP和MySQL构建循环日历?

+0

看起来你真的害怕投降.. :-) – Swanand 2009-02-27 14:12:42

+0

我不会downvote你,但你的问题是如此抽象,我不明白它:)你首先想问什么? – Quassnoi 2009-02-27 14:14:02

回答

1

您应该努力了解福勒的文章。它确实覆盖了它。

事实是,这是一个难题。 “即时”编辑逻辑不是用户真正想要做的事情。相反,他们希望你作为一个程序员来预测他们想要做什么,并为它提供一个规则 - 例如,他们不想要弄清楚如何计算本月的第二个星期三。

听起来你真正的问题在于模拟MySQL中的重现。您可以使用Google's spec,它可以存储在数据库中并覆盖Stack Overflow。福勒的作品也提供了一些很好的起点,这些起点可以在RDBMS中表示的定义良好的类中使用。

这是一个难题。虽然SO希望你成功,但我们只能引导你走向流。我们不能强迫你喝酒。

0

对于定期日历逻辑的实际实际示例,请查看您的PDA或同等产品。

几年前,我在Intranet应用程序中创建了一个日历,并且基本上复制了我的Palm对重复选项的使用。它对人们有意义,所以我认为它是成功的。但它并没有在数据库中存储真正的清洁。我的代码结束了很多仔细的检查,数据与各种规则一致以纠正错误的东西。这有助于我们在开发它时积极使用它。 :-)

就存储量而言,日历条目涉及一个标志,指示它是否属于经常性系列的一部分。如果不是,这是一个非经常性的条目。如果是这样,那么编辑它有几个选项,其中之一是在这个入口处打破系列。周期性条目作为离散项目放入数据库;这是出于性能原因完成的一种反规范化。除此之外,这意味着其他希望检查日历的代码不必担心重复出现的项目。我们通过总是要求系列的结束日期来解决“无休止的”问题。

实际上,设置周期性项目涉及UI中的一些JavaScript来控制不同的设置。数据库中的条目具有一组值,用于指示重复的范围(例如每日,每周,...)重复步骤(例如1周,2周,...)和任何变化(每周让你说“每周星期一,星期三,星期四”)。

最后,我们有一些逻辑,我从来没有完全实现处理时区和夏令时。这很困难,因为你必须允许有选择地应用这种转变。也就是说,有些日历项目会在最终用户的本地时间内停留,其他日历项目会固定到某个位置,并且可能会随夏令时转移或不转移。在我解决这个问题之前,我离开了那家公司。

最后,我回答了这个问题,因为我没有看到所有其他问题。 :-)但请阅读并理解PDF。