0

我正在尝试使用两个字母的文化代码(en)而不是完整的文化代码(en-US)在 Kentico 中创建一个更友好的页面 URL。我修改了页面 URL 模式,如下图所示。有没有更好的方法,我应该创建一个自定义宏表达式吗?

我想要实现的另一件事是在 URL 中没有默认文化。也许我也可以使用自定义宏表达式。

现在的情况

4

3 回答 3

1

我已经用自定义宏表达式解决了这个问题。这在 URL 模式中与 DocumentCulture 结合使用。宏表达式采用文化别名(如果默认文化为空,则为两个字母代码),并使用“/”返回。

页面的 url 模式:

{%Util.GetUrlCultureCode(DocumentCulture)%}{%NodeAliasPath%}

我为解决这个问题而编写的宏表达式如下。

public class CustomCultureMacroExpression : MacroMethodContainer
{
    [MacroMethod(typeof(List<string>), "Returns the url culture code of current document", 1)]
    [MacroMethodParam(0, "Culture", typeof(string), "Current culture.")]
    public static object GetUrlCultureCode(EvaluationContext context, params object[] parameters)
    {
        // Branches according to the number of the method's parameters
        switch (parameters.Length)
        {
            case 1:
                return GetCultureAliasOfCulture(parameters[0].ToString());
            case 2:
                // Weird bug causing macro expression in url pattern to have two parameters where the first parameter is null.
                return GetCultureAliasOfCulture(parameters[1].ToString());
            default:
                // No other overloads are supported
                return string.Empty;
        }
    }

    private static string GetCultureAliasOfCulture(string cultureCode)
    {
        var culture = CultureInfoProvider.GetCultureInfo(cultureCode);
        var culturealias = culture?.CultureAlias ?? string.Empty;

        return string.IsNullOrEmpty(culturealias) ? string.Empty : $"/{culturealias}";
    }
}
于 2020-01-23T08:56:45.183 回答
0

您可以尝试在 Localization -> Cultures 中更新文化代码,但我不确定它是否不会有任何副作用

于 2020-01-21T16:54:38.377 回答
0

如果您使用动态路由模块,您可以挂钩到 GetCulture 和 GetPage 全局事件来做您正在寻找的事情。

对于 GetCulture,您将检查 URL 是否有 2 个字母的文化代码,如果有,则将其用作文化。

如果需要,您还可以调整 GetPage,尽管生成的 URL slug 应该可以正常工作,除非您想要在 GetPage 上回退。之后,如果没有找到页面,您可以尝试从 URL 中删除任何文化并查找那个页面。

为了便于使用,我建议对 UrlPattern 的其余部分使用 NodeAliasPath。

于 2020-01-22T20:51:55.377 回答