templates/blog/index.html.twig line 1

Open in your IDE?
  1. {% extends 'nav.html.twig' %}
  2. {% block content %}
  3.     {% if is_granted('ROLE_ADMIN') or is_granted('ROLE_MODERATOR')%}
  4.         <section style="padding-top: 4.4rem">
  5.             <div id="addCost" style="display: block;" onclick="showAddNewPostModal()" class="d-flex text-body-secondary border-bottom">
  6.                 <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="currentColor" class="bi bi-plus-square" viewBox="0 0 16 16">
  7.                     <path d="M14 1a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1zM2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2z"></path>
  8.                     <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4"></path>
  9.                 </svg>
  10.             </div>
  11.         </section>
  12.     {% endif %}
  13.     <div class="container" style="padding: 50px 0 0 0">
  14.             {% for post in posts %}
  15.                 {% if loop.first %}
  16.                     <div class="p-4 p-md-5 mb-4 text-white rounded bg-dark">
  17.                         <div class="col-md-6 px-0">
  18.                             <h1 class="display-4 fst-italic">{{ post.title }}</h1>
  19.                             <p class="lead my-3">
  20.                                 {% if post.content | length > 150 %}
  21.                                     {{ post.content | slice (0, 150) ~ '...' }}
  22.                                 {% else %}
  23.                                     {{ post.content }}
  24.                                 {% endif %}
  25.                             </p>
  26.                             <p class="lead mb-0"><a href="/blog/singlePost/{{ post.id }}" class="text-white fw-bold stretched-link">Продолжить чтение...</a></p>
  27.                         </div>
  28.                     </div>
  29.                 {% else %}
  30.                     {% if loop.index == 2 %}
  31.                         <div class="row mb-2">
  32.                     {% endif %}
  33.                     <div class="col-md-6" style="flex: 0 0 auto; width: 50%">
  34.                         <div class="row g-0 border rounded overflow-hidden flex-md-row mb-4 h-md-250 position-relative" style="height: 250px; box-shadow: 0 .125rem .25rem rgba(0,0,0,.075) !important; overflow: hidden">
  35.                             <div class="col p-4 d-flex flex-column position-static" style="flex: 1 0 0; margin-top: 0">
  36.                                 <h3 class="mb-0">{{ post.title }}</h3>
  37.                                 <div class="mb-1 text-muted">{{ post.createdAt|date('d.m.y') }}</div>
  38.                                 <p class="card-text mb-auto">
  39.                                     {% if post.content | length > 100 %}
  40.                                         {{ post.content | slice (0, 100) ~ '...' }}
  41.                                     {% else %}
  42.                                         {{ post.content }}
  43.                                     {% endif %}
  44.                                 </p>
  45.                                 <a href="/blog/singlePost/{{ post.id }}" class="stretched-link">Продолжить чтение</a>
  46.                             </div>
  47.                         {% if post.imagePath is not null %}
  48.                             <div class="col-auto d-none d-lg-block" style="flex: 0 0 auto; width: auto; margin-top: 0; padding-right: 0">
  49.                                 <img class="d-block img-fluid" width="200" height="250" style="object-fit: cover; height: 250px" src="/assets/images/{{ post.imagePath }}" alt="image">
  50.                             </div>
  51.                         {% endif %}
  52.                         </div>
  53.                     </div>
  54.                     {% if loop.last %}
  55.                         </div>
  56.                     {% endif %}
  57.                 {% endif %}
  58.             {% endfor %}
  59.     </div>
  60.     <div class="modal fade bd-example-modal-lg" id="addPostModal" tabindex="-1" role="dialog">
  61.         <div class="modal-dialog modal-lg" style="max-width: 1000px">
  62.             <div class="modal-content" id="addPostModalContent" style="top: 100px;">
  63.             </div>
  64.         </div>
  65.     </div>
  66. {% endblock %}
  67. {% block pagescripts %}
  68.     <script>
  69.         /**
  70.          * Отправляет запрос на сервер, получает форму создания нового поста и помещает эту форму в модальное окно
  71.          */
  72.         function showAddNewPostModal() {
  73.             let url = '/blog/addNewPost';
  74.             let modal = document.getElementById('addPostModalContent');
  75.             $('#addPostModal').on('hidden.bs.modal', function () {
  76.                 closeModal();
  77.             });
  78.             sendGetRequest(url)
  79.                 .then(function (response) {
  80.                    modal.innerHTML = response;
  81.                    openModal();
  82.                     checkFilesCountEvent();
  83.                 });
  84.         }
  85.         /**
  86.          * Отправляет заполненную форму на сервер
  87.          */
  88.         function submitAddPostForm() {
  89.             event.preventDefault();
  90.             let form = document.getElementById('blogAddPostForm');
  91.             let formData = new FormData(form);
  92.             let url = '/blog/addNewPost';
  93.             sendPostRequest(url, formData)
  94.                 .then(function () {
  95.                     showSuccessAlert('Пост успешно добавлен');
  96.                     location.reload()
  97.                 });
  98.         }
  99.         /**
  100.          * Проверяет количество файлов загруженных в форму
  101.          */
  102.         function checkFilesCountEvent() {
  103.             let input = document.getElementById('myInput');
  104.             let currentFile = null;
  105.             input.addEventListener('change', function() {
  106.                 if (input.files.length > 0) {
  107.                     if (currentFile) {
  108.                         currentFile = null;
  109.                     }
  110.                     currentFile = input.files[0];
  111.                 }
  112.             });
  113.         }
  114.         /**
  115.          * Открывает модальное окно
  116.          */
  117.         function openModal() {
  118.             $('#addPostModal').modal('show');
  119.         }
  120.         /**
  121.          * Закрывает модальное окно
  122.          */
  123.         function closeModal() {
  124.             $('#addPostModal').modal('hide');
  125.         }
  126.     </script>
  127. {% endblock %}