開源可視化低代碼頁面構建框架GrapesJS 入門(二)
本文是介紹可視化頁面構建工具GrapesJS系列的第二篇ⓊⓋⓌⓍⓎⓏⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙ,本系列主要是介紹GrapesJS以及與GrapesJS可視化工具如何與CMS整合⒜⒝⒞⒟⒠⒡⒢⒣⒤。
GrapesJS是一個可視化的✵✶✷✸✹✺✻✼❄❅、開源的網頁構建工具✺ϟ☇♤♧♡♢♠♣♥,本篇就來主要對GrapesJS做一個入門的基礎介紹⓱⓲⓳⓴⓵⓶⓷⓸⓹⓺⓻⓼⓽⓾,對GrapesJS的架構以及基礎開發和GrapesJS的基礎概念做一些入門指引♀☿☼☀☁☂☄。

GrapesJS的優點
GrapesJS是一個開源的☧☬☸✡♁✙♆。,、':∶;、可擴展的頁面生成器ⓊⓋⓌⓍⓎⓏⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙ。它通過提供一個簡單易用的界面⓱⓲⓳⓴⓵⓶⓷⓸⓹⓺⓻⓼⓽⓾,允許用戶在不需要編寫代碼的情況下創建復雜的頁面♀☿☼☀☁☂☄,GrapesJS使用了現代的JavaScript框架和庫㈠㈡㈢㈣㈤㈥㈦,以提供強大的性能和易用性ⓊⓋⓌⓍⓎⓏⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙ。
Grapes.js具有一系列內置的組件ⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉ,如圖像☈⊙☉℃℉❅、文本⑰⑱⑲⑳⓪⓿❶❷❸❹❺、按鈕和視頻等☈⊙☉℃℉❅,這些組件可以快速組裝出各種不同類型的頁面ⅲⅳⅴⅵⅶⅷⅸⅹⒶⒷⒸⒹ。用戶還可以通過插件擴展GrapesJS的功能ⓣⓤⓥⓦⓧⓨⓩ,以滿足特定的需求⑰⑱⑲⑳⓪⓿❶❷❸❹❺。
GrapesJS還具有很好的設計工具⓱⓲⓳⓴⓵⓶⓷⓸⓹⓺⓻⓼⓽⓾,使用戶可以輕松調整元素的位置ⓚⓛⓜⓝⓞⓟⓠⓡⓢ、大小和顏色ⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉ,并且可以使用預定義的樣式或自定義樣式來完成頁面的外觀設計❣❦❧♡۵。
相比其他頁面生成器或框架⒃⒄⒅⒆⒇⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓,GrapesJS具有如下優勢:
-
可視化操作:GrapesJS提供了一個可視化界面♦☜☞☝✍☚☛☟✌✽✾✿❁❃,使用戶可以通過拖拽和放置元素的方式來創建頁面✺ϟ☇♤♧♡♢♠♣♥,而不需要編寫代碼㈠㈡㈢㈣㈤㈥㈦。
-
可擴展性:GrapesJS具有很好的擴展性☾☽❄☃,用戶可以通過安裝插件來擴展其功能⒔⒕⒖⒗⒘⒙⒚⒛ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫⅰⅱ,以滿足特定需求①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯。
-
高效率:GrapesJS使用了現代的JavaScript框架和庫⒜⒝⒞⒟⒠⒡⒢⒣⒤,如React和Redux☈⊙☉℃℉❅,以提供強大的性能和易用性⒜⒝⒞⒟⒠⒡⒢⒣⒤。
-
設計工具:GrapesJS具有很好的設計工具ⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉ,使用戶可以輕松調整元素的位置㈠㈡㈢㈣㈤㈥㈦、大小和顏色☧☬☸✡♁✙♆。,、':∶;,并且可以使用預定義的樣式或自定義樣式來完成頁面的外觀設計⒃⒄⒅⒆⒇⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓。
-
開源:GrapesJS是一個開源項目☈⊙☉℃℉❅,用戶可以免費使用并貢獻代碼☈⊙☉℃℉❅,以提高項目的質量和功能❋❀⚘☑✓✔√☐☒✗✘ㄨ✕✖✖⋆✢✣。
總之☾☽❄☃,GrapesJS是一個兼具可視化㈠㈡㈢㈣㈤㈥㈦、可擴展性♦☜☞☝✍☚☛☟✌✽✾✿❁❃、高效率和強大設計工具的頁面生成器♀☿☼☀☁☂☄,是一個非常優秀的選擇☈⊙☉℃℉❅。
GrapesJS基礎代碼架構
首先㈧㈨㈩⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂,GrapesJS是基于Backbone的ⓣⓤⓥⓦⓧⓨⓩ,Backbone一個基礎的JS框架⒜⒝⒞⒟⒠⒡⒢⒣⒤,所以♦☜☞☝✍☚☛☟✌✽✾✿❁❃,Backbone的架構等同于GrapesJS的架構ⓚⓛⓜⓝⓞⓟⓠⓡⓢ,我們來簡單看一下GrapesJS的架構❋❀⚘☑✓✔√☐☒✗✘ㄨ✕✖✖⋆✢✣。
GrapesJS的代碼架構基礎:
-
核心:GrapesJS的核心負責管理頁面的整體布局和交互ⓚⓛⓜⓝⓞⓟⓠⓡⓢ,包括模型❻❼❽❾❿⓫⓬⓭⓮⓯⓰,視圖和控制器的管理⑰⑱⑲⑳⓪⓿❶❷❸❹❺。
-
模型:GrapesJS的模型負責存儲頁面元素的數據♀☿☼☀☁☂☄。模型使用Backbone.js庫管理數據웃유ღ♋♂,以便快速和方便地對數據進行操作⒜⒝⒞⒟⒠⒡⒢⒣⒤。
-
視圖:GrapesJS的視圖負責呈現頁面元素ⅲⅳⅴⅵⅶⅷⅸⅹⒶⒷⒸⒹ。視圖使用Backbone.js的視圖系統管理⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵❆❇❈❉❊†☨✞✝☥☦☓☩☯,并通過Mustache.js模板系統呈現數據✤✥❋✦✧✩✰✪✫✬✭✮✯❂✡★✱✲✳✴。
-
控制器:GrapesJS的控制器負責處理用戶交互㊀㊁㊂㊃㊄㊅㊆㊇㊈㊉,如鼠標點擊和鍵盤輸入ⓚⓛⓜⓝⓞⓟⓠⓡⓢ。控制器使用jQuery庫進行事件處理♀☿☼☀☁☂☄,并通過核心管理模型和視圖♀☿☼☀☁☂☄。
-
插件:GrapesJS的插件負責擴展GrapesJS的功能✺ϟ☇♤♧♡♢♠♣♥。插件可以使用核心⑰⑱⑲⑳⓪⓿❶❷❸❹❺、模型ⓣⓤⓥⓦⓧⓨⓩ、視圖和控制器的功能☧☬☸✡♁✙♆。,、':∶;,以實現自定義的功能㈠㈡㈢㈣㈤㈥㈦。
GrapesJS的基礎元素:
1. Component: 一個虛擬dom元素❻❼❽❾❿⓫⓬⓭⓮⓯⓰,比如一個div㊀㊁㊂㊃㊄㊅㊆㊇㊈㊉、一個img等㊀㊁㊂㊃㊄㊅㊆㊇㊈㊉,在Grapes里面都是一個component⒔⒕⒖⒗⒘⒙⒚⒛ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫⅰⅱ。
2. Component Type: 虛擬dom的類型☾☽❄☃,比如img①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯、input❋❀⚘☑✓✔√☐☒✗✘ㄨ✕✖✖⋆✢✣、div等等所有都是㊀㊁㊂㊃㊄㊅㊆㊇㊈㊉。
editor.DomComponents.addType('my-custom-type', {
// ...
model: {
defaults: {
// defined above
},
init() {
// Listen to any attribute change
this.on('change:attributes', this.handleAttrChange);
// Listen to title attribute change
this.on('change:attributes:title', this.handleTitleChange);
},
handleAttrChange() {
console.log('Attributes updated: ', this.getAttributes());
},
handleTitleChange() {
console.log('Attribute title updated: ', this.getAttributes().title);
},
}
});
3. Block: 一個包含一個或者多個component的組件塊⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵❆❇❈❉❊†☨✞✝☥☦☓☩☯,這個塊可以拖拽❻❼❽❾❿⓫⓬⓭⓮⓯⓰,可以設置屬性⒃⒄⒅⒆⒇⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓,就是grapes里面所見即所得的那些小部件✤✥❋✦✧✩✰✪✫✬✭✮✯❂✡★✱✲✳✴。
const myFirstBlock = editor = {
var blockManager = editor.BlockManager;
// 'my-first-block' is the ID of the block
blockManager.add('my-first-block', {
label: 'Button',
content: {
type: button,
tagName: 'button',
draggable: false,
attributes: { class: 'container'},
style: { 'background-color': '#ffffff' },
content: "Change Title",
}
});
}
4. Panels: 一些工具的集合⒃⒄⒅⒆⒇⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓,比如默認的面板上包括了預覽ⓣⓤⓥⓦⓧⓨⓩ、清除等操作ⓣⓤⓥⓦⓧⓨⓩ。
5. LayerManager: 層管理☾☽❄☃,可以提供HTML的層的管理웃유ღ♋♂。
6. StyleManager: 提供了對于Component的樣式管理和定義⒔⒕⒖⒗⒘⒙⒚⒛ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫⅰⅱ。
7. Traits: 就是元素的屬性⓱⓲⓳⓴⓵⓶⓷⓸⓹⓺⓻⓼⓽⓾,比如title⒃⒄⒅⒆⒇⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓、placeholder等等⓱⓲⓳⓴⓵⓶⓷⓸⓹⓺⓻⓼⓽⓾。
domComponents.addType('my-custom-type', {
model: {
defaults: {
traits: [ ...domComponents.getType('my-custom-type').model.prototype.defaults.traits,
{
type: 'select',
label: 'Custom Trait',
name: 'custom_trait',
options: [
{ value: '', name: 'None' },
{ value: 'Js', name: 'Javascript}
]
}
],
}
}
});
8. StorageManager: 我們制作好了頁面♀☿☼☀☁☂☄,要存儲當前頁面⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵❆❇❈❉❊†☨✞✝☥☦☓☩☯,Grapes提供了存儲管理器✺ϟ☇♤♧♡♢♠♣♥,默認是存儲到本地的磁盤ⓚⓛⓜⓝⓞⓟⓠⓡⓢ,但是此處我們可以對接APIⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉ,存儲到數據庫中去❋❀⚘☑✓✔√☐☒✗✘ㄨ✕✖✖⋆✢✣,比如對接Drupal❻❼❽❾❿⓫⓬⓭⓮⓯⓰,存儲到Drupal的后臺的LandingPage☾☽❄☃。
storageManager: {
id: 'gjs-', // Prefix identifier that will be used inside storing and loading
type: 'local',
autosave: true,
storeComponents: true,
storeStyles: true,
storeHtml: true,
storeCss: true,
},
9. Events:事件是我們對系統原生的某些操作增加一些自定義功能或者修改的方式ⓣⓤⓥⓦⓧⓨⓩ,GrapesJS也提供了很多事件ⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉ,通過監聽事件就可以對這些動作進行響應的處理ⅲⅳⅴⅵⅶⅷⅸⅹⒶⒷⒸⒹ。
editor.on('load', () => {
let styleManager = editor.StyleManager;
let fontProperty = styleManager.getProperty('typography', 'font-family');
fontProperty.set('defaults', 'Roboto');
styleManager.render();
});
10. Commands:命令類似于一些公用的函數ⓣⓤⓥⓦⓧⓨⓩ,供我們開發代碼的時候調用✤✥❋✦✧✩✰✪✫✬✭✮✯❂✡★✱✲✳✴,比如清除畫布是 canvas-clearⓊⓋⓌⓍⓎⓏⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙ,所以就可以通過下面代碼來清除畫布 : editor.runCommand('canvas-clear'); 也可以自定command✤✥❋✦✧✩✰✪✫✬✭✮✯❂✡★✱✲✳✴。
editor.Commands.add('custom-command', {
run(editor) {
alert(`Command is active`)
return “Grapesjs”
}
stop(editor) {
alert(`Command is disabled`)
}
})
11. Plugin:相當于一套代碼ⅲⅳⅴⅵⅶⅷⅸⅹⒶⒷⒸⒹ,這個代碼以plugin的形式存在☈⊙☉℃℉❅,被GrapesJS加載使用✵✶✷✸✹✺✻✼❄❅,所以Plugin可以寫command웃유ღ♋♂、eventⓚⓛⓜⓝⓞⓟⓠⓡⓢ、block㊀㊁㊂㊃㊄㊅㊆㊇㊈㊉、component等等所有GrapesJS的元素或者調用API☧☬☸✡♁✙♆。,、':∶;。
Grapes.JS與CMS系統的整合

Drupal與GrapesJS集成演示請點擊這里>>
創作不易☾☽❄☃,轉載請注明出處⒔⒕⒖⒗⒘⒙⒚⒛ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫⅰⅱ!
更多Drupal以及內容管理系統ⓣⓤⓥⓦⓧⓨⓩ,請參考我們其他相關文章ⓣⓤⓥⓦⓧⓨⓩ,
1ⓣⓤⓥⓦⓧⓨⓩ、常見開源可視化低代碼頁面構建框架對比
2❋❀⚘☑✓✔√☐☒✗✘ㄨ✕✖✖⋆✢✣、開源可視化低代碼頁面構建框架GrapesJS介紹
3♦☜☞☝✍☚☛☟✌✽✾✿❁❃、開源CMS Drupal整合可視化構建工具GrapesJS(一)
4☈⊙☉℃℉❅、開源可視化頁面框架GrapesJS教程(二)- 組件開發
5ⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉ、可視化頁面框架GrapesJS開發教程(三)- 與Drupal CMS整合
6❣❦❧♡۵、開源可視化頁面框架GrapesJS開發教程(四)- 創建 Block
7✵✶✷✸✹✺✻✼❄❅、CMS與可視化構建工具GrapesJS整合之動態組件開發(五)
8㈠㈡㈢㈣㈤㈥㈦、在線展覽和多媒體展示建設方案
9♦☜☞☝✍☚☛☟✌✽✾✿❁❃、構建英文網站應該用什么框架⑰⑱⑲⑳⓪⓿❶❷❸❹❺?
10ⅲⅳⅴⅵⅶⅷⅸⅹⒶⒷⒸⒹ、如何基于開源系統構建資料庫/文檔庫平臺
11①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯、外貿網站如何通過SEO和內容引流✤✥❋✦✧✩✰✪✫✬✭✮✯❂✡★✱✲✳✴?