如何将网址分成多个可用的类别或文章

时间:2012-03-25 18:59:21

标签: php categories

在PHP中我试着写一篇文章部分。一个完全虚构的文章URL将采用以下格式:

http://www.example.com/articles/fix/appliances/how-to-repair-a-microwave/

我要了解的是如何制作它以便我可以使网址的每个部分正确显示所需的数据,如果它们添加的内容不是正确的格式,则状态页面不存在

例如,如果访问者访问http://www.example.com/articles/,则会显示所有文章的列表。如果他们转到http://www.example.com/articles/fix/,则只显示修复类别下的文章。如果他们转到http://www.example.com/articles/fix/appliances/,它将仅显示修订设备类别下的文章等。

我可以爆炸$ _SERVER ['REQUEST_URI']来评估我应该执行的PHP代码中的哪个函数。例如,显示Feed或显示类别。

$match = explode('/', $_SERVER['REQUEST_URI']);

switch($match[2]) {
  case 'feed':
          show_rss();
          break;
  default:
          show_category();
          break;
}
但是,我的困惑在于如何区分类别和实际文章。在show_category()函数中,我可以获取url路径的最后一部分并检查数据库以查看是否存在使用该路径的文章。如果是,请显示文章,否则假设它是一个类别。不过,我不确定这是否是最有效的方式。

1 个答案:

答案 0 :(得分:1)

我将假设您正在以一种从单个通用位置运行脚本的方式正确访问您的脚本,但访问所需数据的最佳方式是$_SERVER['REQUEST_URI']。我个人会使用mod_rewrite,但这与你的问题不同。

由于您提供了指向这些网页的链接,因此您可以在文章密钥上附加扩展名:http://www.example.com/articles/fix/appliances/how-to-repair-a-microwave.article/

如果短划线始终存在于文章键中但从不出现在类别键中,则可以preg_match表示短划线。

否则,您几乎可以根据数据库检查每个密钥。不过,我要做的是针对类别数据库运行每个条目。大概如果它是一个文章键,它将不会与类别表匹配,然后您可以尝试将它与文章表匹配。这比每次尝试匹配文章表更有效。

编辑:实际上更合适的是,检查最常用的表会更有效。如果人们更频繁地点击类别导航页面,那么您应该尝试首先将最后一个键与类别表匹配。如果人们更频繁地访问文章页面,那么您应首先检查文章页面。这只是观察服务器日志并做出适当反应的问题。