大家好,我认为这可能是也可能不是编程问题。但是我试着在具体的论坛上问这个问题没有运气。希望有人能在这里给我一个线索..
我是否可以为每个用户组在composer中为属性设置不同的默认值?
让我详细解释一下我的问题。我的客户有大约60个组织单位(每个单位都有自己的用户组)。对于每个单元,他们都希望拥有自己的页面列表。仅包含由单位成员发布的所有文章。除此之外,组织单位的所有帖子也应该聚合在全球新闻类别的子类别上。所以我构建的内容结构就像这样
组织单位目录[页面类型]
新闻[页面类型]
对于上述内容结构,我将“NEWS”顶级类别和“ORGANIZATIONAL UNIT DIRECTORY”设置为page_type,并为新闻子类别创建属性(我将其命名为“news_location”)。并创建另一个属性来确定单位(我将其命名为“单位”)。
现在,我的问题是,我如何在作曲家为特定用户组预设属性“news_location”和“unit”。例如,对于“单元1”的成员。我希望他们有一个独特的作曲家,其属性“news_location”预设为“组织单位信息”,属性“单位”预先设置为“单位1”。并且他无法更改这些属性,因此我们可以确保他们只会在适当的地点/类别上发布新文章。
我一直在使用concrete5 CMS,但无法找到任何方法。我应该挖掘代码并为此创建自己的模块吗?
就是这样......期待解决方案。如果我的问题太复杂,我很抱歉:p
答案 0 :(得分:1)
肯定没有内置功能允许您在Composer中为不同的用户组设置不同的默认属性值(事实上,我甚至认为可以设置 any < / em>属性的默认值 - 即使它与所有用户的默认值相同。)
您可以覆盖核心CollectionType
类 - 在getComposerContentItems
方法中,您可以编写一些代码来检查当前页面类型,检查每个属性Key,以及根据默认值放置的某些属性在当前用户的组中。
但真正困难的部分实际上是在属性上设置值。在Concrete5中没有优雅的方法 - 属性值始终与属性所分配的对象(例如,页面,文件或用户)相关联。我过去曾尝试在属性上任意设置任何默认值,但没有简单的方法可以做到这一点。 (对于像文本框和复选框这样的简单属性类型来说,这并不难:但是对于像DateTime和Select类型这样的更复杂的东西,它太复杂了,以至于我甚至懒得去试图它出来了。
您可能想要尝试的是创建自己的属性类型,然后在属性类型本身中,您将了解如何基于用户组设置默认值(如果没有值已存在)。以下是我的一些基本代码,它们演示了您自己的属性类型所需的最低限度: https://github.com/jordanlev/c5_minimal_attribute_type
另请查看C5文档以获取更详细(但也更易于理解)的解释和示例代码:http://www.concrete5.org/documentation/developers/attributes/overview
祝你好运!