2013-03-02 24 views
6

Trong sitecore, nếu tôi thêm một mục mới vào cơ sở dữ liệu chủ (chưa xuất bản), nó không hiển thị bất kỳ dấu hiệu nào liên quan đến trạng thái được xuất bản.Cách gắn cờ các mục mới dưới dạng các mục chưa được xuất bản?

Ví dụ: nếu người dùng đã thêm 10 mục, anh ấy có thể bị lẫn lộn để tìm ra các mục do anh ấy thêm đang chờ xuất bản.

Có cách nào để xác định các mục mới được thêm dưới dạng chưa được xuất bản hoặc mới và hiển thị xác thực trong "Thanh tác vụ nhanh" không?

Trả lời

18

Không bao giờ nghĩ về điều này, nhưng nó thực sự khá dễ dàng để sửa chữa.

Tôi đã tạo một GutterRenderer cho biết một mục đã được xuất bản cho ít nhất một, cho tất cả hoặc không có mục tiêu xuất bản nào.

EDIT: Đã thêm hành vi Nhấp chuột. Khi bạn nhấp vào biểu tượng máng xối, hộp thoại Xuất bản sẽ được hiển thị cho mục đó.

Trước tiên, tôi sẽ cho bạn biết mã mà tôi đã viết cho điều này và sau đó tôi sẽ hiển thị cho bạn ảnh chụp màn hình của quá trình thiết lập và kết quả.

Đây là mã:

using System.Collections.Generic; 
using System.Linq; 
using Sitecore; 
using Sitecore.Data; 
using Sitecore.Data.Items; 
using Sitecore.Globalization; 
using Sitecore.Shell.Applications.ContentEditor.Gutters; 

namespace ParTech.Library.Gutters 
{ 
    public class PublicationStatus : GutterRenderer 
    { 
    private readonly ID publishingTargetsFolderId = new ID("{D9E44555-02A6-407A-B4FC-96B9026CAADD}"); 
    private readonly ID targetDatabaseFieldId = new ID("{39ECFD90-55D2-49D8-B513-99D15573DE41}"); 

    protected override GutterIconDescriptor GetIconDescriptor(Item item) 
    { 
     bool existsInAll = true; 
     bool existsInOne = false; 

     // Find the publishing targets item folder 
     Item publishingTargetsFolder = Context.ContentDatabase.GetItem(publishingTargetsFolderId); 

     if (publishingTargetsFolder == null) 
     { 
     return null; 
     } 

     // Retrieve the publishing targets database names 
     List<string> publishingTargetsDatabases = publishingTargetsFolder.GetChildren() 
     .Select(x => x[targetDatabaseFieldId]) 
     .ToList(); 

     // Check for item existance in publishing targets 
     publishingTargetsDatabases.ForEach(delegate(string databaseName) 
     { 
     if (Database.GetDatabase(databaseName).GetItem(item.ID) != null) 
     { 
      existsInOne = true; 
     } 
     else 
     { 
      existsInAll = false; 
     } 
     }); 

     // Return descriptor with tooltip and icon 
     string tooltip = Translate.Text("This item has not yet been published"); 
     string icon = "People/16x16/flag_red.png"; 

     if (existsInAll) 
     { 
     tooltip = Translate.Text("This item has been published to all targets"); 
     icon = "People/16x16/flag_green.png"; 
     } 
     else if (existsInOne) 
     { 
     tooltip = Translate.Text("This item has been published to at least one target"); 
     icon = "People/16x16/flag_yellow.png"; 
     } 

     return new GutterIconDescriptor() 
     { 
     Icon = icon, 
     Tooltip = tooltip, 
     Click = string.Format("item:publish(id={0})", item.ID) 
     }; 
    } 
    } 
} 

Và đây là cách để thiết lập nó và làm thế nào nó sẽ xem xét khi nó đã chạy:

Hình 1: Tạo mục Gutter mới trong cơ sở dữ liệu Core: enter image description here

Hình 2: Chuyển về cơ sở dữ liệu Master của bạn và kích hoạt Gutter bằng cách nhấp chuột phải vào vùng máng xối. enter image description here

Hình 3: Các Gutter nay cho biết tình trạng công bố các mục của bạn enter image description here

+2

Làm cho cảm giác hơn để sử dụng biểu tượng "Mọi người/16x16/flag_red.png" cho các mục chưa được công bố, chỉ cần nghĩ về điều đó nhưng không muốn tạo ảnh chụp màn hình mới;) –

+0

Awesom! Cảm ơn rất nhiều vì sự giúp đỡ này. :) – Dhanuka777

3

Từ đầu của tôi, nó không có sẵn trong hộp. Tuy nhiên, trong cơ sở dữ liệu lõi, có các định nghĩa về máng xối, v.v. Bạn có thể tự tạo ra.

Có trường 'đã xuất bản' trên các mục mặc dù, nhưng tôi không chắc liệu điều đó có tính đến các phiên bản khác nhau hay không. Có thể bạn có thể kiểm tra sự khác biệt giữa mục trong trang cái và web (ví dụ: Mục không tồn tại hoặc là phiên bản khác trên web, sau đó nó đang chờ để được xuất bản).

Hoặc, hãy đọc qua điều này: http://webcmd.wordpress.com/2011/08/31/sitecore-ribbon-that-displays-published-state-of-an-item/ Nó sẽ giải thích cách kiểm tra xem một mục có được xuất bản dưới dạng dải băng hay không.

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