Проблемы с пользовательскими правилами URLRewrite в 7.9 - PullRequest
0 голосов
/ 07 ноября 2018

В настоящее время у меня есть некоторые проблемы с пользовательскими правилами перезаписи URL в ISH 7.9.

В некоторых наших средах он работает нормально (например, локальный и тестовый), но на ACC и PROD кажется, что он работает время от времени только после нескольких развертываний / перезапусков системы.

Мы создали специальный картридж с файлом deploy.gradle для исключения файлов urlrewriterules.xml, domainsplittings.xml и syndication-targets.properties из исходных картриджей. Они заменяются нашими пользовательскими файлами в папке share/system/config/cluster. Статические правила, применяемые в urlrewriterules.xml, всегда работают нормально. Однако правила, которые приходят из пользовательских классов Java, иногда не очень хорошо загружаются с помощью RewriteRuleFactoryImpl, возвращая следующую ошибку:

[2018-11-07 08:20:37.906 +0100] WARN localhost ES1 appserver0 [ShipSupport-ebusiness-Site] [-] com.intershop.component.urlrewrite.internal.factory.RewriteRuleFactoryImpl [] [Storefront] [wJ5DCcg2CM5DCZPUUqdNu2D2fj8NZHaXjvP9qIZb] [yFAAAFvikjkOsqjA-0-00] "yFAAAFvikjkOsqjA-0-00" An implementation of rewrite rule type 'CustomCategory' does not exist.

Часть кода в urlrewriterules.xml, которая будет вызывать этот класс Java, выглядит следующим образом:

<!-- Custom Category Rule /c/<NAME_OF_LOWEST_CATEGORY> -->
<rule type="CustomCategory" priority="1000" name="custom category rule">
    <configurations>
       <configuration id="pathPrefix">/catalog</configuration>
        <configuration id="partsCatalogID">4393</configuration>
   </configurations>
</rule>

У нас также есть классы, хорошо созданные в нашем собственном картридже, такие как CustomCategoryRewriteRule, который расширяет BaseRewriteRule. Перезапись URL включена для этих каналов, и мы всегда делаем недействительным кеш в каналах, в которых он включен.

Расширение для пользовательской категории (определенной в том же картридже) определяется следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<extensionpoint:ExtensionPointModel xmlns:extensionpoint="http://www.intershop.de/extensionpoint/2011" name="CustomCategoryRewriteRule"> 
  <extensionBindings type="java" extensionPoint="com.intershop.component.urlrewrite.capi.RewriteRule-RewriteRule.create" extension="com.package.CustomCategoryRewriteRule" priority="1"/>
</extensionpoint:ExtensionPointModel>

Также app-extension.component определен в том же картридже, что и ниже:

<?xml version="1.0" encoding="UTF-8"?>
<components xmlns="http://www.intershop.de/component/2010" scope="global">
    <fulfill requirement="selectedCartridge" value="cartridge_name" of="intershop.SLDSystem.Cartridges"/>
    <fulfill requirement="selectedCartridge" value="cartridge_name" of="intershop.EnterpriseBackoffice.Cartridges"/>
</components>

Мы следили за этой статьей, чтобы подтвердить, как это сделать: https://support.intershop.com/kb/index.php/Display/B28069 У нас также все работает нормально в другом проекте, но с использованием Intershop 7.8.

Есть ли у вас какие-либо идеи о том, что может быть причиной?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

В итоге мы решили эту проблему, применив SMBResponsive картридж.

<?xml version="1.0" encoding="UTF-8"?>
<components xmlns="http://www.intershop.de/component/2010" scope="global">
    <fulfill requirement="selectedCartridge" value="royalihc_sldsystem" of="intershop.SLDSystem.Cartridges"/>
    <fulfill requirement="selectedCartridge" value="royalihc_sldsystem" of="intershop.EnterpriseBackoffice.Cartridges"/>
    <fulfill requirement="selectedCartridge" value="royalihc_sldsystem" of="intershop.SMBResponsive.Cartridges" />
</components>

Спасибо Андреас за помощь.

0 голосов
/ 07 ноября 2018

Помимо реализации, вам также необходимо создать файл расширения в <cartridge>/staticfiles/cartridge/extensions. Это фактическая регистрация правила перезаписи для механизма поиска. Смотрите следующий пример:

<?xml version="1.0" encoding="UTF-8"?>
<extensionpoint:ExtensionPointModel xmlns:extensionpoint="http://www.intershop.de/extensionpoint/2011" name="CustomRewriteRule.extension">
    <extensionBindings type="java" extensionPoint="com.intershop.component.urlrewrite.capi.RewriteRule-RewriteRule.create" extension="com.package.CustomCategoryRewriteRule " priority="1"/>
</extensionpoint:ExtensionPointModel>

Кроме того, картридж, содержащий эти расширения, необходимо зарегистрировать в типах приложений через файл компонента в <cartridge>/staticfiles/cartridge/components. Это необходимо для правильной загрузки расширения в правильном контексте приложения. Смотрите этот пример:

<?xml version="1.0" encoding="UTF-8" ?>
<components xmlns="http://www.intershop.de/component/2010">
    <fulfill requirement="selectedCartridge" value="your_custom_cartridge" of="intershop.SLDSystem.Cartridges" /> 
    <fulfill requirement="selectedCartridge" value="your_custom_cartridge" of="intershop.B2CBackoffice.Cartridges" />
    <fulfill requirement="selectedCartridge" value="your_custom_cartridge" of="intershop.B2CResponsive.Cartridges" />
</components>

Я не совсем уверен, нужно ли вам регистрировать его для всех этих приложений, но это те, которые мы использовали в нашем последнем проекте. Если вы используете разные типы приложений или имеете собственные, обязательно добавьте их соответствующим образом.

...