2011-05-09 56 views
3

通常我有包含页眉/页脚/菜单和页面内容的主页面(index.php)。内容被改变从GET/POST方法检查一些变量:对于每个条件,我加载请求的页面。你如何在php中组织你的页面?

出头喜欢:

website/ 
website/index.php?explore=forum 
website/index.php?explore=users 
website/index.php?explore=articles 

等等...

现在,我的网站越来越多,我觉得最好的办法就是直接打电话每节一个“指数”的页面;所以例如以上,这将作为traslate为:

website/ 
website/forum/ 
website/users/ 
website/articles/ 

看起来更好,并且更舒适管理!问题是,如果我这样做,我需要实现每个区域的轮廓(包括页眉/页脚/菜单)。

所以我不知道是否有更好的策略,如果它的方便。欢迎任何建议/意见!谢谢

+0

你是什么意思的轮廓? – markus 2011-05-09 17:05:54

+0

内容的边框,作为页眉/页脚/菜单:) – kwichz 2011-05-09 20:11:41

+0

看看TinyMVC框架,它的控制器和路由http://www.tinymvc.com/documentation/index.php/Documentation:Controllers – tijagi 2012-12-16 14:15:04

回答

1

在我们的直线PHP项目(没有像Symfony或其他任何框架),我们肯定有不同的目录和每个部分单独的索引文件,就像你说的那样。

但是我们通常只有一个头文件包含文件和一个页脚文件,它适用于网站上的每个页面。这使页眉和页脚保持一致,并且更易于管理。

你总是可以包括像

<?php include('../includes/head.php'); ?> 

页眉和页脚与行,如果你想保持这些文件在自己的目录。我认为,我们确实有/包括对我们的包括路径,使我们的线路只是说

<?php include('head.php'); ?> 
2

您可以通过执行apache重写来获得顶级策略的最终结果。例如,可以重新编写/ forum来访问www.yoursite.com/index.php?article=forum等等。

以下是完整指南:http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

+0

但这不会改变什么!只是一个不同的网址来显示:O – kwichz 2011-05-09 20:10:21

+0

我的观点是你不必为每个例子调用一个特定的索引页面。许多CMS系统调用单个索引页并从数据库获取内容。这听起来像你有一个文件与一个巨大的开关声明。这整个战略的东西归结为什么适合你。如果您不介意开销和学习曲线,请考虑一个框架。如果您不想全部改变,请重写。如果您希望在物理上隔离您的代码,请考虑使用包含页眉页脚的每个部分使用一个页面的重新结构。这都是个人喜好。 – bpeterson76 2011-05-09 20:23:47

2

退房样的Symfony(PHP)的MVC框架,Rails的(红宝石)或Django的(Python)的。

在MVC设计模式中,您通常有一个前端控制器可处理所有加载。您有与您的数据源交互的模型,并且您拥有定义用户界面的视图。控制器通过模型加载数据,然后将其传递到视图。

在你的例子中,每个部分都有不同的控制器,不同的交互类型(最常见的是创建,列表,删除,编辑)有不同的操作。

+0

性能方面,与ZendFramework或Code Igniter相比,Symfony是TERRIBLE。而且,Symfony的许多用户群都位于东欧和印度,所以如果英语成为您的选择语言,那么在论坛中玩得开心。如果您不介意学习全新的语言,则Rails和Django都可以。 .. – bpeterson76 2011-05-09 20:19:18

2

你可以只使用的.htaccess重写规则对那些好看的网址重定向到一个index.php文件。

唯一的问题是,你必须拿出差异化的URL重定向(website/forum/website/users/等),从正常的人(website/css/website/images/等)的一种方式。

有一些选项:

  1. 而不是使用website/[pagename]/的,你可以使用website/page/[pagename]/。然后你的正则表达式可以将每个匹配的网址重定向到^/?page/[\w+]/?$index.php?explore=[pagename]
  2. 只需明确地列出你想要重定向的每一页;使用像^/?[forum|users|articles]/?$
  3. 正则表达式不要担心它。如果您只重定向不包含文件名的网址,那么当您尝试引用CSS或图片(即包含文件名的)时,应该不是问题。