kentico
Kulturspecifika webbadresser
Sök…
Konfigurera kulturspecifika webbadresser
Att ha kulturspecifika webbadresser kan vara fördelaktigt när det gäller SEO.
Exempelvis den engelska versionen av följande sida:
http://www.mydomain.com/insurance
Skulle översätta till:
http://www.mydomain.nl/verzekering
Istället för:
http://www.mydomain.nl/nl-nl/insurance
Det finns fler metoder för att uppnå detta:
Vanligtvis vill du att webbadresserna ska härledas från dokumentens namn. För att göra det, se till att du ställer in Använd namnväg för URL-sökväg till true. Som standard är det falskt.
Om standardupprättandet av URL-adress inte fungerar för dig kan du ställa in URL: er manuellt enligt beskrivningen i den officiella dokumentationen . Detta alternativ är dock genomförbart endast om du behöver justera små mängder webbadresser.
Om du vill automatisera skapandet av webbadresser baserat på ett anpassat mönster kan du implementera en anpassad modul .
using System;
using System.Text;
using CMS;
using CMS.DataEngine;
using CMS.DocumentEngine;
using CMS.Helpers;
[assembly: RegisterModule(typeof(CultureSpecificUrlsModule))]
public class CultureSpecificUrlsModule : Module
{
public CultureSpecificUrlsModule() : base("CultureSpecificUrlsModule")
{
}
protected override void OnInit()
{
base.OnInit();
/***
* Before the node gets saved, we'll update it's DocumentUrlPath.
* The system will ensure it'll be saved in a valid URL format.
*/
DocumentEvents.Update.Before += Update_Before;
}
private void Update_Before(object sender, DocumentEventArgs e)
{
/***
* Here you can apply conditions before you actually update the DocumentUrlPath.
* E.g. you can check for the document's culture.
*/
UpdateUrlPath(e.Node);
}
public static void UpdateUrlPath(TreeNode node)
{
/***
* You can set the DocumentUrlPath to whatever you want.
* In this example we're using a method extracted from CMS.DocumentEngine.TreePathUtils.
* The same method is used to generate a URL for the default culture.
*/
node.DocumentUrlPath = GetUrlPathFromNamePathInternal(node.DocumentNamePath);
}
internal static string GetUrlPathFromNamePathInternal(string namePath, int level = -1)
{
// Check valid path
if (String.IsNullOrEmpty(namePath) || (namePath == "/"))
{
return null;
}
// For top level the path is always /
if (level == 0)
{
return "/";
}
// Ensure maximal level if not set
if (level < 0)
{
level = Int32.MaxValue;
}
// Get the path parts
string[] pathParts = namePath.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
int currentLevel = 1;
var path = new StringBuilder();
foreach (string part in pathParts)
{
string shortPart = part;
// Shorten the part to the allowed maximum
if (shortPart.Length > TreePathUtils.MaxAliasLength)
{
shortPart = shortPart.Substring(0, TreePathUtils.MaxAliasLength);
}
path.Append("/", shortPart);
if (++currentLevel > level)
{
break;
}
}
return path.ToString();
}
}
- Om du behöver uppdatera befintliga sidor (t.ex. om du har glömt att kontrollera Använd namnväg för URL-sökväg innan du började utveckla ditt projekt) kan du använda en enkel konsolapplikation som kommer att uppdatera webbadresserna för dig:
using System;
using CMS.DataEngine;
using CMS.DocumentEngine;
namespace CultureUrlsUtil
{
class Program
{
static void Main(string[] args)
{
CMSApplication.Init();
/*** Here you can narrow down the scope of documents that should be updated using DocumentQuery ***/
var pages = DocumentHelper.GetDocuments().Culture("es-es");
foreach (var page in pages)
{
/*** Here we are calling code from the example above. ***/
CultureSpecificUrlsModule.UpdateUrlPath(page);
page.Update();
}
Console.Write("URLs created!");
Console.ReadLine();
}
}
}