Wer von Ihnen hat schon einmal endlose Inhaltsänderungswünsche von seinen Kunden erhalten? Es ist nicht so, dass die Änderungen selbst schwierig wären, aber wäre es nicht einfacher, wenn die Kunden die Änderungen selbst vornehmen könnten? Das würde jedem wertvolle Zeit sparen und Ihnen erlauben, sich wichtigeren Aufgaben zuzuwenden.
Wenn die Website auf statischen Dateien (z. B. HTML, CSS und JavaScript) anstelle eines CMS (z. B. WordPress) basiert, benötigen Sie eine andere Lösung, um den Inhalt zu bearbeiten, ohne diese Dateien direkt zu ändern.
Tabletop.js ermöglicht es uns, Google Tabellen als eine Art Datenspeicher zu nutzen, indem die Tabelle genommen und sie über JavaScript leicht zugänglich gemacht wird. Es stellt die Daten aus einer Google Tabelle im JSON-Format bereit, die dann in einer Anwendung verwendet werden können, ähnlich wie Daten von jeder anderen API abgerufen werden. In diesem Artikel fügen wir Daten zu einer Tabelle hinzu und richten dann Tabletop ein, damit es Daten aus der Datenquelle in unser HTML ziehen kann. Lassen Sie uns direkt zum Code kommen!
Dieser Artikel basiert auf einer realen Website, die ich erstellt habe, als ich Tabletop zu verstehen versuchte. Ich rate Entwicklern übrigens immer, Anwendungen mit jeder Form von Technologie zu erstellen, die sie zu lernen versuchen, auch nachdem sie Tutorials angesehen oder gelesen haben.
Wir verwenden das Demo, das ich gemacht habe, mit seinem Quellcode Code und der Tabelle. Das Erste, was wir brauchen, ist ein Google-Konto, um auf die Tabelle zugreifen zu können.
Öffnen Sie eine neue Tabelle und geben Sie Ihre eigenen Werte in die Spalten ein, genau wie in meiner. Die erste Zelle jeder Spalte ist die Referenz, die später in unserem JavaScript verwendet wird, und die zweite Zelle ist der eigentliche Inhalt für die Website. So ist beispielsweise header der Referenzname und Bitte bearbeiten Sie mich! der eigentliche Inhalt in der ersten Spalte.

Als Nächstes veröffentlichen wir die Daten im Web, indem wir im Menü auf Datei → Im Web veröffentlichen klicken.

Ein Link wird bereitgestellt, aber er ist für uns technisch nutzlos, daher können wir ihn ignorieren. Wichtig ist, dass die Tabelle (und ihre Daten) nun öffentlich zugänglich sind, sodass wir sie für unsere App abrufen können.
Dafür benötigen wir jedoch einen Link. Wenn Sie auf die große grüne Schaltfläche "Teilen" in der oberen rechten Ecke der Seite klicken, wird ein Modal geöffnet, das einen teilbaren Link zur Tabelle bereitstellt und es uns ermöglicht, auch die Berechtigungen festzulegen. Nehmen wir diesen Link und stellen die Berechtigungen so ein, dass jeder mit dem Link die Tabelle einsehen kann. So werden die Daten nicht versehentlich von jemand anderem bearbeitet.

Jetzt ist es an der Zeit, Tabletop in unserem Projekt zu initialisieren. Wir verknüpfen uns mit ihrer gehosteten minifizierten Datei. Ebenso könnten wir den rohen, minifizierten Code kopieren, in unsere eigene Skriptdatei einfügen und ihn selbst hosten.
Hier ist die Dokumentendatei, die mit dem CDN von Tabletop verknüpft ist, und mit Code aus der Dokumentation.
<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>
Ersetzen Sie die Variable publicSpreadsheetUrl im Code durch den teilbaren Link aus der Tabelle. Sehen Sie, ich sagte doch, dass wir den brauchen würden!
Nun zum interessanten Teil. Geben wir dem HTML eindeutige IDs und lassen sie leer. Dann verwenden wir innerhalb der Funktion showInfo die Methode forEach(), um jede Tabellenspalte zu durchlaufen und sie mit der entsprechenden Methode ID.innerHTML gleichzusetzen, die wiederum die Daten der Tabelle durch die ID in das HTML-Tag lädt.
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)
Dies ist ein Ausschnitt aus dem HTML meiner Demo, der die leeren Tags zeigt. Das ist ein guter Ansatz, aber es könnte weiter abstrahiert werden, indem die HTML-Elemente direkt aus JavaScript erstellt werden.
<!-- 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>
Hey, schau mal! Jetzt können wir den Inhalt einer Website in Echtzeit ändern, indem wir den Inhalt in der Tabelle bearbeiten.
Ich liebe solche Dinge. … Airtable-basierte CMS, Mavo.io usw. – alles toll! :)
Es wäre wahrscheinlich eine bessere Praxis, die Variable publicSpreadsheetUrl in einer separaten Datei zu speichern, die nicht in git verfolgt wird, und diese dann abzurufen.
Auf diese Weise würden Sie keinen Link zu dem veröffentlichen, was effektiv Ihre Datenbank ist.
Nun, dieses Projekt dient hauptsächlich der Demonstration, damit jeder die Tabelle selbst sehen kann. Außerdem kann niemand die Tabelle bearbeiten, es sei denn, er hat die Berechtigung, und die Inhalte der Tabelle sind mehr oder weniger bereits öffentlich. Aber abgesehen davon, dass es demonstrativ ist, haben Sie zu 100 % Recht.
Danke, Kel!!
Das ist wirklich nett. Ich frage mich, ob es möglich wäre, damit ein E-Mail-CMS zu bauen.
Hmm.....daran habe ich vorher nicht gedacht. Ich werde prüfen, ob das möglich ist.
Ich erinnere mich, vor vielleicht 20 Jahren auf kommerzielle Software gestoßen zu sein, die eine Tabelle zum Aktualisieren von Webseiten verwendete. Das war lange vor Google Sheets.
Ich habe es nie ausprobiert, aber ich werde es mal versuchen, nur zum Spaß. :)
Trunao.com hat eine großartige Funktion, um Ihren Grid-Link auf Ihrer Website einzubetten. Dies hilft, die leistungsstarken Funktionen von Trunao auf einer Website ohne Programmierung zu nutzen.
Wow... das ist mal die No-Code-Ära.
Das ist brillant. Ich möchte dies verwenden, um ein CMS für E-Mails zu erstellen.
Ich habe diese Architektur seit 2003 in mehreren Projekten verwendet, um die Erstellung/Pflege von Testdaten für Anwendungen zu ermöglichen. Ursprünglich verwendete ich tatsächliche Microsoft Excel-Tabellen auf einem gemeinsam genutzten Laufwerk, die von Java-Anwendungen über Apache POI oder JacoZoom gelesen wurden. Sie können Office 365 verwenden, Sie müssen nicht Google Sheets verwenden.
Oh, das ist interessant... das werde ich definitiv mit Office 365 ausprobieren.
Sehr schöner Artikel und einfach, danke. Ich benutze ihn bereits. Haben Sie eine Idee, wie man die Bild-URLs in HTML bekommt? Derzeit hat meine Seite einige Artikel und ich suche nach Lösungen, insbesondere für dynamische Hintergrundbilder mit Tabletop.js
Sie weisen src das Bild zu, genau wie in diesem w3schools-Beispiel https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_img_src2
Hallo, ich benutze derzeit Tabletop. Ich habe es bereits mit meiner Tabelle integriert, aber meine Herausforderung ist jetzt, die genaue Position der Daten zu ermitteln, um sie in HTML auszudrucken. Haben Sie Vorschläge, wie das geht?
Die Referenz würde dem jeweiligen Inhalt folgen. Das ist im Artikel ziemlich klar dargestellt.
Hallo David, das gefällt mir sehr gut, und da ich GitHub-Anfänger bin, kämpfe ich damit, die genauen Details Ihrer Schritte zu verstehen. Ich bin ein bisschen verloren, besteht die Möglichkeit, dass ich mich mit Ihnen unterhalte? Cheers
Sicher. Auf Twitter @davidpreneur
Ich habe Tabletop verwendet, aber ich habe ein Problem. In meinem Google Sheet gibt es eine Spalte mit URLs, auf die ich auf der Website zugreifen möchte. Aber wenn ich auf den Link klicke, gibt es einen Fehler. Können Sie diesen Fehler beheben?
Welcher Link genau?
Hallo, das ist eine großartige Lösung für mich. Aber ich habe eine kleine Frage. Nämlich, das Skript gibt nur die letzte Zeile aus dem Blatt aus, ich möchte einmal für jede Zeile posten, ist das möglich? Ich habe versucht, das zu debuggen, aber ich bin nicht so geschickt, Hilfe wäre sehr willkommen, danke!!!
Hmm.... ich verstehe Sie nicht wirklich, ich müsste Ihren Code sehen.
Leute! Ich bin zugegebenermaßen ein Neuling darin... aber ich bekomme das nicht zum Laufen.
Wenn ich es vor dem Hinzufügen des 'data.ForEach'-Teils ausführe, erhalte ich die Benachrichtigung "Erfolgreich verarbeitet!". Aber nachdem ich den ForEach-Code hinzugefügt habe, bekomme ich eine leere Seite...
Bitte helfen Sie.
Besser noch, was ich letztendlich erreichen muss, ist, dieses JSON zu objektivieren und jeden Header mit einer Tag-Klasse zu korrelieren.
Es wäre wirklich interessant zu sehen, wie man eine Komponente (React?) erstellt, die dies wiederholbar und einfach in verschiedenen Teilen einer Website integrierbar macht.
Gibt es eine Möglichkeit, die Seite bei Datenänderungen zu aktualisieren? Ich habe Schwierigkeiten, die Lösung dafür zu finden.
Ich suche schon seit Jahren nach etwas wie diesem. Das war so nah dran und jetzt ist es veraltet.
Sie sollten dies vielleicht aktualisieren, um den Leuten mitzuteilen, dass Tabletop nicht mehr funktioniert, da Google die verwendete Methode vollständig eingestellt hat.