0

我是 php 编码、Web 开发和搜索优化的新手——总的来说是新手。在学习 php 和 web 开发的过程中,我一直在尝试不同的网站架构和布局。我正在研究的一个方法使用如下方法:

我有一个 index.php 页面,它总是加载 header.php、sidebar.php 和 footer.php。index.php 还包含一个开关,以便根据页面变量传递 index.php,它会加载不同的核心内容。例如,examplesite.com/index.php?page=photos 和 examplesite.com/index.php?page=stories 都具有相同的页眉、页脚和侧边栏,但一个有照片,一个有故事主要内容。

<?php $page = $_GET['page'];?>

<?php include("header.php"); ?>
<?php include("nav.php"); ?>
<?php 
      switch ($page)
      {
      case 'play':
        include("photos.php");
        break;
      case 'cards':
        include("stories.php");
        break;
      default:
        include("frontpage.php");
      } 
      ?>
<?php include("footer.php"); ?>

我的导航是由 href="index.php?page=..." 链接组成的,所以在索引页面上选择一个菜单按钮本质上是调用它自己传递新的核心来加载。

我不知道这是否是一种完全非正统的方法,但这一切都开始了,因为我最初打算创建一个 wordpress 主题,但中途决定不在 wordpress 中做。

我担心的是这种方法在搜索引擎、索引、seo 等方面可能存在哪些缺点。

我应该考虑的其他缺点或问题是什么,也许我不是?

提前致谢!

4

1 回答 1

2

我不知道这是否是一种完全非正统的方法

使用查询字符串加载各种页面本质上没有什么“非正统”的。数十亿网站使用这种方法。搜索引擎可以索引这样的页面。
尽管如此,

我有一个 index.php 页面,它总是加载 header.php、sidebar.php 和 footer.php。

这是错误的概念。
仅使用 index.php 文件来加载页眉和页脚是没有意义的,并且会使您的网站明显无法使用。

以下是您设计中的主要缺陷:

  1. 您假设每个页面调用都会调用 header.php。那是错误的。
  2. 您假设 header.php 将始终是静态的。那是错误的。
  3. 您忘记为页面本身创建模板。

每个人都必须牢记的主要规则:

在所有数据准备好之前,不必将单个字符发送到浏览器。

为什么?

  • 今天是 2012 年。AJAX 时代。如果您的代码必须发送 JSON 数据而不是整个 HTML 页面怎么办?
  • 有一种东西叫HTTP header。有时我们必须发送它们。如果您已经发送了华丽的 HTML 标头,那就不可能了。
  • 将显示逻辑与业务逻辑分开将使您可以在许多站点上使用相同的 php 代码。您将只需要更改模板并且不要触摸引擎文件。这真是一个很大的好处。
  • 假设您要<title>根据页面内容为您的页面制作自定义标签。这不是很常见的事情吗?但是你不能不使用模板。

因此,您必须拥有一个包含页眉和页脚的通用站点模板,以及每个 php 脚本的专用模板。只有在所有业务逻辑完成后才
需要调用这些模板——即您已经准备好所有数据。

一个示例布局将是这样的:

.1。页面本身。

它什么都不输出,只收集所需的数据,然后调用模板:

<?
//include our settings, connect to database etc.
include dirname($_SERVER['DOCUMENT_ROOT']).'/cfg/settings.php';
//getting required data
$DATA=dbgetarr("SELECT * FROM links");
$pagetitle = "Links to friend sites";
//etc
//and then call a template:
$tpl = "links.tpl.php";
include "template.php";
?>

.2. template.php这是您的主要网站模板,

由您的页眉和页脚组成:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>My site. <?=$pagetitle?></title>
</head>
<body>
<div id="page">
<? include $tpl ?>
</div>
</body>
</html>

.3. 最后links.tpl.php是实际的页面模板:

<h2><?=$pagetitle?></h2>
<ul>
<? foreach($DATA as $row): ?>
<li><a href="<?=$row['link']?>" target="_blank"><?=$row['name']?></a></li>
<? endforeach ?>
<ul>

这样你就不需要包含索引了

于 2012-04-04T15:17:59.103 回答