Avere Voce in tutte le lingue in cui si ha una versione

Dire che abbiamo un Elemento di Prodotto(che ha versioni in it, jp, zh e 0 versioni in ru). Come posso ottenere tale voce, it, jp e zh e non in ru.

Ho provato il seguente codice.

Item tempItem = Sitecore.Context.Database.GetItem(tempID);
foreach (var itemLanguage in tempItem.Languages)
{
  //Do Something
}

Qui tempItem.Languages è la restituzione di tutte e quattro le lingue in cui mi aspettavo solo in tre, come ru non hanno versioni.

È il modo corretto per raggiungere questo?

InformationsquelleAutor Suhas | 2014-04-07



2 Replies
  1. 8

    È necessario controllare la versioncount dei prodotti restituiti. Probabilmente ci sono modi migliori per raggiungere questo obiettivo, ma segue un suo codice di esempio, sarebbe qualcosa di simile a questo:

    Item tempItem = Sitecore.Context.Database.GetItem(tempID);
    foreach (var itemLanguage in tempItem.Languages)
    {
        var item = tempItem.Database.GetItem(tempItem.ID, itemLanguage);
        if (item.Versions.Count > 0)
        {
            //do something. If there is no "ru" version, this will be 0
        }
    }
  2. 5

    Ho eseguito un esperimento per ottenere un elenco di lingue con il numero di versioni per gli elementi con numero variabile di figli per verificare quanto costoso, questo è il sistema.

    Lo script riportato di seguito restituisce una lista con i nomi di lingue, che hanno versioni per l’elemento.

    public static List<string> LanguagesWithContent(this Item item)
    {
        var result = ItemManager.GetContentLanguages(item).Select(lang => new {
            lang.Name,
            Versions = ItemManager.GetVersions(item, lang).Count
            //this is better than db.GetItem(item.ID, lang).Versions.Count      
        }).Where(t => t.Versions > 0).Select(t => t.Name).ToList();
        return result;
    }

    Benchmarking delle prestazioni

    Primo Carico utilizzando GetVersions – quando i dati non dalla cache

    • 0.7298 ms per ottenere la Versione con 8 versioni in lingua. Il tempo di caricare la voce: 9.3041 ms. Langs: es-es, es-MX, sv-SE, en, it-IT, pt-BR, fr-fr, de-DE
    • 0.0448 ms per ottenere la Versione con 7 versioni in lingua. Il tempo di caricare la voce: 2.0039 ms. Langs: es-es, es-MX, en, it-IT, fr-FR, de-DE, ro-RO
    • 0.0334 ms per ottenere la Versione con 6 versioni linguistiche. Il tempo di caricare la voce: 3.145 ms. Langs: es-es, es-MX, en, it-IT, fr-FR, de-DE
    • 0.0307 ms per ottenere la Versione con 5 versioni di lingua. Il tempo di caricare la voce: 1.5976 ms. Langs: es-MX, en, it-IT, fr-FR, de-DE
    • 0.0353 ms per ottenere la Versione con 4 versioni linguistiche. Il tempo di caricare la voce: 10.2764 ms. Langs: en, de-DE, ja-JP, da
    • 0.0258 ms per ottenere la Versione con 3 versioni linguistiche. Il tempo di caricare la voce: 1.9507 ms. Langs: en, de-DE, ja-JP
    • 0.0193 ms per ottenere la Versione con 2 versioni di lingua. Il tempo di caricare la voce: 2.0533 ms. Langs: en, de-DE
    • 0.0201 ms per ottenere la Versione con 1 versioni in lingua. Il tempo di caricare la voce: 4.7689 ms. Langs: it

    Ripetere il 1 ° Carico esperimento, utilizzando GetItem invece di GetVersions

    conclusione: è meglio utilizzare ItemManager.GetVersions(voce, lang).Conte
    di db.GetItem(elemento.ID, lang).Le versioni.Conte per ottenere l’elenco delle versioni linguistiche di un elemento contiene.

    • 3.4936 ms per ottenere la Versione con 8 versioni in lingua. Il tempo di caricare la voce: 8.9118 ms. Langs: es-es, es-MX, sv-SE, en, it-IT, pt-BR, fr-fr, de-DE
    • 0.9966 ms per ottenere la Versione con 7 versioni in lingua. Il tempo di caricare la voce: 1.6489 ms. Langs: es-es, es-MX, en, it-IT, fr-FR, de-DE, ro-RO
    • 1.0875 ms per ottenere la Versione con 6 versioni linguistiche. Il tempo di caricare la voce: 3.1538 ms. Langs: es-es, es-MX, en, it-IT, fr-FR, de-DE
    • 0.5891 ms per ottenere la Versione con 5 versioni di lingua. Il tempo di caricare la voce: 1.4402 ms. Langs: es-MX, en, it-IT, fr-FR, de-DE
    • 2.2096 ms per ottenere la Versione con 4 versioni linguistiche. Il tempo di caricare la voce: 9.8701 ms. Langs: en, de-DE, ja-JP, da
    • 0.9255 ms per ottenere la Versione con 3 versioni linguistiche. Il tempo di caricare la voce: 2.5175 ms. Langs: en, de-DE, ja-JP
    • 0.7606 ms per ottenere la Versione con 2 versioni di lingua. Il tempo di caricare la voce: 2.2407 ms. Langs: en, de-DE
    • 1.9032 ms per ottenere la Versione con 1 versioni in lingua. Il tempo di caricare la voce: 5.0206 ms. Langs: it

      Successivi carichi elemento in cache già

      utilizzando ItemManager.GetVersions(voce, lang) in questo caso. GetItem dovrebbe in teoria dare risultati simili dal momento che i carichi successivi leva cache.

    • 0.569 ms per ottenere la Versione con 8 versioni in lingua. Il tempo di caricare la voce: 0.0372 ms. Langs: es-es, es-MX, sv-SE, en, it-IT, pt-BR, fr-fr, de-DE
    • 0.0429 ms per ottenere la Versione con 7 versioni in lingua. Il tempo di caricare la voce: 0.0475 ms. Langs: es-es, es-MX, en, it-IT, fr-FR, de-DE, ro-RO
    • 0.025 ms per ottenere la Versione con 6 versioni linguistiche. Il tempo di caricare la voce: 0.0247 ms. Langs: es-es, es-MX, en, it-IT, fr-FR, de-DE
    • 0.0239 ms per ottenere la Versione con 5 versioni di lingua. Il tempo di caricare la voce: 0.0201 ms. Langs: es-MX, en, it-IT, fr-FR, de-DE
    • 0.0342 ms per ottenere la Versione con 4 versioni linguistiche. Il tempo di caricare la voce: 0.0216 ms. Langs: en, de-DE, ja-JP, da
    • 0.0258 ms per ottenere la Versione con 3 versioni linguistiche. Il tempo di caricare la voce: 0.0197 ms. Langs: en, de-DE, ja-JP
    • 0.0228 ms per ottenere la Versione con 2 versioni di lingua. Il tempo di caricare la voce: 0.019 ms. Langs: en, de-DE
    • 0.0228 ms per ottenere la Versione con 1 versioni in lingua. Il tempo di caricare la voce: 0.0178 ms. Langs: it
    • Sono il tuo punto di riferimento i risultati delle medie di x viene eseguito? O hai fatto a misura di ogni test solo una volta? I numeri che hai elencato sembrano strani.
    • questa è un’istantanea di un singolo run, non una media. Anche se ho eseguito più volte per controllare se i numeri sono coerenti.
    • È meglio eseguire iterazioni su db.GetLanguages() rispetto alla voce.GetLanguages(). Entrambi restituiscono lo stesso elenco di lingue, che sono in uso nel sistema (in /sitecore/sistema/lingue), ma la voce di.GetLanguages è molto più lento. Mi sono imbattuto 100 iterazioni di ogni e db.GetLanguages() preso da 0,2 ms mentre l’elemento.GetLanguages() preso 387.3 ms. Non scorrere Sitecore.La globalizzazione.LanguageDefinitions.Definizioni – restituisce un elenco completo delle lingue conosciute definizioni (131 nel mio caso)

Lascia un commento