funayaki/cakephp-calendar

CakePHP 插件,用于轻松创建日历。

安装: 7

依赖者: 0

建议者: 0

安全: 0

星标: 0

关注者: 2

分支: 6

类型:cakephp-plugin

0.2 2018-04-01 11:24 UTC

This package is not auto-updated.

Last update: 2024-09-19 10:50:23 UTC


README

Build Status Latest Stable Version Minimum PHP Version License Total Downloads Coding Standards

用于渲染简单日历的插件。

此分支适用于 CakePHP 3.5 及以上版本。

特性

  • 简单且健壮
  • 无需 JS,比 fullcalendar 等解决方案更具响应性
  • 持久的 年/月 URL 部分(可复制粘贴,链接/重定向友好)

演示

在沙盒中查看演示 日历示例

安装

composer require dereuromark/cakephp-calendar

然后确保插件在 bootstrap 中加载

bin/cake plugin load Calendar

您也可以手动将其放入

Plugin::load('Calendar');

用法

在您的控制器中加载组件

$this->loadComponent('Calendar.Calendar');

并在 View 类的 helper 中也加载

$this->loadHelper('Calendar.Calendar');

您的操作

	/**
	 * @param string|null $year
	 * @param string|null $month
	 * @return void
	 */
	public function calendar($year = null, $month = null) {
		$this->Calendar->init($year, $month);

		// Fetch calendar items (like events, birthdays, ...)
		$options = [
			'year' => $this->Calendar->year(),
			'month' => $this->Calendar->month(),
		];
		$events = $this->Events->find('calendar', $options);
		
		$this->set(compact('events'));
	}

在您的 index 模板中

<?php
	foreach ($events as $event) {
		$content = $this->Html->link($event->title, ['action' => 'view', $event->id]);
		$this->Calendar->addRow($event->date, $content, ['class' => 'event']);
	}

	echo $this->Calendar->render();
?>

<?php if (!$this->Calendar->isCurrentMonth()) { ?>
	<?php echo $this->Html->link(__('Jump to the current month') . '...', ['action' => 'index'])?>
<?php } ?>

在您的视图模板中,您可以将链接设置为回退链接,如下所示

<?php echo $this->Html->link(
	__('List {0}', __('Events')), 
	$this->Calendar->calendarUrlArray(['action' => 'index'], $event->date)
); ?>

它将重定向回日历项链接的当前年份和月份。因此,您有一个持久的日历 - 即使在点击后,用户仍然可以非常容易地浏览日历项。

多日事件

如果您有开始和结束日期,并且这些日期可以跨越多天,请使用

<?php
	foreach ($events as $event) {
		$content = ...;
		$attr = [...];
		$this->Calendar->addRowFromTo($event->beginning, $event->end, $content, $attr);
	}

	echo $this->Calendar->render();
?>

配置

完整性

组件验证年份和月份输入,并对无效的输入抛出 404 异常。

组件在各个方向上都有一个最大限制,由 init() 调用定义

$this->Calendar->init($year, $month, 5);

这将允许日历在两个方向上工作 5 年。超出范围的将抛出 404 异常。helper 知道不要为超出限制的日期生成链接。

展示

您可以配置 URL 元素包含月份,是数字(默认)还是文本。

/controller/action/2017/08
/controller/action/2017/august

当加载 helper 时,传递 'monthAsString' => true 以获得文本选项。