根据开始时间设置事件格式

2022-08-31 01:16:57

仍在处理我的计划程序/日历应用程序。我几乎完成了,我得到了一些更难的部分,但我被困在一个更困难的部分。我想根据事件的开始时间在网格中显示我的事件。

它没有显示在这张照片中,但假设在25日左侧有一列,上面有小时(上午8点至晚上11点左右)。如果事件开始于..比如说,下午1点,我希望它显示在页面中间的某个地方。如果活动在上午 8:30 开始,则应在上午 8 点到上午 9 点之间显示。

events

我想我可以用桌子来做这件事,但我想知道是否有另一种方法。这对于普通的html / css,也许是一些Javascript来说可行吗?关于实现这一目标的最佳方法的任何建议?如果我使用表格,我仍然不确定执行此操作的最佳方法是什么。每三十分钟一个牢房?从我的视图中,我可以访问每个事件的开始和结束时间。事件数组(在此示例中为第 25 个)如下所示:

Array

[1] => Array
    (
        [title] => Ethiek
        [description] => Ethiek: Opdracht 1
        [time_start] => 11:30:00
        [time_end] => 12:00:00
    )

[2] => Array
    (
        [title] => Project Management
        [description] => Test: Project Management
        [time_start] => 15:00:00
        [time_end] => 16:00:00
    )

[event_count] => 2

感谢您给我的任何建议。多谢!

编辑:开始了赏金,因为我仍然卡住了,我会很感激一些反馈。

更新:

我一直在为此而崩溃,老实说,我无法找出最好的方法来做到这一点。首先,我认为我陷入困境的原因是我从db/数组中读出事件的方式。这是我必须显示的事件的代码,如我的屏幕截图所示,不要介意我的复杂数组:

        foreach($details[0] as $key => $detail)
    {
        echo "<div class='grid'>";
        $header = "<p class='detail_header'>";
        $header .= ucfirst($dates[0][$key]['name']) . ", " . $key . " " . $init['curr_month_name'];
        $header .= "<img src='" . base_url() . "assets/images/create_event.png' alt='Plan iets'></p>";

        echo $header;

        for($i = 1; $i <= $details[0][$key]['event_count']; $i++)
        {
            echo "<div class='event " . $details[0][$key][$i]['type'] . "'>";
                echo "<p class='event_title'>" . $details[0][$key][$i]['title'] . "</p>";
                echo $details[0][$key][$i]['description'];
            echo "</div>";
        }
        echo "</div>";  

    }

这有点混乱,更不用说我下次有相同的代码来修复一些异常。但更重要的是..我觉得这些循环不允许我对它进行很多修改。我尝试为AM和PM添加两个div,这样我就可以在中午之前和下午的块中拆分事件,然后只显示事件上的时间(以避免必须使用15分钟的一千个块)。但是,是的..这并没有奏效,因为如果下午有多个事件,它会放置几个“PM”div。

我很想让它保持原样,只在事件divs中显示开始/结束时间。直到我找到一种更好的方法来从数组中读取它们并显示它们。

任何帮助/建议都值得赞赏。谢谢。


答案 1

实际上,我现在也在这样做。我的解决方案是使用类似 960.gs 的div。

首先,我定义了一系列常量:显示的开始时间、显示的结束时间、每小时的列数、总列数。在我的应用示例中,这些变量可由用户配置。

其次,我查询需要处理的事件数组。其中包括开始时间和结束时间,以及我要显示的详细信息。我将使用jQuery QTip来弹出悬停的详细信息,因此填充这些内容的数据也包含在此查询中。

现在,960.gs 概念。网格的基础是知道您有X个空间来显示您的内容...使用960,它是960像素。我的是更多的自定义,但这提供了概念。您可以将其除以相当多的数字,这成为如何拆分网格的基础。使用这种方法,我可以很容易地定义一个从grid_1到grid_4列,并且它将采用与总宽度相称的宽度百分比(即在16列布局上,做一个4列的div将覆盖25%)它是跨浏览器兼容的,并且不需要公开的清除div。您只需要使数字相加以匹配要使用的列数即可。

现在,我首先进行数学运算,以计算每列表示多少时间。我每天使用前循环进行组装:我从显示器开始时间的小时开始,然后递增。如果事件的start_time等于增量,我将启动一个根据我的着色标准适当设置样式的 div。同样,如果我的结束时间<=增量器,我将停止 div 并在 id 中定义列的宽度。显然,在循环结束时,我做了一个增量++。每天显示重复一次。

我的概念是为每周类型的日历在时间基础上执行此操作。但是,对于月式日历甚至日历,整体想法可以很容易地进行修改。

表格肯定会使这更容易(版本1是表格),但如果你有耐心,无论哪种方式都可以完成。


答案 2

你对表格的想法听起来像是最好的选择。假设表边框全部隐藏,则可以缩小到应用程序规定的任何时间段大小,而不会使其看起来太混乱。

我只从一行代表15分钟开始,如果他们只需要在正确的时间大致排成一行。你对每个块的影响可以显示确切的时间,然后表格就在那里,让你通过粗略的15分钟时间段来观察你的事件,使其足够对齐,使其在视觉上具有代表性。:hoverrowspan


推荐