PHP динамические страницы с пользовательской ссылкой
Код ниже работает так:
http://www.website.com/?page=home
будет тянуть контент из http://www.website.com/home.php
-- или же --
http://www.website.com/?page=About
будет тянуть контент из http://www.website.com/About.php
Код:
// Set the default name
$action = 'home';
// Specify some disallowed paths
$disallowed_paths = array('admin');
if (!empty($_GET['page'])) {
$tmp_action = basename($_GET['page']);
// If it's not a disallowed path, and if the file exists, update $action
if (!in_array($tmp_action, $disallowed_paths) && file_exists("{$tmp_action}.php"))
$action = $tmp_action;
}
// Include $action
include("$action.php");
?>
Приведенный выше код отлично работает для всех моих страниц, но теперь у меня есть одна пользовательская ссылка, которую мне нужно добавить http://www.website.com/?page=Search
вытащить контент из http://www.website.com/search/search.php
вместо http://www.website.com/Search.php
Как я могу это сделать?
Спасибо
1 ответ
Есть 2 варианта, вы всегда можете найти файл в подпапке, или у вас может быть специальный список страниц со своими собственными путями, как у disallowed_paths.
$special_paths = array(
"search" => "search/search.php",
);
if(in_array($_GET['page'], $special_paths)) {
$action = $special_paths[$_GET['page']];
Это будет означать, что если в будущем появится другая специальная страница с другим путем, вы можете просто добавить ее в массив.
Полный код будет тогда:
<?php
// Set the default name
$action = 'home.php';
// Specify some disallowed paths
$disallowed_paths = array('admin');
// special paths
$special_paths = array(
"search" => "search/search.php",
"special_b" => "a/different/lengthier/path/file.php",
);
if (!empty($_GET['page'])) {
$tmp_action = basename($_GET['page']);
// If it's not a disallowed path, and if the file exists, update $action
if (!in_array($tmp_action, $disallowed_paths) && file_exists("{$tmp_action}.php")) {
$action = $tmp_action.".php";
} elseif(isset($special_paths[$tmp_action])) {
$action = $special_paths[$tmp_action];
}
}
// Include $action
include("$action");