0

所以,我有一个使用 htaccess 生成漂亮永久链接的小系统。

我以以下方式处理PHP方面的事情:

if (!$_GET) {
    //
    $page = "home";
    $page_title = "General Site Title";
    include ("template/index.php");
    //
} else if ($_GET['page'] == "profile") {
    //
    if ($_GET['subpage']) {
        //
        header("HTTP/1.0 404 Not Found");
            include ("template/404.php");
        exit();
        //
    } else {
        //
        $page = "profile";
        $page_title = "User Profile";
        include ("template/profile.php");
        //
    }
    //
} else if ($_GET['page'] == "words") {
    //
    if ($_GET['subpage']) {
        //
        header("HTTP/1.0 404 Not Found");
            include ("template/404.php");
        exit();
        //
    } else {
        //
        $page = "words";
        $page_title = "Words Page";
        include ("template/words.php");
    }
    //
} else if ($_GET['page'] == "contacts") {
    //
    if ($_GET['subpage']) {
        //
        header("HTTP/1.0 404 Not Found");
            include ("template/404.php");
        exit();
        //
    } else {
        //
        $page = "contacts";
        $page_title = "User Contacts";
        include ("template/contacts.php");
        //
    }
    //
} else if ($_GET['page'] == "about") {
    //
    if ($_GET['subpage']) {
        //
        header("HTTP/1.0 404 Not Found");
            include ("template/404.php");
        exit();
        //
    } else {
        //
        $page = "about";
        $page_title = "About Page";
        include ("template/about.php");
        //
    }
    //
} else if ($_GET['page'] == "verify") {
    //

    //
} else {
    //
    header("HTTP/1.0 404 Not Found");
        include ("template/404.php");
    exit();
    //
}

正如你所看到的,有很多重复的代码。你会如何让这个管理面板变得友好?我想要做的是有一个页面数组,其中包含将生成此 if else 语句的数据。是否可以?

理想情况下是这样的:

array("page" => "home", "page_title" => "blah", "template" => "index.php", "has_subpage" => false);

还是我应该坚持我在ATM上做事的方式?

4

4 回答 4

1

您可以使用 switch 和 case,但仍然会留下很多重复的代码。或者你可以使用一个数组。

$pages=array(
    'home'=>array('title'=>'Home', 'has_subpage'=>false),
    'profile'=>array('title'=>'User Profile', 'has_subpage'=>false),
    'words'=>array('title'=>'Words Page', 'has_subpage'=>false),
    'contacts'=>array('title'=>'User Contacts', 'has_subpage'=>false),
    // etc
);

// if no page is set, use "home"
if (!isset($_GET['page'])) $_GET['page']='home';

if (array_key_exists($_GET['page'], $pages)){
    if ($_GET['subpage']) {
        die404();
    }else{
        $page=$pages[$_GET['page']];
        $page_title = $page['title']; 
        include ("template/".$_GET['page'].".php");
    }
}else{
    die404();
}

function die404(){
    header("HTTP/1.0 404 Not Found");
    include ("template/404.php"); 
    exit();

}
于 2013-10-21T17:50:30.993 回答
1

就像是:

$pages = array(
  'words' => array('title' => 'Words', 'file' => 'includes/words.php'),
  'contact' => array('title' => 'Contact', 'file' => 'includes/contact.php'),
  'profile' => array('title' => 'Profile', 'file' => 'includes/profile.php',
    'subpages' => array('subpage1' => array( 'title' => 'foo', 'file' => 'bar'))
  ),
);

if( isset($_GET['page']) && isset($pages[$_GET['page']]) ) {
  $page = $pages[$_GET['page']];
  if( ! isset($_GET['subpages']) ) {
    $title = $page['title'];
    include($page['file']);
  } else if( isset($page['subpages']) && isset($page['subpages'][$_GET['subpage']]) ) {
    $page = $page['subpages'][$_GET['subpage']];
    $title = $page['title'];
    include($page['file']);
  } else {
    // 404 code here
  }
} else {
  // 404 code here
}
于 2013-10-21T17:51:43.847 回答
0

使用以下结构:

$pages = array('profile' => array('title' => 'User Profile',
                                  'include' => 'template/profile.php'),
               'words' => array('title' => 'Words Page',
                                'include' => 'template/words.php'),
               ...);

// Set defaults if no parameters supplied
$page = "home";
$page_title = "General Site Title";
$include_file = "template/index.php";

// Override from parameters
if (isset($_GET['page'], $pages[$_GET['page']])) {
    if ($_GET['subpage']) {
        header("HTTP/1.0 404 Not Found");
            include ("template/404.php");
        exit();
    } else {
        $page = $_GET['page'];
        $page_title = $pages[$page]['title'];
        $include_file = $pages[$page]['template'];
    }
}

include ($include_file);
于 2013-10-21T17:50:13.730 回答
0

或类似的东西(警告!未经测试!)

if (!$_GET) {
    $page = "home";
    $page_title = "General Site Title";
    include ("template/index.php");
} 
else if ($_GET)
{
    $pages = array('profile' => 'User Profile', 'words' => 'Words Page', 'contacts' => 'User Contacts', 'about' => 'About Page', 'verify' => 'Verify');
    foreach ($pages as $page => $page_title)
    {
        if (($_GET['page'] == $page) && (!$_GET['subpage']))
            include ("template/$page.php");
    }
}
else
{
    header("HTTP/1.0 404 Not Found");
        include ("template/404.php");
}
于 2013-10-21T17:58:30.870 回答