Как можно показать, когда я впервые захожу в магазин - всплывающее окно T & C в hybris? - PullRequest
0 голосов
/ 27 ноября 2018

Как показать, когда я впервые захожу в магазин - всплывающее окно T & C в hybris?Например, я новый клиент, и я впервые захожу в магазин, а затем я вижу всплывающее окно с некоторыми «Условиями использования», которые я должен проверить, чтобы иметь возможность войти в магазин.Может быть, у меня должен быть какой-нибудь флаг, который я говорю:

private boolean flag = false;
if user is login for first time
    flag = false;
        if(flag == false){
          show me pop up with T&C
          flag = true;
        }

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

Ответы [ 2 ]

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

Почему бы не создать логический флаг acceptTAC для типа клиента?Если кто-то запрашивает страницу в вашей витрине магазина, для которой этот флаг установлен в null или false, вы можете показать это всплывающее окно.Когда пользователь нажимает кнопку подтверждения, отправьте запрос AJAX на сервер и установите для флага acceptTAC значение true.

Таким образом, у вас даже есть «доказательство» того, что пользователь принял TAC.Кроме того, вы можете запросить вашу базу данных для пользователей, которые еще не приняли TAC.

Однако обычным способом заставить пользователя принять TAC будет регистрация.Пользователь может зарегистрироваться только тогда, когда он / она принимает TAC.

Вот необходимые шаги:

myextension-items.xml

<itemtype code="Customer" ...>
  <attributes>
    <attribute name="acceptedTermsAndConditions" type="java.lang.Boolean">
      ..
    </attribute>
  <attributes>
</itemtype>

ShowTermsAndConditionsPopupBeforeViewHandler

public class ShowTermsAndConditionsPopupBeforeViewHandler implements BeforeViewHandler {

  @Resource 
  UserService userService;

  @Override
  public void beforeView(HttpServletRequest request, HttpServletResponse response, ModelAndView modelAndView) {
    UserModel user = userService.getCurrentUser();
    if (user instanceof CustomerModel && !userService.isAnonymousUser(user)) {
      CustomerModel customer = (CustomerModel) user;
      modelAndView.addObject("showTermsAndConditionsPopup", BooleanUtils.isNotTrue(customer.isTermsAndConditionsAccepted()));
    } else {
      modelAndView.addObject("showTermsAndConditionsPopup", false);
    }
  }
}

Зарегистрировать BeforeViewHandler в spring-mvc-config.xml

...

<util:list id="defaultBeforeViewHandlersList">
...
    <bean class="my.package.ShowTermsAndConditionsPopupBeforeViewHandler"/>
...
</util:list>
...

Создание переменной JavaScript в javaScriptVariables.tag

...
ACC.config.showTermsAndConditionsPopup=${showTermsAndConditionsPopup};
...

Добавление логики для открытия всплывающего окна в JavaScript

...
if(ACC.config.showTermsAndConditionsPopup) {
   showPopup();
}
...

Создание всплывающего содержимого с помощью формы:

<c:url var="url" value="/acceptTermsAndConditions" />
<form action="${url}" method="POST">
  <label for="acceptTermsAndConditions">I accept Terms and Conditions</label>
  <input type="checkbox" id="acceptTermsAndConditions" name="acceptTermsAndConditions" />
  <button type="submit>Submit</button> 
</form> 

Создать условияAndConditionsController

@Controller
public TermsAndConditionsController {

  @Resource 
  private UserService userService;
  @Resource 
  private ModelService modelService;

  @RequestMapping(value = "/acceptTermsAndConditions", method = RequestMethod.POST) 
  @ResponseBody
  @ResponseStatus(value = HttpStatus.OK)
  public void acceptTermsAndConditions() {
    UserModel user = userService.getCurrentUser();
    if (user instanceof CustomerModel && !userService.isAnonymousUser(user)) {
      CustomerModel customer = (CustomerModel) user;
      customer.setAcceptedTermsAndConditions(true);
      modelService.save(customer);
    }
  }
}
0 голосов
/ 27 ноября 2018

Если вы действительно хотите показывать всплывающее окно T & C только один раз, я бы сказал, показать его во время регистрации.

Предположим, вы хотите показывать T & C при каждом входе в систему, когда вы можете воспользоваться помощью cookie.

Идея состоит в том, чтобы после успешного входа в систему проверить файл cookie (скажем, «условия»), если он не найден, показать свое всплывающее окно.Теперь, основываясь на пользовательском вводе, вы можете сохранить этот cookie.

Просто пример.

Source jsfiddle [ http://jsfiddle.net/9q8jmv3L/2/ ]


$(document).ready(function () {

    if(${loggedInUser})
    {
        var visit = getCookie("terms");
        if (visit == null) {
            x = confirm("Your Message Goes here and you only get to see it once!"); 
            if (x == true)
            {
                var expire = new Date();
                expire = new Date(expire.getTime() + 7776000000);
                document.cookie = "terms=here; expires=" + expire;
            }     
        }
    }
});

function getCookie(c_name) {
    var c_value = document.cookie;
    var c_start = c_value.indexOf(" " + c_name + "=");
    if (c_start == -1) {
        c_start = c_value.indexOf(c_name + "=");
    }
    if (c_start == -1) {
        c_value = null;
    } else {
        c_start = c_value.indexOf("=", c_start) + 1;
        var c_end = c_value.indexOf(";", c_start);
        if (c_end == -1) {
            c_end = c_value.length;
        }
        c_value = unescape(c_value.substring(c_start, c_end));
    }
    return c_value;
}

Commnent: Если вы действительно хотите сохранить флаг, тогда выможет иметь новый атрибут в вашей модели клиента.Теперь проверьте этот атрибут / флаг inJavaScript при успешном входе в систему.Если флаг ложен, показать всплывающее окно.в зависимости от действий пользователя во всплывающем окне обновите флаг с помощью вызова ajax

...