5

我对 php 很陌生,我正在尝试确定组织页面的最佳方式,并使用 PHP 来交付它们。我有两个(基本)想法是:

  • 一堆使用 PHP 的单独页面包括页眉、页脚和菜单。

  • 具有菜单、页眉和页脚以及主要内容的包含的单个主页。页面名称来自 URL 中的变量。

有没有人有任何其他的建议或想法?这是非常基本的东西,但我想看看是否有人有更好的想法。

谢谢

4

9 回答 9

6

我之前已经在两个方向上进行过,尽管它们都有优点和缺点,但我倾向于您的第二个选项,即包含布局的单个主页。这类似于母版页在桌面发布应用程序中的工作方式,并且 ASP.NET 很好地实现了这个想法 - 我并不是说您应该切换技术。

但是,如果您确实走这条路,请使用 mod_rewrite 将路径获取到 PHP 母版页,而不是 URL 中的查询字符串。您的 .htaccess 文件应包含以下内容:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [S=1]
RewriteRule ^(.*)$ /index.php?path=$1 [QSA]

这基本上说明了他们要求的文件是否不存在,而不是使用查询字符串变量中的 URL 路径向 index.php 提供 404 错误移交处理。因此,“ http://example.com/path/to/page ”最终会在 $_GET['path'] 设置为“/path/to/page”的情况下访问 index.php。从那里您可以从数据库、平面文件或您拥有的文件中提取内容。您还可以根据请求的路径选择不同的模板。

于 2009-01-27T21:56:54.097 回答
2

我喜欢包含标题和诸如此类的单个页面。

我必须维护一个网站,其中原始开发人员在 URL 中使用带有变量的单个页面,这很痛苦。除了添加新的类似页面之外,它很难进行任何更改。尽管他也使用了框架,但这也可能是问题的一部分。

于 2009-01-27T21:49:04.550 回答
2

鉴于这两个选择,我会选择 2。如果您的网站增长到需要适当框架的水平,则移动单个页面而不包含所有 include('header.php'); 东西会容易很多。对于奖励积分,请使用模型和视图文件夹,分别在其中放置数据库访问和显示逻辑,并且您已经完成了真正的 MVC 环境的一半。

编辑以添加 - 带有条件包含的单个索引还为您的应用程序提供了一个单一的入口点,这对于安全性非常有价值。

于 2009-01-27T21:50:09.803 回答
2

为什么只走了一半正确的方向?使用现有的 MVC 框架之一。它们是强大的工具,可以比任何自定义解决方案更好地构建代码。选择 MVC,学习如何将业务逻辑与表示逻辑和数据结构分开,增加你作为潜在员工在就业市场上的价值,节省你的时间并让你快乐。

您可能应该开始(但不限于)Kohana PHP,因为它具有温和的学习曲线。

于 2009-01-28T10:48:38.237 回答
1

PHP 的主要特点是您需要“保持演示文稿和程序逻辑分开”。或者换句话说,确保您没有在执行业务或处理逻辑的脚本中间将 html 回显到屏幕上。

您的第二个解决方案是该问题的一个相当普遍(而且还不错)的解决方案。它允许您使用所有布局信息构建单个页面,然后包含要呈现的特定页面内容。显然,如果您需要将大部分布局模板从一页交换到下一页,这将不会很好地工作。在这种情况下,您的第一个解决方案会更好。

最后,我强烈建议您查看现有的各种 PHP 框架,例如Zend FrameworkSymfonyCakePHP,看看它们是如何处理这个问题的。如果你找到了你喜欢的,那就用它吧。否则,您仍然可能会获得一些关于如何构建自己的网站的好主意。

于 2009-01-27T21:52:34.090 回答
0

这实际上取决于您正在设计的网站。如果您想重新利用您的组件,那么使用包含的方法将起作用。您可以尝试拥有一种母版页,然后在其中呈现您想要的页面

于 2009-01-27T21:47:55.567 回答
0

在 header.php 中拥有菜单和页眉,在 footer.php 中拥有页脚、sopyright 等,让您的生活变得更加轻松。然后只需将这些文件包含到您创建的每个页面中。

于 2009-01-27T21:50:19.647 回答
0

要看。

页面的内容是否存储在数据库中?如果是这样,您最好为每个内容页面设置一个模板,该模板只从数据库中获取内容、标题和元信息并将其插入模板中。您甚至可以拥有不同类型的页面(新闻、静态内容页面、存档页面等),它们都可以有不同的模板。

如果内容位于或多或少的平面文件中,那么您的两个建议确实有效,我认为后一个是最容易维护的。

于 2009-01-27T21:51:29.660 回答
0

在过去使用这两种技术后,我发现前者更灵活,但它会鼓励不良做法。后者提供了更加一致的用户体验,因为它将所有站点范围的逻辑保存在一个地方,并阻止您做出一次性异常。

实际上,我正在将几年前编写的网站从包含的页眉/页脚/菜单模型转换为母版页模型。最初的 include 系统简洁明了,运行良好。但是,我创建的附加内容越多,我就越意识到该项目开始违反DRY 原则。网站上的每一页都以相同的方式开始和结束(重复应该总是发出警告信号),我很想通过省略单个包含并编写一次性替换来对标准布局做出例外。(谢天谢地,我没有经常屈服于这种诱惑!)

重构站点使页面更加一致,布局更易于更新(您可以“一目了然”看到整个内容),并且更易于创建新页面。

于 2009-01-27T21:56:20.650 回答