Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php CMS块放置/页面创建如何工作?_Php_Laravel_Drupal_Content Management System - Fatal编程技术网

Php CMS块放置/页面创建如何工作?

Php CMS块放置/页面创建如何工作?,php,laravel,drupal,content-management-system,Php,Laravel,Drupal,Content Management System,我在PHP(OOP)和其他各种web编程语言方面很有经验,但我似乎不知道CMS块构建是如何工作的 当我自己构建CMS时,我会创建静态页面(我知道这是个糟糕的想法)。但是如何创建动态块/页面,比如Drupal/EPiServer 块的标记存储在数据库中,还是块文件的引用?我不是说“如何编码”,而是更像是,类比/方法是什么 简而言之,我想制作一个CMS,它能够: 拖放块 创建新页面(动态路由) 我知道这是一个糟糕的描述,所以请随意提问。这个问题的答案非常广泛,可以是复杂的,也可以是简单的,具体取

我在PHP(OOP)和其他各种web编程语言方面很有经验,但我似乎不知道CMS块构建是如何工作的

当我自己构建CMS时,我会创建静态页面(我知道这是个糟糕的想法)。但是如何创建动态块/页面,比如Drupal/EPiServer

块的标记存储在数据库中,还是块文件的引用?我不是说“如何编码”,而是更像是,类比/方法是什么

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

  • 拖放块
  • 创建新页面(动态路由)

我知道这是一个糟糕的描述,所以请随意提问。

这个问题的答案非常广泛,可以是复杂的,也可以是简单的,具体取决于需求

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

  • 您/用户可以通过文本编辑器(类似于此SO编辑器)或任何类型的用户输入添加或编辑
  • 保存时,用户输入将保存到数据库(如果您计划向最终用户提供HTML代码,请确保使用
    PDO
    MYSQLI
    ,以及
    HTML净化器
    。这将使用户免受XSS攻击
  • 现在数据保存在数据库中,您可以创建一个名为
    view.php
    的页面,该页面将用作动态内容页面
  • 现在,对于显示数据,建议使用
    GET
    方法,它将确保搜索引擎能够对其进行索引。您还可以复制链接并将其提供给其他用户

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

  • 即使设置了数据库和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) {}
    
  • 代码非常简单明了。如果您的数据库表有一个列名
    contentid
    ,它将与来自GET方法(url)的
    $\u GET['content\u id']
    运行匹配。当我们得到一些匹配项时,我们将
    var\u dump
    它。您需要使用
    echo
    ,而且
    $result
    很可能会返回一个数组

    还有其他使用ajax和json的方法,但这是Drupal(7)的基本思想。整个页面是由块构建的。页面本身由区域组成,块被放置到区域中。哪个块的配置显示在哪个区域中,哪个区域存储在数据库中

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


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

    非常感谢您的详细响应。不过,我更多考虑的是存储HTML块和位置背后的类比:)干杯!这完美地回答了我的问题:)