关于 Craft CMS 的一些想法

Avatar of Marko Ilic
Marko Ilic

DigitalOcean 为您旅程的每个阶段提供云产品。 立即开始使用 200 美元的免费积分!

看看今天的 CMS 场景,有 150 多个选择 - 还不包括人们可能运行的任何内部定制替代方案。“内容管理系统”一词很广,大多数网站构建器都符合 CMS 模型。Craft CMS 是该领域中一个相对较新的选择(于 2013 年推出),对我来说很突出。

我的团队和我过去两年一直在使用 Craft CMS 来开发和维护几个网站。 我想与您分享我使用此系统的经验。

请注意,此评论侧重于我们使用 Craft 的经验,因此没有尝试将其与其他可用选项进行比较。 对我们来说,使用 Craft 是一种非常积极的体验,我们让读者自行将其与您可能遇到的其他体验进行比较。

首先,简要介绍 Craft

Craft 是 Pixel & Tonic 的作品,这是一家位于俄勒冈州的小型软件开发公司。 由 Brandon Kelly 创立,以优质的 ExpressionEngine 附加组件而闻名。 在开发一些最常用的附加组件时,Pixel & Tonic 开始构建自己的 CMS,称为“Blocks”。 这一切发生在 2010 年,在开发过程中,名称改为 Craft CMS。

从市场来看,Craft 已经被广泛采用。 在撰写本文时,有 大约 70 000 个网站 使用 Craft。

显示过去五年市场的增长情况。

Craft 的目标是让开发人员和内容管理人员的生活更愉快。 2015 年,Craft 凭借 CMSCritics 颁发的 最佳开发者 CMS 奖证明了这一点。 这些年来,Craft 赢得了 多个奖项,证明 Craft 正在走上正轨。

当有人问我 Craft 在整个 CMS 环境中的位置时,我说它面向中小型企业,这些企业拥有内容管理人员团队,他们不需要完全定制的解决方案。

从本质上讲,Craft 与 WordPress 和其他传统产品是同一类型的 CMS - 只是具有不同的风格和内容管理方法,这使其在其他产品中脱颖而出,而这正是我们接下来要介绍的。

Craft 的要求

服务器要求 用于 Craft 设置非常简单且标准。 Craft 需要以下内容

  • PHP 7.0+
  • MySQL 5.5+ 使用 InnoDB、MariaDB 5.5+ 或 PostgreSQL 9.5+
  • 分配给 PHP 的至少 256MB 内存
  • 至少 200MB 的可用磁盘空间

开箱即用,您可以快速启动和运行 Craft。 您不需要广泛的 PHP 或数据库背景即可入门。 实际上,您几乎不需要任何 PHP 知识。 这使得入门门槛和从安装到开发的时间都非常短。

它既简单又复杂

Craft 的独特之处在于它既是一个简单的 CMS,又是一个复杂的 CMS。

您可以使用 Craft 设计和开发复杂的网站,这些网站是使用 PHP、数据库和查询优化构建的,并严重依赖它们。

但是,您也可以使用 Craft 设计和开发简单的网站,在这些网站中,您无需执行任何这些操作。

这对我来说是一个主要卖点。 使用它入门非常简单,几乎不需要任何东西,但如果您需要做一些更复杂的事情,您也可以做到。 它永远不会让您感觉自己在“破解”它,去做它不适合做的事情。

Craft 将所有字段创建和设置抽象到管理面板。 您只需将其指向正确的 Twig,然后使用您连接的字段即可。 此外,它开箱即用地提供本地化和多站点管理,无需插件。 这实际上是它与其他内容管理系统的不同之处。 您可以创建结构、字段和所有表单,而无需触及任何代码。

某些 CMS 喜欢为您做出很多决定,而这有时会导致不必要的膨胀。 前端和后端性能对我来说非常重要,因此我很欣赏 Craft 将很多这样的事情留给了我,如果我需要的话。 它提供完整的定制体验,开箱即用地支持初学者,但不限制专业人士。

Craft 的模板引擎

某些开发人员对此并不热衷,但 Craft 使用 Twig 作为其模板引擎。“使用”一词应强调为一项要求,因为在模板内部的任何地方都没有编写原始 PHP 的选项。 以下是我对此的看法

  1. 它以一种标准化的方式,当我查看团队的拉取请求时,我不希望看到 100 行没有意义的自定义 PHP 代码。 我只看到与模板相关的代码。
  2. Twig 已经足够强大,可以涵盖几乎所有用例,同时又可以扩展到其他任何内容。

假设您不喜欢 Twig,或者您宁愿使用最新技术之一(您好,静态站点生成器!)。 Craft 的模板系统不是从 Craft 中获取内容的唯一方法。 从 Craft 3.3 开始,它提供了“无头”模式和 GraphQL 内置于 Craft 的 Pro 功能。 这意味着您可以使用 GatsbyGridsome 等工具来构建静态站点,享受 Craft CMS 的舒适性。 这使 Craft 与 WordPress 等提供自己的 REST API 来获取内容以在其他地方使用的方式保持一致。

在 Craft UI 内置有一个功能齐全的 GraphQL 编辑器。

说到 REST,如果说您不喜欢 GraphQL,Craft 甚至提供了一个选项。 Element API 是一个 REST 只读 API,可以通过第一方 Element API 插件 使用。 再次,Craft 在最低限度上提供您需要的东西,并且可以扩展以做更多的事情。

Craft 的可扩展性

这使我想到我的下一个观点:Craft CMS 非常可扩展。 它基于 Yii Framework,这是一个众所周知的 PHP 框架,它强大而快速。 这很重要,因为所有可扩展性都是通过使用 Yii 和 Craft API 编写的模块或插件实现的。 模块是 Yii 模块 传承的概念,它们提供了一种扩展核心功能而不更改源代码的方法。 另一方面,插件是 Craft 的概念,它们与模块的作用相同,但可以安装、禁用和删除。 如果您想了解更多信息,可以在 Craft 文档 中找到。

模块和插件都可以完全访问 Craft 和 Yii 的 API。 这是一个巨大的优势,因为您可以从 Yii 的社区和文档中受益。 习惯了 Yii 之后,编写插件非常容易且令人愉快。 我的团队在过去两年中构建了多个自定义插件和模块,例如 Pardot 表单集成、Google reCAPTCHA 集成、自定义搜索行为等等。 本质上,一切皆有可能。

编写插件和模块在 文档中有所介绍,但我认为 Craft 的系统还有提升空间。 我建议打开 GitHub 上一个知名的插件,以了解它是如何完成的,因为我发现这比文档更有用。

一开始,你可能会觉得系统的这方面很难,但一旦你理解了结构,就会变得更容易,因为代码结构本质上由模型、视图和控制器组成。它就像在你的 CMS 中构建一个小型的 MVC 应用程序。以下是我使用过的插件结构的一个例子。

.
├── assetbundles
├── controllers
├── migrations
├── models
├── records
├── services
├── templates
│   ├── _layouts
│   └── _macros
├── translations
│   └── en
├── variables
├── icon-mask.svg
├── icon.svg
└── Plugin.php

如果你不想编写 PHP 代码并使用 Yii/Craft 进行操作,你可以随时从官方的 Craft 插件商店 下载插件。这里有各种各样的插件,从图像到在 WYSIWYG 编辑器上构建。Craft 做得很好的事情之一是,**你可以在开发模式下随意尝试付费插件**,而不必先购买。

Craft 插件屏幕。

在过去两年里,我们尝试过多种插件,其中有一些不仅值得推荐,而且我发现自己几乎在每个项目中都使用它们。

  • ImageOptimize – 对于性能爱好者来说,这必不可少,因为它提供了一种自动将上传的图像转换为具有压缩功能的响应式图像并转换为更现代格式的方法。
  • Navigation – Craft 没有内置导航管理,即使你可以在技术上使用自定义字段来实现。但是 Verbb 在这个简单的插件方面做得非常棒,对于我们来说,它是我们每个项目都会使用到的第一个插件之一。
  • Seomatic – 它相当于 WordPress 中的 Yoast SEO 插件:一个开箱即用的解决方案,可以满足你所有的 SEO 需求。
  • Redactor – 这必不可少,应该包含在每个项目中。Craft 没有自带 WYSIWYG 编辑器,但是有了 Redactor,你就可以获得一个 Redactor 字段,其中包含一个。
  • Super Table – 这个强大的插件为你提供了创建可重复字段的选项。你可以使用内置的 Craft 字段类型来创建结构(表格),内容管理器创建内容行。它让我想起了 WordPress 的 ACF Repeater

Craft 的作者体验

虽然到目前为止我们已经涵盖了开发体验,但 Craft 做得非常好的地方(在我看来,它超过了其他 CMS)是作者体验。一个 CMS 可以做各种各样奇妙的事情,但最终它必须易于写作。

Craft 提供了一套直接的选项,可以在管理面板中直接配置网站。

CMS 的整个概念是它由两个简单的东西构建:字段栏目,其中字段被添加到栏目中,内容管理器创建条目。

Craft 的默认帖子编辑器很简单,适合博客帖子。需要更多字段或栏目?这些可以在网站设置中配置,从而为任何类型的內容发布提供了一个更加开放的工具。

最棒的作者功能之一是版本控制。“等等,什么?”你问。是的,所有内容都以一种允许作者跟踪更改并回滚到任何版本的以前版本的方式进行版本控制。

Craft 显示每个条目的修订版本。

在任何时候,你都可以回到任何一个版本,并将其用作当前版本。在你尝试过它之前,你不会知道你有多需要这个功能。对我来说,它带有一种安全感,你不会丢失任何人的编辑或更改,就像 Git 和开发人员一样。

有趣的是,Craft 解决了内容管理中最困难的事情之一(在我看来),那就是 **本地化**。人们在 2020 年仍然觉得这件事很难,通常会放弃,因为它在实现和在 UI 中向作者正确呈现方面都很困难。

你可以创建任意多个网站。

哦,你可以在**一个 Craft 3 实例中托管多个网站**。你可以在不同的域、不同的条目内容版本和使用不同的模板集定义一个或多个网站。就像 Craft 中的一切一样,它做得很简单且开放(以一种好的方式),所以其他网站是什么取决于你。你可以创建一个使用相同语言但内容不同的网站,也可以创建一个使用另一种语言的网站,从而解决本地化问题。

以上所有功能都**内置在 Craft 中**,对我来说,这是良好作者体验的必要条件。一旦你开始用插件修补基本的作者功能,良好的作者体验就会丢失。这是因为通常当你想要添加功能时,有多个插件(方法)可以做到,这会在同一个平台上但不同的实例上产生不同的作者体验。

Craft 的社区

值得强调的是,拥有一个可以依靠的社区的重要性。在某种程度上,你可能正在阅读这篇文章,因为你喜欢从开发社区的其他人那里学习。CMS 也一样,Craft 拥有一个很棒的开发人员社区。

Craft 的 Stack Exchange 上充满了问题和答案,但很多信息需要更新以反映 Craft 3。

同时,该社区仍然很小(与 WordPress 相比),并且没有很长的历史记录,尽管社区中有很多成员已经存在很长时间了,他们来自 ExpressionEngine。这不仅是因为 Craft 本身是比较新的,还因为并非每个人都会在 Craft CMS 的 Stack Exchange 上发帖,以至于许多旧的答案甚至没有更新到 Craft 3。你实际上会发现大多数社区成员都在 Discord 上闲逛,在那里,甚至 Craft 的创建者,Pixel & Tonic,都很活跃,愿意回答问题。当你看到 Craft 核心成员和大型插件创建者,比如来自 nystudio107 的 Andrew (向性能狂热分子致敬),几乎 24/7 在那里提供帮助时,这一点非常有用。

Craft 的 Discord 总是有人可以帮助你。即使是核心团队也经常回复。

我还想提一下,可用的学习资源有限,但是,你几乎不需要它们。正如我之前所说,Craft 和 Twig 的组合足够简单,你不需要完整的课程来学习如何构建博客。

Craft 的会议,Dot All,本身就是一个很棒的资源。Chris 去年参加了会议,并进行了精彩的演讲,该演讲 向公众开放

最后,Craft 使用并执行开源。对我来说,开源总是件好事,因为你将代码公开给更多人(开发人员)。Craft 做得很好。整个平台以及插件都是开源的。

定价

这是房间里的大象,因为人们对内容管理系统的收费有不同的看法。是的,Craft 有一个 简单的定价模式

  1. 对于单个用户帐户,小型网站是免费的。
  2. 第一个年度更新的费用是 299 美元/项目。此后每年仅需 59 美元,但他们不会强迫你支付更新费用,你可以随时以相同的价格启用许可证更新一年。
Craft 的 Solo 版本完全能够满足许多网站的需求,但付费的 Pro 选项对于高级功能和用例来说是一个经济实惠的升级。

我认为这个定价模式很公平,并不算贵,至少不会让人望而却步。Craft 为你提供了一个小型网站的免费许可证,你可以为朋友或家人构建。另一方面,Craft 更像是一个专业的平台,用于构建中型企业网站,因此他们的许可证成本可以忽略不计。在大多数情况下,开发人员(或代理商)会承担最初的成本,这样客户就不必担心这个定价。

哦,还要感谢 Craft 提供了在本地域上免费试用 Pro 版本的选项。这也适用于所有插件。

结论

最后,我要感谢 Craft CMS 和 Pixel & Tonic 团队,感谢他们带给我们的精彩旅程。Craft 满足了我们几乎所有需求,我们将在未来的项目中继续使用它。它灵活地适应每个项目,感觉像是为该用例构建的 CMS。

对我来说,Craft 归根结底是一个内容管理框架。它开箱即用,仅仅是需要组装到用户需求的螺母和螺栓。这就是 Craft 脱颖而出,以及它提供出色的作者和开发人员体验的原因。

如你所见,它的许可模式对于单个用户是免费的,你可以试用它,并在评论中留下你的反馈。