Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.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_Mysql_Dynamic_Content Management System_Hyperlink - Fatal编程技术网

Php 为CMS动态生成页面链接

Php 为CMS动态生成页面链接,php,mysql,dynamic,content-management-system,hyperlink,Php,Mysql,Dynamic,Content Management System,Hyperlink,我搜索了很多地方,每个CMS教程要么根本没有解释这一点,要么给出了大量代码,但没有解释它是如何工作的。即使是在堆栈溢出上,我也找不到任何接近答案的东西,不过如果有人能给我指出答案,我会接受我的话 我正在为这个项目使用PHP和mysql 我正在建立一个CMS。它非常简单,我理解所有我认为需要的概念,除了如何动态生成页面和页面链接。我希望这样做的方式是通过拥有一个数据库表来存储页面的名称和页面的主要内容。这就是全部。然后我只需要调用一个脚本,将页面的主要内容拉入我碰巧调用的任何页面。没什么大不了的,

我搜索了很多地方,每个CMS教程要么根本没有解释这一点,要么给出了大量代码,但没有解释它是如何工作的。即使是在堆栈溢出上,我也找不到任何接近答案的东西,不过如果有人能给我指出答案,我会接受我的话

我正在为这个项目使用PHP和mysql

我正在建立一个CMS。它非常简单,我理解所有我认为需要的概念,除了如何动态生成页面和页面链接。我希望这样做的方式是通过拥有一个数据库表来存储页面的名称和页面的主要内容。这就是全部。然后我只需要调用一个脚本,将页面的主要内容拉入我碰巧调用的任何页面。没什么大不了的,对吧?错

问题出在这里。如果我要这样做,那么我必须为我要创建的每个页面创建一个文件,该文件调用从正确的数据库行提取内容的脚本。因此,我可以将各种各样的页面名称和内容添加到表中,但我不知道如何调用它们,而不必在每次链接到新页面时手动创建新文件

理想情况下,应该有一个脚本,在创建页面时根据DB表的页面名称行创建指向页面的链接。但是,如何获得结尾处带有
?=pageName
的链接?如果我知道这是怎么回事,那么我就可以搞定剩下的事情了

更新 第二个答案确实证实了我认为我必须做的一切,但有一个问题。我现在的计划是将所有代码拆分为一系列函数,并在不同的模板中包含或要求它们,这些模板将用于设置页面显示方式的格式。我需要一个主页和一个其他页面设计的其他外观。我想我会有一个函数,它说如果ID是0,那么调用这个页面template.php,否则调用这个其他模板文件.php。但是如何将所需的变量传递给这些新文件呢?我是否只在其中包含index.PHP页面?

我还推荐一本不错的PHP书籍。忘记在线教程;它们(大部分)毫无用处。


我还推荐一本不错的PHP书籍。忘记在线教程;它们(大部分)毫无用处。

你的账单实际上走在了正确的轨道上。现在几乎所有的web软件都进行广泛的URL处理。传统上,您会在web根目录上有php页面,然后利用URL中的查询字符串来优化页面的输出。你已经明白了为什么这可能不是你想要的。因此,流行的替代方案是设计模式。基本上,我们将每个请求导入index.php页面,然后将请求路由到web根目录之外的内部页面或应用程序。这可能会很快变得复杂,每个人似乎都以独特的方式实现这一模式

我们只需将我们的应用程序放在索引页面中,就可以利用这种模式而无需路由。下面的脚本显示了您试图以最简单的方式执行的操作的示例。我们的脚本基本上只有一页。我们可以通过更改url中的id查询字符串来请求虚拟页面。例如,www.demo.net/?id=0可以用作站点的索引。这应该与www.demo.net相同,没有“id”查询。即使你不知道问题是什么,也要一个接一个地解决这些问题。一旦您开始查看其他人的代码,那么您就可以开始了解其他人是如何解决与您相同的问题的

下面的解决方案会让你开始,但是当你想要一个管理页面时,你会怎么做呢?如何对用户进行身份验证?您是否为另一页复制了大量代码?如果你对你的CMS很认真,那么你会想在它下面实现某种框架。用于处理url、路由到应用程序、加载配置文件以及可能管理数据库连接的框架。是的,它会变得复杂,但如果你一次解决一个问题就不会了。利用类或函数共享启动代码。至少在页面顶部包含一个公共“引导”文件,以初始化数据库连接等公共功能。读取堆栈溢出只是为了跟上正在发生的事情。你可以学习很多术语,也许可以找到一些你甚至不知道自己想问的问题的答案


下面假设我们有一个包含以下字段的表:

  • 页码号
  • 页面名称
  • 页眉
  • 页体


单纯形

你的账单实际上走上了正确的轨道。现在几乎所有的web软件都进行广泛的URL处理。传统上,您会在web根目录上有php页面,然后利用URL中的查询字符串来优化页面的输出。你已经明白了为什么这可能不是你想要的。因此,流行的替代方案是设计模式。基本上,我们将每个请求导入index.php页面,然后将请求路由到web根目录之外的内部页面或应用程序。这可能会很快变得复杂,每个人似乎都以独特的方式实现这一模式

我们只需将我们的应用程序放在索引页面中,就可以利用这种模式而无需路由。下面的脚本显示了您试图以最简单的方式执行的操作的示例。我们的脚本基本上只有一页。我们可以通过更改url中的id查询字符串来请求虚拟页面。例如,www.demo.net/?id=0可以用作站点的索引。这应该与www.demo.net相同,没有“id”查询。即使你不知道问题是什么,也要一个接一个地解决这些问题。一旦您开始查看其他人的代码,那么您就可以开始了解其他人是如何解决与您相同的问题的

下面的解决方案会让你开始,但是当你想要一个管理页面时,你会怎么做呢?你是怎么写的
<?php
//<--------Move outside of web root-------------->
define('DB_HOST',   'localhost');
define('DB_USER',   'cms');
define('DB_PASS',   'changeme');
define('DB_DB',     'cms');
define('DB_TABLE',  'cms_pages');
//<---------------------------------------------->

//Display errors for development testing
ini_set('display_errors','On');

//Get the requested page id
if(isset($_GET['id']))
{
    $id = $_GET['id'];
}
else
{
    //Make page id '0' an index page to catch all
    $id = 0;
}

//Establish a connection to MySQL
$conn = mysql_connect(DB_HOST,DB_USER,DB_PASS) or die(mysql_error());

//Select the database we will be querying
mysql_select_db(DB_DB, $conn) or die(mysql_error());

//Lets just grab the whole table
$sql = "SELECT * FROM ".DB_TABLE;
$resultset = mysql_query($sql, $conn) or die(mysql_error());

//The Select Query succeeded, but returned 0 result.
if (mysql_num_rows($resultset)==0)
{
    echo "<pre>Add some Pages to my CMS</pre>";
    exit;
}

//This is our target array we need to fill with arrays of pages
$result = array();

//Convert result into an array of associative arrays
while($row = mysql_fetch_assoc($resultset))
{
    $result[] = $row;       
}

//We now have all the information needed to build our app
//Page name - Short name for buttons, etc.
$name = "";

//Page title - The page content title
$title = "";

//Page body - The content you have stored in a table
$body = "";

//Page navigation - Array of formatted links
$nav = array();

//Process all pages in one pass
foreach($result as $row)
{
    //Logic to match the requested page id
    if($row['page_id'] == $id)
    {
        //Requested Page
        $name = $row['page_name'];
        $title = $row['page_title'];
        $body = $row['page_body'];
        $page = "<b>$name</b>";
    }
    else
    {
        //Not the requested page
        $page = $row['page_name'];
    }

    //Build the navigation array preformatted with list items
    $url = "./?id=" . $row['page_id'];
    $nav[] = "<li><a href=\"$url\">$page</a></li>";

}

?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>SimpleCMS | <?php echo $title; ?></title>
</head>
<body>
<div>
    <div id="navigation" style="float:left;">
        <ul>
            <?php 
                foreach($nav as $item)
                {
                    echo $item;
                }
            ?>
        </ul>
    </div>
    <div id="content"><?php echo $body;?></div>
</div>
</body>
</html>