Сравнение продуктов в Hybris - PullRequest
0 голосов
/ 02 июня 2018

Используется для сравнения товаров.У продукта есть такие атрибуты, как код продукта, имя, URL-адрес изображения, отзывы, цена и т. Д. Моя панель сравнения продуктов будет иметь только несколько функций для каждого продукта, который я планирую сохранить в сеансе.Можно ли это сделать с помощью JQuery?Какой должна быть стратегия?


Обновление:

Контроллер компонентов

@Override
    protected void fillModel(final HttpServletRequest request, final Model model,
            final ProductCompareComponentModel component)

final Cookie[] cookies = request.getCookies();
        String productList = null;
        boolean cookieFound = false;

        logger.info("Displaying session value for product compare" + sessionService.getAttribute("sessionProductCode"));
        if (cookies != null)
        {
            logger.info("Cookies not null");
            for (final Cookie cookie : cookies)
            {
                logger.info("Cookie name" + cookie.getName());
                if (cookie.getName().equals("productList") && cookie.getValue() != null)
                {
                    cookieFound = true;
                    productList = cookie.getValue().toString();
                    logger.info("Product List value" + cookie.getValue().toString());

                }
            }
        }

if (cookieFound == false)
        {
            if (sessionService.getAttribute("sessionProductCode") != null)
            {
                productList = sessionService.getAttribute("sessionProductCode");
            }
        }

        final ArrayList<ProductCompareDTO> prodCompareMapPanelView = populateCompareMap(productList);

        if (component.getDisplayType().toString() == CommonConstants.COMPARE_VIEW_PANEL)
        {
            logger.info("Displaying panel view ");
            model.addAttribute("prodCompareMapPanelView", prodCompareMapPanelView);
        }
        else

        if (component.getDisplayType().toString() == CommonConstants.COMPARE_VIEW_FULL)
        {
            logger.info("Displaying full view ");
        }

        model.addAttribute("displaytype", component.getDisplayType().toString());
        model.addAttribute("maxCount", component.getMaxProductCount());
    }

Компонент JSP

    <c:choose>
        <c:when test="${not empty maxCount && not empty displaytype}">


            <div id="compare-pane" class="row comparePanel1">
                <button type='button' onclick='doComparePanelClose()'>Close
                    Compare Panel</button>

                <c:if test="${displaytype == 'PANELVIEW'}">

                    <c:forEach items="${prodCompareMapPanelView}" var="mapEntry">
                        <div class="col-sm-4" id="innerdiv${mapEntry.code}">

                            <c:if test="${(not empty mapEntry.name)}">
                            ${mapEntry.name}
                            </c:if>
                            <c:if test="${not empty mapEntry.thumbnail }">
                                <img src="${mapEntry.thumbnail}" />
                                <button id="close${mapEntry.code}" class="compareButton"
                                    type="submit" data-product-id="${mapEntry.code}"
                                    onclick="closeCompareProductPanel('${mapEntry.code}');">Close
                                    X</button>
                            </c:if>
                        </div>

                    </c:forEach>

                </c:if>

                <div id="bottomInnerComparePanel1">*Compare upto ${maxCount }
                    products</div>
                <button id="comparesubmit" class="compareButton" type="submit"
                    onclick="compareSubmit();">See Comparison ></button>

            </div>
            <c:url value="/search/compare" var="compareUrl" />
            <form id="compareForm" method="get" action="${compareUrl}"
                target="_blank">

                <c:if test="${displaytype == 'FULLVIEW'}">
                </c:if>
            </form>
        </c:when>

    </c:choose>

SearchPageController

    @SuppressWarnings("boxing")
        @RequestMapping(value = "/compare", method = RequestMethod.GET)
        public String compareProducts(@RequestParam(value = "prevPage", defaultValue = StringUtils.EMPTY) final String prevPage,
                final Model model, final HttpSession session, final HttpServletRequest request)
                throws CMSItemNotFoundException, UnsupportedEncodingException
        {
        // fetching product list from sesssion and returning Product Data map

    final Map<String, List<ProductClassificationData>> productClassDataMap = new HashMap<String, List<ProductClassificationData>>();
            final Map<String, HashSet<String>> prodClassMap = new TreeMap<String, HashSet<String>>();
            final String lastCode = null;

            final Cookie[] cookies = request.getCookies();
            String productList = null;
            boolean cookieFound = false;

            if (cookies != null)
            {
                logger.info("Cookies not null");
                for (final Cookie cookie : cookies)
                {
                    logger.info("Cookie name" + cookie.getName());
                    if (cookie.getName().equals("productList") && cookie.getValue() != null)
                    {
                        cookieFound = true;
                        productList = cookie.getValue().toString();
                        logger.info("Product List value" + cookie.getValue().toString());

                    }
                }
            }

    if (StringUtils.isNotBlank(productList))
            {
                final String[] values = productList.split("\\|");
                final String PRODUCT_COMPARE_PAGE = "productComparePage";
                storeCmsPageInModel(model, getContentPageForLabelOrId(PRODUCT_COMPARE_PAGE));
                setUpMetaDataForContentPage(model, getContentPageForLabelOrId(PRODUCT_COMPARE_PAGE));
                final List<ProductData> productDatalList = new ArrayList<ProductData>();
                final List<String> productCodesList = new ArrayList<String>();
                for (final String productcode : values)
                {
                    ProductData productData = null;
                    final List<ProductOption> options = new ArrayList<>(
                            Arrays.asList(ProductOption.BASIC, ProductOption.CLASSIFICATION, ProductOption.PRICE, ProductOption.STOCK));
                    if (productcode != null && "".equalsIgnoreCase(productcode))
                    {
                        productData = productFacade.getProductForCodeAndOptions(productcode, options);
                        productDatalList.add(productData);
                        productCodesList.add(productcode);
                    }
                }
    // fetch feature data and add it to model

    }

final int mapSize = finalDataList.size();
            model.addAttribute("finalDataList", finalDataList);
            model.addAttribute("mapSize", mapSize);
            model.addAttribute("compareCodeList", productCodesList);
            model.addAttribute("compareCodeListSize", productCodesList.size());
            model.addAttribute("prodDataList", productDatalList);
        }

        return getViewForPage(model);
   }

Когда пользователь нажимает кнопку «Просмотреть сравнение», я перенаправляю на новую страницу productComparePage.jsp, где я хочу отобразить полнуюсравнение товаров со всеми его атрибутами.Но сейчас я снова перенаправлен с контроллера Search Page на контроллер компонентов.Я снова вижу панель на этой новой странице.

1 Ответ

0 голосов
/ 03 июня 2018

Вы можете использовать куки для хранения объекта.Вы можете найти много примеров в Интернете.Как это , это .Вам не следует хранить данные о каждом продукте в файле cookie.

Что я бы предложил

  • Создать панель сравнения компонентов / компонент, которая всегда должна быть на экране.
  • Всякий раз, когда пользователь выбирает какой-либо продукт, он должен добавить в панель сравнения и сохранить этот код продукта (SKU), имя, изображение в файле cookie.Убедитесь, что панель сравнения продуктов всегда отображается с использованием данных cookie, поэтому даже при обновлении страницы она будет работать.Как и в случае с вами, вы должны обработать событие удаления.

  • Когда пользователь нажимает кнопку сравнения, вы можете сделать ajax-вызов со списком выбранного кода продукта (из файлов cookie) и получитьобъект данных продукта для отображения страницы сравнения или просто отправки данных на контроллер и отображения страницы сравнения.

Тем не менее, доступно множество плагинов с открытым исходным кодом, которые также могут помочь вам получитьРабота выполнена.

...