2013-05-25 15 views
8

Web.config dosyasındaki IgnoreUrlPrefixes ayarının varolan değer özniteliğine bir dize eklemek için bir Sitecore dahil yama dosyası oluşturmam gerekir.Sitecore İçerme Dosyasına bir özellik değeri nasıl eklenir

aşağıdaki ile tamamen varsayılan gözardı önekleri üzerine yazma çalıştık dosyası içerir: /foo/ varsayılan öneklerine eklemek istiyorum url öneki

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

. ShowConfig.aspx, değiştirilmiş yapılandırmanın uygulanmadığını belirtir.

İdeal olarak, IgnoreUrlPrefixes değerlerini varsayılan olarak /foo/'a ekleyebilmeyi isterim. Bunun mümkün olup olmadığını ve Sitecore yama sözdiziminde nasıl belirtileceğini bilen var mı?

cevap

12

Sitecore'un tüm olasılıklarının iyi bir açıklaması, yapılandırma dosyalarını bu John West blog post adresinde bulunabilir.

sen bağlantılı yayında bulabilirsiniz gibi:

patch:attribute: Define or replace the specified attribute. 

Bu özelliğin "Varsayılan IgnoreUrlPrefixes olarak var ne kadar /foo/ add" izin vermez.

+2

Teşekkür Maraş kadar çabuk teyit için. Orijinal dosyamda, yazımdan kaldırılan bir yazım hatası vardı. Dosyayı okuyan herkes için biraz daha sezgisel olduğundan, 'set: value' sözdizimini kullanarak sona erdim. –

+1

Bu linkler artık maalesef öldü – Liam

2

Geçenlerde aynı sorun koştum ve Mark Ursino bu özel konuda bir blog yayınlanmıştır gibi görünüyor: Onun örnekte

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

, o güncellemek için varsayılan Sitecore bir sonraki özel bir boru hattı yürütür değer.

Bunun yerine, ben yerleşik ardına (mevcut yerli IgnoreUrlPrefixes ayarı destekleyecek olan) ve kendi XML yapılandırma yoluyla her yolu eklemelerine olanak tanıyan gelir yeni boru hattı işlemci oluşturduk düğüm. Buradaki avantaj, mevcut değerleri kopyalamaya gerek kalmadan üzerinde yama ekleyebilir ve devam edebilirsiniz.

Numune yama dosyası: Boru hattı işlemcisi için

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

kaynak kodu, blogdan:

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

Güncelleme ve kod pasajı için teşekkürler. Bu tür görevlerin üstesinden gelmek için boru hattı işlemcilerin aşırı kullanımı hakkında bir rezervasyonum var. Aklıma, her durumda doğru çözüm olmasa bile, tüm sorunları çözen altın çekiçimiz oldular. Örneğin, yapılandırma yaması işlemcisi 'httpRequestBegin' boru hattında çalışıyor. Bu çok denecek ve çoğu durumda boru hattı işlemcisi yapılan istekle alakalı değil. Düşüncelerinizi duymak ilginizi çekiyor. –

+0

Mevcut Ignore işleyicisine bir bakarsanız, httpRequestBegin boru hattında da çalıştığını görürsünüz, en azından bu senaryoda mevcut mimariyle tutarlı olur. Konfigürasyon fabrikasının, başlatma sırasında konfigürasyonu yüklediğinde sadece "AddPaths" olarak adlandırdığına inanıyorum, bu yüzden istek işlemi sırasında sadece mevcut talebin göz ardı edilmesi gerekip gerekmediğini kontrol ediyor. Bu noktada bu kontrolü çalıştırmazsanız, tüm amacı boru hattını durdurmak olsa da, boru hattını iptal edemezsiniz ve boru hattı yürütülür. –

+0

Bu çözümle ilgili asıl sorun, orijinal listeyi güncelleyememesidir, sadece kendi "ekstra" listesini yaratır. Sitecore, göz ardı edilen URL'lerin listesine erişmek için herkese açık bir yol açmamış görünüyor. Bu nedenle, Sitecore işlemcisinin zaten kullandığı listeyi gerçekten değiştiremezsiniz. En iyi yol bu olurdu ... –