3

我正在从头开始创建自己的 CMS,以此来培养我的 php 和 mysql 技能。一切进展顺利,但我现在想为我写的每篇博文创建单独的帖子页面。所以 index.php 页面有一个我所有博客的列表,其中包含每篇文章的片段,并且有一个阅读更多按钮,应该将用户带到每篇博客文章的完整页面。每个帖子都有一个从“创建帖子”表单中输入的博客标题创建的 url。我试图弄清楚如何在不通过 GET 传递标题、副标题、帖子内容和其他信息的情况下为每个帖子创建独特的页面。

这也与我尝试添加的另一个功能相吻合。我希望能够使用“创建页面”表单创建单个页面,就像我为我的帖子所做的那样。所以如果我想要一个“关于我们”的页面,我会去我的管理表单,填写标题,添加内容,当我点击提交时,它会动态创建页面。我整天都在想我将如何做这两件事,但不能完全弄清楚我该怎么做。

仅供参考,我不是要代码,我只需要朝着正确的方向推进,因为我试图概念化如何实现这一目标。谢谢!

4

3 回答 3

5

如果您不熟悉 Model-View-Controller 模式,阅读它可能是谨慎的。MVC 通常是 Web 应用程序高级设计的正确起点。

此外,CMS 是一个足够大的项目,您应该考虑使用 PHP 框架(如 CodeIgniter、Symfony、Zend 等)来让您的生活更轻松。它消除了许多繁重的工作和常见的任务。

动态页面创建和显示

我认为您想将其分为两部分:文本内容(基本上是您在表单中放入的内容)和围绕该内容的 HTML 模板。

当您创建页面或博客文章时,您可能希望将实际内容(您在创建表单中键入的内容)存储在某种数据库中(不一定是 RDBMS,但如果您正在尝试构建 MySQL 技能,它是一个合理的选择)。

然后,您将使用单独的函数将该内容绑定到 HTML 模板中,并在用户加载给定页面时将其呈现给用户。

网址路由

要获得更好看的 URL,您可以使用 apache 的 mod_rewrite 之类的东西。您可以使用它来转换这样的 URL:

posts/how-to-make-a-cms

对此:

posts.php?title=how-to-make-a-cms

然后你可以像往常一样从 GET 读取posts.php。您选择如何进行转换是非常开放的。

为了避免进行真正复杂的重写,人们通常只是将所有内容构建到一个中央路由脚本,该脚本确定要调用的类和方法以及传递它的参数。所以它会将上面的 URL 重写为:

main.php?a=posts/how-to-make-a-cms

然后 main.php 将从 GET 中解析出该参数的片段并找出将它们发送到哪里。就像它可能需要posts/show/how-to-make-a-cms做类似的事情:

$o = new Posts();
$o->show("how-to-make-a-cms");

如果你这样做,我认为你可以完全避免 mod_rewrite 只要你愿意只接受稍微漂亮的 URL,就像这样:

mysite.com/main.php?/posts/show/how-to-make-a-cms

我以前没有做过这种事情(因为框架已经做得很好了),所以我可能会遗漏一些小细节。

于 2012-10-27T04:50:14.627 回答
1

你应该看一些来自phpacademy.orgthenewboston.org的教程,他们有关于 PHP 的最好和最有价值的教程。

我认为您可以尝试从该课程/播放列表开始:

phpacademy.org:PHP 教程:创建博客

如果您不了解所有内容,请观看以下内容:

thenewboston.org:官方初学者 PHP 教程播放列表!


如果您对 PHP 本身没有任何问题,您可以尝试使用一些支持 MVC 的简单框架。这有助于页面之间的变量处理,使数据库的工作更容易等。

phpacademy.org:CodeIgniter 简介

phpacademy.org:CodeIgniter 简介 - 基本网站

于 2012-10-27T05:04:14.760 回答
1

我有同样的问题。您可以使用 fopen 函数轻松完成此操作。这是一个教程的链接:http ://www.tizag.com/phpT/filecreate.php

<?php 
function wwwcopy($link,$file) 
{ 
   $fp = @fopen($link,"r"); 
   while(!feof($fp)) 
   { 
       $cont.= fread($fp,1024); 
   } 
   fclose($fp); 

   $fp2 = @fopen($file,"w"); 
   fwrite($fp2,$cont); 
   fclose($fp2); 
} 

//Example on using this function 
wwwcopy("http://www.domain.com/list.php?member=sample", "sample.html"); 
//Another example 
wwwcopy("http://www.domain.com/list.php?member=sample2", "sample2.html"); 

?>
于 2012-10-27T05:10:57.647 回答