我正在开发一个网站,并在主页中包含两个菜单。主页,两个菜单的扩展名为.php。我在Apache服务器上进行本地测试。
问题:我的一个菜单(顶部导航栏)在我的本地服务器上正确显示,但其菜单项/链接无法点击且不显示翻转效果。这仅在我通过PHP加载菜单加载主页时。 当我加载菜单页面本身(仍在我的本地服务器上)时,问题不存在,我的菜单显示并正常工作,包括链接。
请参阅以下代码:
首页
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
<title>Home</title>
<!-- various css imports, removed for readability -->
</head>
<body id="home">
<?php include('top-bar.php'); ?>
<!-- Container div -->
<div id="container">
<?php include('menu.php'); ?>
<!-- Container div -->
</div>
</body>
</html>
菜单栏
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<!-- various css imports, removed for readability -->
<title>Topbar</title>
</head>
<body id="home">
<div id="headerbar">
<!-- Centered container -->
<div id="container">
<!-- Top bar -->
<div id="header">
<div id="maintitle">
<span style="color: #499DF5">My</span><span style="color: #FFFFFF"> Name</span> </div>
<!-- Second menu bar -->
<div id="menutop">
<ul>
<li id="contactme" title="Write me an email"><a href='#'><span>Contact me</span></a></li>
<li class="last" id="vcf"><a href="#" onClick="MyWindow=window.open('contact-card-popup.html','MyWindow','width=300,height=150'); return false;" title="Download my contact card (.vcf or .csv)">Download
contact card</a></li>
<li class="last" style="float: right;" id="googleplus"><a target="_blank" title="Follow me on Google+" href="https://plus.google.com/u/0/114402922247766544960/posts">
<i class="fa fa-google-plus fa-fw"></i></a></li>
<li style="float: right;" id="linkedin"><a target="_blank" title="View my LinkedIn profile" href="http://www.linkedin.com/in/myprofile">
<i class="fa fa-linkedin fa-fw"></i></a></li>
<li style="float: right;" id="visualize.me"> <a target="_blank" href='http://vizualize.me/myprofile?r=myprofile' title='View my infographic resume on Vizualize.me'><span style="font-weight:bold">Visualize.me</span></a></li>
</ul>
</div> <!-- End Second menu bar -->
<div id="jobtitle">Jobtitle</div>
<!-- End header div -->
</div>
<!-- End Centered container -->
</div>
<!-- End headerbar div -->
</div>
</body>
</html>
和CSS:
/* Layout
-----------------------------------------------------------------------------*/
body {
}
#container {
width:1020px;
position:relative;
min-height: 100%;
height: auto !important;
height: 100%;
margin: 0 auto -100px;
}
#headerbar{
width:100%;
min-width:500px;
height:130px;
position:absolute;
background: #414141;
}
#menutop {
min-width:500px;
width:1020px;
position:absolute;
margin-top:20px;
}
#wrapper {
clear:both;
height:900px;
width:1020px;
position:relative;
margin: 0 0 0 -25px;
}
/* Top menu: header
-----------------------------------------------------------------------------*/
#header {
font-family:'Open Sans', sans serif;
}
#maintitle {
font-weight:bold;
font-size:34px;
width:250px;
height:40px;
min-height:60px;
position:relative;
margin-left:40px;
margin-top:25px;
}
#jobtitle {
color: #FFFFFF;
font-size: 14px;
width: 230px;
height: 25px;
position: absolute;
margin-left: 270px;
margin-top: 9px;
left: 16px;
top: 36px;
}
我尝试替换我的php include
<?php include('top-bar.php'); ?>
使用相对于根的链接:
<?php include($_SERVER['DOCUMENT_ROOT']."/my-website/top-bar.php"); ?>
这没有改变任何事情。
我也对W3C进行了验证,以防万一它会抛出任何明显的错误,但事实并非如此。
关于为什么PHP菜单在独立工作但不包含在内的任何想法?谢谢。
修改
在Moshe的一个很好的建议中,我更新了他创建的JSFiddle。因为我似乎不能在那里使用几个文件,所以我将顶层菜单的代码放在主页中,执行php导入。这样做会使菜单中的链接无法正常工作,因此听起来像CSS问题。然而,我没有看到问题出在哪里。
http://jsfiddle.net/0ows5vym/4/
这只是菜单,独立工作正常:http://jsfiddle.net/fdbvwL3t/
注意:请指示菜单最右侧未显示的图标,它们基于其他我无法轻易复制的导入。那部分在当地运作良好。
答案 0 :(得分:0)
您可以使用dirname( FILE )获取当前目录。
尝试使用
include(dirname(__FILE__). "/my-website/top-bar.php")
而不是$ _SERVER [&#39; DOCUMENT_ROOT&#39;]
FILE 常量将为您提供当前文件的绝对路径 和dirname( FILE )获取当前包含文件的目录
答案 1 :(得分:0)
你想在哪个文件中加载你的php文件?
如果它在你的index.php(可能)中, 那么你需要考虑你面向你拥有它的文件的路径
让我们假设:
你有一个index.php的绝对路径,如
/var/www/html/thisismywebsite/index.php
,您的文件位于
/var/www/html/thisismywebsite/project/someinnerfolder/topbar.php
以上不会解决它。
相反,您可以选择像
这样的解决方案<?php
define('BASEPATH', dirname(__FILE__) . "/");
include(BASEPATH . "project/someinnerfolder/topbar.php");
请记住,包含必须与您的应用程序的入口点相关,因此您的包含必须与您启动应用程序的位置相关。
奖金:
不要使用标记启动所有文件,依此类推,因为它会在以后为您提供问题。相反,选择使用主人来保持这种HTML
答案 2 :(得分:0)
我终于明白了。在这里玩JsFiddle:http://jsfiddle.net/0ows5vym/4/让我走上正轨。
我有一个“容器”元素被调用两次,一次在我的php菜单中,然后再次在主页面中。如果我希望能够多次调用它,那么我就错误地给了该容器一个唯一的ID,它应该是一个类。
用“class”替换容器“id”修复它,参见此处。 http://jsfiddle.net/0ows5vym/6/
<!-- Container div -->
<div class="container">
<?php include('menu.php'); ?>
<!-- Container div -->
</div>
Moshe - 谢谢你告诉我有关JsFiddle的事。我喜欢那个工具。你的建议也帮助我找到答案。