在我目前的网站项目中,我有大量的php和html代码,这些代码在整个项目中都会重复出现。例如,每个页面都具有与其他页面相同的页眉和页脚。因此,为了模块化我的代码,我为这些事情创建了单独的php文件。这是我的header.php文件的一个例子。
//header.php
<?php
if(isset($_POST['submittext'])) {
echo $_POST['sometext'];
}
?>
<div id="header">
<form action="header.php" method="post">
<input type="text" name="sometext">
<input type="submit" name="submittext">
</form>
<div id="somediv">
<?php
//Some more php
?>
</div>
</div>
这是一个文件示例,其中包含页面特有的内容的代码,与页眉或页脚不同。将此文件称为home.php。
//home.php
<?php
//Some php
?>
<!DOCTYPE HTML>
<html>
<head>
<!-- Style sheets, etc. -->
</head>
<body>
<?php include('header.php'); ?> //Here I include the above file
<div id="main">
<!-- Html for everything below the header -->
</div>
</body>
</html>
现在的问题是我在header.php文件中有一个表单。因此,当我提交表单时,action属性表示重新加载header.php。但如果它这样做,那么home.php中的其他代码不会加载,例如“main”div。所以我的问题是,如何模块化我的代码以防止很长时间和难以阅读的PHP文件,同时还能够加载我的所有内容?我的第一个想法是在我处理header.php文件中的表单后放入header('Location: home.php');
,但是如果我将header.php文件包含在另一个页面中,比如home2.php,它会将我重定向回到主页.php而不是home2.php。
答案 0 :(得分:0)
通过使用简单的纯php路由器,您可以通过简单地调用站点上的路由,以模块化的方式加载多个视图。因此,example.com
将属于null
路线,您可以在那里渲染您的视图,然后您可以使用example.com/home2
路线显示该特定路线的所有视图。
在执行此操作时,您可以告诉您的post.php
页面重定向到不同的路由并呈现该页面可能需要的所有模块化组件视图。此方法还会清除URL并显示{{1}而不是/home
。
将此代码放在index.php文件中。
home.php
您可能还需要基本目录中的$site_url = 'www.example.com';
function getCurrentUri()
{
$basepath = implode('/', array_slice(explode('/',
$_SERVER['SCRIPT_NAME']), 0, -1)) . '/';
$uri = substr($_SERVER['REQUEST_URI'], strlen($basepath));
if (strstr($uri, '?')) $uri = substr($uri, 0, strpos($uri, '?'));
$uri = '/' . trim($uri, '/');
return $uri;
}
$base_url = getCurrentUri();
$routes = array();
$routes = explode('/', $base_url);
foreach($routes as $route)
{
if(trim($route) != '')
array_push($routes, $route);
}
switch($routes[1]) {
case('home2'):
$page = 'home2';
include('header.php');
include('home2.php');
include('footer.php');
break;
case(null):
$page = 'home';
include('header.php');
include('home.php');
include('footer.php');
break;
default:
header('Location: http://'. $site_url .'/404');
break;
}
文件以允许重写,请尝试使用
.htaccess
但请不要引用我的信息^^ htaccess语法令人困惑。
另请注意,最好将RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
标记的完整<html><head>
和<body>
标记放在header.php
文件中,而不是在您重新编写其他页面的代码时可以只包括一个完整的html头。
所以基本上这会成为你的header.php
<!DOCTYPE HTML>
<html>
<head>
<!-- Style sheets, etc. -->
</head>
<body>
<?php include('header.php'); ?> //Here I include the above file
如果您重定向到home.php
并在主页代码之前的顶部包含header.php