Widżety w CMS Total.js: używaj ich na stronie i pisz własne
Widżet to blok, który umieszczasz na stronie: nagłówek, alert, galeria. Niesie własny styl, formularz do konfiguracji w edytorze i opcjonalnie kod renderujący go na serwerze. Widżet to jeden plik HTML, jak komponent Flow, a CMS przechowuje go w swoich metadanych.
Widżet na stronie
W HTML strony widżet to div z dwoma atrybutami:
<div data-cms="headline__%7B%22h%22%3A%22h1%22%2C%22align%22%3A%22left%22%7D" data-cms-id="h1">
<h1 class="w-headline-h">Hello CMS</h1>
<p>Some text</p>
</div>data-cmsto<widget id>__<configuration>, gdzie konfiguracja jest obiektem JSON zapisanym przezencodeURIComponent. Zapisuje go edytor; możesz zapisać go sam, gdy generujesz strony.data-cms-idto identyfikator instancji na stronie.
Gdy strona jest serwowana, CMS usuwa atrybut data-cms, zachowuje HTML w środku i dodaje do head styl każdego widżetu strony. Jeśli widżet nie jest zainstalowany, jego blok jest pomijany.
Części pliku widżetu
| Część | Do czego służy |
|---|---|
<script total> | metadane i kod serwera: exports.id, name, author, version, preview (obraz lub data URI), config (wartości domyślne) i opcjonalnie dependencies, install, uninstall i render |
<style> | CSS widżetu |
<body> | projekt widżetu, jak pokazuje go edytor; elementy z klasą CMS_edit są edytowalne; pozostałe klasy CMS_* (CMS_repeat, CMS_remove, CMS_unwrap...) to znaczniki dla edytora, a kompilator usuwa je przed serwowaniem strony |
<settings> | formularz edytujący config w edytorze (wejścia jComponent, których ścieżka zaczyna się od ?.) i <script> z exports.save(config, el), który zmienia projekt, gdy zmienia się konfiguracja |
<template> | opcjonalny szablon widżetu |
<readme> | pomoc widżetu |
CLASS w stylu, ustawieniach, szablonie i projekcie jest zastępowane klasą należącą do widżetu (w- i jego id), więc dwa widżety nigdy nie dzielą reguły: w widżecie alert .CLASS-color1 staje się .w-alert-color1.
exports.dependencies przyjmuje listę lub ciąg rozdzielony przecinkami: adres kończący się na .js staje się <script src>, a kończący się na .css <link rel="stylesheet">, dodanymi do head strony.
Renderowanie na serwerze
Widżet bez exports.render jest tylko oczyszczany i serwowany tak, jak jest. Z render może zbudować swój HTML z konfiguracji:
<script total>
exports.id = 'hello';
exports.name = 'Hello';
exports.author = 'Me';
exports.version = '1';
exports.config = { text: 'world' };
exports.render = function(opt, next) {
next('<p class="w-hello">Hello ' + (opt.config.text || '').toUpperCase() + '</p>', true);
};
</script>
<style>
.CLASS { color: #07c; }
</style>
<body>
<p class="CLASS CMS_edit">Hello world</p>
</body>opt.config to konfiguracja instancji, opt.html to HTML, który był w środku bloku, a opt.id, opt.uid i opt.body go opisują. next(html, replace) podaje HTML do serwowania; z true jako drugim argumentem zastępuje cały blok. Zapisaliśmy ten plik w lokalnym CMS, a strona z data-cms="hello__..." i {"text":"mundo"} wyszła jako <p class="w-hello">Hello MUNDO</p>, z .w-hello{color:#07c} w head. Oficjalny widżet picture używa tej samej funkcji, aby dodać loading="lazy" do swojego obrazu, a code, aby wypisać kod ze swoich ustawień.
exports.install i exports.uninstall uruchamiają się z bazą danych CMS, gdy widżet jest dodawany, zmieniany lub usuwany.
Instalowanie i usuwanie widżetów
Wtyczka Widgets administracji importuje plik; przez API jest to widgets_save z { "html": "<file content>", "singleton": true } (singleton pomija widżet, jeśli już istnieje), widgets_list, widgets_read, widgets_detail i widgets_remove. Wymagają uprawnienia widgets (zobacz API administracji). 43 oficjalne widżety są w repozytorium widżetów.