2013-05-25 22 views
8

Tôi cần tạo tệp bản vá Sitecore bao gồm để thêm chuỗi vào thuộc tính giá trị hiện tại của cài đặt IgnoreUrlPrefixes trong web.config.Cách vá một giá trị thuộc tính với một tệp Sitecore Include

Tôi đã cố gắng để ghi đè lên các tiền tố mặc định phớt lờ hoàn toàn với những điều sau đây bao gồm file:

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

đâu /foo/ là tiền tố url mà tôi muốn để thêm vào tiền tố mặc định. ShowConfig.aspx xác định rằng cấu hình đã sửa đổi chưa được áp dụng.

Lý tưởng nhất là tôi muốn có thể chỉ cần thêm /foo/ vào bất kỳ giá trị nào tồn tại dưới dạng giá trị mặc định IgnoreUrlPrefixes. Có ai biết nếu điều này là có thể và làm thế nào để xác định nó trong cú pháp vá Sitecore?

Trả lời

12

Giải thích tốt về tất cả khả năng của Sitecore bao gồm các tệp cấu hình có thể được tìm thấy trong số John West blog post này.

Như bạn có thể tìm thấy trong các bài liên quan:

patch:attribute: Define or replace the specified attribute. 

Nó không cho phép "add /foo/ để bất cứ điều gì tồn tại như là mặc định IgnoreUrlPrefixes" thuộc tính.

+2

Cảm ơn Maras để khẳng định rằng một cách nhanh chóng. Tôi đã có một lỗi đánh máy trong tập tin ban đầu của tôi đã dừng nó tải. Tôi đã sử dụng cú pháp 'set: value' vì nó trực quan hơn một chút đối với bất kỳ ai đọc tệp. –

+1

Liên kết đó hiện đã qua đời không may – Liam

2

Gần đây tôi đã chạy vào vấn đề này cùng và nó có vẻ như Mark Ursino gửi một blog về vấn đề này cụ thể:

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

Trong ví dụ của mình, ông thực hiện một đường ống dẫn tùy chỉnh sau khi mặc định Sitecore một để cập nhật giá trị.

Vì vậy, thay vào đó, tôi đã tạo ra một bộ xử lý đường ống mới mà đưa ra sau khi built-in một (mà sẽ hỗ trợ IgnoreUrlPrefixes gốc hiện có thiết lập) và sẽ cho phép bạn thêm mỗi con đường thông qua cấu hình XML riêng của mình nút. Lợi thế ở đây là bạn có thể vá và tiếp tục vá trên mà không cần phải sao chép các giá trị hiện có.

mẫu file patch:

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

Mã nguồn cho bộ xử lý đường ống, từ blog:

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

Cảm ơn bạn đã cập nhật và đoạn mã. Tôi có đặt chỗ xung quanh việc sử dụng quá nhiều bộ xử lý đường ống để xử lý các loại tác vụ này. Để tâm trí của tôi họ đã trở thành búa vàng của chúng tôi, sửa chữa tất cả các vấn đề trong khi có thể không phải là giải pháp đúng trong mọi trường hợp. Ví dụ, bộ xử lý bản vá cấu hình đang chạy trong đường dẫn 'httpRequestBegin'. Điều đó sẽ được gọi rất nhiều, và trong hầu hết các trường hợp, bộ xử lý đường ống không liên quan đến yêu cầu được thực hiện. Quan tâm để nghe suy nghĩ của bạn. –

+0

Nếu bạn nhìn vào trình xử lý Bỏ qua hiện tại, bạn sẽ thấy nó cũng chạy trong đường dẫn httpRequestBegin, vì vậy ít nhất trong trường hợp cụ thể này, nó phù hợp với kiến ​​trúc hiện có. Tôi tin rằng nhà máy cấu hình chỉ gọi "AddPaths" khi nó tải cấu hình trong quá trình khởi tạo, vì vậy trong quá trình xử lý yêu cầu, nó chỉ kiểm tra xem yêu cầu hiện tại có bị bỏ qua hay không. Nếu bạn không chạy kiểm tra tại thời điểm này, bạn không thể hủy bỏ các đường ống và đường ống sẽ thực thi, mặc dù toàn bộ mục đích là để ngăn chặn các đường ống. –

+0

Vấn đề thực tế của tôi với giải pháp này là nó không thể cập nhật danh sách ban đầu, nó chỉ tạo danh sách "phụ" của riêng nó. Sitecore dường như chưa mở ra bất kỳ cách nào để truy cập danh sách các URL bị bỏ qua, do đó bạn không thể thay đổi danh sách đã được bộ xử lý của Sitecore sử dụng. Đó sẽ là cách tốt nhất ... –

Các vấn đề liên quan