templates/formation/formationsBootcamp.html.twig line 1

Open in your IDE?
  1. {% extends 'backfront.html.twig' %}
  2. {% block title %}Formations SIP Academy - Java, Python, DevOps, Agile et Plus{% endblock %}
  3. {% block meta_description %}
  4.     Explorez les formations proposées par SIP Academy : Java, Python, DevOps, Agile, et bien plus. Des cours certifiants adaptés à vos besoins et à votre rythme.
  5. {% endblock %}
  6. {% block body %}
  7.     <style>
  8.         /* ===== COULEURS MODERNES ===== */
  9.         :root {
  10.             --gold: #FFAE27;
  11.             --gold-dark: #e09500;
  12.             --gold-light: #fff8e6;
  13.             --navy: #1F3971;
  14.             --navy-dark: #162d5a;
  15.             --navy-light: #e8edf8;
  16.             --text-dark: #1a2a3a;
  17.             --text-muted: #6c757d;
  18.             --border-light: #eef2f6;
  19.         }
  20.         /* ===== BREADCRUMB MODERNE ===== */
  21.         .breadcrumb-area {
  22.             background: linear-gradient(135deg, var(--navy) 0%, var(--navy-dark) 100%);
  23.             padding: 100px 0 120px;
  24.             position: relative;
  25.             text-align: center;
  26.         }
  27.         .breadcrumb-title h1 {
  28.             color: #fff;
  29.             font-size: 48px;
  30.             font-weight: 800;
  31.             margin-bottom: 10px;
  32.             letter-spacing: -1px;
  33.         }
  34.         .breadcrumb-list {
  35.             list-style: none;
  36.             padding: 0;
  37.             margin: 0;
  38.             display: flex;
  39.             justify-content: center;
  40.             gap: 15px;
  41.             align-items: center;
  42.         }
  43.         .breadcrumb-list li, .breadcrumb-list li a {
  44.             color: rgba(255,255,255,0.7);
  45.             font-size: 15px;
  46.             text-decoration: none;
  47.             transition: color 0.3s;
  48.         }
  49.         .breadcrumb-list li a:hover {
  50.             color: var(--gold);
  51.         }
  52.         .breadcrumb-list li.active {
  53.             color: var(--gold);
  54.         }
  55.         .breadcrumb-list li i {
  56.             font-size: 14px;
  57.             color: var(--gold);
  58.         }
  59.         /* ===== SEARCH BAR FLOATING MODERNE ===== */
  60.         .search-category {
  61.             margin-top: -60px;
  62.             position: relative;
  63.             z-index: 10;
  64.             padding-bottom: 20px;
  65.         }
  66.         .search-wrapper-glass {
  67.             background: #ffffff;
  68.             padding: 30px;
  69.             border-radius: 24px;
  70.             box-shadow: 0 15px 35px rgba(0,0,0,0.1);
  71.             border: 1px solid rgba(255,255,255,0.8);
  72.         }
  73.         .form-container-modern {
  74.             display: grid;
  75.             grid-template-columns: 2fr 1fr 1fr auto;
  76.             gap: 15px;
  77.             align-items: center;
  78.         }
  79.         .input-group-custom {
  80.             position: relative;
  81.             display: flex;
  82.             align-items: center;
  83.         }
  84.         .input-group-custom i {
  85.             position: absolute;
  86.             left: 15px;
  87.             color: var(--navy);
  88.             opacity: 0.5;
  89.             z-index: 5;
  90.         }
  91.         .input-group-custom input,
  92.         .input-group-custom select {
  93.             width: 100%;
  94.             padding: 15px 15px 15px 45px !important;
  95.             border: 1px solid #e2e8f0;
  96.             border-radius: 12px;
  97.             font-size: 14px;
  98.             background-color: #f8fafc;
  99.             transition: all 0.3s ease;
  100.             cursor: pointer;
  101.             appearance: none;
  102.         }
  103.         .input-group-custom input:focus,
  104.         .input-group-custom select:focus {
  105.             background: #fff;
  106.             border-color: var(--gold);
  107.             box-shadow: 0 0 0 4px rgba(255, 174, 39, 0.1);
  108.             outline: none;
  109.         }
  110.         .btn-search-modern {
  111.             background: var(--gold);
  112.             color: var(--navy);
  113.             border: none;
  114.             padding: 15px 35px;
  115.             border-radius: 12px;
  116.             font-weight: 700;
  117.             text-transform: uppercase;
  118.             letter-spacing: 0.5px;
  119.             cursor: pointer;
  120.             transition: all 0.3s ease;
  121.             display: flex;
  122.             align-items: center;
  123.             gap: 10px;
  124.             white-space: nowrap;
  125.         }
  126.         .btn-search-modern:hover {
  127.             background: var(--navy);
  128.             color: #fff;
  129.             transform: translateY(-2px);
  130.         }
  131.         /* ===== SECTION TITRES ===== */
  132.         .section-title-wrapper {
  133.             text-align: center;
  134.             margin-bottom: 50px;
  135.         }
  136.         .section-title h3 {
  137.             font-size: 36px;
  138.             font-weight: 800;
  139.             color: var(--text-dark);
  140.             margin-bottom: 12px;
  141.             position: relative;
  142.             display: inline-block;
  143.         }
  144.         .section-title h3::after {
  145.             content: '';
  146.             position: absolute;
  147.             bottom: -12px;
  148.             left: 50%;
  149.             transform: translateX(-50%);
  150.             width: 60px;
  151.             height: 4px;
  152.             background: linear-gradient(90deg, var(--gold), var(--gold-dark));
  153.             border-radius: 2px;
  154.         }
  155.         .section-title p {
  156.             font-size: 16px;
  157.             color: var(--text-muted);
  158.             margin-top: 20px;
  159.         }
  160.         /* ===== COURSE AREA ===== */
  161.         .course-area {
  162.             padding: 80px 0;
  163.             background: #fff;
  164.         }
  165.         /* CARTE FORMATION - HAUTEUR ÉGALE */
  166.         .single-item {
  167.             background: #fff;
  168.             border-radius: 20px;
  169.             overflow: hidden;
  170.             box-shadow: 0 5px 20px rgba(0,0,0,0.05);
  171.             transition: all 0.3s cubic-bezier(0.4,0,0.2,1);
  172.             height: 100%;
  173.             display: flex;
  174.             flex-direction: column;
  175.             border: 1px solid var(--border-light);
  176.         }
  177.         .single-item:hover {
  178.             transform: translateY(-8px);
  179.             box-shadow: 0 20px 40px rgba(31,57,113,0.15);
  180.             border-color: var(--gold);
  181.         }
  182.         /* IMAGE */
  183.         .single-item-image {
  184.             position: relative;
  185.             overflow: hidden;
  186.             height: 220px;
  187.             background: linear-gradient(135deg, #f8faff 0%, #fff 100%);
  188.             display: flex;
  189.             align-items: center;
  190.             justify-content: center;
  191.         }
  192.         .single-item-image a {
  193.             display: flex;
  194.             align-items: center;
  195.             justify-content: center;
  196.             width: 100%;
  197.             height: 100%;
  198.         }
  199.         .single-item-image img {
  200.             width: auto;
  201.             height: auto;
  202.             max-width: 100%;
  203.             max-height: 100%;
  204.             object-fit: contain;
  205.             transition: transform 0.4s ease;
  206.         }
  207.         .single-item:hover .single-item-image img {
  208.             transform: scale(1.05);
  209.         }
  210.         /* OVERLAY HOVER */
  211.         .overlay-effect {
  212.             position: relative;
  213.         }
  214.         .courses-hover-info {
  215.             position: absolute;
  216.             bottom: -100%;
  217.             left: 0;
  218.             right: 0;
  219.             background: linear-gradient(135deg, rgba(31,57,113,0.95), rgba(22,45,90,0.95));
  220.             padding: 15px;
  221.             transition: bottom 0.3s ease;
  222.             backdrop-filter: blur(5px);
  223.         }
  224.         .single-item:hover .courses-hover-info {
  225.             bottom: 0;
  226.         }
  227.         .courses-hover-action {
  228.             display: flex;
  229.             align-items: center;
  230.             gap: 12px;
  231.             flex-wrap: wrap;
  232.         }
  233.         .courses-hover-thumb img {
  234.             width: 40px;
  235.             height: 40px;
  236.             border-radius: 50%;
  237.             object-fit: cover;
  238.             border: 2px solid var(--gold);
  239.         }
  240.         .courses-hover-action h4 a {
  241.             color: #fff;
  242.             font-size: 14px;
  243.             font-weight: 600;
  244.             text-decoration: none;
  245.         }
  246.         .courses-hover-action h4 a:hover {
  247.             color: var(--gold);
  248.         }
  249.         .crs-separator {
  250.             color: var(--gold);
  251.         }
  252.         .courses-hover-action p {
  253.             color: rgba(255,255,255,0.8);
  254.             font-size: 11px;
  255.             margin: 0;
  256.         }
  257.         /* CORPS DE LA CARTE */
  258.         .single-item-text {
  259.             padding: 20px;
  260.             flex: 1;
  261.             display: flex;
  262.             flex-direction: column;
  263.         }
  264.         .single-item-text h4 {
  265.             font-size: 18px;
  266.             font-weight: 700;
  267.             margin-bottom: 12px;
  268.             line-height: 1.4;
  269.             min-height: 50px;
  270.         }
  271.         .single-item-text h4 a {
  272.             color: var(--text-dark);
  273.             text-decoration: none;
  274.             transition: color 0.2s;
  275.         }
  276.         .single-item-text h4 a:hover {
  277.             color: var(--gold);
  278.         }
  279.         /* DESCRIPTION - MAX 100 CARACTÈRES */
  280.         .single-item-text > p {
  281.             font-size: 13px;
  282.             color: var(--text-muted);
  283.             line-height: 1.6;
  284.             margin-bottom: 16px;
  285.             display: -webkit-box;
  286.             -webkit-line-clamp: 2;
  287.             -webkit-box-orient: vertical;
  288.             overflow: hidden;
  289.         }
  290.         /* INFOS CARTE (INSCRIPTIONS + LIKES) */
  291.         .single-item-content {
  292.             display: flex;
  293.             justify-content: space-between;
  294.             align-items: center;
  295.             margin-top: auto;
  296.             padding-top: 15px;
  297.             border-top: 1px solid var(--border-light);
  298.         }
  299.         .single-item-comment-view {
  300.             display: flex;
  301.             gap: 15px;
  302.         }
  303.         .single-item-comment-view span {
  304.             font-size: 12px;
  305.             color: var(--text-muted);
  306.             display: flex;
  307.             align-items: center;
  308.             gap: 5px;
  309.         }
  310.         .single-item-comment-view span i {
  311.             color: var(--gold);
  312.             font-size: 14px;
  313.         }
  314.         .single-item-rating i {
  315.             color: var(--gold);
  316.             font-size: 12px;
  317.             margin: 0 1px;
  318.         }
  319.         /* PAGINATION */
  320.         .pagination-wrapper {
  321.             margin-top: 40px;
  322.             text-align: center;
  323.         }
  324.         .pagination {
  325.             display: flex;
  326.             justify-content: center;
  327.             gap: 8px;
  328.             list-style: none;
  329.             padding: 0;
  330.             margin: 0;
  331.         }
  332.         .pagination .page-item {
  333.             list-style: none;
  334.         }
  335.         .pagination .page-link {
  336.             display: flex;
  337.             align-items: center;
  338.             justify-content: center;
  339.             width: 40px;
  340.             height: 40px;
  341.             border-radius: 12px;
  342.             background: #fff;
  343.             border: 1px solid var(--border-light);
  344.             color: var(--navy);
  345.             font-weight: 500;
  346.             text-decoration: none;
  347.             transition: all 0.3s ease;
  348.         }
  349.         .pagination .page-link:hover {
  350.             background: var(--gold);
  351.             border-color: var(--gold);
  352.             color: var(--navy);
  353.         }
  354.         .pagination .active .page-link {
  355.             background: linear-gradient(135deg, var(--navy), var(--navy-dark));
  356.             border-color: var(--navy);
  357.             color: #fff;
  358.         }
  359.         /* RESPONSIVE */
  360.         @media (max-width: 991px) {
  361.             .form-container-modern {
  362.                 grid-template-columns: 1fr;
  363.             }
  364.             .breadcrumb-area {
  365.                 padding: 60px 0 100px;
  366.             }
  367.             .breadcrumb-title h1 {
  368.                 font-size: 32px;
  369.             }
  370.             .btn-search-modern {
  371.                 justify-content: center;
  372.             }
  373.         }
  374.         @media (max-width: 768px) {
  375.             .section-title h3 {
  376.                 font-size: 28px;
  377.             }
  378.             .single-item-image {
  379.                 height: 180px;
  380.             }
  381.             .single-item-text h4 {
  382.                 font-size: 16px;
  383.                 min-height: auto;
  384.             }
  385.             .pagination .page-link {
  386.                 width: 36px;
  387.                 height: 36px;
  388.                 font-size: 13px;
  389.             }
  390.         }
  391.     </style>
  392.     <!-- BREADCRUMB AREA -->
  393.     <div class="breadcrumb-area">
  394.         <div class="container">
  395.             <div class="row">
  396.                 <div class="col-md-12">
  397.                     <div class="breadcrumb-title">
  398.                         <h1>Formations Bootcamp</h1>
  399.                         <ul class="breadcrumb-list">
  400.                             <li><a href="{{ path('app_home') }}">Accueil</a></li>
  401.                             <li><i class="zmdi zmdi-chevron-right"></i></li>
  402.                             <li class="active">Formations Bootcamp</li>
  403.                         </ul>
  404.                     </div>
  405.                 </div>
  406.             </div>
  407.         </div>
  408.     </div>
  409.     <!-- SEARCH CATEGORY FLOATING -->
  410.     <div class="search-category">
  411.         <div class="container">
  412.             <div class="search-wrapper-glass">
  413.                 <form method="POST" action="{{ path('app_formations_recherche') }}">
  414.                     <div class="form-container-modern">
  415.                         <!-- Champ Titre -->
  416.                         <div class="input-group-custom">
  417.                             <i class="zmdi zmdi-search"></i>
  418.                             <input placeholder="Quelle compétence souhaitez-vous acquérir ?" type="text" name="titre" class="form-control">
  419.                         </div>
  420.                         <!-- Champ Catégorie -->
  421.                         <div class="input-group-custom">
  422.                             <i class="zmdi zmdi-collection-bookmark"></i>
  423.                             <select name="categorie">
  424.                                 <option value="">Toutes les catégories</option>
  425.                                 <option value="Certifiante">Certifiantes</option>
  426.                                 <option value="Pratique">Pratiques</option>
  427.                                 <option value="BootCamp">BootCamp</option>
  428.                                 <option value="Cursus">Cursus</option>
  429.                             </select>
  430.                         </div>
  431.                         <!-- Champ Niveau -->
  432.                         <div class="input-group-custom">
  433.                             <i class="zmdi zmdi-trending-up"></i>
  434.                             <select name="niveau">
  435.                                 <option value="">Tous les niveaux</option>
  436.                                 <option value="Débutant">Débutant</option>
  437.                                 <option value="Intermediaire">Intermédiaire</option>
  438.                                 <option value="Avancé">Avancé</option>
  439.                                 <option value="Pas de prérequis">Pas de prérequis</option>
  440.                             </select>
  441.                         </div>
  442.                         <!-- Bouton -->
  443.                         <button type="submit" class="btn-search-modern">
  444.                             <span>Rechercher</span>
  445.                             <i class="zmdi zmdi-arrow-right"></i>
  446.                         </button>
  447.                     </div>
  448.                 </form>
  449.             </div>
  450.         </div>
  451.     </div>
  452.     <!-- COURSE AREA -->
  453.     <div class="course-area">
  454.         <div class="container">
  455.             <div class="row">
  456.                 <div class="col-md-12">
  457.                     <div class="section-title-wrapper">
  458.                         <div class="section-title">
  459.                             <h3>Formations Bootcamp</h3>
  460.                             <p>Découvrez nos formations intensives pour accélérer votre carrière</p>
  461.                         </div>
  462.                     </div>
  463.                 </div>
  464.             </div>
  465.             <div class="row">
  466.                 {% for fo in formation %}
  467.                     <div class="col-lg-4 col-md-6 col-12 mb-4 d-flex">
  468.                         <div class="single-item w-100">
  469.                             <div class="single-item-image overlay-effect">
  470.                                 <a href="{{ path('app_formation_detailsfront', {'slug': fo.slug}) }}">
  471.                                     <img src="{{ asset('uploads/formation/' ~ fo.affiche) }}" alt="{{ fo.titre }}">
  472.                                 </a>
  473. {#                                <div class="courses-hover-info">#}
  474. {#                                    {% if fo.formateur != null %}#}
  475. {#                                        <div class="courses-hover-action">#}
  476. {#                                            <div class="courses-hover-thumb">#}
  477. {#                                                <img src="{{ asset('uploads/coach/' ~ fo.formateur.logo) }}" alt="{{ fo.formateur.prenom }}" style="width: 40px; height: 40px; object-fit: cover;">#}
  478. {#                                            </div>#}
  479. {#                                            <h4><a href="{{ path('app_formation_detailsfront', {'slug': fo.slug}) }}">{{ fo.formateur.prenom }} {{ fo.formateur.nom }}</a></h4>#}
  480. {#                                            <span class="crs-separator">/</span>#}
  481. {#                                            <p>{{ fo.formateur.poste }}</p>#}
  482. {#                                        </div>#}
  483. {#                                    {% endif %}#}
  484. {#                                </div>#}
  485.                             </div>
  486.                             <div class="single-item-text">
  487.                                 <h4><a href="{{ path('app_formation_detailsfront', {'slug': fo.slug}) }}">{{ fo.titre }}</a></h4>
  488.                                 <p>    {{ fo.desccourt|striptags|slice(0, 100)|raw }}
  489.                                     {% if  fo.desccourt|striptags|length > 100 %}...{% endif %}</p>
  490.                                 <div class="single-item-content">
  491.                                     <div class="single-item-comment-view">
  492.                                         <span><i class="zmdi zmdi-accounts"></i> {{ fo.totalinscrit }}</span>
  493.                                         <span><i class="zmdi zmdi-favorite"></i> {{ fo.nblike }}</span>
  494.                                     </div>
  495.                                     <div class="single-item-rating">
  496.                                         <i class="zmdi zmdi-star"></i>
  497.                                         <i class="zmdi zmdi-star"></i>
  498.                                         <i class="zmdi zmdi-star"></i>
  499.                                         <i class="zmdi zmdi-star"></i>
  500.                                         <i class="zmdi zmdi-star"></i>
  501.                                     </div>
  502.                                 </div>
  503.                             </div>
  504.                         </div>
  505.                     </div>
  506.                 {% endfor %}
  507.             </div>
  508.             <!-- PAGINATION -->
  509.             <div class="row">
  510.                 <div class="col-12">
  511.                     <div class="pagination-wrapper">
  512.                         {{ knp_pagination_render(paginator, 'formation/custom_pagination.html.twig') }}
  513.                     </div>
  514.                 </div>
  515.             </div>
  516.         </div>
  517.     </div>
  518. {% endblock %}