Проблема с перезаписью URL в NopCommerce - PullRequest
3 голосов
/ 03 декабря 2010

Я пытаюсь внести изменения в NopCommerce, чтобы включить язык в адресной строке. Я не знаю, в чем проблема.

Когда я отключаю UrlRewriting, все работает нормально, когда я включаю его, когда я нахожусьязык по умолчанию все работает нормально, когда я перехожу на другой язык, который не является языком по умолчанию, у меня есть проблемы.

У меня есть две части кода для языка по умолчанию и для других языков

Я немного меняюсьнемного кода, поэтому основная функция теперь может выбирать между языками:

    public static string GetCategoryUrl(Category category, int languageId)
    {
        if (category == null)
            throw new ArgumentNullException("category");
        string seName = GetSEName(category.SEName);

        if (String.IsNullOrEmpty(seName))
        {
            var categoryLocalized = CategoryManager.GetCategoryLocalizedByCategoryIdAndLanguageId(category.CategoryId, languageId);
            if (categoryLocalized != null)
            {
                seName = GetSEName(categoryLocalized.Name);
            }
            else
            {
            seName = GetSEName(category.Name);
            }
        }            

        int defaultLanguage = Convert.ToInt32(SettingManager.GetSettingValue("Localization.DefaultLanguageID"));
        string url = String.Empty;

        string url2 = String.Empty;

        //***for default language***
        if (languageId == defaultLanguage)
        {
            url2 = SEOHelper.EnableUrlRewriting ? SettingManager.GetSettingValue("SEO.Category.UrlRewriteFormat") : "{0}Category.aspx?CategoryID={1}";
            url = string.Format(url2, CommonHelper.GetStoreLocation(), category.CategoryId, seName);
        }

        //***for other languages***
        else
        {
            url2 = SEOHelper.EnableUrlRewriting ? SettingManager.GetSettingValue("SEO.Category.UrlRewriteFormat2") : "{0}Category.aspx?Language={1}&CategoryID={2}";
            url = string.Format(url2, CommonHelper.GetStoreLocation(), GetLocaleSubFolder(languageId), category.CategoryId, seName);
        }
        return url.ToLowerInvariant();
    }

Для языка по умолчанию у меня также: Для SEO.Category.UrlRewriteFormat У меня в базе данных для языка по умолчанию: {0} c {1} / {2}

В UrlRewriting.config у меня есть следующие правила для языка по умолчанию:

без ссылки на URL, переписывающей мою ссылку выше, выглядит как www.nopcomerce.com/category.aspx? categoryid = 10

Когда я захожу в категорию на языке по умолчанию, моя ссылка выглядит как www.nopcomerce.com / c10 / somecategory

Для других языков:

Для SEO.Category.UrlRewriteFormat2 У меня есть база данных для других языков: {0} {1} / c {2} / {3}

и для других языков, которые у меня есть

ссылка без переопределения URL для другого языка выглядит как www.nopcomerce.com/category.aspx?language=de&categoryid=10

И когда я иду, например, в той же категории на немецком языке, ябудет иметь www.nopcomerce.com / de / c10 / somecategorylocalizedingerman

Теперь я знаю, что эта страница работает нормально, как я уже говорил, потому что, когда я отключаю UrlRewriting вNopCommerce все страницы на всех языках работает нормально.Я могу поменять язык между категориями, продуктами и всем порталом без проблем на любом языке.

Но когда я включаю UrlRewriting, ссылки для категорий на языке по умолчанию работают нормально ( www.nopcomerce.com / c10 / somecategory ), но когда я нажимаю на ссылки на других языках, каждый раз, когда я нажимаю на любую ссылку, например на какую-то ссылку для категории на другом языке, показывается содержимое со страницы по умолчанию (как будто он перенаправляет меня туда) но я вижу, что ссылка, на которую я хочу перейти на каком-то языке, написана в адресной строке ( www.nopcomerce.com / de / c10 / somecategorylocalizedingermanerman ).

Я пробую все, но не знаю, в чем проблема.Что не так?

Я также пытаюсь попросить о помощи на форуме NopCommerce, но оттуда нет помощи.

Вы можете прочитать об этой проблеме, где я начал писать, до этой части, где яне делайте сейчас то, что кажется проблемой.

http://www.nopcommerce.com/boards/t/1039/seo-and-multilingual-pages.aspx?p=1

Спасибо за любую помощь заранее.

1 Ответ

0 голосов
/ 04 декабря 2010

После нескольких дней пыток и многих часов я бросил одну вещь, и это то, что ссылки будут такими, как я хочу.

Мне никогда не удавалось сделать так, чтобы ссылки для языков, кроме ссылки по умолчанию, выглядели так:

nopcommerce.com / страна / категория / название категории

Самое близкое, чего мне удалось добиться, это связать меня взглядом

nopcommerce.com / категория / страна / название категории.

Мне также удалось сделать ссылки, которые мы не классические ImageButton, чем обычные гиперссылки и ссылки, которые я наткнулся на интересную проблему.

NopCommerce использует cookie для изменения языка.

Я нашел имя куки, и когда он записывает его в NopContext.Current.WorkingLanguage.

Аналогичным образом я также создал функцию javascript setCookie ()

function setCookie(c_name, value, expiredays) {
    var exdate = new Date();
    exdate.setDate(exdate.getDate() + expiredays);
    document.cookie = c_name + "=" + escape(value) +
        ((expiredays == null) ? "" : ";expires=" + exdate.toUTCString());
}

, который создает значение журнала выбранного языка в файле cookie и активируется, когда пользователь нажимает на флаг выбранного языка.

например

string coockie = String.Format("javascript:setCookie('{0}','{1}','{2}');", "Nop.CustomerLanguage", language.LanguageId.ToString(), new TimeSpan(365, 0, 0, 0, 0));
hpLanguage.Attributes.Add("onclick", coockie);

А теперь мы подошли к интересной части, где проблема возникает, и мне не ясно, почему это происходит.

Предположим, у нас есть немецкий и английский

Когда я впервые нажимаю на флаг немецкого языка, в адресной строке отображается ссылка на немецкий язык, но контент все еще на английском. Только когда во второй раз (снова) я нажимаю флажок на немецком языке, содержимое страницы переключается на немецкий язык.

Я не понимаю, почему это происходит сейчас со мной?

...