我正在研究一个silverstripe子域名的问题,其他人做了代码,所以任何帮助都将不胜感激。
主网站上有一个“关于我们”导航栏,例如www.mainwebsite.com,我们希望“关于我们”在任何子域名中消失,例如subdomain.mainwebsite.com。
我可以从Silverstripe后端看到,有一个'Hide in Subdomains'功能,我勾选了它。但是,“关于我们”链接会在一段时间内消失,并在主站点和子域名的其他主题中显示。
有人能指出我正确的方向如何解决这个问题?如果需要,我可以在这里复制任何代码。请帮忙。
谢谢堆, S:)
添加评论,我在我的网站中的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"> </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>
对不起,它有点长,但任何帮助表示赞赏。感谢。
大家好,似乎工作正常 现在当我删除&lt;%cached时 '导航', Aggregate(Page).Max(LastEdited)%&gt; &LT;% end_cached%&gt;在page.ss.有人可以 请详细解释这是什么 它的意义还是意义呢?感谢。
答案 0 :(得分:2)
这样做:
$_host = explode('.', $_SERVER['HTTP_HOST']);
if(count($_host) == 3 && $_host[0] != "www") echo "Hide About Us";
答案 1 :(得分:1)
因为您已经找到了一个子域检查方法('ShowMenuInSubdomain'),现在查看呈现菜单的模板。对于标准的silverstripe安装,这很可能是/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函数中缺少,因为它当前读取的内容如'if(HideInSubdomains),然后ShowMenuInSubdomain为true',因此相关的行应该是:
if($subdomain != 'www' && !$this->HideInSubdomains) {
(在$ this-&gt; HideInSubdomains之前注意'!')
编辑
首先,忘记GetSubDomainMenu
函数,看起来好像已被替换为使用内置Menu
控件和子域ShowMenuInSubdomain
函数更清晰的解决方案检查。
第二,忘掉关于遗失'!'的笔记。在$this->HideInSubdomains
之前。从使用函数的方式来看,我可以看到它做了它应该做的事情,该函数只是以误导的方式命名:ShowMenuInSubdomain
应该读HideMenuInSubdomain
。显然是混乱,但不是问题的根源。
所以,从你到目前为止发布的代码来看,没有明显的错误,所以你应该尝试验证以下内容:
a)是'navigation.ss'(不是你发布的.cc)实际上是渲染的模板吗?只需在文件中添加一些测试输出以确保(并将'?flush = 1'添加到您的网址以清除模板缓存)
b)ShowMenuInSubdomain
函数实际上是否被调用?让它返回一些字符串,如第一行中的“return”working“”,然后将$ShowMenuInSubdomain
添加到模板中
如果您仍然卡住了,那么您可以压缩您的silverstripe项目文件夹并将其放在某处下载(首先删除关键信息,如数据库访问凭据!),所以我可以看看。 祝你好运!
编辑II - 解决方案 - 最后:)
看起来好像你发现了有缺陷的代码部分。您删除的行应该缓存导航,因此每次渲染时都不需要组合(我猜您熟悉'缓存'的概念)。请查看silverstripe docs on partial caching以获得有关此问题的进一步说明。注意“聚合”下的第一个代码片段 - 它正是您删除的代码。但为什么删除缓存部分可以解决您的问题?事实上,答案很简单:由于您的缓存导航只会在编辑某个页面后更新,因此除非您在子域上,否则不会调用子域检查功能。这有点容易:)