2016-07-28 27 views
0

Ich verwende die Standardkonfiguration von uCommerce und sehe, dass uCommerce nette URLs nicht sprachbewusst sind: http://sitename/catalogname/productname/c-XX/p-YY.Wie man Sprache in Sitecore-uCommerce nette URLs einbetten?

Was soll ich tun, um Sprache in diesen URLs wie folgt zu haben: http://sitename/en/catalogname/productname/c-XX/p-YY? Hier

ist die Konfiguration:

<linkManager defaultProvider="sitecore"> 
    <providers> 
    <clear /> 
    <add name="sitecore" type="Sitecore.Links.LinkProvider, Sitecore.Kernel" addAspxExtension="false" alwaysIncludeServerUrl="false" encodeNames="true" languageEmbedding="always" languageLocation="filePath" lowercaseUrls="true" shortenUrls="true" useDisplayName="true" /> 
    </providers> 
</linkManager> 

Hier ist, wie ich es verwenden:

public WebshopProduct Map(UCommerceProduct uProduct) 
{ 
    ProductCatalog catalog = CatalogLibrary.GetCatalog(25); 
    IUrlService urlService = ObjectFactory.Instance.Resolve<IUrlService>(); 
    ... 
    var url = urlService.GetUrl(catalog, uProduct) // this returns "/catalogname/productname/c-XX/p-YY" 

    //And I would like to have "/en/catalogname/productname/c-XX/p-YY" 
} 
+0

Ich denke, dass es kein besonderes Problem wird uCommerce. Sie sollten in der Lage sein, LanguageEmbedding = "always" für Ihren Link-Manager einzurichten. – Anton

+0

Es ist schon der Fall, aber es bindet es nicht ein. –

+0

Können Sie ein Beispiel geben, wie Sie Links auf Ihrer Website dargestellt werden? – Anton

Antwort

0

Hier ist, was ich bin gekommen, mich mit:

public static class TemplateIDs 
{ 
    // sitecore/ucommerce item's template id  
    public static ID UCommerce => new ID("{AABC1CFA-9CDB-4AE5-8257-799D84A8EE23}"); 
} 

public static class ItemExtensions 
{ 
    public static bool IsUCommerceItem(this Item item) 
    { 
     var items = item.Axes.GetAncestors(); 
     return items.Any(x => x.TemplateID.Equals(TemplateIDs.UCommerce)); 
    } 
} 

public static string GetItemUrlByLanguage(Sitecore.Globalization.Language language) 
{ 
    if (Context.Item.IsUCommerceItem() && SiteContext.Current.CatalogContext.CurrentProduct != null && SiteContext.Current.CatalogContext.CurrentProduct.Guid == Context.Item.ID.Guid) 
    { 
     ProductCatalog catalog = CatalogLibrary.GetCatalog(25); 
     IUrlService urlService = ObjectFactory.Instance.Resolve<IUrlService>(); 
     var url = "/" + language.CultureInfo.TwoLetterISOLanguageName + urlService.GetUrl(catalog, SiteContext.Current.CatalogContext.CurrentProduct); 
     return url; 
    } 
    else 
    { 
     //Normal URL creation 
     using (new LanguageSwitcher(language)) 
     { 
      var options = new UrlOptions 
      { 
       AlwaysIncludeServerUrl = true, 
       LanguageEmbedding = LanguageEmbedding.Always, 
       LowercaseUrls = true 
      }; 
      var url = LinkManager.GetItemUrl(Context.Item, options); 
      url = StringUtil.EnsurePostfix('/', url).ToLower(); 
      return url; 
     } 
    } 
} 
+0

Als Randnotiz haben Sie immer noch ein hartcodiertes "/" drin. Nach meiner Erfahrung ist es das Beste, dies zu vermeiden und das stringutil oder Sitecore.Mvc.Extensions.StringExtensions (WithPostfix, WithoutPostfix, WithPrefix, WithoutPrefix) zu verwenden, um sicherzustellen, dass Sie den benötigten URL-Teil haben. –

0

zu URL Hinzufügen von Sprache hängt davon ab, wie Sie Links gerendert werden. Wenn Sie keine spezifischen Parameter als Sitecore (und uCommerce als Teil von Sitecore) übergeben, verwendet LinkManager Konfiguration sitecore> linkManager> providers: languageEdding adn languageLocation-Attribute. Sie sollten SpracheEmbedding = "immer" und SpracheLocation = "Dateipfad" haben.

P.S. Beachten Sie jedoch, wenn Sie ihre Demo oder etwas basierend auf ihrer Demo verwenden (z. B. aus Zertifizierungskursen): Sie verwenden reguläres ASP.Net MVC (nicht Sitecore MVC). Und Links werden nicht über LinkManager gerendert und Sie sollten die Sprache selbst auf URL setzen. Registrieren Sie sich mit dem Sprachcode, der in sie eingebettet ist.

+0

Sie haben Recht mit der URL des Artikels. Wenn ich LinkManager zum Erstellen von Links verwende, habe ich die Sprache eingebettet. Aber meine URLs sind Sitecore-ähnlich: http: // sitename/de/sitecore/ucommerce/products/2/26/productname. Das ist nicht was ich brauche. Außerdem habe ich ein Dokument, das nicht auf ihnen gefunden wird, weil diese Artikel uCommerce sind. Also muss ich UrlService.GetUrl() verwenden. Es gibt nette uCommerce URL aber ohne Sprache. –