如果您曾经遇到过来自客户的无休止的内容修改请求,请举手。 并不是说更改本身很困难,但如果客户可以自己进行修改,会不会更简单一些? 这将为每个人节省宝贵的时间,并让您能够将注意力集中在更重要的任务上。
如果网站构建在平面文件(例如 HTML、CSS 和 JavaScript)而不是 CMS(例如 WordPress)上,则需要其他一些解决方案来编辑内容,而无需直接编辑这些文件。
Tabletop.js 允许我们使用 Google 电子表格作为一种数据存储,通过获取电子表格并使其通过 JavaScript 轻松访问。 它以 JSON 格式提供 Google 电子表格中的数据,然后可以在应用程序中使用,就像从任何其他 API 中提取数据一样。 在本文中,我们将向电子表格添加数据,然后设置 Tabletop 以便它可以将数据从数据源提取到我们的 HTML 中。 让我们直接进入代码!
本文将基于我最初尝试了解 Tabletop 时构建的一个真实 网站。 顺便说一句,我始终建议开发人员使用他们正在尝试学习的任何形式的技术构建应用程序,即使是在观看或阅读教程之后。
我们将使用我制作的 演示,以及它的源 代码 和 电子表格。 我们首先需要一个 Google 帐户 来访问电子表格。
打开一个新的电子表格,并在列中输入您自己的值,就像 我的 一样。 每列的第一格是稍后在 JavaScript 中使用的引用,第二格是网站的实际内容。 例如 header
是引用名称,Please edit me!
是第一列中的实际内容。

接下来,我们将通过点击菜单栏中的“文件”→“发布到网络”将数据发布到网络。

将提供一个链接,但对我们来说在技术上毫无用处,因此我们可以忽略它。 重要的是电子表格(及其数据)现在可以公开访问,以便我们可以为我们的应用程序获取它。
也就是说,我们需要一个链接。 点击页面右上角的绿色“分享”按钮将触发一个模态窗口,该窗口提供电子表格的可共享链接,并允许我们设置权限。 让我们获取该链接并设置权限,以便任何拥有该链接的人都可以查看电子表格。 这样,数据就不会意外地被其他人编辑。

现在是时候在我们项目中初始化 Tabletop 了。 让我们链接到他们托管的缩小文件。 同样,我们可以复制原始的缩小代码,将其放到我们自己的脚本文件中并自行托管它。
这是链接到 Tabletop 的 CDN 的文档文件,以及从 文档 中获取的代码。
<script src='https://cdnjs.cloudflare.com/ajax/libs/tabletop.js/1.5.1/tabletop.min.js'></script>
<script type='text/javascript'>
var publicSpreadsheetUrl = 'https://docs.google.com/spreadsheets/d/1sbyMINQHPsJctjAtMW0lCfLrcpMqoGMOJj6AN-sNQrc/pubhtml';
function init() {
Tabletop.init( {
key: publicSpreadsheetUrl,
callback: showInfo,
simpleSheet: true
} )
}
function showInfo(data, tabletop) {
alert('Successfully processed!')
console.log(data);
}
window.addEventListener('DOMContentLoaded', init)
</script>
将代码中的 publicSpreadsheetUrl
变量替换为电子表格的可共享链接。 看,告诉过你我们会需要这个!
现在到有趣的部分了。 让我们为 HTML 提供唯一的 ID 并将其留空。 然后,在 showInfo
函数内部,我们将使用 forEach()
方法循环遍历每个电子表格列,同时将其与相应的 ID.innerHTML
方法等同,该方法依次通过 ID 将电子表格的数据加载到 HTML 标签中。
function showInfo(data, tabletop) {
data.forEach(function(data) {
header.innerHTML = data.header;
header2.innerHTML = data.header2;
body.innerHTML = data.body;
body2.innerHTML = data.body2;
body3.innerHTML = data.body3;
body4.innerHTML = data.body4;
body5.innerHTML = data.body5;
body6.innerHTML = data.body6;
body7.innerHTML = data.body7;
body8.innerHTML = data.body8;
body9.innerHTML = data.body9;
body10.innerHTML = data.body10;
body11.innerHTML = data.body11;
body12.innerHTML = data.body12;
body13.innerHTML = data.body13;
body14.innerHTML = data.body14;
body15.innerHTML = data.body15;
body16.innerHTML = data.body16;
body17.innerHTML = data.body17;
});
}
window.addEventListener('DOMContentLoaded', init)
这是我的演示中 HTML 的一部分,显示了空标签。 这是一个不错的做法,但可以通过直接从 JavaScript 创建 HTML 元素来进一步抽象。
<!-- Start Section One: Keep track of your snippets -->
<section class="feature">
<div class="intro-text">
<h3 id="body"></h3>
<p id="body2">
</p>
</div>
<div class="track-snippets">
<div class="snippet-left"><img src="img/image-computer.png" alt="computer" /></div>
<div class="snippet-right">
<div>
<h4 id="body3"></h4>
<p id="body4">
</p>
</div>
<div>
<h4 id="body5"></h4>
<p id="body6"></p>
</div>
<div>
<h4 id="body7"></h4>
<p id="body8">
</p>
</div>
</div>
</div>
</section>
嘿,看看! 现在我们可以通过编辑电子表格中的内容来实时更改网站上的内容。
我喜欢这样的东西。……基于 Airtable 的 CMS、Mavo.io 等——都很棒! :)
可能更好的做法是将 publicSpreadsheetUrl 变量保存到 git 未跟踪的单独文件中,并获取该文件以供使用。
这样,您就不会将指向实际上是数据库的链接公开给所有人。
好吧,这个项目几乎是为了演示,所以每个人都可以自己查看电子表格。 此外,除非授予权限,否则没有人可以编辑表格,并且电子表格上的内容或多或少已经是公开的。 但是,除了它是演示之外,您是 100% 正确的。
谢谢 Kel!
这真的很棒。 我想知道是否可以用它来构建电子邮件 CMS。
嗯……我之前没想到。 我会检查一下是否可行
我记得大约 20 年前遇到过一些商业软件,这些软件使用电子表格来更新网页。 这是在 Google 表格出现很久之前。
我从未尝试过,但我会试试这个,只是为了好玩。 :)
Trunao.com 具有一个很棒的功能,可以将您的网格链接嵌入到您的网站上。 这有助于在没有编程的情况下在网站上获得 Trunao 的强大功能。
哇……真是无代码时代。
这太棒了。 我想用它来为电子邮件构建一个 CMS。
自 2003 年以来,我在多个项目中使用了这种架构来启用应用程序测试数据的创作/维护。 最初,我在共享驱动器上使用实际的 Microsoft Excel 表格,这些表格通过 Apache POI 或 JacoZoom 由 Java 应用程序读取。 您可以使用 Office 365,不必使用 Google 表格。
哦,这很有趣……我一定会尝试在 Office 365 上使用它。
非常棒的文章,简单易懂,谢谢。 我已经在使用了。 您是否知道如何将图像 URL 获取到 HTML? 目前,我的页面有一些文章,我正在寻找解决方案,特别是使用 tabletop.js 的动态背景图像。
您将分配图像的 src,就像在这个 w3schools 示例中所做的那样 https://w3schools.org.cn/jsref/tryit.asp?filename=tryjsref_img_src2
您好,我目前正在使用 Tabletop。 我已经将其与我的电子表格集成,但现在我的挑战是获取精确的数据位置以打印到 HTML 上。 您对此有什么建议吗?
引用将遵循相应的内容。 文章中已经很清楚了。
嗨,David,我喜欢这个,并且作为一个使用 GitHub 的新手,我难以弄清楚您步骤的复杂细节。 我有点迷路了,有没有机会可以和你聊聊? 谢谢
当然。 在推特上 @davidpreneur
我使用了 tabletop,但我遇到了问题。 在我的 Google 表格中,我有一列我想在网站上访问的 URL。 但是当我点击链接时,它会报错。 你能解决这个错误吗?
哪个链接?
您好,这对我的解决方案来说非常棒。 但我有一个小问题。 也就是说,脚本只输出表格的最后一行,我想为每一行发布一次,这可能吗? 我试图调试它,但我没有那么熟练,如果能得到帮助,我将不胜感激,谢谢!!!
嗯……我不太明白你的意思,我需要看看你的代码。
伙计们!我承认在这方面我还是新手……但我无法让它工作。
在添加“data.ForEach”部分之前运行它时,我确实收到了“成功处理!”的提示。但是,在我添加了ForEach代码之后,我得到的是一个空白页面……
请帮忙。
更好的是,我最终需要实现的目标是将这个JSON对象化,并将每个标题与一个标签类关联起来。
看到一个组件(React?)能够让这个过程可重复,并且能够轻松集成到网站的多个部分,将会非常有趣。
有没有办法在数据更改时更新网站?我一直在努力寻找解决方法。
我已经找了多年类似的东西了。这个非常接近,但现在已经过时了。
您可能需要更新此内容,让大家知道Tabletop不再有效,因为Google已完全停止使用其使用的方法。