CMS block-placement/page-creation 是如何工作的?
How does CMS block-placement/page-creation work?
我在 PHP (OOP) 和其他各种网络编程语言方面非常有经验,但我似乎无法理解 CMS 块构建的真正工作原理?
当我为自己构建 CMS 时,我制作静态页面(我知道这是个糟糕的主意)。但是如何使 blocks/pages 像 Drupal/EPiServer 那样动态?
块的标记是存储在数据库中,还是块文件的引用?我不是在说 "how to code it",而是 analogy/method 是什么?
简而言之,我想制作一个能够:
- 拖放方块
- 创建新页面(动态路由)
我知道这描述得不好,欢迎随时提问。
这个问题的答案真的很宽泛,可以根据需要复杂或简单。
以下是数据库驱动或动态网站的工作原理:
- You/User 可以通过文本编辑器(类似于此 SO 编辑器)或任何类型的用户输入进行添加或编辑
- 保存时,用户输入将被保存到数据库中(请确保使用
PDO
或 MYSQLI
,如果您打算提供 [=51],还请确保使用 HTML PURIFIER
=] 代码给最终用户。这将使用户免受 XSS 攻击。
- 现在数据已保存在数据库中,您可以创建一个名为
view.php
的页面,这将用作动态内容页面。
现在显示数据建议使用GET
方式,这样可以保证搜索引擎能够收录。您也可以复制 link 并将其提供给其他用户。
例如,您 URL 可能看起来像这样 http://fakesite1213.com/view.php?content_id=23
,请注意 content_id=23
部分,这是 GET
请求。
即使设置了数据库和获取请求,我们仍然需要获取数据并将其显示给用户。为此,我们可以使用简单的查询,例如:
//open database connection
try {
$dbcon = new PDO('mysql:host='. DB_HOST .';
dbname='. SITE_DB_NAME . ';
charset=utf8', SITE_DB_USER, SITE_DB_PASS);
} catch (Exception $e) {
}
// use try catch block for queries.
// I am using pdo, by using
try {
$sql = "SELECT * FROM tablename WHERE contentid=:contentid";
$statement = $dbcon->prepare($sql);
$statement->bindValue(':contentid', $_GET['content_id']);
$statement->execute();
$result = $statement->fetchAll(PDO::FETCH_ASSOC);
if (count($result) > 0)
{
var_dump($result);
}
} catch (Exception $e) {}
代码非常简单明了。如果您的数据库 table 有一个列名称 contentid
,它将 运行 与来自 get 方法(url)的 $_GET['content_id']
匹配。当我们找到匹配项时,我们 var_dump
它。您需要使用 echo
并且 $result
很可能会 return 一个数组。
还有其他方法可以使用ajax和json,但这是基本思路
在 Drupal (7) 的情况下,完整的页面是块构建的。页面本身由区域组成,块放置在区域中。哪个区块出现在哪个区域的配置存储在DB中。
每个块的内容都是使用系统已知的回调函数构建的(块与其渲染代码之间存在映射),因此块本身的标记不会存储在数据库中(或任何地方) .相反,在构建页面时,每个块的标记是使用数据库(或任何其他来源)的内容生成的。
然后将所有块的标记注入主页面模板以进行页面呈现。页面模板采用块和区域布局所需的标记。
我在 PHP (OOP) 和其他各种网络编程语言方面非常有经验,但我似乎无法理解 CMS 块构建的真正工作原理?
当我为自己构建 CMS 时,我制作静态页面(我知道这是个糟糕的主意)。但是如何使 blocks/pages 像 Drupal/EPiServer 那样动态?
块的标记是存储在数据库中,还是块文件的引用?我不是在说 "how to code it",而是 analogy/method 是什么?
简而言之,我想制作一个能够:
- 拖放方块
- 创建新页面(动态路由)
我知道这描述得不好,欢迎随时提问。
这个问题的答案真的很宽泛,可以根据需要复杂或简单。
以下是数据库驱动或动态网站的工作原理:
- You/User 可以通过文本编辑器(类似于此 SO 编辑器)或任何类型的用户输入进行添加或编辑
- 保存时,用户输入将被保存到数据库中(请确保使用
PDO
或MYSQLI
,如果您打算提供 [=51],还请确保使用HTML PURIFIER
=] 代码给最终用户。这将使用户免受 XSS 攻击。 - 现在数据已保存在数据库中,您可以创建一个名为
view.php
的页面,这将用作动态内容页面。 现在显示数据建议使用
GET
方式,这样可以保证搜索引擎能够收录。您也可以复制 link 并将其提供给其他用户。例如,您 URL 可能看起来像这样
http://fakesite1213.com/view.php?content_id=23
,请注意content_id=23
部分,这是GET
请求。即使设置了数据库和获取请求,我们仍然需要获取数据并将其显示给用户。为此,我们可以使用简单的查询,例如:
//open database connection try { $dbcon = new PDO('mysql:host='. DB_HOST .'; dbname='. SITE_DB_NAME . '; charset=utf8', SITE_DB_USER, SITE_DB_PASS); } catch (Exception $e) { } // use try catch block for queries. // I am using pdo, by using try { $sql = "SELECT * FROM tablename WHERE contentid=:contentid"; $statement = $dbcon->prepare($sql); $statement->bindValue(':contentid', $_GET['content_id']); $statement->execute(); $result = $statement->fetchAll(PDO::FETCH_ASSOC); if (count($result) > 0) { var_dump($result); } } catch (Exception $e) {}
代码非常简单明了。如果您的数据库 table 有一个列名称 contentid
,它将 运行 与来自 get 方法(url)的 $_GET['content_id']
匹配。当我们找到匹配项时,我们 var_dump
它。您需要使用 echo
并且 $result
很可能会 return 一个数组。
还有其他方法可以使用ajax和json,但这是基本思路
在 Drupal (7) 的情况下,完整的页面是块构建的。页面本身由区域组成,块放置在区域中。哪个区块出现在哪个区域的配置存储在DB中。
每个块的内容都是使用系统已知的回调函数构建的(块与其渲染代码之间存在映射),因此块本身的标记不会存储在数据库中(或任何地方) .相反,在构建页面时,每个块的标记是使用数据库(或任何其他来源)的内容生成的。
然后将所有块的标记注入主页面模板以进行页面呈现。页面模板采用块和区域布局所需的标记。