2011-05-25 79 views
0

我正在研究一个银条子域的问题,别人做了代码,所以任何帮助,将不胜感激。子域问题

主网站上有一个“关于我们”的导航栏,例如www.mainwebsite.com,我们希望“关于我们”在任何子域名中消失,例如subdomain.mainwebsite.com。

我可以从银条纹后端看到,有一个'隐藏在子域'功能,我勾选它。然而,“关于我们”的链接已经消失了一段时间,并且它在主站点和子站点的其他站点都会出现。

任何人都可以指出我正确的方向如何解决这个问题?如果需要,我可以在这里复制任何代码。请帮忙。

感谢堆, 小号:)

添加评论,我发现在我的page.php文件这段代码在我的网站 - 代码文件夹,如果它是有用的

function ShowMenuInSubdomain() 
{ 
    $host = explode('.',$_SERVER['HTTP_HOST']); 
    $subdomain = $host[0]; 
    if($subdomain != 'www' && $this->HideInSubdomains) { 
     return true;  
    }  
} 

添加注释,这里是在Page.ss导航部分的主题 - 模板我使用

<div id="Header"> 
    <div id="HeaderWrapper"> 
     <div id="LogoWrapper"><a href="{$BaseHref}">$GetSubDomainHeaderImage</a></div> 
     <div id="Navigation"> 
      <% cached 'Navigation', Aggregate(Page).Max(LastEdited) %> 
      <% include Navigation %> 
      <% end_cached %> 
     </div> 
    </div> 
</div> 

添加注释的文件夹,这里是我的模板是什么navigation.ss - 包括文件夹的样子

<ul> 
<% control Menu(1) %> 
    <% if ShowMenuInSubdomain %> 
    <% else %> 
    <li <% if Children %>class="hasChildren"<% end_if %>> 
    <a href="$Link" title="$Title.XML" class="$LinkingMode">$MenuTitle.XML <% if ShowMenuInSubdomain %>0<% end_if %></a> 
     <% if Children %> 
     <ul> 
     <% control Children %> 
      <li <% if Children %>class="hasChildren"<% end_if %>> 
      <a href="$Link" title="$Title.XML" class="$LinkingMode">$MenuTitle.XML</a> 
      <% if Children %> 
      <ul> 
      <% control Children %> 
      <ul class="thridUL{$Pos}"> 
       <% if DisableLink %> 
       <li> 
       <span class="$LinkingMode thirdLevelTitle lookLikeALink">$MenuTitle.XML</span> 
       </li> 
       <% else_if ShowLabelInMenu==0 %> 
       <li> 
       <a href="$Link" title="$Title.XML" class="$LinkingMode thirdLevelTitle">$MenuTitle.XML</a> 
       </li> 
       <% end_if %> 
       <% if Children %> 
       <% control Children %> 
       <li> 
       <a href="$Link" title="$Title.XML" class="$LinkingMode">$MenuTitle.XML</a> 
       <% if Summary %> 
        <span class="menuSummary"> 
         $Summary 
         <span class="menuSummaryThumb">$Thumbnail.PaddedImage(160, 160)</span> 
        </span> 
       <% end_if %> 
       </li> 
       <% end_control %> 
       <% end_if %> 
      </ul> 
      <div class="clear">&nbsp;</div> 
      <% end_control %> 
      </ul> 
      <% end_if %> 
      </li> 
     <% end_control %> 
     </ul> 
     <% end_if %> 
    </li> 

    <% end_if %> 
<% end_control %> 
<li id="calculatorWrapper"> 
<a id="Calculator" href="$distanceCalculator.Link" rel="shadowbox;height=800;width=1000"><span>Journey Planner</span></a> 
</li> </ul> 

对不起,这是有点长,但任何帮助表示赞赏。谢谢。

大家好,这似乎是现在的工作 当我删除<%缓存 '导航', 骨料(页)。最大(LastEdited)%> <% end_cached%>在page.ss.请有人 请说明这是什么 线或它的意思吗?谢谢。

+0

听起来像一个子域中的链接是指导用户到另一个子域?虽然我从来没有见过这个 – 2011-05-25 21:36:27

回答

1

因为你已经发现了你的subodmain检查(“ShowMenuInSubdomain”)的方法,现在找地方菜单呈现的模板。对于标准的银条纹安装,这很可能是/mysite/templates/Page.ss,或/mysite/templates/layout中的一个文件。

您的菜单可能块内部呈现如下所示:

<ul> 
<% control Menu(1) %> 
<li><a href="$Link" title="Go to the $Title page" class="$LinkingMode">$MenuTitle</a></li> 
<% end_control %> 
</ul> 

你只需要包列表项,然后用控制模块调用你ShowMenuInSubdomain功能,像这样:

<% if ShowMenuInSubdomain %> 
<li><a href="$Link" title="Go to the $Title page" class="$LinkingMode">$MenuTitle</a></li> 
<% end_if %> 

请发布相应的模板代码块,以防您遇到问题。

注意:我认为有一个'!“丢失在ShowMenuInSubdomain功能,因为它目前读起来像‘如果(HideInSubdomains)然后ShowMenuInSubdomain是真正的’,所以这行也许应该是:

if($subdomain != 'www' && !$this->HideInSubdomains) { 

(提防‘!’之前$这个 - > HideInSubdomains)

编辑

第一,忘掉GetSubDomainMenu功能,看起来好像它被替换使用的更清洁的解决方案内置Menu控制与ShowMenuInSubdomain功能的子域检查。

第二,忘记我关于失踪''的说明。之前$this->HideInSubdomains。从函数的使用方式来看,它可以看到它按照它应该做的,函数只是以误导的方式命名:ShowMenuInSubdomain应该是HideMenuInSubdomain。令人困惑,但显然不是问题的根源。

因此,从您发布的代码到目前为止,没有明显的错误,因此您应该尝试验证以下内容:a)“navigation.ss”(不是.cc)我猜)实际上是呈现的模板?只需在文件内添加一些测试输出以确保(并在您的url中添加'?flush = 1'以清除模板缓存) b)ShowMenuInSubdomain函数实际上是否被调用?使其返回一些字符串,如'返回'工作''在第一行,然后添加$ShowMenuInSubdomain到您的模板

如果你仍然坚持那么,你可以压缩你的silverstripe项目文件夹,并把它放在某处下载首先删除关键信息,比如db访问凭证!),所以我可以看看。 祝你好运!

编辑II - 解决方案 - FINALLY :)

看起来好像你发现有缺陷的代码的一部分。你删除的行应该缓存导航,所以每次渲染时都不需要进行汇编(我想你已经熟悉'缓存'的概念了)。看看silverstripe docs on partial caching进一步的解释。注意那里的'Aggregates'下的第一个代码片段 - 这正是你删除的代码。

但为什么删除缓存部分可以解决您的问题?实际上,答案很简单:由于缓存导航只会在编辑某个页面后才会更新,因此除非您在子域中,否则不会调用子域检查功能。这很容易:)

2

只是这样做:

$_host = explode('.', $_SERVER['HTTP_HOST']); 
if(count($_host) == 3 && $_host[0] != "www") echo "Hide About Us"; 
+0

您好,谢谢您的快速回答。我对这个PHP世界很新。由于我使用的是银色条纹,我应该使用哪个文件来粘贴此代码?此外,我的子域名可以是subdomain.mainwebsite.com或www.subdomain.mainwebsite.com,该代码是否仍然有效?感谢堆,S – grumpypanda 2011-05-25 22:34:51

+0

这将工作,如果子域不是“www”。你可以拥有一个像subdomain.name.host.k1.com这样的域,这个代码仍然可以工作,因为子域始终是域名的第一部分。 – Racooon 2011-05-30 12:03:27

+0

谢谢Vural Acar,我已经解决了在银条纹中删除一些代码的问题。非常感谢您的关注。干杯,S :) – grumpypanda 2011-05-31 19:56:52