自定义产品 Url-Hybris 中的解析器

Custom Product Url-Resolver in Hybris

我正在尝试在 Hybris 中编写 URL 解析器,但我遇到了几个错误;

方法 getBaseProduct(ProductModel) 未定义类型 TrialProductModelUrlResolver

类型 DefaultCategoryModelUrlResolver 中的方法 getCategoryPath(CategoryModel) 不适用于参数 (ProductModel)

ProductService 类型中的方法 getProductForCode(String) 不适用于参数 (ProductModel)

public class TrailerProductModelUrlResolver extends DefaultCategoryModelUrlResolver {

private TrailerURLNormalizationStrategy trailerURLNormalizationStrategy;

@Autowired
private ProductService productService;

@Override
protected String resolveInternal(final ProductModel source) {
    final ProductModel baseProduct = getBaseProduct(source);
    final BaseSiteModel currentBaseSite = getBaseSiteService().getCurrentBaseSite();
    String url = getPattern();

    if ((currentBaseSite != null) && (url.contains("{baseSite-uid}"))) {
        url = url.replace("{baseSite-uid}", currentBaseSite.getUid());
    }

    if (url.contains("{category-path}")) {
        url = url.replace("{category-path}", trailerURLNormalizationStrategy.normalizeString(buildPathString(getCategoryPath(source))));
    }

    if (url.contains("{product-name}")) {
        String productName = source.getName(TrailerCoreConstants.LOCALE_TR);

        if (StringUtils.isEmpty(productName)) {
            productName = baseProduct.getName(TrailerCoreConstants.LOCALE_TR);
        }

        CategoryModel categoryModel = productService.getProductForCode(baseProduct);
        if (categoryModel != null) {
            if (categoryModel.getName() != null) {
                if (!categoryModel.getName(TrailerCoreConstants.LOCALE_TR).isEmpty()) {
                    productName = categoryModel.getName(TrailerCoreConstants.LOCALE_TR) + " " + productName;
                }
            }
        }
        url = url.replace("{product-name}", trailerURLNormalizationStrategy.normalizeString(productName));
    }

    if (url.contains("{product-code}")) {
        url = url.replace("{product-code}", trailerURLNormalizationStrategy.normalizeString(source.getCode()));
    }

    return url;
}

@Override
protected String buildPathString(final List<CategoryModel> path) {
    if ((path == null) || (path.isEmpty())) {
        return "c";
    }

    final StringBuilder result = new StringBuilder();

    for (int i = 0; i < path.size(); ++i) {
        if (i != 0) {
            result.append('/');
        }
        result.append(path.get(i).getName());
    }

    return result.toString();
}

public TrailerURLNormalizationStrategy getTrailerURLNormalizationStrategy() {
    return trailerURLNormalizationStrategy;
}

public void setTrailerURLNormalizationStrategy(TrailerURLNormalizationStrategy trailerURLNormalizationStrategy) {
    this.trailerURLNormalizationStrategy = trailerURLNormalizationStrategy;
}
}

任何帮助

此致

只需将DefaultCategoryModelUrlResolver更改为DefaultProductModelUrlResolver

对于 Product UrlResolver,扩展 DefaultProductModelUrlResolver

public class TrailerProductModelUrlResolver extends DefaultProductModelUrlResolver
{

    private static final Logger LOG = Logger.getLogger(TrailerProductModelUrlResolver.class);
    @Override
    protected String resolveInternal(final ProductModel source)
    {
        final ProductModel baseProduct = getBaseProduct(source);
        ...
    }
}

对于类别 UrlResolver,扩展 DefaultCategoryModelUrlResolver

public class TrailerCategoryModelUrlResolver extends DefaultCategoryModelUrlResolver
{
    @Override
    protected String resolveInternal(CategoryModel source)
    {

    }
}