1
0

listing.html 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. {% extends 'base_no_card.html' %}
  2. {% load crispy_forms_tags %}
  3. {% load static %}
  4. {% block exted_menu %}
  5. {% for cat in page.blog_cat %}
  6. <li class="nav-item"><a class="nav-link" href="{% url 'blog_tag' cat.cb_titre_slgify %}">{{cat.cb_titre}}</a></li>
  7. {% endfor %}
  8. <li class="nav-item"><a class="nav-link" href="{% url 'blog_tag' 'all' %}">Tous les articles</a></li>
  9. {% endblock %}
  10. {% block main %}
  11. <style>
  12. /* Styles modernes pour les articles */
  13. .blog-card {
  14. background: white;
  15. border-radius: 12px;
  16. overflow: hidden;
  17. box-shadow: 0 2px 8px rgba(0,0,0,0.1);
  18. transition: all 0.3s ease;
  19. margin-bottom: 2rem;
  20. }
  21. .blog-card:hover {
  22. transform: translateY(-4px);
  23. box-shadow: 0 8px 24px rgba(0,0,0,0.15);
  24. }
  25. .blog-card-image {
  26. width: 100%;
  27. height: 280px;
  28. object-fit: cover;
  29. background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  30. }
  31. .blog-card-content {
  32. padding: 2rem;
  33. }
  34. .blog-card-title {
  35. font-size: 1.75rem;
  36. font-weight: 700;
  37. color: #1a202c;
  38. margin-bottom: 1rem;
  39. line-height: 1.3;
  40. }
  41. .blog-card-title:hover {
  42. color: #667eea;
  43. }
  44. .blog-card-description {
  45. font-size: 1.05rem;
  46. line-height: 1.7;
  47. color: #4a5568;
  48. margin-bottom: 1.5rem;
  49. }
  50. .blog-card-footer {
  51. display: flex;
  52. align-items: center;
  53. justify-content: space-between;
  54. padding-top: 1rem;
  55. border-top: 1px solid #e2e8f0;
  56. font-size: 0.9rem;
  57. color: #718096;
  58. }
  59. .blog-meta {
  60. display: flex;
  61. align-items: center;
  62. gap: 1rem;
  63. }
  64. .blog-category-badge {
  65. display: inline-block;
  66. padding: 0.25rem 0.75rem;
  67. background: #667eea;
  68. color: white;
  69. border-radius: 20px;
  70. font-size: 0.85rem;
  71. text-decoration: none;
  72. transition: background 0.2s;
  73. }
  74. .blog-category-badge:hover {
  75. background: #764ba2;
  76. color: white;
  77. }
  78. .blog-date {
  79. display: flex;
  80. align-items: center;
  81. gap: 0.5rem;
  82. }
  83. .blog-date i {
  84. color: #cbd5e0;
  85. }
  86. /* Responsive */
  87. @media (max-width: 768px) {
  88. .blog-card-image {
  89. height: 200px;
  90. }
  91. .blog-card-content {
  92. padding: 1.5rem;
  93. }
  94. .blog-card-title {
  95. font-size: 1.5rem;
  96. }
  97. }
  98. </style>
  99. {% if page.blog_art %}
  100. {% for item in page.blog_art %}
  101. <article class="blog-card">
  102. <a href="{% url 'blog_play' item.b_titre_slugify %}" class="text-decoration-none">
  103. {% if item.b_description_img %}
  104. <img src="{{item.b_description_img}}" alt="{{item.b_titre}}" class="blog-card-image">
  105. {% else %}
  106. <div class="blog-card-image d-flex align-items-center justify-content-center">
  107. <h3 class="text-white text-center px-4">{{item.b_titre}}</h3>
  108. </div>
  109. {% endif %}
  110. </a>
  111. <div class="blog-card-content">
  112. <a href="{% url 'blog_play' item.b_titre_slugify %}" class="text-decoration-none">
  113. <h2 class="blog-card-title">{{item.b_titre}}</h2>
  114. </a>
  115. <div class="blog-card-description">
  116. {{item.b_description|safe|truncatewords_html:50}}
  117. </div>
  118. <div class="blog-card-footer">
  119. <div class="blog-meta">
  120. <span class="blog-date">
  121. <i class="far fa-clock"></i>
  122. {{item.b_publdate|timesince}}
  123. </span>
  124. {% if item.b_cat.all %}
  125. {% for cat in item.b_cat.all %}
  126. <a href="{% url 'blog_tag' cat.cb_titre_slgify %}" class="blog-category-badge">
  127. {{ cat.cb_titre }}
  128. </a>
  129. {% endfor %}
  130. {% endif %}
  131. </div>
  132. <span class="text-muted">
  133. <i class="far fa-eye"></i> {{item.b_reading}}
  134. </span>
  135. </div>
  136. </div>
  137. </article>
  138. {% endfor %}
  139. {% else %}
  140. <div class="alert alert-info">
  141. <i class="fas fa-info-circle"></i> Aucun article trouvé.
  142. </div>
  143. {% endif %}
  144. {% endblock %}
  145. {% block right_panel %}
  146. {% if page.p_right != "" %}
  147. <div class="card shadow-sm" style="background-color: rgba(250,250,250,0.95); border-radius: 12px;">
  148. <div class="card-body">
  149. <!-- Recherche -->
  150. <h5 class="mb-3"><i class="fas fa-search"></i> Rechercher</h5>
  151. <form action="" method="get">
  152. <div class="row align-items-center">
  153. <div class="col-lg-8 col-sm-12">
  154. {{page.blog_search|crispy}}
  155. </div>
  156. <div class="col mt-sm-1">
  157. <input type="submit" class="btn btn-primary w-100" value="Rechercher">
  158. </div>
  159. </div>
  160. </form>
  161. <hr class="my-4">
  162. <!-- Pagination -->
  163. {% if page.blog_art.paginator.num_pages != 1 %}
  164. <nav aria-label="Pagination">
  165. <ul class="pagination justify-content-center">
  166. {% if page.blog_art.has_previous %}
  167. <li class="page-item">
  168. <a class="page-link" href="?page={{ page.blog_art.previous_page_number }}">
  169. <i class="fas fa-chevron-left"></i>
  170. </a>
  171. </li>
  172. {% endif %}
  173. {% for nb_page in page.blog_art.nbpage %}
  174. {% if page.blog_art.number == forloop.counter %}
  175. <li class="page-item active">
  176. <span class="page-link">{{forloop.counter}}</span>
  177. </li>
  178. {% else %}
  179. <li class="page-item">
  180. <a class="page-link" href="?page={{forloop.counter}}">{{forloop.counter}}</a>
  181. </li>
  182. {% endif %}
  183. {% endfor %}
  184. {% if page.blog_art.has_next %}
  185. <li class="page-item">
  186. <a class="page-link" href="?page={{ page.blog_art.next_page_number }}">
  187. <i class="fas fa-chevron-right"></i>
  188. </a>
  189. </li>
  190. {% endif %}
  191. </ul>
  192. </nav>
  193. <hr class="my-4">
  194. {% endif %}
  195. <!-- Catégories -->
  196. <h5 class="mb-3"><i class="fas fa-tags"></i> Catégories</h5>
  197. <div class="d-flex flex-wrap gap-2 mb-4">
  198. {% for cat in page.blog_cat %}
  199. <a href="{% url 'blog_tag' cat.cb_titre_slgify %}" class="btn btn-outline-primary btn-sm">
  200. {{cat.cb_titre}}
  201. </a>
  202. {% endfor %}
  203. {% if page.blog_filter == True %}
  204. <a href="{% url 'blog_index' %}" class="btn btn-outline-danger btn-sm">
  205. <i class="fas fa-times"></i> Retirer les filtres
  206. </a>
  207. {% else %}
  208. <a href="{% url 'blog_tag' 'all' %}" class="btn btn-outline-dark btn-sm">
  209. Tous les articles
  210. </a>
  211. {% endif %}
  212. </div>
  213. <hr class="my-4">
  214. <!-- Top 10 -->
  215. <h5 class="mb-3"><i class="fas fa-fire"></i> Articles Populaires</h5>
  216. <div class="list-group list-group-flush">
  217. {% for item in page.blog_top10 %}
  218. <a href="{% url 'blog_play' item.b_titre_slugify %}"
  219. class="list-group-item list-group-item-action border-0 px-0">
  220. <div class="d-flex align-items-start">
  221. <span class="badge bg-primary rounded-pill me-2">{{forloop.counter}}</span>
  222. <span class="flex-grow-1">{{item.b_titre|truncatechars:45}}</span>
  223. </div>
  224. </a>
  225. {% endfor %}
  226. </div>
  227. {% if page.retour %}
  228. <hr class="my-4">
  229. <a href="{% url page.retour %}" class="btn btn-outline-secondary w-100">
  230. <i class="fas fa-arrow-left"></i> Retour
  231. </a>
  232. {% endif %}
  233. </div>
  234. </div>
  235. {% endif %}
  236. {% endblock %}