我目前正试图通过让内容更具吸引力来为SilverStripe网站添加爵士乐。该网站是响应式的,但所有这一切意味着当前导航栏/标题在达到移动断点时会捕捉到更具移动性的风格。
它的长短是,我的主要page.ss
就是这样:
<html>
<head>
<title>$Title</title>
</head>
<body>
$Header
$Layout
$Footer
</body>
</html>
使用$Layout
呈现基本页面的一些变体。我们有几个布局旨在让我们的网站管理员页面更具吸引力 - 例如我们有一个手风琴类型页面,其中有许多手风琴部分DataObjects
,它将页面显示为带有开放的手风琴页面/关闭javascript功能。
但这还不够。我想让网站管理员在CMS中更灵活地创建有趣的页面,而不必创建数百种不同的页面类型。
我正在考虑创建一个模块来摆脱所有页面的主$Content
字段,而是插入一种网格系统管理字段。网站站长可以添加行(DataObject
),然后将这些行拆分为多个部分(另一个DataObject
)。这些部分将有一个由TinyMCE管理的内容字段,就像页面一样。然后在前端我将这些行和部分映射到响应式网格系统。
对于各个部分的变体,我将添加稍微不同的类(有点像具有不同的页面类型)。这些部分将有.ss和.css(以及可能的.js)来控制自己的外观。
我的问题是,其他人如何处理这个问题?我的想法听起来有点矫枉过正吗?或者对于模块来说这听起来不错?
-
对于我想要实现的一些例子,这个页面就是一个很好的例子:
http://www.wingsforlife.com/en/research/
内容分为不同的部分,可以在调整页面大小时更好地控制。在整个网站中,内容也是多种多样的,有时它会在一个列中,有时则是两列,当窗口较小时,它会捕捉到一列。
在主页上,如果向下滚动,则圈内会显示4个链接,其中包含数字和部分文字:http://www.wingsforlife.com/en/
这是我在TinyMCE中看不到的东西(这很公平,因为TinyMCE只是一个基本的内容编辑器,而不是网页设计工具)。
答案 0 :(得分:1)
有关使用窗口小部件构建网页的实现,请查看https://github.com/burnbright/silverstripe-widgetpages。还https://github.com/g4b0/silverstripe-widget-pages-extension。
答案 1 :(得分:0)
这可以通过一些GridField替换链接到数据库中的Content字段的HTMLEditorField来轻松实现,管理构成你可能称之为'ContentParts'的DataObjects。我们已经在一些项目中使用了这种方法,以允许更多内容元素的呈现灵活性。
只需将一些DataObject绑定到Page类:
private static $has_many = array(
'ContentParts' => 'ContentPart'
);
然后,使用GridField在getCMSFields中管理它们:
$gridFieldConfig = GridFieldConfig_RecordEditor::create();
$field_ContentParts = new GridField('ContentParts', 'Content Parts', $this->ContentParts(), $gridFieldConfig);
在模板中呈现它们的最简单方法如下:
<% loop ContentParts %>
<section>...</section>
<% end_loop %>
当然,您希望拥有不同的内容部分,因此您可能希望使用自定义字段创建ContentPart
的子类,并使用GridFieldAddNewMultiClass
组件将它们添加到GridField(它是GridFieldExtensions模块,可在此处找到:https://github.com/ajshort/silverstripe-gridfieldextensions)
HTH