sheadawson /silverstripe-blocks
SilverStripe Widgets 模块的替代品。
Requires
Suggests
- micschk/silverstripe-gridfieldsitetreebuttons: Edit pages directly from a Block's 'used on page' list
- unisolutions/silverstripe-copybutton: Duplicate Blocks in Block Admin
README
Blocks 模块旨在为开发者提供一个灵活的基础,以定义可重用内容或小部件的块,这些块可以在 CMS 中进行管理。
注意
此模块不再维护。如果您想采用它并为其提供一个良好的归宿,请提交您的兴趣,我将很高兴讨论。
特性
- 块具有版本控制功能
- 具有表单的块(通过
BlockController
) - 拖放重排序块
- 复制块
- 全局块的块集
- 允许排除任何页面类型使用块
- 允许禁用默认/示例块类型 - ContentBlock
- 允许禁用特定块
从 0.x 升级
请参阅 升级指南
需求
- SilverStripe CMS ^4.0
- GridFieldExtensions
- MultivalueField
- GridField BetterButtons
推荐
- GridField Copybutton(从 BlockAdmin 复制块)
- GridField Sitetree Buttons(从块的“使用页面”列表直接编辑页面)
安装
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. 将块区域添加到您的模板中
添加 BeforeContent
和 AfterContent
块的示例
<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-area
和 data-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 以获取快速入门。
屏幕截图
待办事项
- 重新添加:主要按区域排序(按配置中的声明顺序),在页面上(已删除,改用拖放排序)
- 为基本块添加图标/图片,作为处理大量不同块时的识别方法