读者提问:为什么选择 Statamic 作为 Laravel News 的 CMS?

发布于 作者:

Reader Question: Why did you choose Statamic for Laravel News? image

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 不断发展,吸引越来越多的开发人员,我将获得更多的好处。

Eric L. Barnes photo

Eric 是 Laravel News 的创建者,自 2012 年以来一直关注 Laravel。

归档于
Cube

Laravel 新闻稿

加入 40,000 多名其他开发人员,绝不错过新的技巧、教程等等。

Laravel Forge logo

Laravel Forge

轻松创建和管理您的服务器,并在几秒钟内部署您的 Laravel 应用程序。

Laravel Forge
Tinkerwell logo

Tinkerwell

Laravel 开发人员必备的代码运行器。使用 AI、自动补全和本地和生产环境的即时反馈进行调试。

Tinkerwell
No Compromises logo

No Compromises

Joel 和 Aaron 是来自 No Compromises 播客的两位经验丰富的开发者,他们现在可以为您的 Laravel 项目提供服务。 ⬧ 固定价格 7500 美元/月。 ⬧ 无需冗长的销售流程。 ⬧ 无需合同。 ⬧ 100% 满意退款保证。

No Compromises
Kirschbaum logo

Kirschbaum

提供创新和稳定性,确保您的 Web 应用程序成功。

Kirschbaum
Shift logo

Shift

正在运行旧版本的 Laravel?即时、自动化的 Laravel 升级和代码现代化,保持您的应用程序更新。

Shift
Bacancy logo

Bacancy

使用经验丰富的 Laravel 开发人员(4-6 年经验)为您的项目注入活力,每月只需 2500 美元。获得 160 小时的专业支持和 15 天无风险试用。立即安排电话会议!

Bacancy
Lucky Media logo

Lucky Media

立即获得幸运 - 拥有超过十年的经验,是 Laravel 开发的理想选择!

Lucky Media
Lunar: Laravel E-Commerce logo

Lunar: Laravel 电子商务

Laravel 电子商务。一个开源包,将现代无头电子商务功能的力量带入 Laravel。

Lunar: Laravel 电子商务
LaraJobs logo

LaraJobs

官方 Laravel 工作板

LaraJobs
SaaSykit: Laravel SaaS Starter Kit logo

SaaSykit: Laravel SaaS 启动工具包

SaaSykit 是一款 Laravel SaaS 启动工具包,包含运行现代 SaaS 所需的所有功能。付款、漂亮的结账流程、管理面板、用户仪表板、身份验证、现成组件、统计数据、博客、文档等等。

SaaSykit: Laravel SaaS 启动工具包
Rector logo

Rector

您实现无缝 Laravel 升级、降低成本和加快创新以帮助企业成功的合作伙伴

Rector
MongoDB logo

MongoDB

通过强大的 MongoDB 和 Laravel 集成增强您的 PHP 应用程序,使开发人员能够轻松高效地构建应用程序。支持事务、搜索、分析和移动用例,同时使用熟悉的 Eloquent API。探索 MongoDB 如何将您的 Laravel 应用程序转变为灵活的现代数据库。

MongoDB
Maska is a Simple Zero-dependency Input Mask Library image

Maska 是一个简单的无依赖输入掩码库

阅读文章
Add Swagger UI to Your Laravel Application image

将 Swagger UI 添加到您的 Laravel 应用程序

阅读文章
Assert the Exact JSON Structure of a Response in Laravel 11.19 image

在 Laravel 11.19 中断言响应的精确 JSON 结构

阅读文章
Build SSH Apps with PHP and Laravel Prompts image

使用 PHP 和 Laravel Prompts 构建 SSH 应用程序

阅读文章
Building fast, fuzzy site search with Laravel and Typesense image

使用 Laravel 和 Typesense 构建快速、模糊的网站搜索

阅读文章
Add Comments to your Laravel Application with the Commenter Package image

使用 Commenter 包在您的 Laravel 应用程序中添加评论

阅读文章