1

我在一些没有明显问题的网站构建中使用了这种方法。但我想知道将 PHP 变量用作网站导航/页面指示器是否是一种正确/正确的方式,以便可以在 1 个文件(upper.php)中轻松管理站点范围的更改?有什么缺点吗?也许对服务器的请求太多、加载时间、编码不当或负面的 SEO 后果?

为简单起见,我省略了诸如 <body> 等周围的代码,并用“ ... ”指示了更多代码的位置

索引.php

<?php $urhere="home"; include ("upper.php"); ?>
    <div>This is the Home page content</div>   
... 

关于.php

<?php $urhere="about"; include ("upper.php"); ?>
    <div>This is the About page content</div>
...    

联系人.php

<?php $urhere="contact"; include ("upper.php"); ?>
    <div>This is the Contact page content</div> 
...

上层.php

...

<meta name="description" content="
    <?php
        if ($urhere=="home") echo "Home page description";
        if ($urhere=="about") echo "About page description";
        if ($urhere=="contact") echo "Contact page description";
    ?>

...

<title>
    <?php
        if ($urhere=="home") echo "Home page Title";
        if ($urhere=="about") echo "About page Title";
        if ($urhere=="contact") echo "Contact page Title"; 
    ?>
</title>

...

<div id="nav">
    <ul>
      <li><a href="/home"<?php if ($urhere=="home") echo " class=\"urhere\""; ?>>Home</a></li>
      <li><a href="/about"<?php if ($urhere=="about") echo " class=\"urhere\""; ?>>About</a></li>
      <li><a href="/contact"<?php if ($urhere=="contact") echo " class=\"urhere\""; ?>>Contact</a></li>
    </ul>
</div>
4

2 回答 2

1

我看到这种方法存在一些严重的维护问题。

每次添加新页面时,都必须添加三个(目前)if 语句。

upper.php对其他页面了解太多——它们的窗口标题和元数据。

我建议不要使用变量在upper.php$urhere中做出所有决定,而是设置变量,例如窗口标题和元数据,这些变量可以直接由upper.php使用。这是一个例子:

上层.php

<meta name="description" content="<?php echo $description ?>"/>
...
<title><?php echo $title ?></title>
...
<?php
$pageTypeToLinkMap = array(
    'home' => array(
        'url' => '/home',
        'linkText' => 'Home'
    ),
    'about' => array(
        'url' => '/about',
        'linkText' => 'About',
        'sublinks' => array(
            'who-we-are' => array(
                'url' => '/who-we-are',
                'linkText' => 'Who We Are'
            ),
            'what-we-do' => array(
                'url' => '/what-we-do',
                'linkText' => 'What We Do',
                'sublinks' => array(
                    'business' => array(
                        'url' => '/business',
                        'linkText' => 'Business'
                    ),
                    'technology' => array(
                        'url' => '/technology',
                        'linkText' => 'Technology'
                    )
                )
            )
        )
    ),
    'contact' => array(
        'url' => '/contact',
        'linkText' => 'Contact'
    )
);

function getLinkElement($pageType, array $linkData)
{
    $class = $urhere == $pageType ? 'urhere' : '';
    $anchorElement = "<a href=\"$linkData[url]\" class=\"$class\">$linkData[linkText]</a>";

    if (isset($linkData['sublinks']))
    {
        $sublinkElements = array();

        foreach ($linkData['sublinks'] as $sublinkPageType => $sublinkData)
            $sublinkElements[] = getLinkElement($sublinkPageType, $sublinkData);

        $sublinksListElement = '<ul>' . implode($sublinkElements) . '</ul>';
    }
    else
        $sublinksListElement = '';

    return "<li>$anchorElement$sublinksListElement</li>";
}
?>
<div id="nav">
    <ul>
        <?php foreach ($pageTypeToLinkMap as $pageType => $link) echo getLinkElement($pageType, array $link); ?>
    </ul>
</div>

索引.php

<?php
$pageTitle = "Home";
$description = "This is home.";
$urhere = "home"; // I guess you still need this variable to make decisions in the "nav" div.
?>
<div>This is the Home page content</div>

关于.php

<?php
$pageTitle = "About";
$description = "About us";
$urhere = "about";
?>
<div>This is the About page content</div>

编辑

作为对您的评论的回应,以下是在保持相同原始结构的同时改进您的upper.php的方法:

上层.php

<?php
$titles = array(
    'home' => 'Home page Title',
    'about' => 'About page Title',
    'contact' => 'Contact page Title'
);

$descriptions = array(
    'home' => 'Home page description',
    'about' => 'About page description',
    'contact' => 'Contact page description'
);

$linkClasses = array_fill_keys(array_keys($titles), '');
$linkClasses[$urhere] = 'urhere';
?>

...

<meta name="description" content="<?php echo $descriptions[$urhere] ?>"/>

...

<title><?php echo $titles[$urhere] ?></title>

...

<div id="nav">
    <ul>
        <li><a href="/home" class="<?php echo $linkClasses['home'] ?>">Home</a></li>
        <li><a href="/about" class="<?php echo $linkClasses['about'] ?>">About</a></li>
        <li><a href="/contact" class="<?php echo $linkClasses['contact'] ?>">Contact</a></li>
    </ul>
</div>

你去吧,if-less 代码。

于 2013-09-06T23:26:12.807 回答
0

构建网页的方式没有对错之分,有很多选择。一般来说,我喜欢使用某种类型的模板系统,这使得页面的设计很容易与背后的业务逻辑分离。

  1. 你可以试试 Smarty ( http://www.smarty.net/crash_course ) 之类的东西。
  2. 查看一些很棒的 MVC PHP 框架。在下面的站点上有一个很好的 MVC PHP 框架比较

http://jonathanmh.com/best-php-mvc-frameworks-of-2013/

于 2013-09-06T22:38:51.967 回答