sheadawson/silverstripe-blocks

本包最新版本(1.1.3)的许可证信息不可用。

SilverStripe Widgets 模块的替代品。

安装量: 54,973

依赖关系: 8

建议者: 2

安全性: 0

星标: 60

关注者: 17

分支: 60

开放问题: 27

类型:silverstripe-module

1.1.3 2019-05-27 22:12 UTC

README

Build Status Scrutinizer Code Quality codecov

Blocks 模块旨在为开发者提供一个灵活的基础,以定义可重用内容或小部件的块,这些块可以在 CMS 中进行管理。

注意

此模块不再维护。如果您想采用它并为其提供一个良好的归宿,请提交您的兴趣,我将很高兴讨论。

特性

  • 块具有版本控制功能
  • 具有表单的块(通过 BlockController
  • 拖放重排序块
  • 复制块
  • 全局块的块集
  • 允许排除任何页面类型使用块
  • 允许禁用默认/示例块类型 - ContentBlock
  • 允许禁用特定块

从 0.x 升级

请参阅 升级指南

需求

推荐

安装

composer require sheadawson/silverstripe-blocks

通过 composer 安装,运行 dev/build

快速入门

1. 在 mysite/_config/config.yml 中定义项目的块区域和设置

SheaDawson\Blocks\BlockManager:
	areas:
		Sidebar: true # a Sidebar area will be available on all page types
		BeforeContent:
			only: HomePage # a BeforeContent area will be available only on HomePage page types
		AfterContent:
			except: HomePage # a AfterContent area will be available on all page types except HomePage
		Footer: true # a Footer area will be available on all page types
	options:
		#use_blocksets: false # Whether to use BlockSet functionality (default if undeclared: true)
		#use_extra_css_classes: true # Whether to allow cms users to add extra css classes to blocks (default if undeclared: false)
		#prefix_default_css_classes: 'myprefix--' # prefix the automatically generated CSSClasses based on class name (default if undeclared: false)
		#pagetype_whitelist: # Enable the Blocks tab only pages of these types (optional)
		#  - HomePage
		#pagetype_blacklist: # Disable the Blocks tab on pages of these types (optional)
		#  - ContactPage
		#disabled_blocks: #allows you to disable specific blocks (optional)
		#  - ContentBlock
		#use_default_blocks: false # Disable/enable the default Block types (ContentBlock) (default if undeclared: true)
		#block_area_preview: false # Disable block area preview button in CMS (default if undeclared: true)

记得修改您的 .yml 配置后运行 ?flush=1,以确保其生效。

2. 将块区域添加到您的模板中

添加 BeforeContentAfterContent 块的示例

<article>
	<h1>$Title</h1>
	$BlockArea(BeforeContent)
	<div class="content">$Content</div>
	$BlockArea(AfterContent)
</article>

$BlockArea(BeforeContent) 将遍历并显示当前页面上分配给 BeforeContent 区域的所有块

您可以使用第二个限制参数限制块区域的块数量

<article>
	$BlockArea(NewsBlocks, 3)
</article>

3. 在 CMS 中向页面添加块

现在您可以通过 CMS 页面编辑视图和块模型管理员向页面添加块。您还可以在块模型管理员中定义“块集”。块集可以用于将一组常见的块应用到符合您在集上定义的标准的页面上。

此模块附带了一个基本的 ContentBlock,但可以通过 BlockManager::use_default_blocks 配置禁用它。

帮助

将块限制为查看器组或已登录用户

在编辑块时,您可以通过在“查看器组”选项卡下选择“已登录用户”或“这些组中的用户”来限制谁可以在前端看到它。

模板

您应该注意两种类型的模板。

块区域模板

负责遍历和渲染该区域中所有块的 BlockArea 模板。您可以通过创建默认 BlockArea.ss 的副本并将其放置在您的 templates/Includes 文件夹中来覆盖它。

您的块区域可能需要不同的模板。您可以通过创建 BlockArea_{AreaName}.ss 模板来实现这一点。

块模板

每个块子类都需要一个与类名相同的模板。因此,SlideshowBlock.php 就会有一个 SlideshowBlock.ss 模板。如果你的块根据它所在的 BlockArea 需要不同的模板,你可以创建 SlideshowBlock_{AreaName}.ss

当前页面作用域可以通过 $CurrentPage 在块模板中访问。

块区域预览

为了帮助网站管理员识别可以应用块的区域,在 CMS 中提供了一个“预览此页面的块区域”按钮。这将在新标签页中打开页面的前端视图,带有 ?block_preview=1。在块预览模式下,模板中的块区域将被突出显示并标注。

你的 BlockArea 模板需要一些标记来支持这一点:CSS 类 block-areadata-areaid='$AreaID' 属性。

<div class='block-area' data-areaid='$AreaID'>
	<% loop BlockArea %>
		$BlockHTML
	<% end_loop %>
</div>

表单块

从 v1.0 版本开始,块可以处理表单。请参阅这个 gist 作为示例

从主 CMS 菜单中删除块按钮

BlockAdmin 部分不一定总是需要使用。如果您愿意,可以通过在 mysite/_config.php 中插入以下内容来从菜单中删除按钮:

CMSMenu::remove_menu_item('BlockAdmin');

块图标

直到此模块正确支持图标,您可以通过在您的块中创建一个 getTypeForGridfield 方法来自定义图标。以下是一个使用 font awesome 的示例:

public function getIcon()
{
		return '<i class="fa fa-thumbs-up fa-3x" title="' . $this->singular_name() . '" aria-hidden="true"></i>';
}
public function getTypeForGridfield()
{
		$icon = $this->getIcon();
		if ($icon) {
				$obj = HTMLText::create();
				$obj->setValue($icon);
				return $obj;
		} else {
				return parent::getTypeForGridfield();
		}
}

可翻译的块

要创建具有可翻译内容的块,请使用 可翻译模块,请参阅 此 gist 以获取快速入门。

屏幕截图

概览

块位置的预览

编辑一个块

添加一个现有块

待办事项

  • 重新添加:主要按区域排序(按配置中的声明顺序),在页面上(已删除,改用拖放排序)
  • 为基本块添加图标/图片,作为处理大量不同块时的识别方法