html - 对于动态内容生成器来说,将 HTML 保存到 MySQL 数据库是一个好方法吗?

标签 html mysql database

我有一个新项目即将开始,我必须从头开始创建一个自定义内容编辑器(我将使用 Laravel 和 Vue JS)。每个条目都有一个由 blocks 定义的结构。具有富文本内容 fields在他们里面。这是所需布局的示例:

Three rows of content

我的问题是:我将如何创建这些 block_types (标题、副标题、三栏行...)和 fields数据库里面?我认为保存 HTML structure字段到 block_types带有占位符的数据库表就可以了。

保存到数据库的 HTML 长文本,进入 block 类型的结构字段

<div class="row">
    <div class="col-4">///// CONTENT</div>
    <div class="col-4">///// CONTENT</div>
    <div class="col-4">///// CONTENT</div>
</div>

然后我会将内容动态添加到 /// CONTENT 中按顺序占位符。它确实看起来很麻烦,所以我想我可能从一开始就陷入了一个棘手的境地,有什么建议吗?

PS:这将是我到目前为止的数据库结构:

DB structure

最佳答案

将 HTML 保存到数据库几乎从来都不是一个好主意。发生这种情况的一次是在 CMS 中,它们提供了一个富文本界面,用户可以使用简单的标签(粗体、列表等)设置文本样式。

将标记存储在数据库中的根本问题是您会沉迷于其结构,因为它是硬编码在数据库中的。

例如,如果有一天您决定这些存储的 div 标记之一应该具有特定的类,该怎么办?或数据属性。您必须更新每一行,或者更糟糕的是,仍然会通过 JS 影响 DOM 中的更改,这意味着 View 中生成的 HTML 与您存储的内容并不真正匹配。

存储标记还意味着存储比您可能需要的更多的数据,以及所有的间距。

更好的方法是定义一个 block 系统,其中有一个专用的 block 表,该表通过外键引用父 UI 表。所以它可能是这样的:

表 1:UI(界面、标签集合,根据您的示例)

----------------------------
| id | ...other fields ... |
----------------------------

表2:区 block

---------------------------------
| id | ui_id | parent_id | type |
---------------------------------

表 2 是递归的,因为它将存储代表父容器的 block 和其中的子 block :

  • 外部 block (容器)将通过 ui_id 与 UI ID 相关
  • 子 block 将通过parent_id与父 block 关联

至于type,您可以在此处采用此方法并运行它。也许这是一个字符串,表示它应该是什么类型的 block (例如“全角”、“grid-x3”等)。

当然,您可以通过 PHP 或 JS 等方式在 View 中渲染这些数据,再次递归以确保获得所有嵌套级别。

让我们运行一些示例数据。我们现在只使用一种“类型”的 block ,一个简单的“div”。

用户界面表:

----------------------------
| id | ...other fields ... |
----------------------------
| 1  | ...                 |
----------------------------

block 表:

---------------------------------
| id | ui_id | parent_id | type |
---------------------------------
| 1  | 1     | null      | div  |
---------------------------------
| 2  | 1     | 1         | div  |
---------------------------------
| 3  | 1     | 2         | div  |
---------------------------------

这表示三层嵌套 block ,即渲染时:

---------------------
| ----------------- |
| | ------------- | |
| | |           | | |
| | ------------- | |
| ----------------- |

希望这能为您提供一个起点。

关于html - 对于动态内容生成器来说,将 HTML 保存到 MySQL 数据库是一个好方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54990135/

相关文章:

php - 使用代码高亮显示代码

html - Netbeans 7.3 显示警告 CSS 类即使存在并在 JSP 中工作也找不到

java - 在 JDBC 上缓存数据

php - 找到最接近拼写错误的城市名称的匹配项?

mysql - 什么会导致 Rails 创建重复记录?

php - 如何将带有外键的 NOT NULLABLE 列添加到已包含数据的现有表中?

.net - SQLite:sqlite3.dll 与 System.Data.SQLite.dll?

javascript - 带有可滚动下拉菜单的输入字段

html - 使用具有特定字体和样式的 Bootstrap 创建页面

PHP - 插入多个表,每个表具有相同的字段