christopherbolt/silverstripe-contentmodules

此包的最新版本(v1.0.2)没有可用的许可证信息。

灵活内容模块的框架。

安装: 181

依赖项: 1

建议者: 0

安全性: 0

星标: 1

关注者: 2

分支: 1

开放问题: 0

类型:silverstripe-vendormodule

v1.0.2 2018-09-04 02:55 UTC

This package is auto-updated.

Last update: 2024-09-04 10:53:32 UTC


README

一个将模块化内容添加到页面的框架。可以在页面上添加并重新排序各种不同类型的内容。这与WidgetArea模块类似,但专注于内容。当页面发布/取消发布时,内容模块将进行发布/取消发布,即内容模块的更改只有在页面发布时才会发布,这使得此模块完全兼容工作流。CMS编辑可以以类似的方式更改模块的内容类型,就像在CMS中更改页面的类型一样。

需求

SS 4.x 查看SS 3.x的1.0分支

创建模块

不包含内容模块,您必须创建自己的。

您必须创建至少一个ContentModule类型。

以下是编写基本文本内容模块的示例代码

mysite/code/modules/TextModule.php

<?php

use ChristopherBolt\ContentModules\ContentModule;
use SilverStripe\Forms\TextField;
use SilverStripe\Forms\HTMLEditor\HTMLEditorField;

class TextModule extends ContentModule {
		
	private static $db = array(
		'Title' => 'Varchar',
		'Content' => 'HTMLText'
	);
	
	function getCMSFields() {
		$fields = parent::getCMSFields();
		$fields->addFieldsToTab('Root.Main', array(
			TextField::create('Title', 'Title'),
			HTMLEditorField::create('Content', 'Content')
		));		
		return $fields;
	}
}

themes/mytheme/templates/modules/TextModule.ss

<section class="module $ClassName">
	<h2>$Title</h2>
	$Content
</section>

将模块添加到您的页面

将ModularPageExtension扩展添加到您的页面

use ChristopherBolt\ContentModules\ModularPageExtension;

class Page extends SiteTree {
	private static $extensions = array(
        ModularPageExtension::class
	);

现在您可以在CMS中创建和添加模块到页面。

要显示页面模板中的模块,只需使用

$Modules

一个页面上的多个模块区域

默认情况下,ModularPageExtension添加了一个名为"Modules"的内容模块区域。您可以添加额外的ContentModuleArea区域

use ChristopherBolt\ContentModules\ContentModuleArea;
use ChristopherBolt\ContentModules\ModularPageExtension;

class TwoColumnPage extends Page {
	private static $has_one = array(
        "RightColumn" => ContentModuleArea::class
	);
    private static $owns = array(
        "RightColumn"
    );
	private static $extensions = array(
        ModularPageExtension::class
	);
	function getCMSFields() {
		$fields = parent::getCMSFields();
		
		$fields->addFieldsToTab('Root.RightColumn', $this->getModularCMSFields('RightColumn', 'Right Column'));
				
		return $fields;
	}
}

您可以在页面模板中使用$RightColumn显示您的"右侧列"内容模块

自定义模板中模块的堆叠方式

默认情况下,模块只是简单地堆叠在一起,但您可能希望将它们堆叠成列表

themes/mytheme/templates/ContentModuleArea.ss

<ul>
<% loop $Modules %>
<li>$forLoop</li>
<% end_loop %>
</ul>

如果您想在页面上以不同的方式堆叠不同的ContentModuleAreas,那么您可能更喜欢在页面模板中添加循环

<% with $RightColumn %>
<ul>
<% loop $Modules %>
<li>$forLoop</li>
<% end_loop %>
</ul>
<% end_with %>

控制页面上允许的模块类型

您可以限制可以添加到页面的内容模块类型,或者如果您在页面上有多个模块区域,您可以针对每个区域设置限制。

如果您只有默认的"Modules"模块区域或如果您有多个模块区域并希望为所有区域设置相同的限制

	private static $allowed_modules = array(
        TextModule::class,
        ImageModule::class,
        StaffProfileModule::class
	);

如果您有多个模块区域,您可以像这样为每个区域设置限制

	private static $allowed_modules = array(
		'Modules' = array(
			TextModule::class,
			StaffProfileModule::class
		),
		'RightColumn' = array(
			ImageModule::class,
			RightTextModule::class,
			LinksModule::class
		),
	);

安装

composer require christopherbolt/silverstripe-contentmodules ^2