templates/auteurs/detail.html.twig line 1

Open in your IDE?
  1. {% extends 'base.html.twig' %}
  2. {% block title %}{{ auteur.nomComplet }} - BDD-Books{% endblock %}
  3. {% block body %}
  4. <div class="container-fluid px-4">
  5. <!-- En-tête -->
  6. <div class="card mb-4">
  7. <div class="card-header" style="background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);">
  8. <div class="d-flex justify-content-between align-items-center">
  9. <h5 class="mb-0 text-white">
  10. <i class="fas fa-user"></i> {{ auteur.nomComplet }}
  11. </h5>
  12. <a href="{{ path('liste_auteurs') }}" class="btn btn-light btn-sm">
  13. <i class="fas fa-arrow-left"></i> Retour aux auteurs
  14. </a>
  15. </div>
  16. </div>
  17. <div class="card-body">
  18. <div class="d-flex align-items-center">
  19. <div class="mr-4">
  20. <span class="badge" style="font-size: 2rem; width: 70px; height: 70px; display: flex; align-items: center; justify-content: center; border-radius: 50%; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white;">
  21. {{ auteur.initiale }}
  22. </span>
  23. </div>
  24. <div>
  25. <h3 class="mb-1">{{ auteur.nomComplet }}</h3>
  26. <p class="text-muted mb-0">
  27. <i class="fas fa-book"></i> {{ livres|length }} livre(s) dans la bibliothèque
  28. </p>
  29. </div>
  30. </div>
  31. </div>
  32. </div>
  33. <!-- Liste des livres -->
  34. {% if livres|length > 0 %}
  35. <!-- Grille de livres (même style que la recherche) -->
  36. <div class="row">
  37. {% for livre in livres %}
  38. <div class="col-6 col-md-4 col-lg-3 col-xl-2 mb-4">
  39. <div class="card h-100 livre-card shadow-sm">
  40. <!-- Image -->
  41. <div class="livre-cover-wrapper text-center p-2" style="background: linear-gradient(135deg, #f5f7fa 0%, #e4e8ec 100%);">
  42. {% if livre.id in images|keys %}
  43. <img class="img-fluid"
  44. alt="{{ livre.titre }}"
  45. src="data:image/png;base64,{{ images[livre.id] }}"
  46. style="max-height: 180px; object-fit: contain;" />
  47. {% else %}
  48. <div class="d-flex align-items-center justify-content-center" style="height: 180px;">
  49. <i class="fas fa-book fa-4x text-muted"></i>
  50. </div>
  51. {% endif %}
  52. </div>
  53. <!-- Corps de la card -->
  54. <div class="card-body p-2">
  55. <h6 class="card-title mb-1">
  56. <a href="{{ path('livreDetail', {'id': livre.id}) }}" class="text-dark text-decoration-none livre-titre">
  57. {{ livre.titre|length > 40 ? livre.titre|slice(0, 40) ~ '...' : livre.titre }}
  58. </a>
  59. </h6>
  60. {% if livre.tome and livre.tome > 0 %}
  61. <span class="badge badge-secondary badge-sm mb-1">Tome {{ livre.tome }}</span>
  62. {% endif %}
  63. <!-- Éditeur -->
  64. {% if livre.edition %}
  65. <p class="card-text small text-muted mb-1">
  66. <i class="fas fa-building"></i> {{ livre.edition.nom|length > 20 ? livre.edition.nom|slice(0, 20) ~ '...' : livre.edition.nom }}
  67. </p>
  68. {% endif %}
  69. {% if livre.annee %}
  70. <p class="card-text small text-muted mb-1">
  71. <i class="fas fa-calendar"></i> {{ livre.annee }}
  72. </p>
  73. {% endif %}
  74. </div>
  75. <!-- Footer -->
  76. <div class="card-footer bg-white border-top-0 p-2 pt-0">
  77. <div class="d-flex justify-content-between align-items-center">
  78. <span class="badge badge-primary">{{ livre.prixBase|number_format(2) }} €</span>
  79. <a href="{{ path('livreDetail', {'id': livre.id}) }}" class="btn btn-sm btn-outline-primary">
  80. <i class="fas fa-eye"></i>
  81. </a>
  82. </div>
  83. </div>
  84. </div>
  85. </div>
  86. {% endfor %}
  87. </div>
  88. {% else %}
  89. <div class="alert alert-info">
  90. <i class="fas fa-info-circle"></i> Aucun livre trouvé pour cet auteur.
  91. </div>
  92. {% endif %}
  93. </div>
  94. <style>
  95. .livre-card {
  96. transition: transform 0.2s, box-shadow 0.2s;
  97. border: 1px solid #e9ecef;
  98. }
  99. .livre-card:hover {
  100. transform: translateY(-5px);
  101. box-shadow: 0 8px 25px rgba(0,0,0,0.15) !important;
  102. }
  103. .livre-titre:hover {
  104. color: #667eea !important;
  105. }
  106. .livre-cover-wrapper {
  107. border-radius: 0.25rem 0.25rem 0 0;
  108. min-height: 180px;
  109. }
  110. </style>
  111. {% endblock %}