Benim CMS tekil / Tekrarlanan Çizelgeleri

2 Cevap php

Kullanıcıların programları saklamak için izin için bir gereklilik olan bir CMS inşa ediyorum. Arayüz MS Outlook benzer, çok hoş çok ihtiyacı yinelenen programları UI destek ne taklit etmek.

Programı kaydedildiğinde, biz bir olay gerçekleşmesi gerekiyordu zaman nasılsa uyarı gerekir. Şu anda, planın bir cron işi çalıştırmak bir olay çok dakikada planlanıyor kontrol ve görmek için her dakika sahip olmaktır.

Bizim kullanıcıların tüm dünyadan olacağından, biz zaman dilimi ve DST haberdar olmak için bu zamanlama sistemi gerekir.

Ayrıca, ("1 Şubat 2010 ile 1 Ocak 2010 den 09:00 'de her gün" gibi) insan okunabilir metin haline bu zamanlamayı dönüştürmek için yetenek bizim kullanıcılar için güzel olurdu.

Herkes bu uygulamaya nasıl herhangi bir fikir var mı? PHP / MySQL kullanıyorum.

2 Cevap

Belirtilebilir ne fikirler için iCalendar şartname bak ...

Sizin soru sadece sizin için uygulama yazmak için birini soran bir iş kuruluna bir yazı gibi daha görünüyor.

Gerçekten yapmak için çalışıyoruz, ne o kadar karmaşık değil. Sadece belki bir isim, açıklama, başlangıç ​​damgası, zaman damgası ve biten bir "yinelenen" mantıksal dahil appts, saklamak için bir MySQL tablo kurmak. Eğer herhangi bir yaklaşan randevuları olup olmadığını görmek istiyorum ne zaman aralığı üzerinde, veritabanını sorgulamak için Ajax kullanın. doğruysa, kullanıcıya bildirmek.

zaman biçimlendirme için, böyle bir şey yapabilirsiniz:

function format_date($timestamp1, $timestamp2,$repeating) {
    $str = "";
    if($repeating) {
        $str .= "Every Day";
    }
    $str .= "From ".date("g:i a",$timestamp1)." To ".date("g:i a",$timestamp2);
    return ($str);
}

Burada bakabilirsiniz bazı sorgular ve bazı tablo oluşturma SQL vardır:

CREATE TABLE `appointments` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `name` varchar(255) DEFAULT NULL,
    `description` text,
    `recurring` int(11) DEFAULT NULL,
    `recurrence_type` varchar(50) DEFAULT NULL,
    `starting_timestamp` int(14) DEFAULT NULL,
    `ending_timestamp` int(14) DEFAULT NULL,
    `end_recurring_timestamp` int(14) DEFAULT NULL,
    PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1

mysql_query("SELECT * FROM appointments 
WHERE recurring=0 
AND starting_timestamp <= ". time() + 86400 ." 
AND starting_timestamp > ". time() ." 
ORDER BY starting_timestamp DESC");

mysql_query("SELECT * FROM appointments 
WHERE recurring=1 
AND recurrence_type='DAILY' 
AND starting_timestamp <= ". time() + 86400 ." 
AND end_recurring_timestamp > ". time() ." 
ORDER BY starting_timestamp DESC");

Haftalık ve aylık nüks daha karmaşık olacak ve muhtemelen SQL sorguları dışında manipülasyon gerektirir. Yüksek yükü anlamına gelebilir.

Bu örnekte, i damgaları gibi tarihlerini depolamak var. Ancak, bir dize ve strtotime gibi bir şey () kullanarak olarak bunları depolamak için daha makul olabilir. rağmen, ben bu fonksiyonu ne kadar güvenilir bilmiyorum.

Eğer fikir edinebilirsiniz. Timezone destek olarak, kontrol http://www.ultramegatech.com/blog/2009/04/working-with-time-zones-in-php/ ve http://www.php.net/manual/en/class.datetimezone.php