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 是什么?

简而言之,我想制作一个能够:

我知道这描述得不好,欢迎随时提问。

这个问题的答案真的很宽泛,可以根据需要复杂或简单。

以下是数据库驱动或动态网站的工作原理:

  1. You/User 可以通过文本编辑器(类似于此 SO 编辑器)或任何类型的用户输入进行添加或编辑
  2. 保存时,用户输入将被保存到数据库中(请确保使用 PDOMYSQLI,如果您打算提供 [=51],还请确保使用 HTML PURIFIER =] 代码给最终用户。这将使用户免受 XSS 攻击。
  3. 现在数据已保存在数据库中,您可以创建一个名为 view.php 的页面,这将用作动态内容页面。
  4. 现在显示数据建议使用GET方式,这样可以保证搜索引擎能够收录。您也可以复制 link 并将其提供给其他用户。

    例如,您 URL 可能看起来像这样 http://fakesite1213.com/view.php?content_id=23,请注意 content_id=23 部分,这是 GET 请求。

  5. 即使设置了数据库和获取请求,我们仍然需要获取数据并将其显示给用户。为此,我们可以使用简单的查询,例如:

    //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中。

每个块的内容都是使用系统已知的回调函数构建的(块与其渲染代码之间存在映射),因此块本身的标记不会存储在数据库中(或任何地方) .相反,在构建页面时,每个块的标记是使用数据库(或任何其他来源)的内容生成的。

然后将所有块的标记注入主页面模板以进行页面呈现。页面模板采用块和区域布局所需的标记。