app/template/default/CustomComponent/modal.twig line 1

Open in your IDE?
  1. {#
  2. Modal Component - Có thể tái sử dụng cho nhiều mục đích khác nhau
  3. Sử dụng:
  4. {% include 'CustomComponent/modal.twig' with {
  5.     id: 'cart-success-modal',
  6.     title: 'Thêm sản phẩm vào giỏ hàng thành công!',
  7.     message: 'Sản phẩm đã được thêm vào giỏ hàng của bạn.',
  8.     showCancelButton: true,
  9.     cancelText: 'Tiếp tục mua sắm',
  10.     showActionButton: true,
  11.     actionText: 'Xem giỏ hàng',
  12.     actionUrl: url('cart'),
  13.     autoRedirect: true,
  14.     redirectUrl: url('cart'),
  15.     redirectDelay: 3000,
  16.     reloadOnCancel: true
  17. } %}
  18. Options:
  19. - reloadOnCancel: true/false - Nếu true, sẽ reload page khi đóng modal (cancel, close, overlay, ESC)
  20. - reloadOnError: true/false - Nếu true, sẽ reload page khi có lỗi (mặc định false)
  21. #}
  22. <div class="ec-modal" id="{{ id|default('default-modal') }}"
  23.      {% if reloadOnCancel|default(false) %}data-reload-on-cancel="true"{% endif %}
  24.      {% if reloadOnError|default(false) %}data-reload-on-error="true"{% endif %}>
  25.     <div class="ec-modal-overlay">
  26.         <div class="ec-modal-wrap">
  27.             <span class="ec-modal-close">
  28.                 <span class="ec-icon">
  29.                     <img src="{{ asset('assets/icon/cross-dark.svg') }}" alt=""/>
  30.                 </span>
  31.             </span>
  32.             <div id="ec-modal-header" class="text-center">
  33.                 {{ title|default('Thông báo') }}
  34.             </div>
  35.             {% if message is defined and message %}
  36.                 <div class="ec-modal-message">
  37.                     {{ message }}
  38.                 </div>
  39.             {% endif %}
  40.             <div class="ec-modal-box">
  41.                 <div class="ec-role">
  42.                     {# Dùng ?? thay vì |default — |default coi false là empty nên luôn fallback true #}
  43.                     {% if showCancelButton ?? true %}
  44.                         <span class="ec-inlineBtn--cancel" id="modal-cancel-btn">
  45.                             {{ cancelText|default('Cancel') }}
  46.                         </span>
  47.                     {% endif %}
  48.                     {% if showActionButton ?? true %}
  49.                         <a href="{{ actionUrl|default('#') }}" class="ec-inlineBtn--action" id="modal-action-btn">
  50.                             {{ actionText|default('OK') }}
  51.                         </a>
  52.                     {% endif %}
  53.                 </div>
  54.             </div>
  55.         </div>
  56.     </div>
  57. </div>
  58. {% if autoRedirect|default(false) and redirectUrl|default('') %}
  59. <script>
  60. document.addEventListener('DOMContentLoaded', function() {
  61.     const modal = document.getElementById('{{ id|default('default-modal') }}');
  62.     const redirectUrl = '{{ redirectUrl }}';
  63.     const redirectDelay = {{ redirectDelay|default(3000) }};
  64.     if (modal && redirectUrl) {
  65.         setTimeout(function() {
  66.             window.location.href = redirectUrl;
  67.         }, redirectDelay);
  68.     }
  69. });
  70. </script>
  71. {% endif %}