【问题标题】:how to make news and articles using the same silverstripe news module?如何使用相同的 silverstripe 新闻模块制作新闻和文章?
【发布时间】:2016-11-03 12:13:33
【问题描述】:

我需要在我的 silverstripe 网站中加入新闻和公告,新闻和公告的结构完全相同,并且都使用 https://github.com/nyeholt/silverstripe-news。在 html 模板中,我有两个部分,一个用于新闻,另一个用于公告。

实现这个的正确方法是什么:

  • 我是否应该复制并粘贴 /news 模块文件夹,将一个用于新闻,另一个用于公告。
  • 或添加另一个 db 字段作为标志来指定这是新闻文章还是公告文章,但是在 cms 中用户每次都必须检查。
  • 或者还有什么,我不知道

【问题讨论】:

  • 肯定不要复制/粘贴。编程规则:不要重复自己!您想防止复制/粘贴代码。当你的项目越来越大时,它真的很糟糕,几乎不可能维护。
  • 如果规定新闻需要缩略图而不是公告需要缩略图,它们是否应该分开。和其他规则。
  • 它们应该始终分开。你真的永远不应该重复自己......完成的解决方案(比如你想使用的那个)的问题是,进入代码并按照你想要的方式更改它通常并不容易。所以我不知道你的技能有多好......但是这个仅用于新闻的缩略图的简单规则也可以通过简单的 IF 条件来完成......

标签: php silverstripe


【解决方案1】:

复制文件夹不会得到您期望的结果,除非您重命名新文件夹一侧的所有类。

基本上,该文件夹只是放置类的地方,而不是您在实际请求新闻文章时访问的东西,您为此使用 SilverStripes 路由。

静态资产是从模块文件夹加载的东西。

向扩展添加新行为的最佳方法是使用 DataExtension。

https://docs.silverstripe.org/en/3.4/developer_guides/extending/extensions/

如果模块使用站点树来放置“新闻持有人”,则另一种方式是。然后,您还可以选择创建两个具有不同名称的持有人,然后如果您想显示特定父母的列表,只需使用与正确持有人相关的 parentId 进行过滤。

第三种选择是在 mysite 下添加一个新类,该类扩展模块类并仅覆盖一些方法以满足您的需求。

【讨论】:

  • 我决定将news文件夹复制到一个新模块中,我已经阅读了代码,看起来很容易更改。我将重命名这些类(只有 2 个类)(NewsArticle -> AnnouncementArticle ...等)。我认为这是最好和最简单的方法,因为根据我的要求,新闻和公告会有所不同,我不想在这里和那里使用 IF 语句。
  • 我强烈建议您这样做。如果内容 99% 相同,将扩展名从新闻更改为公告是没有意义的。如果你走这条路,你只需要管理对两个不同扩展的更新。
  • 我在答案中添加了第三个选项
  • 呃..我提醒:我强烈建议您不要这样做:)..当然,在某些情况下这也是一种有效的方法..
  • 是的,我认为您提供的第三个选项最适合这种情况。谢谢你:)
猜你喜欢
  • 2017-01-27
  • 2014-10-03
  • 1970-01-01
  • 2016-08-31
  • 1970-01-01
  • 2022-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多