Субдомен - PullRequest
       35

Субдомен

0 голосов
/ 26 мая 2011

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

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

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

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

Спасибо, куча, 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>

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

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

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

Привет всем, похоже, теперь работает, когда я удалил <% cached 'Navigation', Aggregate (Page) .Max (LastEdited)%> <% end_cached%> в page.ss,Может кто-нибудь, пожалуйста, любезно объясните, для чего эта строчка или ее значение?Спасибо.

Ответы [ 2 ]

2 голосов
/ 26 мая 2011

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

$_host = explode('.', $_SERVER['HTTP_HOST']); 
if(count($_host) == 3 && $_host[0] != "www") echo "Hide About Us";
1 голос
/ 26 мая 2011

, поскольку вы уже нашли метод для проверки субдомена для вас ('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-> HideInSubdomains)

РЕДАКТИРОВАТЬ

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

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

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

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

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

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

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

...