Настройка логики работы корневого сайта вариантов

Дата последнего изменения: 12 ноября 2010 г.

Применимо к: SharePoint Server 2010

При подготовке к работе семейства сайтов в Microsoft SharePoint Server 2010 и настройке вариантов выполняются следующие действия:

  • На домашнем сайте варианта на основе файла макета страницы VariationRootPageLayout.aspx из коллекции главных страниц и макетов страниц создается страница с именем VariationRoot.

  • Начальная страница домашнего сайта варианта по умолчанию заменяется на страницу VariationRoot.

При просмотре домашнего сайта варианта SharePoint Server 2010 выполняет поиск свойства сайта WelcomePage и открывает страницу VariationRoot. Поскольку эта страница создана на основе файла VariationRootPageLayout.aspx, запускается файл макета страницы. Макет страницы VariationRootPageLayout содержит ссылку на файл VariationsRootLanding.ascx и пользовательский элемент управления, заданный в файле VariationsRootLanding.ascx. Макет страницы выполняет логику в файле VariationsRootLanding.ascx и перенаправляет пользователя на сайт варианта.

Логика по умолчанию, заданная в файле VariationsRootLanding.ascx, перенаправляет пользователя на вариант сайта, соответствующий параметру accept lang браузера или массиву кодов языков, для которых доступен текущий документ. Файл VariationsRootLanding.ascx хранится в папке \<Program Files>\Common Files\Microsoft Shared Debug\Web Server Extensions\14\Template\ControlTemplates.

Если необходимо, что пользователь по умолчанию перенаправлялся на вариант сайта, основанный не на параметре accept lang, это можно сделать одним из трех перечисленных ниже способов. Каждый из них обладает своими достоинствами и недостатками, которые следует учитывать при выборе конкретного подхода.

  • Непосредственное изменение файла VariationsRootLanding.ascx.

    Это самый быстрый способ изменить логику. Внесите необходимые изменения в файл VariationsRootLanding.ascx на интерфейсном веб-сервере.

    ПримечаниеПримечание

    Файл VariationsRootLanding.ascx необходимо обновить на каждом интерфейсном веб-сервере. Все семейства сайтов в ферме серверов привязаны к заданной логике работы корневого сайта вариантов.

  • Копирование содержимого файла VariationsRootLanding.ascx в макет страницы в коллекции главных страниц и макетов страниц.

    Сведения о реализации данного подхода см. в описании первой процедуры, Копирование содержимого файла VariationsRootLanding.ascx в макет страницы. Как и предыдущий подход, данный подход обеспечивает быструю настройку благодаря непосредственному внесению изменений и не требует компиляции библиотек DLL и программирования. Кроме того, поскольку для каждого семейства сайтов используется собственный набор макетов страниц, этот подход также позволяет настраивать логику работы корневого сайта вариантов на уровне семейства сайтов. Чтобы реализовать этот подход, обновите файл web.config на каждом интерфейсном веб-сервере.

    Предупреждающая заметкаВнимание!

    Следует проявлять осторожность при задании флага AllowCompilation в файле VariationRootPageLayout.aspx. Поддержка встроенного кода позволяет злоумышленнику внедрить на страницу вредоносный код.

  • Создание предварительно скомпилированной сборки.

    Сведения о реализации данного подхода см. в описании второй процедуры, Создание предварительно скомпилированной сборки. При использовании этого подхода система безопасности не подвергается рискам, связанным с открытием элемента коллекции главных страниц и макетов страниц для выполнения встроенного кода. Как и в предыдущем подходе, настройка выполняется на уровне семейства сайтов. Однако при каждом изменении логики работы корневого сайта вариантов необходимо будет заново компилировать сборку. Следовательно, такой подход характеризуется более медленным циклом "изменение-тестирование-развертывание". Сборку необходимо развернуть на всех интерфейсных веб-серверах.

Также возможен еще один вариант действий — изменение кода в файле VariationsRootLanding.ascx. Если для развертывания сайта вариантов используется задание развертывания, ограниченное определенной областью, и это задание развертывает из источника развертывания не все метки вариантов в иерархии вариантов, пользователи, которых система обычно перенаправляла по отсутствующим меткам, увидят при переходе на корневой сайт вариантов на конечном компьютере сообщение об ошибке 404. Например, при наличии в иерархии вариантов метки, соответствующей немецкому языку, и отсутствии этой метки в области развертывания браузеры, настроенные на использование немецких региональных стандартов, будут выдавать ошибку 404 при переходе на корневой сайт вариантов на конечном компьютере. Логика работы корневого сайта вариантов по умолчанию не проверяет исправность используемого URL-адреса перенаправления.

Один из способов устранения этой проблемы заключается в том, чтобы включить в логику работы корневого сайта вариантов проверку на наличие по указанному URL-адресу перенаправления рабочего веб-сайта. Сведения о том, как это реализовать, см. в описании третьей процедуры, Изменение логики работы корневого сайта вариантов для определения наличия рабочего веб-сайта.

Копирование содержимого файла VariationsRootLanding.ascx в макет страницы

  1. Скопируйте код из файла VariationsRootLanding.ascx и вставьте его в файл VariationRootPageLayout.aspx в коллекции главных страниц и макетов страниц.

  2. Внесите в файл VariationRootPageLayout.aspx необходимые изменения.

  3. Удалите из файла VariationRootPageLayout.aspx ссылку на файл VariationsRootLanding.ascx и пользовательский элемент управления.

  4. Чтобы разрешить выполнение встроенного кода в файле VariationRootPageLayout.aspx, измените файл web.config для каждого веб-клиента следующим образом:

      <SharePoint>
        <SafeMode ... >
          <!-- Marks VariationRootPageLayout.aspx for ASP.NET compilation. -->
          <PageParserPath VirtualPath= "/_catalogs/masterpage/VariationRootPageLayout.aspx" 
            CompilationMode="Always"  
            AllowServerSideScript="False"
            AllowUnsafeControls="False" 
            IncludeSubFolders="True"/>
          </PageParserPaths>
        </SafeMode>
      </SharePoint>
    

Создание предварительно скомпилированной сборки

  1. Скопируйте код из файла VariationsRootLanding.ascx, чтобы создать собственный элемент управления в собственной DLL-библиотеке сборки.

  2. Внесите в элемент управления необходимые изменения.

  3. Добавьте ссылку на элемент управления в файл VariationRootPageLayout.aspx в коллекции главных страниц и макетов страниц.

  4. Удалите из файла VariationRootPageLayout.aspx ссылку на файл VariationsRootLanding.ascx и пользовательский элемент управления.

Изменение логики работы корневого сайта вариантов для определения наличия рабочего веб-сайта

  1. Откройте файл VariationsRootLanding.ascx.

  2. В разделе GetRedirectUrl() найдите следующую строку кода.

    return (string.IsNullOrEmpty(matchedUrl) ? sourceLabelUrl : matchedUrl);
    
  3. Замените строку кода, найденную на шаге 2, на следующий код.

    // Customization for handling matchedUrl not valid. 
    // (For example, a content deployed target site collection, 
    // without source hierarchy.)
    matchedUrl = (string.IsNullOrEmpty(matchedUrl) ? sourceLabelUrl : matchedUrl);                           
    using (SPSite site = new SPSite(matchedUrl))
    using (SPWeb web = site.OpenWeb())
         {
         // If matchedUrl is the same as the URL of the Web
         // that you just opened, then matchedUrl is valid.
         if (string.Compare(matchedUrl, web.Url, StringComparison.OrdinalIgnoreCase) == 0 && web.DoesUserHavePermissions(SPBasePermissions.Open))
           {
          //Target URL is valid; return it.
            return matchedUrl;
            }
            else
            {
          //Target URL was NOT valid; the variation label is missing.
          //Perform logic here to redirect the user appropriately.
          //If nothing is done here, then this function returns null
          //and the landing behavior reverts to the
          //VariationsRootLandingRunTime control.
          //This control displays a simple error message that
          //indicates that it could not find an appropriate subsite to 
          //redirect to.
            }
       }
    

См. также

Другие ресурсы

Варианты и веб-сайты на нескольких языках