在PHP中包含标题时,如何添加内容?

时间:2012-07-04 19:43:46

标签: php javascript

我正在构建我的第一个PHP网站之一,并且正在玩它。我将使用PHP包含,所以我只需要改变我的元素一次。目前,我拥有从doctype到</head>

末尾的所有内容

一位朋友说我不应该在header.php上包含</head>,而是将其包含在每个页面上,这样我就可以添加特定于页面的内容。这是一个很好的方式吗?

目前,对于像title这样的东西,我正在做

<title><?php echo $page_title; ?>

然后在每页的顶部,我正在做

<?php $page_title = 'Blah'; ?> 

如果我这样做,我将如何添加特定于页面的Javascript文件?

4 个答案:

答案 0 :(得分:6)

这里发生的是你试图在你的模板中注入逻辑,这不一定是错误的,但它会产生更多令人困惑和难以维护的代码。此问题不仅适用于您的<title>标记,而且会随着您的网页变得越来越动态和复杂(动态导航,特定于页面的布局等)而不断出现。

MVC方法完美地解决了这个问题。 MVC由模型组成,它们与您的数据源(MySQL,Redis,无论如何)交谈并处理您的逻辑;视图,呈现HTML;和控制器,它们是模型和视图之间的粘合剂。用户做出的每个请求最终都会路由到控制器,然后控制器中的操作方法(例如:/users/login可能映射到User控制器和login操作)。

您可以在控制器的action方法中设置页面标题(或任何其他元信息),该方法知道请求是什么,但在呈现视图之前调用:

$request->setTitle('Home page');

然后在您看来,只需渲染它:

<title><?php echo $request->getTitle(); ?></title>

如果您刚刚开始使用PHP,那么现在是学习MVC的好时机,因为它会让您养成一些不仅影响您的PHP开发而且影响任何其他开发的良好习惯。

我建议您查看CodeIgniter的简单性和出色的文档。我使用了CodeIgniter一段时间,但最终writing my own framework更符合我的需求。

答案 1 :(得分:2)

我不知道你是如何建立自己的网页的。但是在一个简单的站点上,你可以使用这样的关联数组:

$pages = array(
    'home' => array(
        'title' => 'Home',
        'metaDescription' => 'This is the home of my website',
        'metaKeywords' => 'A,B,C',
        'scripts' => '<script src="src/js/com.jquery/1.7/jquery-1.7.min.js"></script>',
        'content' => 'home.phtml'
    ),
    'page_1' => …
);

而且你可以这样记得:

<head>
    […]
    <title><?php print $pages['home']['title']; ?></title>
    […]
    <?php print $pages['home']['scripts']; ?>
    […]
</head>
<body>
    <?php require '/pathToIncludes/' . $pages['home']['content]; ?> 
</body>

但我只推荐这个只有一堆页面的网站。

答案 2 :(得分:2)

我认为你应该首先做一些逻辑,然后渲染它。像这样:

<?php

$page = array(
    'title' => 'Title',
    'js' => array(
        'jquery.min.js',
    ),
    'copyright' => 'Copyright 2012',
);

if ( $needed ) {
    $page[ 'js' ][] = 'some-other.js';
}

include( 'header.php' );
include( 'content.php' );
include( 'footer.php' );


// header.php
<html>
    <head>
        <title><?= $page[ 'title' ]; ?></title>

        <? foreach ( $page[ 'js' ] as $js ) { ?>
            <script src="<?= $js"></script>
        <? } ?>

    </head>

答案 3 :(得分:1)

以下是我如何解决这个问题:

  • start.php连接到我的数据库,包括我的类,设置我所有的默认元值 进入$page对象并启动$_SESSION
  • header.php根据<head>
  • 中的值,吐出我的所有html热门内容(doctype,$page等)
  • top.php包括start.phpheader.php

对于大多数文件,默认值都可以。我只包括top.php。对于需要特殊值的特殊情况,我的页面如下所示:

<?php 
    include("start.php");
    $page->title = "My special title";
    include("header.php");
    // The rest of my content
?>

这具有额外的优势,页面可以访问$ _SESSION和其他自定义类,并使用该信息修改标头而不会收到“已发送标头”错误。例如,您可以使用location('header: foo.php');验证某些用户输入并重定向它们,或根据其登录状态更改标题。

对于特定于页面的javascript包含,我会创建一个包含$page->javascript的网址数组,然后在$page->javascript[] = "http://example.com/js/myScript.js";start.php之间添加header.php之类的内容