读者提问:为什么选择 Statamic 作为 Laravel News 的 CMS?
发布于 作者: Eric L. Barnes
Steve McDougall 在 Twitter 上问了一个关于 Laravel News 在 Statamic 上重新设计和重新发布的很棒的问题
我非常想阅读 @laravelnews 团队中某位成员撰写的文章,关于他们如何适应 @statamic 以及选择它作为 CMS 系统的原因。了解他们可能如何适应以及所发现的任何意想不到的好处会非常有趣。
这些问题的答案无法用一条推文表达,因此我想逐点说明,并分享一些关于这一切是如何发生的幕后故事。
为什么选择 Statamic
自从 Statamic 首次发布以来,我一直关注着它。查看我的 Statamic 购买历史记录,我从 v1 开始就一直是客户,但一直没有找到合适的时间从旧系统切换过来。直到去年他们发布了 v3,并将其迁移到更类似 Laravel 包的设置后,这一切才发生了改变。
使用 v3,你可以将其安装到任何 Laravel 应用程序中,这意味着我可以保留运行 Laravel News 的许多现有的辅助代码。这些代码包括链接部分、自动化的每日新闻稿、帐户管理等等。知道我可以保留所有这些代码,并获得一个新的控制面板来编写和发布文章,这是一个巨大的胜利。
另一个优势是 Statamic 允许你混合使用数据库和平面文件。我们已经将用户存储在表中,但我们之前的系统存在一个奇怪的矛盾,即我们在两个系统中存储文章作者:用户的表和一个 WordPress 网站。我一直在手动同步它们以保持作者的匹配,这使得允许访客发帖变得相当棘手。
除此之外,我一直希望该网站尽可能地利用 Laravel 社区,并支持那些既是我们同事也是我们的创作者,这让我很感兴趣。
如何适应 Statamic
对我来说,Statamic 是一个学习过程,我还有很多东西要学。从日常发布的角度来看,适应起来非常容易。
网站上的所有文章都存储在一个 Statamic 集合中,每个帖子都有大约 14 个不同的字段集。
这些基本上都与我们在旧网站的 WordPress 中使用的相同,因此发布方面并没有太大变化。
改变的是所有内容的存储方式。Statamic 让你可以选择使用平面文件或数据库,对于我们当前的版本,我们使用的是平面 Markdown 文件。仅文章就有超过 2500 个,虽然数据库在我们的规模上可能表现更佳,但 Statamic 拥有几个内置的缓存选项,使其不再是一个问题。
我们使用它们的静态缓存系统,它的工作原理是:当页面首次加载时,它会存储一个静态 HTML 文件,然后 Nginx 会尝试在该文件存在的情况下提供服务。如果不存在,则会创建该文件,并在下次提供服务时使用它。当获得缓存版本时,这使得速度变得非常快。
当然,对于 2500 个帖子、十几个分类和大量标签来说,它生成的静态文件数量非常庞大。我们不打算经常清理它们,只有在需要进行设计调整时才会进行清理。但是,我们在发布时会删除一些重要的页面,例如首页和父分类页面。
为了配合静态缓存,无论何时需要网站上某个部分的最新数据,我们都使用Alpine.js 来获取数据。例如,在每个帖子详细信息页面下方有一个部分显示最新帖子。
以下是与 Alpine 配合使用的内部 Statamic Antlers 代码,它可以保持数据的最新性
<ul x-data x-init="fetch('/ajax/latest').then(response => response.text()).then(html => $el.innerHTML = html)" class="lg:gap-16 sm:gap-8 grid grid-cols-12 col-span-10 col-start-2 gap-6"> {{ collection:articles limit="3" :id:not="id" }} {{ partial:articles/card class="text-white" }} {{ /collection:articles }}</ul>
默认情况下,列表项预先填充了文件最初缓存时最新的内容,但尽快就会被最新的“真实”内容替换。这样,即使请求失败,它也拥有数据。
最后,在 ajax/latest
路由上,它从辅助 Redis 缓存中提取数据。因此,它仍然是缓存的,但不像帖子页面那样是永久缓存的。
我们使用的另一个包是Alpine Turbo Links。这是该网站在页面之间切换时感觉如此快的原因之一,安装它后,Turbolinks 会自动获取页面,替换其 <body>
,并合并其 <head>
,所有这些操作都不会造成完整页面加载的成本。
任何意想不到的好处?
我认为现在还为时过早,但我注意到的一件事是我喜欢 Statamic 控制面板。它比我们的旧系统感觉好多了。
另一个巨大的好处是,由于 Statamic 是基于 Laravel 构建的,因此当我遇到任何问题时,我感觉非常舒服地进行源代码分析,并找出它的工作原理。
此外,Statamic 社区也非常有用,从回答我的新手问题到修复我首次发布时犯的一些错误,无所不能。
我相信,随着 Statamic 不断发展,吸引越来越多的开发人员,我将获得更多的好处。