2013-03-02 15 views
6

In sitecore, se aggiungo un nuovo elemento al database principale (non pubblicato), non mostra alcuna indicazione riguardante lo stato pubblicato.Come contrassegnare i nuovi elementi come elementi non pubblicati?

Per un esempio, se un utente ha aggiunto 10 elementi, potrebbe confondersi con gli oggetti aggiunti da lui che sono in sospeso per la pubblicazione.

C'è un modo per identificare gli elementi appena aggiunti come non pubblicati o nuovi e visualizzare una convalida nella "Barra di azione rapida"?

risposta

18

Non ho mai pensato a questo, ma in realtà è piuttosto facile da risolvere.

Ho creato un GutterRenderer che indica che un elemento è stato pubblicato su almeno uno, su tutti o su nessuno dei target di pubblicazione.

MODIFICA: Aggiunto comportamento clic. Quando fai clic sull'icona della grondaia, verrà visualizzata la finestra di dialogo Pubblica per quell'elemento.

Per prima cosa ti mostrerò il codice che ho scritto per questo e poi ti mostrerò le schermate della configurazione e il risultato.

Ecco il codice:

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) 
     }; 
    } 
    } 
} 

E questo è il modo in modo da impostare su e come apparirà una volta che è in esecuzione:

Figura 1: creare un nuovo elemento Gutter nel database Core: enter image description here

Figura 2: tornare al database Master e attivare il Gutter facendo clic con il pulsante destro del mouse nell'area di rilegatura. enter image description here

Figura 3: The Gutter ora indica lo stato pubblicazione dei tuoi articoli enter image description here

+2

più sensato utilizzare l'icona "Persone/16x16/flag_red.png" per gli articoli non pubblicati, solo pensato, ma non voglio fare nuovi screenshot;) –

+0

Awesom! Grazie mille per questo aiuto. :) – Dhanuka777

3

Dalla parte superiore della mia testa non è disponibile fuori dalla scatola. Nel database principale, tuttavia, ci sono le definizioni della grondaia, ecc. Puoi crearne una tua.

C'è però il campo "pubblicato" sugli articoli, ma non sono sicuro che ciò tenga conto di diverse versioni. Forse puoi controllare le differenze tra l'elemento nel master e nel web (cioè l'elemento non esiste o è una versione diversa nel web, quindi è in attesa di essere pubblicato).

In alternativa, leggere attentamente: http://webcmd.wordpress.com/2011/08/31/sitecore-ribbon-that-displays-published-state-of-an-item/ Spiegherà come verificare se un articolo è pubblicato come un nastro.

Problemi correlati