首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从工程(而不是用户)的角度理解无头CMS体系结构

从工程(而不是用户)的角度理解无头CMS体系结构
EN

Software Engineering用户
提问于 2020-04-27 11:09:42
回答 1查看 184关注 0票数 -2

TLDR:

在无头CMS (或解耦CMS)中,前端检索的内容需要被识别(以某种方式)。这就是我被困的地方。我可以描述我对平台不可知论的内容如何被识别的猜测(参见下面的猜测)。但是,我在任何地方都找不到尝试和测试方法的真实确认,详细说明解耦后的前端如何以一种有意义的、可识别的方式从内容存储库请求内容。

在哪里可以找到对无头CMS (或解耦CMS)体系结构的这一核心方面的直接描述?

最近我对“无头CMS”这个词很感兴趣。

似乎不乏文章和博客文章解释:

  • 什么是无头CMS?
  • 无头CMS和传统CMS有什么区别?

但是,这些解释似乎总是指向打算开始使用无头CMS的读者,而不是那些想尝试编写无头CMS的工程师。

最后,在反复尝试阅读我正在阅读的文章之后,我抓住了构建在无头CMS中的单一的、根本性的创新:

  • 在无头CMS体系结构中,内容和结构是完全分离的。

网络开发的一种传统方法是在以下几个方面保持实质性的分离:

  • 结构(HTML)
  • 介绍(CSS)
  • 行为(JS)

在这个模型中,书面和媒体内容没有被列为(第四)单独的关注点,因为它在整个结构中隐式地交织在一起。

例如:

  • 您可以使用HTML标记:<button type="button">Launch Jaguar Slideshow</button>
  • 并将其表示为一个大的红色按钮,其中包含大写的白色文本,并使用CSS显示一个下拉阴影。
  • 并启用它来触发控制台的创建和下拉,其中包含使用Javascript的动画幻灯片。

但是,传统上不能将文本内容分开:

  • 推出美洲虎滑雪板

从标记结构中:

  • <button type="button"></button>

但是--如果我正确理解--这就是无头CMS所能实现的:

  • 在一个页面上,<button type="button"> . </button>可能包含:启动美洲虎
  • 在另一个页面上,<button type="button"> . </button>可能包含:启动Leopard
  • 在第三页中,<button type="button"> . </button>可能包含: Launch等。

到目前为止,我甚至不确定我是否正确地理解了一切--我也从未使用过模板语言--但是,我的第一个(附带的)问题是:

这样做,本质上是使无头CMS成为概念上的子项目:

  1. 传统的CMS;以及
  2. 模板语言,如胡子,Handlebars.js,HAML,Pug,Slim,Nunjucks等。

另外,虽然上面的模板语言倾向于只使用HTML,但无头CMS中的模板引擎类型会将内容插入到任何结构中(即。不仅在web文档中进入HTML,而且也进入RSS提要的XML,或者进入社交媒体平台组件,或者进入本机应用程序的UI结构等等)。

我的第二个主要问题是:

如何才能使内容与结构脱钩呢?

我最好的猜测是类似于下面的JSON,其中我尝试只表达内容与自身的关系(因此它在结构上是不可知的,并且可以被查询并返回到任何结构中)。

代码语言:javascript
复制
 {
   "Summary":{
      "Title":"Apples",
      "Created":"[TIMESTAMP HERE]",
      "Last Modified":"[TIMESTAMP HERE]",
      "ShortDesc":"An 8-10 word description of Apples here",
      "LongDesc":"A 20-30 word intro to Apples here."
   },

   "Related":{
       "Parents":[
          "Woodland_Fruit"
       ],
       "Siblings":[
          "Blackberries",
          "Cherries",
          "Pears"
       ],
       "Children":[
          "Granny Smith",
          "Braeburn",
          "Gala",
          "Red Delicious"
       ]
   },

   "Media":{
      "Images":{
         "Hero_1":{
            "Sizes":[

            ],
            "URL":"[URL HERE]",
            "Title":"Title Here",
            "Alt":"Alternative text here",
            "Created":"[TIMESTAMP HERE]",
            "Credits":{
               "Photographer":""
            },
            "Licence":{
               "Type":"",
               "URL":"",
               "Holder":""
            }
         },
         "Primary_1":{
            "Sizes":[

            ],
            "URL":"[URL HERE]",
            "Title":"Title Here",
            "Alt":"Alternative text here",
            "Created":"[TIMESTAMP HERE]",
            "Credits":{
               "Photographer":""
            },
            "Licence":{
               "Type":"",
               "URL":"",
               "Holder":""
            }
         },
         "Associated_1":{
            "etc.":"etc."
         },
         "Associated_2":{
            "etc.":"etc."
         }
      }
   },

   "Editorial":{
      "Primary":{
         "Title":"Hesperides and Beyond",
         "Author":"Ann Onne",
         "Created":"[TIMESTAMP HERE]",
         "Last Modified":"[TIMESTAMP HERE]",
         "Last_Modified":"[TIMESTAMP HERE]",
         "Sections":[
            {
               "Paragraphs" : [
                  {
                     "Paragraph": "[SECTION 1, PARAGRAPH 1 HERE]",
                     "Pull_Quotes": [
                         "PULLQUOTE HERE"
                     ]
                  },

                  {
                     "Paragraph": "[SECTION 1, PARAGRAPH 2 HERE]",
                     "Pull_Quotes": [
                        "PULLQUOTE HERE",
                        "PULLQUOTE HERE"
                     ]
                  }
               ]
            },

            {
               "Section_Heading" : "[SECTION HEADING HERE]",

               "Paragraphs" : [
                  {
                     "Paragraph": "[SECTION 2, PARAGRAPH 1 HERE]"
                  }
               ]
            }
         ]
      },

      "Secondary_1":{

         "Sections":[
            {
               "Section_Heading" : "[SECTION 1 HEADING HERE]",

               "Paragraphs" : [
                  {
                     "Paragraph": "[SECTION 1, PARAGRAPH 1 HERE]"
                  }
               ]
            },

            {
               "Section_Heading" : "[SECTION 2 HEADING HERE]",

               "Paragraphs" : [
                  {
                     "Paragraph": "[SECTION 2, PARAGRAPH 1 HERE]"
                  }
               ]
            },

            {
               "Section_Heading" : "[SECTION 3 HEADING HERE]",

               "Paragraphs" : [
                  {
                     "Paragraph": "[SECTION 3, PARAGRAPH 1 HERE]"
                  }
               ]
            }
         ]
      }
   }
}

(嗯嗯。在您看来,这开始看起来像JSON-LD + Schema.org的伪版本吗?因为这对我来说.)

上面的JSON描述了主题Apples

  • 它有四个部分:SummaryRelatedMediaEditorial
  • 它表示主题Apples具有父主题、同级主题和子主题。
  • 这个主题有相关的媒体(英雄形象,主图像和另外两个相关图像)。
  • 题目还有两篇社论“文章”--一篇是恰当的文章,一篇是补充资料。

到现在为止还好。

但这大部分感觉都像是猜测。

我想确认一下,这种做法是正确的。

这就是我在构建无头CMS时应该如何从结构中分离内容的方法吗?

EN

回答 1

Software Engineering用户

发布于 2020-04-27 14:00:28

内容有结构,标记有结构,网站有结构。这些并不一定是相关的,但在传统的CMS中,它们往往是相互交织的。无头CMS只关注内容,但内容仍然具有结构。对于某些类型的内容,JSON是该内容结构的可行表示。通常会有一个元结构来描述内容如何被构造,CMS的用户将能够定义他们自己的内容结构(或者内容模型、内容类型等等)。基于这个。

这不是无头CMS的工作,插入内容到您的网站或其他任何事情。它只是提供内容,通常是通过一个API,而不需要知道它是如何使用的。因此,与传统的CMS相比,无头CMS不会有模板语言。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/409353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档