使用PHP自定义HTML页面

时间:2014-07-06 20:18:29

标签: php

我有一堆几乎相同的HTML页面,除了一些小细节,比如包括第二个CSS文件,一个独特的标题和一个自定义的图标。我不喜欢单独维护所有这些页面的想法。实现我想要的一种天真的方法是使用一些GET或POST参数来区分这样的细节:

$customization = array( "favicon" => "favicon_dummy.ico", "title" => "My Page");
if ($_GET["id"] == "my-first-page") 
    $customization["favicon"] = "favicon_first.ico"
if ($_GET["id"] == "my-second-page") 
    $customization["title"] = "My Second Page"

然后就是这样:

<head>
<title><?php echo  $customization["title"]; ?></title>
<link rel="shortcut icon" href="<?php echo  $customization["favicon"]; ?>" type="image/x-icon" />
</head>

现在这是一种非常粗暴的方式,我认为这很容易出错。实现这些任务的正确方法是什么?

2 个答案:

答案 0 :(得分:2)

我想使用包含所有页面值的多维数组可以是解决方案,然后您可以extract并使用当前页面的值:

<?php

$customization = array( 
    'default' => array( "favicon" => "favicon_dummy.ico", "title" => "My Page" ),
    'my-first-page' => array( "favicon" => "favicon_first.ico", "title" => "My First Page" ),
    'my-second-page' => array( "favicon" => "favicon_second.ico", "title" =>  "My Second Page" )
);

if ( isset( $_GET["id"] ) && array_key_exists( $_GET["id"], $customization ) ) {
    extract( $customization[ $_GET["id"] ] );
} else {
    extract( $customization[ 'default' ] );
}

?>
<!DOCTYPE html>
<html>
<head>
    <title><?php echo $title; ?></title>
    <link rel="shortcut icon" href="<?php echo $favicon; ?>" type="image/x-icon" />
</head>

但我建议你不要这样做。它只适用于少量页面和自定义。对于更大的那个更好的解决方案是使用数据库并存储与某个页面相关的所有内容。由于您没有提及数据库,我猜你不会使用它们。可以使用以下列来构建满足您需求的数据库表:

page_id | page_slug | page_title | page_content | page_favicon | page_css | ...

数据库不仅仅是存储数据的地方,如果不使用,所有这些功能都必须手工编码。绝对值得投入一些时间。

答案 1 :(得分:0)

我不会说有任何正确的方法可以做到这一点,因为PHP可以通过多种方式检索和操作数据,然后将其呈现给浏览器。我想说的是考虑您的网站/应用程序的未来以及该解决方案是否能够运行很长时间。

如果您只是需要静态信息,那么我会有一个assets.php页面,其中包含您需要的各种变量或定义。即:

<?php

switch( $_SERVER["PHP_SELF"] )
{
    case "/index.php":
        $_css_url   = "path/to/style.css";
        $_js_url    = "path/to/javascript.js";
        break;

    case "/about.php":
        $_css_url   = "path/to/about/page/style.css";
        $_js_url    = "path/to/about/page/javascript.js";
        break;    
}

$_copyright = "Copyright &copy; mysite.com";

?>

你当然可以使用一个数组(正如你所提到的那样)但这只意味着你每次都在编写数组名和变量名。

然后在您的主页上require / include资产文件并正确使用变量 -

<?php

require_once("assets.php");

?>
<!DOCTYPE html>
<html>
   ...
   <?php echo $_copyright ?>
   OR
   <?= $_copyright ?>
   ...
</html>

或使用assets.php中的定义:

PHP define() docs

<?php

define( "CSS_PATH", "path/to/style.css" );
define( "JS_PATH",  "path/to/javascript.js" );

define( "MY_COPYRIGHT", "Copyright &copy; mysite.com" );

?>

<?php

require_once("assets.php");

?>
<link rel="stylesheet" type="text/css" href="<?= CSS_PATH ?>">