Проблема с субдоменом

Я работаю над проблемой субдоменов silverstripe, код написал кто-то другой, поэтому буду признателен за любую помощь.

На главном веб-сайте, например, www.mainwebsite.com, есть панель навигации «О нас», и мы хотели бы, чтобы «О нас» исчезла для любых поддоменов, например, subdomain.mainwebsite.com.

Я вижу из бэкэнда Silverstripe, что есть функция «Скрыть в субдоменах», и я поставил галочку. Однако ссылка «О нас» пропадает на некоторое время и появляется снова в других томах как на основном сайте, так и на поддоменах.

Может ли кто-нибудь указать мне правильное направление, как я могу решить эту проблему? Я могу скопировать любой код здесь, если вам нужно. Пожалуйста помоги.

Большое спасибо, С :)

добавьте комментарии, я нашел этот код в моей странице.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 в папке templates-includes

<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>

Извините, это немного длинно, но любая помощь приветствуется. Спасибо.

Привет всем, кажется, теперь это работает, когда я удалил ‹% кэшированных «Навигация», Aggregate(Page).Max(LastEdited) %> ‹% end_cached %> в page.ss. Может кто-нибудь, пожалуйста, объясните, для чего была эта строка или ее значение? Спасибо.


person grumpypanda    schedule 25.05.2011    source источник
comment
Похоже, что ссылки в одном субдомене ведут пользователя на другой субдомен? Хотя я никогда не видел этого раньше   -  person Abe Petrillo    schedule 26.05.2011


Ответы (2)


так как вы уже нашли метод для проверки subodmain ('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, поскольку в настоящее время она читается как «если (HideInSubdomains), то ShowMenuInSubdomain имеет значение true», поэтому рассматриваемая строка, вероятно, должна быть:

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

(обратите внимание на '!' перед $this->HideInSubdomains)

ИЗМЕНИТЬ

во-первых, забудьте о функции GetSubDomainMenu, похоже, что она была заменена более чистым решением использования встроенного элемента управления Menu в сочетании с функцией ShowMenuInSubdomain для проверки субдомена.

во-вторых, забудьте о моей заметке о пропущенном '!' до $this->HideInSubdomains выше. судя по тому, как используется функция, я вижу, что она делает то, что должна, просто имя функции вводит в заблуждение: ShowMenuInSubdomain должно читаться как HideMenuInSubdomain. сбивает с толку, но не является источником проблемы, видимо.

Итак, из кода, который вы разместили до сих пор, нет видимой ошибки, поэтому вам следует попытаться проверить следующее: а) является ли «navigation.ss» (НЕ .cc, как вы опубликовали, я думаю) шаблон, который отображается? просто добавьте тестовый вывод в файл, чтобы быть уверенным (и добавьте '?flush=1' к вашему URL-адресу, чтобы очистить кеш шаблона) b) действительно ли вызывается функция ShowMenuInSubdomain? заставьте его возвращать некоторую строку, например «return «working»» в первой строке, затем добавьте $ShowMenuInSubdomain в свой шаблон.

если вы все еще застряли, вы можете заархивировать папку проекта silverstripe и поместить ее куда-нибудь для загрузки (сначала удалите критическую информацию, такую ​​​​как учетные данные для доступа к базе данных!), чтобы я мог посмотреть. удачи!

РЕДАКТИРОВАНИЕ II - РЕШЕНИЕ - НАКОНЕЦ :)

похоже, вы нашли ошибочную часть кода. строки, которые вы удалили, должны были кэшировать навигацию, поэтому ее не нужно собирать каждый раз при рендеринге (полагаю, вы знакомы с концепцией «кэширования»). дополнительные пояснения по этому . следите за первым фрагментом кода в разделе «Агрегаты» — это именно тот код, который вы удалили.

но почему удаление кэширующей части решает вашу проблему? на самом деле, ответ довольно прост: поскольку ваша кешированная навигация будет обновляться только после редактирования какой-либо страницы, функция проверки поддомена не будет вызываться, кроме как в этом случае, независимо от того, находитесь ли вы на поддомене или нет. это так просто иногда :)

person schellmax    schedule 26.05.2011

просто сделайте это:

$_host = explode('.', $_SERVER['HTTP_HOST']); 
if(count($_host) == 3 && $_host[0] != "www") echo "Hide About Us";
person Racooon    schedule 25.05.2011
comment
Привет, спасибо за быстрый ответ. Я новичок в этом мире php. Поскольку я использую silverstripe, какой файл мне следует использовать для вставки этого кода? Также моими поддоменами могут быть либо subdomain.mainwebsite.com, либо www.subdomain.mainwebsite.com, будет ли код работать? Большое спасибо, С - person grumpypanda; 26.05.2011
comment
это будет работать, если субдомен не www. у вас может быть домен типа subdomain.name.host.k1.com, этот код все равно будет работать, потому что субдомен всегда является первой частью имени домена. - person Racooon; 30.05.2011
comment
Спасибо Vural Acar, я решил проблему с удалением кода в Silverstripe. Большое спасибо за то, что следили за этим. С уважением, С :) - person grumpypanda; 31.05.2011