2013-05-25 16 views
8

Potrzebuję utworzyć plik poprawki Sitecore, aby dodać ciąg do istniejącego atrybutu wartości ustawienia IgnoreUrlPrefixes w pliku web.config.Jak załatać wartość atrybutu przy użyciu pliku Sitecore Include

Próbowałem nadpisanie domyślnych przedrostków całkowicie ignorowane z następujących zawierać plik:

<?xml version="1.0"?> 
    <configuration xmlns:patch="http://www.sitecore.net/xmlconfig/"> 
     <sitecore> 
      <settings> 
       <setting name="IgnoreUrlPrefixes"> 
        <patch:attribute name="value">/foo/|/sitecore/default.aspx|/trace.axd|/webresource.axd|/sitecore/shell/Controls/Rich Text Editor/Telerik.Web.UI.DialogHandler.aspx|/sitecore/shell/applications/content manager/telerik.web.ui.dialoghandler.aspx|/sitecore/shell/Controls/Rich Text Editor/Telerik.Web.UI.SpellCheckHandler.axd|/Telerik.Web.UI.WebResource.axd|/sitecore/admin/upgrade/|/layouts/testing</patch:attribute> 
       </setting> 
      </settings> 
     </sitecore> 
    </configuration> 
</settings> 

/foo/ Gdzie jest prefiks URL, które chciałbym dodać do domyślnych przedrostków. ShowConfig.aspx wskazuje, że zmodyfikowana konfiguracja nie została zastosowana.

Idealnie chciałbym móc po prostu dodać /foo/ do wszystkiego, co istnieje jako domyślne wartości IgnoreUrlPrefixes. Czy ktoś wie, czy jest to możliwe i jak to określić w składni łatki Sitecore?

Odpowiedz

12

Dobre wyjaśnienie wszystkich możliwości Sitecore zawierają pliki konfiguracyjne można znaleźć w tym John West blog post.

Jak można znaleźć w połączonej postu:

patch:attribute: Define or replace the specified attribute. 

To nie pozwala na „dodaj /foo/ aby cokolwiek istnieje jako domyślny IgnoreUrlPrefixes” atrybutu.

+2

Dzięki Maras za potwierdzenie, że tak szybko. Miałem literówkę w moim oryginalnym pliku, który uniemożliwiał jej załadowanie. W końcu użyłem składni 'set: value', ponieważ jest ona nieco bardziej intuicyjna dla każdego czytającego plik. –

+1

Łącza teraz martwe niestety – Liam

2

Niedawno wpadłem na ten sam problem i wydaje się, że Mark Ursino pisał bloga na tej konkretnej kwestii:

http://firebreaksice.com/sitecore-patchable-ignore-lists/

W swoim przykładzie, że wykonuje własny rurociąg po domyślnie Sitecore jeden aktualizacji wartość.

Więc zamiast Utworzyłem nowy procesor rurociągu, który przychodzi po wbudowany w jednym (która będzie wspierać istniejącego rodzimych IgnoreUrlPrefixes ustawienie) i pozwoli, aby dodać każdą ścieżkę za pośrednictwem własnej konfiguracji XML węzeł. Zaletą jest to, że możesz łatać i kontynuować łatanie na bez konieczności kopiowania istniejących wartości.

Próbka Patch file:

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/"> 
    <sitecore> 
    <pipelines> 
     <httpRequestBegin> 
     <processor type="Sitecore.PatchableIgnoreList.ProcessPatchedIgnores, Sitecore.PatchableIgnoreList" 
        patch:after="processor[@type='Sitecore.Pipelines.HttpRequest.IgnoreList, Sitecore.Kernel']"> 
      <Paths hint="list:AddPaths"> 
      <foo>/foo</foo> 
      <bar>/bar</bar> 
      </Paths> 
     </processor> 
     </httpRequestBegin> 
    </pipelines> 
    </sitecore> 
</configuration> 

kod źródłowy dla procesora rurociągu z bloga:

using Sitecore.Collections; 
using Sitecore.Pipelines.HttpRequest; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace Sitecore.PatchableIgnoreList 
{ 
    public class ProcessPatchedIgnores : HttpRequestProcessor 
    { 
     private List<string> _paths = new List<string>(); 

     public override void Process(HttpRequestArgs args) 
     { 
      string filePath = args.Url.FilePath; 

      foreach (string path in _paths) 
      { 
       if (filePath.StartsWith(path, StringComparison.OrdinalIgnoreCase)) 
       { 
        args.AbortPipeline(); 
        return; 
       } 
      } 
     } 

     public void AddPaths(string path) 
     { 
      if (!string.IsNullOrEmpty(path) && !_paths.Contains(path)) 
      { 
       _paths.Add(path); 
      } 
     } 
    } 
} 
+0

Dzięki za aktualizację i fragment kodu. Mam rezerwację dotyczącą nadmiernego wykorzystania procesorów do obsługi rurociągów do obsługi tego rodzaju zadań. Sądzę, że stali się naszym złotym młotem, naprawiającym wszystkie problemy, a być może nie będącym właściwym rozwiązaniem we wszystkich przypadkach. Na przykład procesor łatki konfiguracji działa w potoku 'httpRequestBegin'. Będzie to bardzo często nazywane, a w większości przypadków procesor rurociągu nie ma znaczenia dla złożonego wniosku. Zainteresowany usłyszeć twoje myśli. –

+0

Jeśli spojrzysz na istniejącą procedurę obsługi Ignoruj, zobaczysz, że działa również w potoku httpRequestBegin, więc przynajmniej w tym konkretnym przypadku jest zgodny z istniejącą architekturą. Wierzę, że fabryka konfiguracji wywołuje tylko "AddPaths" podczas ładowania konfiguracji podczas inicjowania, więc podczas przetwarzania żądania sprawdza tylko, czy bieżące żądanie powinno zostać zignorowane. Jeśli nie uruchomisz tej kontroli w tym momencie, nie możesz przerwać rurociągu, a potok zostanie wykonany, nawet jeśli jego celem jest zatrzymanie rurociągu. –

+0

Mój faktyczny problem z tym rozwiązaniem polega na tym, że nie można zaktualizować oryginalnej listy, po prostu tworzy ona własną "dodatkową" listę. Wydaje się, że Sitecore nie otworzył żadnego publicznego dostępu do listy ignorowanych adresów URL, więc nie możesz zmienić listy już używanej przez procesor Sitecore. To byłby najlepszy sposób ... –

Powiązane problemy