Init project
This commit is contained in:
113
templates/base-admin/index.html.twig
Normal file
113
templates/base-admin/index.html.twig
Normal file
@@ -0,0 +1,113 @@
|
||||
{% extends 'base_admin.html.twig' %}
|
||||
{% block body %}
|
||||
<main class="py-10 lg:pl-72">
|
||||
<div class="px-4 sm:px-6 lg:px-8">
|
||||
<div
|
||||
class="divide-y divide-gray-200 overflow-hidden rounded-lg bg-gray-200 shadow-sm sm:grid sm:grid-cols-2 sm:divide-y-0 dark:divide-white/10 dark:bg-gray-900 dark:shadow-none dark:outline dark:-outline-offset-1 dark:outline-white/20"
|
||||
>
|
||||
<div
|
||||
class="group relative rounded-tl-lg rounded-tr-lg border-gray-200 bg-white p-6 focus-within:outline-2 focus-within:-outline-offset-2 focus-within:outline-indigo-600 sm:rounded-tr-none sm:odd:not-nth-last-2:border-b sm:even:border-l sm:even:not-last:border-b dark:border-white/10 dark:bg-gray-800/50 dark:focus-within:outline-indigo-500"
|
||||
>
|
||||
<div>
|
||||
<span
|
||||
class="inline-flex rounded-lg bg-teal-50 p-3 text-teal-700 dark:bg-teal-500/10 dark:text-teal-400"
|
||||
>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewbox="0 0 24 24"
|
||||
stroke-width="1.5"
|
||||
stroke="currentColor"
|
||||
class="size-6"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
d="M12 7.5h1.5m-1.5 3h1.5m-7.5 3h7.5m-7.5 3h7.5m3-9h3.375c.621 0 1.125.504 1.125 1.125V18a2.25 2.25 0 0 1-2.25 2.25M16.5 7.5V18a2.25 2.25 0 0 0 2.25 2.25M16.5 7.5V4.875c0-.621-.504-1.125-1.125-1.125H4.125C3.504 3.75 3 4.254 3 4.875V18a2.25 2.25 0 0 0 2.25 2.25h13.5M6 7.5h3v3H6v-3Z"
|
||||
/>
|
||||
</svg>
|
||||
</span>
|
||||
</div>
|
||||
<div class="mt-8">
|
||||
<h3 class="text-base font-semibold text-gray-900 dark:text-white">
|
||||
<a
|
||||
href="{{ path('admin_news_index') }}"
|
||||
class="focus:outline-hidden"
|
||||
>
|
||||
<!-- Extend touch target to entire panel -->
|
||||
<span aria-hidden="true" class="absolute inset-0"></span>
|
||||
Actualité
|
||||
</a>
|
||||
</h3>
|
||||
<p class="mt-2 text-sm text-gray-500 dark:text-gray-400">
|
||||
Retrouvez ici les dernières actualités et informations
|
||||
importantes. Ce module regroupe les nouveautés, annonces et
|
||||
événements à ne pas manquer.
|
||||
</p>
|
||||
</div>
|
||||
<span
|
||||
aria-hidden="true"
|
||||
class="pointer-events-none absolute top-6 right-6 text-gray-300 group-hover:text-gray-400 dark:text-gray-500 dark:group-hover:text-gray-200"
|
||||
>
|
||||
<svg viewbox="0 0 24 24" fill="currentColor" class="size-6">
|
||||
<path
|
||||
d="M20 4h1a1 1 0 00-1-1v1zm-1 12a1 1 0 102 0h-2zM8 3a1 1 0 000 2V3zM3.293 19.293a1 1 0 101.414 1.414l-1.414-1.414zM19 4v12h2V4h-2zm1-1H8v2h12V3zm-.707.293l-16 16 1.414 1.414 16-16-1.414-1.414z"
|
||||
/>
|
||||
</svg>
|
||||
</span>
|
||||
</div>
|
||||
<div
|
||||
class="group relative border-gray-200 bg-white p-6 focus-within:outline-2 focus-within:-outline-offset-2 focus-within:outline-indigo-600 sm:rounded-tr-lg sm:odd:not-nth-last-2:border-b sm:even:border-l sm:even:not-last:border-b dark:border-white/10 dark:bg-gray-800/50 dark:focus-within:outline-indigo-500"
|
||||
>
|
||||
<div>
|
||||
<span
|
||||
class="inline-flex rounded-lg bg-purple-50 p-3 text-purple-700 dark:bg-purple-500/10 dark:text-purple-400"
|
||||
>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewbox="0 0 24 24"
|
||||
stroke-width="1.5"
|
||||
stroke="currentColor"
|
||||
class="size-6"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
d="m2.25 15.75 5.159-5.159a2.25 2.25 0 0 1 3.182 0l5.159 5.159m-1.5-1.5 1.409-1.409a2.25 2.25 0 0 1 3.182 0l2.909 2.909m-18 3.75h16.5a1.5 1.5 0 0 0 1.5-1.5V6a1.5 1.5 0 0 0-1.5-1.5H3.75A1.5 1.5 0 0 0 2.25 6v12a1.5 1.5 0 0 0 1.5 1.5Zm10.5-11.25h.008v.008h-.008V8.25Zm.375 0a.375.375 0 1 1-.75 0 .375.375 0 0 1 .75 0Z"
|
||||
/>
|
||||
</svg>
|
||||
</span>
|
||||
</div>
|
||||
<div class="mt-8">
|
||||
<h3 class="text-base font-semibold text-gray-900 dark:text-white">
|
||||
<a
|
||||
href="{{ path('admin_image_index') }}"
|
||||
class="focus:outline-hidden"
|
||||
>
|
||||
<!-- Extend touch target to entire panel -->
|
||||
<span aria-hidden="true" class="absolute inset-0"></span>
|
||||
Image
|
||||
</a>
|
||||
</h3>
|
||||
<p class="mt-2 text-sm text-gray-500 dark:text-gray-400">
|
||||
Gérez facilement vos images grâce à ce module dédié. Téléversez,
|
||||
classez, prévisualisez et organisez vos visuels en toute
|
||||
simplicité pour les utiliser dans vos contenus.
|
||||
</p>
|
||||
</div>
|
||||
<span
|
||||
aria-hidden="true"
|
||||
class="pointer-events-none absolute top-6 right-6 text-gray-300 group-hover:text-gray-400 dark:text-gray-500 dark:group-hover:text-gray-200"
|
||||
>
|
||||
<svg viewbox="0 0 24 24" fill="currentColor" class="size-6">
|
||||
<path
|
||||
d="M20 4h1a1 1 0 00-1-1v1zm-1 12a1 1 0 102 0h-2zM8 3a1 1 0 000 2V3zM3.293 19.293a1 1 0 101.414 1.414l-1.414-1.414zM19 4v12h2V4h-2zm1-1H8v2h12V3zm-.707.293l-16 16 1.414 1.414 16-16-1.414-1.414z"
|
||||
/>
|
||||
</svg>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
{% endblock %}
|
||||
377
templates/base-admin/sidebar.html.twig
Normal file
377
templates/base-admin/sidebar.html.twig
Normal file
@@ -0,0 +1,377 @@
|
||||
<el-dialog>
|
||||
<dialog id="sidebar" class="backdrop:bg-transparent lg:hidden">
|
||||
<el-dialog-backdrop
|
||||
class="fixed inset-0 bg-gray-900/80 transition-opacity duration-300 ease-linear data-closed:opacity-0"
|
||||
></el-dialog-backdrop>
|
||||
|
||||
<div tabindex="0" class="fixed inset-0 flex focus:outline-none">
|
||||
<el-dialog-panel
|
||||
class="group/dialog-panel relative mr-16 flex w-full max-w-xs flex-1 transform transition duration-300 ease-in-out data-closed:-translate-x-full"
|
||||
>
|
||||
<div
|
||||
class="absolute top-0 left-full flex w-16 justify-center pt-5 duration-300 ease-in-out group-data-closed/dialog-panel:opacity-0"
|
||||
>
|
||||
<button
|
||||
type="button"
|
||||
command="close"
|
||||
commandfor="sidebar"
|
||||
class="-m-2.5 p-2.5"
|
||||
>
|
||||
<span class="sr-only">Fermer sidebar</span>
|
||||
<svg
|
||||
viewbox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="1.5"
|
||||
data-slot="icon"
|
||||
aria-hidden="true"
|
||||
class="size-6 text-white"
|
||||
>
|
||||
<path
|
||||
d="M6 18 18 6M6 6l12 12"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<!-- Sidebar component, swap this element with another sidebar if you like -->
|
||||
<div
|
||||
class="relative flex grow flex-col gap-y-5 overflow-y-auto bg-white px-6 pb-2"
|
||||
>
|
||||
<div class="relative flex h-16 shrink-0 items-center">
|
||||
<img src="/images/logo.jpg" alt="Your Company" class="h-8 w-auto" />
|
||||
</div>
|
||||
<nav class="relative flex flex-1 flex-col">
|
||||
<ul role="list" class="flex flex-1 flex-col gap-y-7">
|
||||
<li>
|
||||
<ul role="list" class="-mx-2 space-y-1">
|
||||
<li>
|
||||
<!-- Current: "bg-gray-50 text-amber-600", Default: "text-gray-700 hover:text-amber-600 hover:bg-gray-50" -->
|
||||
<a
|
||||
href="{{ path('admin_dashboard') }}"
|
||||
class="group flex gap-x-3 rounded-md p-2 text-sm/6 font-semibold{% if path == '/admin' %} bg-gray-50 text-amber-600 {% else %} text-gray-700 hover:text-amber-600 hover:bg-gray-50 {% endif %}"
|
||||
>
|
||||
<svg
|
||||
viewbox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="1.5"
|
||||
data-slot="icon"
|
||||
aria-hidden="true"
|
||||
class="size-6 shrink-0{% if path == '/admin' %} text-amber-600 {% else %} text-gray-400 group-hover:text-amber-600{% endif %}"
|
||||
>
|
||||
<path
|
||||
d="m2.25 12 8.954-8.955c.44-.439 1.152-.439 1.591 0L21.75 12M4.5 9.75v10.125c0 .621.504 1.125 1.125 1.125H9.75v-4.875c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125V21h4.125c.621 0 1.125-.504 1.125-1.125V9.75M8.25 21h8.25"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
/>
|
||||
</svg>Tableau de bord
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
href="{{ path('admin_news_index') }}"
|
||||
class="group flex gap-x-3 rounded-md p-2 text-sm/6 font-semibold {% if path starts with '/admin/news' %} bg-gray-50 text-amber-600 {% else %} text-gray-700 hover:text-amber-600 hover:bg-gray-50 {% endif %}"
|
||||
>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewbox="0 0 24 24"
|
||||
stroke-width="1.5"
|
||||
stroke="currentColor"
|
||||
class="size-6 shrink-0 {% if path starts with '/admin/news' %} text-amber-600 {% else %} text-gray-400 group-hover:text-amber-600{% endif %}"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
d="M12 7.5h1.5m-1.5 3h1.5m-7.5 3h7.5m-7.5 3h7.5m3-9h3.375c.621 0 1.125.504 1.125 1.125V18a2.25 2.25 0 0 1-2.25 2.25M16.5 7.5V18a2.25 2.25 0 0 0 2.25 2.25M16.5 7.5V4.875c0-.621-.504-1.125-1.125-1.125H4.125C3.504 3.75 3 4.254 3 4.875V18a2.25 2.25 0 0 0 2.25 2.25h13.5M6 7.5h3v3H6v-3Z"
|
||||
/>
|
||||
</svg>Actualité
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
href="{{ path('admin_image_index') }}"
|
||||
class="group flex gap-x-3 rounded-md p-2 text-sm/6 font-semibold {% if path starts with '/admin/image' %} bg-gray-50 text-amber-600 {% else %} text-gray-700 hover:text-amber-600 hover:bg-gray-50 {% endif %}"
|
||||
>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewbox="0 0 24 24"
|
||||
stroke-width="1.5"
|
||||
stroke="currentColor"
|
||||
class="size-6 shrink-0 {% if path starts with '/admin/image' %} text-amber-600 {% else %} text-gray-400 group-hover:text-amber-600{% endif %}"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
d="m2.25 15.75 5.159-5.159a2.25 2.25 0 0 1 3.182 0l5.159 5.159m-1.5-1.5 1.409-1.409a2.25 2.25 0 0 1 3.182 0l2.909 2.909m-18 3.75h16.5a1.5 1.5 0 0 0 1.5-1.5V6a1.5 1.5 0 0 0-1.5-1.5H3.75A1.5 1.5 0 0 0 2.25 6v12a1.5 1.5 0 0 0 1.5 1.5Zm10.5-11.25h.008v.008h-.008V8.25Zm.375 0a.375.375 0 1 1-.75 0 .375.375 0 0 1 .75 0Z"
|
||||
/>
|
||||
</svg>Image
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<div class="text-xs/6 font-semibold text-gray-400">
|
||||
Liens utiles
|
||||
</div>
|
||||
<ul role="list" class="-mx-2 mt-2 space-y-1">
|
||||
<li>
|
||||
<a
|
||||
target="_blank"
|
||||
href="{{ path('home') }}"
|
||||
class="group flex gap-x-3 rounded-md p-2 text-sm/6 font-semibold 0 text-gray-700 hover:bg-gray-50 hover:text-amber-600"
|
||||
>
|
||||
<span
|
||||
class="flex size-6 shrink-0 items-center justify-center rounded-lg border border-gray-200 bg-white text-[0.625rem] font-medium text-gray-400 group-hover:border-amber-600 group-hover:text-amber-600"
|
||||
>
|
||||
A
|
||||
</span>
|
||||
<span class="truncate">Accès au site</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
target="_blank"
|
||||
href="/logout"
|
||||
class="group flex gap-x-3 rounded-md p-2 text-sm/6 font-semibold 0 text-gray-700 hover:bg-gray-50 hover:text-amber-600"
|
||||
>
|
||||
<span
|
||||
class="flex size-6 shrink-0 items-center justify-center rounded-lg border border-gray-200 bg-white text-[0.625rem] font-medium text-gray-400 group-hover:border-amber-600 group-hover:text-amber-600"
|
||||
>
|
||||
D
|
||||
</span>
|
||||
<span class="truncate">Déconnexion</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
{% if 'ROLE_DEVELOPER' in app.user.roles %}
|
||||
<li>
|
||||
<div class="text-xs/6 font-semibold text-gray-400">
|
||||
Développeur
|
||||
</div>
|
||||
<ul role="list" class="-mx-2 mt-2 space-y-1">
|
||||
<li>
|
||||
<!-- Current: "bg-gray-50 text-amber-600", Default: "text-gray-700 hover:text-amber-600 hover:bg-gray-50" -->
|
||||
<a
|
||||
href="{{ path('admin_feature_index') }}"
|
||||
class="group flex gap-x-3 rounded-md p-2 text-sm/6 font-semibold 0{% if path starts with '/admin/feature' %} bg-gray-50 text-amber-600 {% else %} text-gray-700 hover:bg-gray-50 hover:text-amber-600{% endif %}"
|
||||
>
|
||||
<span
|
||||
class="flex size-6 shrink-0 items-center justify-center rounded-lg border border-gray-200 bg-white text-[0.625rem] font-medium {% if path starts with '/admin/feature' %} border-amber-600 text-amber-600 {% else %} text-gray-400 group-hover:border-amber-600 group-hover:text-amber-600{% endif %}"
|
||||
>
|
||||
F
|
||||
</span>
|
||||
<span class="truncate">Fonctionnalité</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</el-dialog-panel>
|
||||
</div>
|
||||
</dialog>
|
||||
</el-dialog>
|
||||
|
||||
<!-- Static sidebar for desktop -->
|
||||
<div class="hidden lg:fixed lg:inset-y-0 lg:z-50 lg:flex lg:w-72 lg:flex-col">
|
||||
<!-- Sidebar component, swap this element with another sidebar if you like -->
|
||||
<div
|
||||
class="relative flex grow flex-col gap-y-5 overflow-y-auto border-r border-gray-200 bg-white px-6"
|
||||
>
|
||||
<div class="relative flex h-16 shrink-0 items-center">
|
||||
<img src="/images/logo.jpg" alt="Your Company" class="h-8 w-auto" />
|
||||
</div>
|
||||
<nav class="relative flex flex-1 flex-col">
|
||||
<ul role="list" class="flex flex-1 flex-col gap-y-7">
|
||||
<li>
|
||||
<ul role="list" class="-mx-2 space-y-1">
|
||||
<li>
|
||||
<!-- Current: "bg-gray-50 text-amber-600", Default: "text-gray-700 hover:text-amber-600 hover:bg-gray-50" -->
|
||||
<a
|
||||
href="{{ path('admin_dashboard') }}"
|
||||
class="group flex gap-x-3 rounded-md p-2 text-sm/6 font-semibold {% if path == '/admin' %} bg-gray-50 text-amber-600 {% else %} text-gray-700 hover:text-amber-600 hover:bg-gray-50 {% endif %}"
|
||||
>
|
||||
<svg
|
||||
viewbox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="1.5"
|
||||
data-slot="icon"
|
||||
aria-hidden="true"
|
||||
class="size-6 shrink-0 {% if path == '/admin' %} text-amber-600 {% else %} text-gray-400 group-hover:text-amber-600{% endif %}"
|
||||
>
|
||||
<path
|
||||
d="m2.25 12 8.954-8.955c.44-.439 1.152-.439 1.591 0L21.75 12M4.5 9.75v10.125c0 .621.504 1.125 1.125 1.125H9.75v-4.875c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125V21h4.125c.621 0 1.125-.504 1.125-1.125V9.75M8.25 21h8.25"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
/>
|
||||
</svg>Tableau de bord
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
href="{{ path('admin_news_index') }}"
|
||||
class="group flex gap-x-3 rounded-md p-2 text-sm/6 font-semibold {% if path starts with '/admin/news' %} bg-gray-50 text-amber-600 {% else %} text-gray-700 hover:text-amber-600 hover:bg-gray-50 {% endif %}"
|
||||
>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewbox="0 0 24 24"
|
||||
stroke-width="1.5"
|
||||
stroke="currentColor"
|
||||
class="size-6 shrink-0 {% if path starts with '/admin/news' %} text-amber-600 {% else %} text-gray-400 group-hover:text-amber-600{% endif %}"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
d="M12 7.5h1.5m-1.5 3h1.5m-7.5 3h7.5m-7.5 3h7.5m3-9h3.375c.621 0 1.125.504 1.125 1.125V18a2.25 2.25 0 0 1-2.25 2.25M16.5 7.5V18a2.25 2.25 0 0 0 2.25 2.25M16.5 7.5V4.875c0-.621-.504-1.125-1.125-1.125H4.125C3.504 3.75 3 4.254 3 4.875V18a2.25 2.25 0 0 0 2.25 2.25h13.5M6 7.5h3v3H6v-3Z"
|
||||
/>
|
||||
</svg>Actualité
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
href="{{ path('admin_image_index') }}"
|
||||
class="group flex gap-x-3 rounded-md p-2 text-sm/6 font-semibold {% if path starts with '/admin/image' %} bg-gray-50 text-amber-600 {% else %} text-gray-700 hover:text-amber-600 hover:bg-gray-50 {% endif %}"
|
||||
>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewbox="0 0 24 24"
|
||||
stroke-width="1.5"
|
||||
stroke="currentColor"
|
||||
class="size-6 shrink-0 {% if path starts with '/admin/image' %} text-amber-600 {% else %} text-gray-400 group-hover:text-amber-600{% endif %}"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
d="m2.25 15.75 5.159-5.159a2.25 2.25 0 0 1 3.182 0l5.159 5.159m-1.5-1.5 1.409-1.409a2.25 2.25 0 0 1 3.182 0l2.909 2.909m-18 3.75h16.5a1.5 1.5 0 0 0 1.5-1.5V6a1.5 1.5 0 0 0-1.5-1.5H3.75A1.5 1.5 0 0 0 2.25 6v12a1.5 1.5 0 0 0 1.5 1.5Zm10.5-11.25h.008v.008h-.008V8.25Zm.375 0a.375.375 0 1 1-.75 0 .375.375 0 0 1 .75 0Z"
|
||||
/>
|
||||
</svg>Image
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<div class="text-xs/6 font-semibold text-gray-400">
|
||||
Liens utiles
|
||||
</div>
|
||||
<ul role="list" class="-mx-2 mt-2 space-y-1">
|
||||
<li>
|
||||
<a
|
||||
target="_blank"
|
||||
href="{{ path('home') }}"
|
||||
class="group flex gap-x-3 rounded-md p-2 text-sm/6 font-semibold text-gray-700 hover:bg-gray-50 hover:text-amber-600"
|
||||
>
|
||||
<span
|
||||
class="flex size-6 shrink-0 items-center justify-center rounded-lg border border-gray-200 bg-white text-[0.625rem] font-medium text-gray-400 group-hover:border-amber-600 group-hover:text-amber-600"
|
||||
>
|
||||
A
|
||||
</span>
|
||||
<span class="truncate">Accès au site</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
target="_blank"
|
||||
href="/logout"
|
||||
class="group flex gap-x-3 rounded-md p-2 text-sm/6 font-semibold text-gray-700 hover:bg-gray-50 hover:text-amber-600"
|
||||
>
|
||||
<span
|
||||
class="flex size-6 shrink-0 items-center justify-center rounded-lg border border-gray-200 bg-white text-[0.625rem] font-medium text-gray-400 group-hover:border-amber-600 group-hover:text-amber-600"
|
||||
>
|
||||
D
|
||||
</span>
|
||||
<span class="truncate">Déconnexion</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
{% if 'ROLE_DEVELOPER' in app.user.roles %}
|
||||
<li>
|
||||
<div class="text-xs/6 font-semibold text-gray-400">
|
||||
Développeur
|
||||
</div>
|
||||
<ul role="list" class="-mx-2 mt-2 space-y-1">
|
||||
<li>
|
||||
<a
|
||||
href="{{ path('admin_feature_index') }}"
|
||||
class="group flex gap-x-3 rounded-md p-2 text-sm/6 font-semibold hover:bg-gray-50 hover:text-amber-600{% if path starts with '/admin/feature' %} bg-gray-50 text-amber-600 {% else %} text-gray-700 hover:bg-gray-50 hover:text-amber-600{% endif %}"
|
||||
>
|
||||
<span
|
||||
class="flex size-6 shrink-0 items-center justify-center rounded-lg border border-gray-200 bg-white text-[0.625rem] font-medium {% if path starts with '/admin/feature' %} border-amber-600 text-amber-600 {% else %} text-gray-400 group-hover:border-amber-600 group-hover:text-amber-600{% endif %}"
|
||||
>
|
||||
F
|
||||
</span>
|
||||
<span class="truncate">Fonctionnalité</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
{% endif %}
|
||||
<li class="-mx-6 mt-auto">
|
||||
<a
|
||||
href="#"
|
||||
class="flex items-center gap-x-4 px-6 py-3 text-sm/6 font-semibold text-gray-900 hover:bg-gray-50"
|
||||
>
|
||||
<img
|
||||
src="/images/logo.jpg"
|
||||
alt=""
|
||||
class="size-8 rounded-full bg-gray-50 outline -outline-offset-1 outline-black/5"
|
||||
/>
|
||||
<span class="sr-only">Votre profile</span>
|
||||
<span aria-hidden="true">Marie-Pierre</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
class="sticky top-0 z-40 flex items-center gap-x-6 bg-white px-4 py-4 shadow-xs sm:px-6 lg:hidden"
|
||||
>
|
||||
<button
|
||||
type="button"
|
||||
command="show-modal"
|
||||
commandfor="sidebar"
|
||||
class="relative -m-2.5 p-2.5 text-gray-700 lg:hidden"
|
||||
>
|
||||
<span class="sr-only">Ouvrir barre de navigation latérale</span>
|
||||
<svg
|
||||
viewbox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="1.5"
|
||||
data-slot="icon"
|
||||
aria-hidden="true"
|
||||
class="size-6"
|
||||
>
|
||||
<path
|
||||
d="M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
/>
|
||||
</svg>
|
||||
</button>
|
||||
<div class="relative flex-1 text-sm/6 font-semibold text-gray-900">
|
||||
{{ title }}
|
||||
</div>
|
||||
<a href="#" class="relative">
|
||||
<span class="sr-only">Votre profile</span>
|
||||
<img
|
||||
src="/images/logo.jpg"
|
||||
alt=""
|
||||
class="size-8 rounded-full bg-gray-50 outline -outline-offset-1 outline-black/5"
|
||||
/>
|
||||
</a>
|
||||
</div>
|
||||
32
templates/base.html.twig
Normal file
32
templates/base.html.twig
Normal file
@@ -0,0 +1,32 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="h-full">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
|
||||
{% block metadata %}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
<link
|
||||
rel="icon"
|
||||
href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 128 128%22><text y=%221.2em%22 font-size=%2296%22>⚫️</text><text y=%221.3em%22 x=%220.2em%22 font-size=%2276%22 fill=%22%23fff%22>sf</text></svg>"
|
||||
/>
|
||||
{% block stylesheets %}
|
||||
{{ encore_entry_link_tags('app') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block javascripts %}
|
||||
{{ encore_entry_script_tags('app') }}
|
||||
<script
|
||||
src="https://cdn.ckeditor.com/ckeditor5/47.3.0/ckeditor5.umd.js"
|
||||
></script>
|
||||
{% endblock %}
|
||||
</head>
|
||||
<body>
|
||||
{{ render(controller('App\\Controller\\BaseController::header')) }}
|
||||
{% block body %}
|
||||
|
||||
{% endblock %}
|
||||
{{ render(controller('App\\Controller\\BaseController::footer')) }}
|
||||
</body>
|
||||
</html>
|
||||
56
templates/base/footer.html.twig
Normal file
56
templates/base/footer.html.twig
Normal file
@@ -0,0 +1,56 @@
|
||||
<footer class="bg-amber-100">
|
||||
<div class="mx-auto max-w-7xl overflow-hidden px-6 py-20 sm:py-24 lg:px-8">
|
||||
<nav
|
||||
aria-label="Footer"
|
||||
class="-mb-6 flex flex-wrap justify-center gap-x-12 gap-y-3 text-sm/6"
|
||||
>
|
||||
<a
|
||||
href="{{ path('legalmentions') }}"
|
||||
class="text-gray-600 hover:text-gray-900"
|
||||
>
|
||||
Mentions légales
|
||||
</a>
|
||||
<a
|
||||
href="{{ path('confidentialitypolicy') }}"
|
||||
class="text-gray-600 hover:text-gray-900"
|
||||
>
|
||||
Politique de confidentialité
|
||||
</a>
|
||||
</nav>
|
||||
<div class="mt-16 flex justify-center gap-x-10">
|
||||
<a href="#" class="text-gray-600 hover:text-gray-800">
|
||||
<span class="sr-only">Facebook</span>
|
||||
<svg
|
||||
viewBox="0 0 24 24"
|
||||
fill="currentColor"
|
||||
aria-hidden="true"
|
||||
class="size-6"
|
||||
>
|
||||
<path
|
||||
d="M22 12c0-5.523-4.477-10-10-10S2 6.477 2 12c0 4.991 3.657 9.128 8.438 9.878v-6.987h-2.54V12h2.54V9.797c0-2.506 1.492-3.89 3.777-3.89 1.094 0 2.238.195 2.238.195v2.46h-1.26c-1.243 0-1.63.771-1.63 1.562V12h2.773l-.443 2.89h-2.33v6.988C18.343 21.128 22 16.991 22 12z"
|
||||
clip-rule="evenodd"
|
||||
fill-rule="evenodd"
|
||||
/>
|
||||
</svg>
|
||||
</a>
|
||||
<a href="#" class="text-gray-600 hover:text-gray-800">
|
||||
<span class="sr-only">YouTube</span>
|
||||
<svg
|
||||
viewBox="0 0 24 24"
|
||||
fill="currentColor"
|
||||
aria-hidden="true"
|
||||
class="size-6"
|
||||
>
|
||||
<path
|
||||
d="M19.812 5.418c.861.23 1.538.907 1.768 1.768C21.998 8.746 22 12 22 12s0 3.255-.418 4.814a2.504 2.504 0 0 1-1.768 1.768c-1.56.419-7.814.419-7.814.419s-6.255 0-7.814-.419a2.505 2.505 0 0 1-1.768-1.768C2 15.255 2 12 2 12s0-3.255.417-4.814a2.507 2.507 0 0 1 1.768-1.768C5.744 5 11.998 5 11.998 5s6.255 0 7.814.418ZM15.194 12 10 15V9l5.194 3Z"
|
||||
clip-rule="evenodd"
|
||||
fill-rule="evenodd"
|
||||
/>
|
||||
</svg>
|
||||
</a>
|
||||
</div>
|
||||
<p class="mt-10 text-center text-sm/6 text-gray-600" data-controller="year">
|
||||
© Arts-ticule, Tous droits réservés.
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
155
templates/base/header.html.twig
Normal file
155
templates/base/header.html.twig
Normal file
@@ -0,0 +1,155 @@
|
||||
<header class="bg-amber-100 relative z-50">
|
||||
<nav
|
||||
aria-label="Global"
|
||||
class="mx-auto flex max-w-7xl items-center justify-between p-6 lg:px-8"
|
||||
>
|
||||
<a href="{{ path('home') }}" class="-m-1.5 p-1.5">
|
||||
<span class="sr-only">Arts-ticule</span>
|
||||
<img src="images/logo.jpg" alt="" class="h-8 w-auto" />
|
||||
</a>
|
||||
<div class="flex lg:hidden">
|
||||
<button
|
||||
type="button"
|
||||
command="show-modal"
|
||||
commandfor="mobile-menu"
|
||||
class="-m-2.5 inline-flex items-center justify-center rounded-md p-2.5 text-gray-700"
|
||||
>
|
||||
<span class="sr-only">Ouvrir menu</span>
|
||||
<svg
|
||||
viewbox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="1.5"
|
||||
data-slot="icon"
|
||||
aria-hidden="true"
|
||||
class="size-6"
|
||||
>
|
||||
<path
|
||||
d="M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
<div class="hidden lg:flex lg:gap-x-12 items-center">
|
||||
<a
|
||||
href="{{ path('home') }}"
|
||||
class="text-sm/6 font-semibold text-gray-900"
|
||||
>
|
||||
Accueil
|
||||
</a>
|
||||
<a
|
||||
href="{{ path('show') }}"
|
||||
class="text-sm/6 font-semibold text-gray-900"
|
||||
>
|
||||
Spectacles jeune public
|
||||
</a>
|
||||
<a
|
||||
href="{{ path('project') }}"
|
||||
class="text-sm/6 font-semibold text-gray-900"
|
||||
>
|
||||
Projets artistiques
|
||||
</a>
|
||||
<a
|
||||
href="{{ path('manualproject') }}"
|
||||
class="text-sm/6 font-semibold text-gray-900"
|
||||
>
|
||||
Projets manuels et créatifs
|
||||
</a>
|
||||
<a
|
||||
href="{{ path('about') }}"
|
||||
class="text-sm/6 font-semibold text-gray-900"
|
||||
>
|
||||
Me connaître
|
||||
</a>
|
||||
<a
|
||||
href="tel:+33672701956"
|
||||
class="text-sm/6 font-semibold text-gray-900 bg-amber-300 rounded-2xl px-4 py-2 hover:bg-amber-400 transition-colors"
|
||||
>
|
||||
Me contacter
|
||||
</a>
|
||||
</div>
|
||||
</nav>
|
||||
<el-dialog>
|
||||
<dialog id="mobile-menu" class="backdrop:bg-transparent lg:hidden">
|
||||
<div tabindex="0" class="fixed inset-0 focus:outline-none">
|
||||
<el-dialog-panel
|
||||
class="fixed inset-y-0 right-0 z-50 w-full overflow-y-auto bg-white p-6 sm:max-w-sm sm:ring-1 sm:ring-gray-900/10"
|
||||
>
|
||||
<div class="flex items-center justify-between">
|
||||
<a href="{{ path('home') }}" class="-m-1.5 p-1.5">
|
||||
<span class="sr-only">Arts-ticule</span>
|
||||
<img src="/images/logo.jpg" alt="" class="h-8 w-auto" />
|
||||
</a>
|
||||
<button
|
||||
type="button"
|
||||
command="close"
|
||||
commandfor="mobile-menu"
|
||||
class="-m-2.5 rounded-md p-2.5 text-gray-700"
|
||||
>
|
||||
<span class="sr-only">Fermer menu</span>
|
||||
<svg
|
||||
viewbox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="1.5"
|
||||
data-slot="icon"
|
||||
aria-hidden="true"
|
||||
class="size-6"
|
||||
>
|
||||
<path
|
||||
d="M6 18 18 6M6 6l12 12"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
<div class="mt-6 flow-root">
|
||||
<div class="-my-6 divide-y divide-gray-500/10">
|
||||
<div class="space-y-2 py-6">
|
||||
<a
|
||||
href="{{ path('home') }}"
|
||||
class="-mx-3 block rounded-lg px-3 py-2 text-base/7 font-semibold text-gray-900 hover:bg-gray-50"
|
||||
>
|
||||
Accueil
|
||||
</a>
|
||||
<a
|
||||
href="{{ path('show') }}"
|
||||
class="-mx-3 block rounded-lg px-3 py-2 text-base/7 font-semibold text-gray-900 hover:bg-gray-50"
|
||||
>
|
||||
Spectacles jeune public
|
||||
</a>
|
||||
<a
|
||||
href="{{ path('project') }}"
|
||||
class="-mx-3 block rounded-lg px-3 py-2 text-base/7 font-semibold text-gray-900 hover:bg-gray-50"
|
||||
>
|
||||
Projets artistiques
|
||||
</a>
|
||||
<a
|
||||
href="{{ path('manualproject') }}"
|
||||
class="-mx-3 block rounded-lg px-3 py-2 text-base/7 font-semibold text-gray-900 hover:bg-gray-50"
|
||||
>
|
||||
Projets manuels et créatifs
|
||||
</a>
|
||||
<a
|
||||
href="{{ path('about') }}"
|
||||
class="-mx-3 block rounded-lg px-3 py-2 text-base/7 font-semibold text-gray-900 hover:bg-gray-50"
|
||||
>
|
||||
Me connaître
|
||||
</a>
|
||||
<a
|
||||
href="tel:+33672701956"
|
||||
class="-mx-3 block rounded-lg px-3 py-2 text-base/7 font-semibold text-gray-900 hover:bg-gray-50 bg-amber-300"
|
||||
>
|
||||
Me contacter
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-dialog-panel>
|
||||
</div>
|
||||
</dialog>
|
||||
</el-dialog>
|
||||
</header>
|
||||
45
templates/base_admin.html.twig
Normal file
45
templates/base_admin.html.twig
Normal file
@@ -0,0 +1,45 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="h-full">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<title>
|
||||
{% block title %}
|
||||
Administration de votre site web
|
||||
{% endblock %}
|
||||
</title>
|
||||
<link
|
||||
rel="icon"
|
||||
href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 128 128%22><text y=%221.2em%22 font-size=%2296%22>⚫️</text><text y=%221.3em%22 x=%220.2em%22 font-size=%2276%22 fill=%22%23fff%22>sf</text></svg>"
|
||||
/>
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="https://cdn.ckeditor.com/ckeditor5/47.3.0/ckeditor5.css"
|
||||
/>
|
||||
{% block stylesheets %}
|
||||
{{ encore_entry_link_tags('app') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block javascripts %}
|
||||
{{ encore_entry_script_tags('app') }}
|
||||
<script
|
||||
src="https://cdn.ckeditor.com/ckeditor5/47.3.0/ckeditor5.umd.js"
|
||||
></script>
|
||||
{% endblock %}
|
||||
<link rel="stylesheet" href="https://rsms.me/inter/inter.css" />
|
||||
</head>
|
||||
<body class="h-full bg-white">
|
||||
{{
|
||||
render(
|
||||
controller(
|
||||
'App\\Controller\\BaseAdminController::sidebar',
|
||||
{
|
||||
path: app.request.pathinfo
|
||||
}
|
||||
)
|
||||
)
|
||||
}}
|
||||
{% block body %}
|
||||
|
||||
{% endblock %}
|
||||
</body>
|
||||
</html>
|
||||
44
templates/component/add-images-modal.html.twig
Normal file
44
templates/component/add-images-modal.html.twig
Normal file
@@ -0,0 +1,44 @@
|
||||
<el-dialog>
|
||||
<dialog id="dialog" data-action="show->news--image-selector#onDialogOpen" aria-labelledby="dialog-title" class="fixed inset-0 size-auto max-h-none max-w-none overflow-y-auto bg-transparent backdrop:bg-transparent">
|
||||
<el-dialog-backdrop class="fixed inset-0 bg-gray-500/75 transition-opacity data-closed:opacity-0 data-enter:duration-300 data-enter:ease-out data-leave:duration-200 data-leave:ease-in dark:bg-gray-900/50"></el-dialog-backdrop>
|
||||
|
||||
<div tabindex="0" class="flex min-h-full items-end justify-center p-4 text-center focus:outline-none sm:items-center sm:p-0">
|
||||
<el-dialog-panel class="relative transform overflow-hidden rounded-lg bg-white px-4 pt-5 pb-4 text-left shadow-xl transition-all data-closed:translate-y-4 data-closed:opacity-0 data-enter:duration-300 data-enter:ease-out data-leave:duration-200 data-leave:ease-in sm:my-8 sm:w-full sm:max-w-3xl sm:p-6 data-closed:sm:translate-y-0 data-closed:sm:scale-95 dark:bg-gray-800 dark:outline dark:-outline-offset-1 dark:outline-white/10">
|
||||
<div>
|
||||
<div class="mx-auto flex size-12 items-center justify-center rounded-full bg-green-100 dark:bg-green-500/10">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-6 text-green-600 dark:text-green-400">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" d="M12 4.5v15m7.5-7.5h-15"/>
|
||||
</svg>
|
||||
</div>
|
||||
<div class="mt-3 text-center sm:mt-5">
|
||||
<h3 id="dialog-title" class="text-base font-semibold text-gray-900 dark:text-white">Ajouter des images</h3>
|
||||
<div class="mt-2">
|
||||
<p class="text-sm text-gray-500 dark:text-gray-400">Ajouter des images
|
||||
</p>
|
||||
</div>
|
||||
<div class="grid grid-cols-4 gap-4 mt-4 max-h-96 overflow-y-auto p-2" data-news--image-selector-target="list">
|
||||
{% for image in images %}
|
||||
<label class="cursor-pointer block relative rounded-md overflow-hidden transition transform" data-action="click->news--image-selector#cardClick" data-news--image-selector-target="card" data-id="{{ image.id }}" data-url="{{ image.url }}">
|
||||
<input type="checkbox" class="hidden" value="{{ image.id }}" data-action="change->news--image-selector#toggleCheckbox" data-news--image-selector-target="checkbox">
|
||||
<img src="{{ image.url }}" alt="" class="w-full h-24 object-cover">
|
||||
<div class="absolute inset-0 bg-black/20 hidden" data-news--image-selector-target="overlay"></div>
|
||||
<span class="absolute top-2 right-2 hidden text-green-400" data-news--image-selector-target="checkIcon">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="size-5" viewbox="0 0 20 20" fill="currentColor">
|
||||
<path fill-rule="evenodd" d="M16.707 5.293a1 1 0 00-1.414-1.414L7 12.172 4.707 9.879a1 1 0 00-1.414 1.414l3 3a1 1 0 001.414 0l9-9z" clip-rule="evenodd"/>
|
||||
</svg>
|
||||
</span>
|
||||
</label>
|
||||
{% else %}
|
||||
<p class="col-span-4 text-center text-gray-500">Aucune image disponible</p>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="mt-5 sm:mt-6 sm:grid sm:grid-flow-row-dense sm:grid-cols-2 sm:gap-3">
|
||||
<button data-action="news--image-selector#validate" class="inline-flex w-full justify-center rounded-md bg-amber-600 px-3 py-2 text-sm font-semibold text-white shadow-xs hover:bg-amber-500 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-amber-600 sm:col-start-2 dark:bg-amber-500 dark:shadow-none dark:hover:bg-amber-400 dark:focus-visible:outline-amber-500">Valider</button>
|
||||
<button type="button" command="close" commandfor="dialog" class="mt-3 inline-flex w-full justify-center rounded-md bg-white px-3 py-2 text-sm font-semibold text-gray-900 shadow-xs inset-ring-1 inset-ring-gray-300 hover:bg-gray-50 sm:col-start-1 sm:mt-0 dark:bg-white/10 dark:text-white dark:shadow-none dark:inset-ring-white/5 dark:hover:bg-white/20">Retour</button>
|
||||
</div>
|
||||
</el-dialog-panel>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</dialog>
|
||||
</el-dialog>
|
||||
22
templates/component/confirm-delete-image.html.twig
Normal file
22
templates/component/confirm-delete-image.html.twig
Normal file
@@ -0,0 +1,22 @@
|
||||
<div data-image--delete-img-modal-target="dialog" class="hidden fixed inset-0 z-50 items-center justify-center bg-black/50 p-4">
|
||||
|
||||
<div class="bg-white rounded-lg p-6 w-full max-w-md">
|
||||
<h3 class="text-lg font-semibold text-gray-900 mb-4">Supprimer l'image</h3>
|
||||
<p class="text-sm text-gray-500 mb-6">
|
||||
Êtes-vous sûr de vouloir supprimer cette image ? Cette action est irréversible.
|
||||
</p>
|
||||
|
||||
<div class="flex justify-end space-x-2">
|
||||
<button type="button" data-action="image--delete-img-modal#close" class="bg-gray-200 text-gray-900 px-3 py-2 rounded hover:bg-gray-300">
|
||||
Annuler
|
||||
</button>
|
||||
|
||||
<form method="post" data-image--delete-img-modal-target="form">
|
||||
<input type="hidden" name="_token" data-image--delete-img-modal-target="token">
|
||||
<button type="submit" class="bg-red-600 text-white px-3 py-2 rounded hover:bg-red-500">
|
||||
Supprimer
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
22
templates/component/confirm-delete-news.html.twig
Normal file
22
templates/component/confirm-delete-news.html.twig
Normal file
@@ -0,0 +1,22 @@
|
||||
<div data-news--delete-target="dialog" class="hidden fixed inset-0 z-50 items-center justify-center bg-black/50 p-4">
|
||||
<div class="bg-white rounded-lg p-6 w-full max-w-md">
|
||||
<h3 class="text-lg font-semibold text-gray-900 mb-4">Supprimer l'actualité</h3>
|
||||
|
||||
<p class="text-sm text-gray-500 mb-6">
|
||||
Êtes-vous sûr de vouloir supprimer cette actualité ? Cette action est irréversible.
|
||||
</p>
|
||||
|
||||
<div class="flex justify-end space-x-2">
|
||||
<button type="button" data-action="news--delete#close" class="bg-gray-200 text-gray-900 px-3 py-2 rounded hover:bg-gray-300">
|
||||
Annuler
|
||||
</button>
|
||||
|
||||
<form method="post" data-news--delete-target="form">
|
||||
<input type="hidden" name="_token" data-news--delete-target="token">
|
||||
<button type="submit" class="bg-red-600 text-white px-3 py-2 rounded hover:bg-red-500">
|
||||
Supprimer
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
44
templates/component/edit-images-modal.html.twig
Normal file
44
templates/component/edit-images-modal.html.twig
Normal file
@@ -0,0 +1,44 @@
|
||||
<el-dialog>
|
||||
<dialog id="edit-news-image-dialog" data-action="show->news--edit-image-selector#onDialogOpen" aria-labelledby="dialog-title" class="fixed inset-0 size-auto max-h-none max-w-none overflow-y-auto bg-transparent backdrop:bg-transparent">
|
||||
<el-dialog-backdrop class="fixed inset-0 bg-gray-500/75 transition-opacity data-closed:opacity-0 data-enter:duration-300 data-enter:ease-out data-leave:duration-200 data-leave:ease-in dark:bg-gray-900/50"></el-dialog-backdrop>
|
||||
|
||||
<div tabindex="0" class="flex min-h-full items-end justify-center p-4 text-center focus:outline-none sm:items-center sm:p-0">
|
||||
<el-dialog-panel class="relative transform overflow-hidden rounded-lg bg-white px-4 pt-5 pb-4 text-left shadow-xl transition-all data-closed:translate-y-4 data-closed:opacity-0 data-enter:duration-300 data-enter:ease-out data-leave:duration-200 data-leave:ease-in sm:my-8 sm:w-full sm:max-w-3xl sm:p-6 data-closed:sm:translate-y-0 data-closed:sm:scale-95 dark:bg-gray-800 dark:outline dark:-outline-offset-1 dark:outline-white/10">
|
||||
<div>
|
||||
<div class="mx-auto flex size-12 items-center justify-center rounded-full bg-green-100 dark:bg-green-500/10">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-6 text-green-600 dark:text-green-400">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" d="M12 4.5v15m7.5-7.5h-15"/>
|
||||
</svg>
|
||||
</div>
|
||||
<div class="mt-3 text-center sm:mt-5">
|
||||
<h3 id="dialog-title" class="text-base font-semibold text-gray-900 dark:text-white">Ajouter des images</h3>
|
||||
<div class="mt-2">
|
||||
<p class="text-sm text-gray-500 dark:text-gray-400">Ajouter des images
|
||||
</p>
|
||||
</div>
|
||||
<div class="grid grid-cols-4 gap-4 mt-4 max-h-96 overflow-y-auto p-2" data-news--edit-image-selector-target="list">
|
||||
{% for image in images %}
|
||||
<label class="cursor-pointer block relative rounded-md overflow-hidden transition transform" data-action="click->news--edit-image-selector#cardClick" data-news--edit-image-selector-target="card" data-id="{{ image.id }}" data-url="{{ image.url }}">
|
||||
<input type="checkbox" class="hidden" value="{{ image.id }}" data-action="change->news--edit-image-selector#toggleCheckbox" data-news--edit-image-selector-target="checkbox">
|
||||
<img src="{{ image.url }}" alt="" class="w-full h-24 object-cover">
|
||||
<div class="absolute inset-0 bg-black/20 hidden" data-news--edit-image-selector-target="overlay"></div>
|
||||
<span class="absolute top-2 right-2 hidden text-green-400" data-news--edit-image-selector-target="checkIcon">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="size-5" viewbox="0 0 20 20" fill="currentColor">
|
||||
<path fill-rule="evenodd" d="M16.707 5.293a1 1 0 00-1.414-1.414L7 12.172 4.707 9.879a1 1 0 00-1.414 1.414l3 3a1 1 0 001.414 0l9-9z" clip-rule="evenodd"/>
|
||||
</svg>
|
||||
</span>
|
||||
</label>
|
||||
{% else %}
|
||||
<p class="col-span-4 text-center text-gray-500">Aucune image disponible</p>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="mt-5 sm:mt-6 sm:grid sm:grid-flow-row-dense sm:grid-cols-2 sm:gap-3">
|
||||
<button data-action="news--edit-image-selector#validate" class="inline-flex w-full justify-center rounded-md bg-amber-600 px-3 py-2 text-sm font-semibold text-white shadow-xs hover:bg-amber-500 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-amber-600 sm:col-start-2 dark:bg-amber-500 dark:shadow-none dark:hover:bg-amber-400 dark:focus-visible:outline-amber-500">Valider</button>
|
||||
<button type="button" command="close" commandfor="edit-news-image-dialog" class="mt-3 inline-flex w-full justify-center rounded-md bg-white px-3 py-2 text-sm font-semibold text-gray-900 shadow-xs inset-ring-1 inset-ring-gray-300 hover:bg-gray-50 sm:col-start-1 sm:mt-0 dark:bg-white/10 dark:text-white dark:shadow-none dark:inset-ring-white/5 dark:hover:bg-white/20">Retour</button>
|
||||
</div>
|
||||
</el-dialog-panel>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</dialog>
|
||||
</el-dialog>
|
||||
5
templates/component/loader-progress-bar.html.twig
Normal file
5
templates/component/loader-progress-bar.html.twig
Normal file
@@ -0,0 +1,5 @@
|
||||
<div data-component--loader-progress-bar-target="loaderWrapper" class="relative mb-4 hidden">
|
||||
<div class="w-full bg-gray-200 rounded-full h-2">
|
||||
<div data-component--loader-progress-bar-target="loaderProgressBar" class="bg-amber-500 h-2 rounded-full mt-60" style="width:0;"></div>
|
||||
</div>
|
||||
</div>
|
||||
38
templates/component/loader.html.twig
Normal file
38
templates/component/loader.html.twig
Normal file
@@ -0,0 +1,38 @@
|
||||
<div id="loader" data-image--drop-zone-target="loader" class="loader" style="display:none;"></div>
|
||||
|
||||
<style>
|
||||
.loader {
|
||||
display: block;
|
||||
--height-of-loader: 4px;
|
||||
--loader-color: #f59e0b;
|
||||
width: 130px;
|
||||
height: var(--height-of-loader);
|
||||
border-radius: 30px;
|
||||
background-color: rgba(0, 0, 0, 0.2);
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.loader::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
background: var(--loader-color);
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 0;
|
||||
height: 100%;
|
||||
border-radius: 30px;
|
||||
animation: moving 1s ease-in-out infinite;
|
||||
}
|
||||
|
||||
@keyframes moving {
|
||||
50% {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
100% {
|
||||
width: 0;
|
||||
right: 0;
|
||||
left: unset;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
181
templates/feature/index.html.twig
Normal file
181
templates/feature/index.html.twig
Normal file
@@ -0,0 +1,181 @@
|
||||
{% extends 'base_admin.html.twig' %}
|
||||
|
||||
{% block body %}
|
||||
<main class="lg:pl-72" data-controller="feature--toggle-feature-status">
|
||||
<div class="xl:pr-96">
|
||||
<div class="px-4 py-10 sm:px-6 lg:px-8 lg:py-6">
|
||||
<!-- Main content -->
|
||||
<div class="px-4 sm:px-6 lg:px-8">
|
||||
<div class="sm:flex sm:items-center">
|
||||
<div class="sm:flex-auto">
|
||||
<h1 class="text-base font-semibold text-gray-900">
|
||||
Fonctionnalités
|
||||
</h1>
|
||||
<p class="mt-2 text-sm text-gray-700">
|
||||
Liste de toutes les fonctionnalités disponibles dans
|
||||
l'application.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-8 flow-root">
|
||||
<div class="-mx-4 -my-2 overflow-x-auto sm:-mx-6 lg:-mx-8">
|
||||
<div
|
||||
class="inline-block min-w-full py-2 align-middle sm:px-6 lg:px-8"
|
||||
>
|
||||
<div class="group/table relative">
|
||||
<div
|
||||
class="absolute top-0 left-14 z-10 hidden h-12 items-center space-x-3 bg-white group-has-checked/table:flex sm:left-12"
|
||||
>
|
||||
<button
|
||||
type="button"
|
||||
class="inline-flex items-center rounded-sm bg-white px-2 py-1 text-sm font-semibold text-gray-900 shadow-xs inset-ring inset-ring-gray-300 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-30 disabled:hover:bg-white"
|
||||
>
|
||||
Activer
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
class="inline-flex items-center rounded-sm bg-white px-2 py-1 text-sm font-semibold text-gray-900 shadow-xs inset-ring inset-ring-gray-300 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-30 disabled:hover:bg-white"
|
||||
>
|
||||
Désactiver
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<table
|
||||
id="users-table"
|
||||
class="relative min-w-full table-fixed divide-y divide-gray-300"
|
||||
>
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col" class="relative px-7 sm:w-12 sm:px-6">
|
||||
<div
|
||||
class="group absolute top-1/2 left-4 -mt-2 grid size-4 grid-cols-1"
|
||||
>
|
||||
<input
|
||||
type="checkbox"
|
||||
class="col-start-1 row-start-1 appearance-none rounded-sm border border-gray-300 bg-white checked:border-amber-600 checked:bg-amber-600 indeterminate:border-amber-600 indeterminate:bg-amber-600 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-amber-600 disabled:border-gray-300 disabled:bg-gray-100 disabled:checked:bg-gray-100 forced-colors:appearance-auto"
|
||||
/>
|
||||
<svg
|
||||
viewBox="0 0 14 14"
|
||||
fill="none"
|
||||
class="pointer-events-none col-start-1 row-start-1 size-3.5 self-center justify-self-center stroke-white group-has-disabled:stroke-gray-950/25"
|
||||
>
|
||||
<path
|
||||
d="M3 8L6 11L11 3.5"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
class="opacity-0 group-has-checked:opacity-100"
|
||||
/>
|
||||
<path
|
||||
d="M3 7H11"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
class="opacity-0 group-has-indeterminate:opacity-100"
|
||||
/>
|
||||
</svg>
|
||||
</div>
|
||||
</th>
|
||||
<th
|
||||
scope="col"
|
||||
class="min-w-48 py-3.5 pr-3 text-left text-sm font-semibold text-gray-900"
|
||||
>
|
||||
Nom
|
||||
</th>
|
||||
<th
|
||||
scope="col"
|
||||
class="px-3 py-3.5 text-left text-sm font-semibold text-gray-900"
|
||||
>
|
||||
Statut
|
||||
</th>
|
||||
<th scope="col" class="py-3.5 pr-4 pl-3 sm:pr-3">
|
||||
<span class="sr-only">Edit</span>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="divide-y divide-gray-200 bg-white">
|
||||
{% for feature in features %}
|
||||
<tr class="group has-checked:bg-gray-50">
|
||||
<td class="relative px-7 sm:w-12 sm:px-6">
|
||||
<div
|
||||
class="absolute inset-y-0 left-0 hidden w-0.5 bg-amber-600 group-has-checked:block"
|
||||
></div>
|
||||
|
||||
<div
|
||||
class="group absolute top-1/2 left-4 -mt-2 grid size-4 grid-cols-1"
|
||||
>
|
||||
<input
|
||||
type="checkbox"
|
||||
class="col-start-1 row-start-1 appearance-none rounded-sm border border-gray-300 bg-white checked:border-amber-600 checked:bg-amber-600 indeterminate:border-amber-600 indeterminate:bg-amber-600 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-amber-600 disabled:border-gray-300 disabled:bg-gray-100 disabled:checked:bg-gray-100 forced-colors:appearance-auto"
|
||||
/>
|
||||
<svg
|
||||
viewBox="0 0 14 14"
|
||||
fill="none"
|
||||
class="pointer-events-none col-start-1 row-start-1 size-3.5 self-center justify-self-center stroke-white group-has-disabled:stroke-gray-950/25"
|
||||
>
|
||||
<path
|
||||
d="M3 8L6 11L11 3.5"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
class="opacity-0 group-has-checked:opacity-100"
|
||||
/>
|
||||
<path
|
||||
d="M3 7H11"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
class="opacity-0 group-has-indeterminate:opacity-100"
|
||||
/>
|
||||
</svg>
|
||||
</div>
|
||||
</td>
|
||||
<td
|
||||
class="py-4 pr-3 text-sm font-medium whitespace-nowrap text-gray-900 group-has-checked:text-amber-600"
|
||||
>
|
||||
{{ feature.name }}
|
||||
</td>
|
||||
<td
|
||||
class="px-3 py-4 text-sm whitespace-nowrap text-gray-500 {{
|
||||
feature.isActive
|
||||
? 'text-green-500'
|
||||
: 'text-red-500'
|
||||
}}
|
||||
"
|
||||
>
|
||||
{{ feature.isActive ? 'Actif' : 'Inactif' }}
|
||||
</td>
|
||||
<td
|
||||
class="py-4 pr-4 pl-3 text-right text-sm font-medium whitespace-nowrap sm:pr-3"
|
||||
>
|
||||
<a
|
||||
href="#"
|
||||
class="text-amber-600 hover:text-amber-900"
|
||||
>
|
||||
Modifier<span class="sr-only">, {{ feature.name }}</span>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
<aside
|
||||
class="fixed inset-y-0 right-0 hidden w-96 overflow-y-auto border-l border-gray-200 px-4 py-6 sm:px-6 lg:px-8 xl:block dark:border-white/10"
|
||||
>
|
||||
<!-- Secondary column (hidden on smaller screens) -->
|
||||
<a
|
||||
href="{{ path('admin_news_add') }}"
|
||||
class="rounded-md bg-amber-600 px-4 py-2.5 text-sm font-semibold text-white shadow-xs hover:bg-amber-500 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-amber-600 dark:bg-amber-500 dark:shadow-none dark:hover:bg-amber-400 dark:focus-visible:outline-amber-500"
|
||||
>
|
||||
Ajouter une fonctionnalité
|
||||
</a>
|
||||
</aside>
|
||||
{% endblock %}
|
||||
5
templates/form/custom_tailwind_theme.html.twig
Normal file
5
templates/form/custom_tailwind_theme.html.twig
Normal file
@@ -0,0 +1,5 @@
|
||||
{% use 'tailwind_2_layout.html.twig' %}
|
||||
|
||||
{%- block form_row -%}
|
||||
{%- set row_class = row_class|default('mb-4 flex flex-col space-y-1') -%}
|
||||
{{- parent() -}}{%- endblock form_row -%}{%- block widget_attributes -%}{%- set widget_class = widget_class|default('block w-full rounded-lg border-gray-300 focus:border-amber-500 focus:ring-amber-500') -%}{%- set widget_disabled_class = widget_disabled_class|default('opacity-50 cursor-not-allowed') -%}{%- set widget_errors_class = widget_errors_class|default('border-red-500 ring-red-500') -%}{{- parent() -}}{%- endblock widget_attributes -%}{%- block form_label -%}{%- set label_class = label_class|default('font-medium text-gray-700') -%}{{- parent() -}}{%- endblock form_label -%}{%- block form_help -%}{%- set help_class = help_class|default('text-sm text-gray-500') -%}{{- parent() -}}{%- endblock form_help -%}{%- block form_errors -%}{%- set error_item_class = error_item_class|default('text-sm text-red-600') -%}{{- parent() -}}{%- endblock form_errors -%}
|
||||
41
templates/image/add.html.twig
Normal file
41
templates/image/add.html.twig
Normal file
@@ -0,0 +1,41 @@
|
||||
{% extends 'base_admin.html.twig' %}
|
||||
{% block body %}
|
||||
<main class="lg:pl-72">
|
||||
<div class="xl:pr-96">
|
||||
<div
|
||||
class="px-4 py-10 sm:px-6 lg:px-8 lg:py-6 ">
|
||||
<!-- Main area -->
|
||||
<div class="col-span-full mt-60">
|
||||
<div id="drop-zone" data-controller="image--drop-zone" data-image--drop-zone-target="dropZone" class="flex justify-center rounded-lg border border-dashed border-gray-900/25 px-6 py-10">
|
||||
<div class="text-center">
|
||||
<svg viewbox="0 0 24 24" fill="currentColor" data-slot="icon" aria-hidden="true" class="mx-auto size-12 text-gray-300">
|
||||
<path d="M1.5 6a2.25 2.25 0 0 1 2.25-2.25h16.5A2.25 2.25 0 0 1 22.5 6v12a2.25 2.25 0 0 1-2.25 2.25H3.75A2.25 2.25 0 0 1 1.5 18V6ZM3 16.06V18c0 .414.336.75.75.75h16.5A.75.75 0 0 0 21 18v-1.94l-2.69-2.689a1.5 1.5 0 0 0-2.12 0l-.88.879.97.97a.75.75 0 1 1-1.06 1.06l-5.16-5.159a1.5 1.5 0 0 0-2.12 0L3 16.061Zm10.125-7.81a1.125 1.125 0 1 1 2.25 0 1.125 1.125 0 0 1-2.25 0Z" clip-rule="evenodd" fill-rule="evenodd"/>
|
||||
</svg>
|
||||
<div class="mt-4 flex justify-center text-sm/6 text-gray-600">
|
||||
<label for="file-upload" onclick="event.stopPropagation()" class="relative cursor-pointer rounded-md bg-white font-semibold text-amber-600 focus-within:outline-2 focus-within:outline-offset-2 focus-within:outline-amber-600 hover:text-amber-500">
|
||||
<span>Télécharger des fichiers</span>
|
||||
<input id="file-upload" type="file" name="file-upload[]" class="sr-only" multiple data-image--drop-zone-target="input"/>
|
||||
</label>
|
||||
<p class="pl-1">ou glisser-déposer</p>
|
||||
</div>
|
||||
<div>
|
||||
<p class="text-xs/5 text-gray-600">PNG, JPG, GIF jusqu'à 10 Mo</p>
|
||||
</div>
|
||||
<div data-image--drop-zone-target="preview" class="mt-4 flex flex-wrap gap-2"></div>
|
||||
<div class="mt-4 flex justify-center">
|
||||
{% include "component/loader.html.twig" %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<aside
|
||||
class="fixed inset-y-0 right-0 hidden w-96 overflow-y-auto border-l border-gray-200 px-4 py-6 sm:px-6 lg:px-8 xl:block dark:border-white/10">
|
||||
<!-- Secondary column (hidden on smaller screens) -->
|
||||
<a href="{{ path('admin_image_index') }}" class="rounded-md bg-amber-600 px-4 py-2.5 text-sm font-semibold text-white shadow-xs hover:bg-amber-500 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-amber-600 dark:bg-amber-500 dark:shadow-none dark:hover:bg-amber-400 dark:focus-visible:outline-amber-500">Mes images</a>
|
||||
|
||||
</aside>
|
||||
{% endblock %}
|
||||
166
templates/image/index.html.twig
Normal file
166
templates/image/index.html.twig
Normal file
@@ -0,0 +1,166 @@
|
||||
{% extends 'base_admin.html.twig' %}
|
||||
{% block body %}
|
||||
<div data-controller="image--delete-img-modal">
|
||||
<main class="lg:pl-72">
|
||||
<div class="xl:pr-96">
|
||||
<div
|
||||
class="px-4 py-10 sm:px-6 lg:px-8 lg:py-6"
|
||||
data-controller="component--loader-progress-bar"
|
||||
>
|
||||
<!-- Main area -->
|
||||
{% for message in app.flashes('error') %}
|
||||
<div class="mb-4 rounded-md bg-red-50 p-4">
|
||||
<div class="flex">
|
||||
<div class="shrink-0">
|
||||
<svg
|
||||
class="size-5 text-red-400"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewbox="0 0 24 24"
|
||||
stroke-width="1.5"
|
||||
stroke="currentColor"
|
||||
aria-hidden="true"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
d="M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z"
|
||||
/>
|
||||
</svg>
|
||||
</div>
|
||||
<div class="ml-3">
|
||||
<p class="text-sm font-medium text-red-800">
|
||||
{{ message }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% if images is empty %}
|
||||
<div class="text-center mt-60">
|
||||
<svg
|
||||
viewbox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
aria-hidden="true"
|
||||
class="mx-auto size-12 text-gray-400"
|
||||
>
|
||||
<path
|
||||
d="M9 13h6m-3-3v6m-9 1V7a2 2 0 012-2h6l2 2h6a2 2 0 012 2v8a2 2 0 01-2 2H5a2 2 0 01-2-2z"
|
||||
stroke-width="2"
|
||||
vector-effect="non-scaling-stroke"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
/>
|
||||
</svg>
|
||||
<h3 class="mt-2 text-sm font-semibold text-gray-900">
|
||||
Pas d'image
|
||||
</h3>
|
||||
<p class="mt-1 text-sm text-gray-500">
|
||||
Commencez par ajouter une nouvelle image.
|
||||
</p>
|
||||
<div class="mt-6">
|
||||
<a
|
||||
class="inline-flex items-center rounded-md bg-amber-600 px-3 py-2 text-sm font-semibold text-white shadow-xs hover:bg-amber-500 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-amber-600"
|
||||
href="{{ path('admin_image_add') }}"
|
||||
>
|
||||
Ajouter des images
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
{% else %}
|
||||
{% include 'component/loader-progress-bar.html.twig' %}
|
||||
<div
|
||||
data-component--loader-progress-bar-target="imagesWrapper"
|
||||
style="opacity:0;"
|
||||
>
|
||||
<ul
|
||||
role="list"
|
||||
data-component--loader-progress-bar-target="list"
|
||||
class="grid grid-cols-2 gap-x-4 gap-y-8 sm:grid-cols-3 sm:gap-x-6 lg:grid-cols-4 xl:gap-x-8"
|
||||
>
|
||||
{% for image in images %}
|
||||
<li class="relative">
|
||||
<div
|
||||
class="group relative overflow-hidden rounded-lg bg-gray-100 dark:bg-gray-800"
|
||||
>
|
||||
<img
|
||||
src="{{ image.url }}"
|
||||
alt=""
|
||||
class="pointer-events-none aspect-10/7 rounded-lg object-cover outline -outline-offset-1 outline-black/5 dark:outline-white/10"
|
||||
/>
|
||||
|
||||
<!-- BANDEAU visible au hover -->
|
||||
<div
|
||||
class="absolute top-0 left-0 right-0 bg-black/50 h-10 opacity-0 group-hover:opacity-100 transition-opacity flex items-center justify-end px-2 pointer-events-auto"
|
||||
>
|
||||
<button
|
||||
type="button"
|
||||
data-action="image--delete-img-modal#open"
|
||||
data-url="{{
|
||||
path(
|
||||
'admin_image_delete',
|
||||
{
|
||||
id: image.id
|
||||
}
|
||||
)
|
||||
}}"
|
||||
data-token="{{
|
||||
csrf_token(
|
||||
'delete_image' ~ image.id
|
||||
)
|
||||
}}"
|
||||
class="p-1 rounded hover:bg-white/20 transition text-amber-600"
|
||||
>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="1.5"
|
||||
stroke="currentColor"
|
||||
class="size-5"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
d="m14.74 9-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 0 1-2.244 2.077H8.084a2.25 2.25 0 0 1-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 0 0-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 0 1 3.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 0 0-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 0 0-7.5 0"
|
||||
/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p
|
||||
class="mt-2 block truncate text-sm font-medium text-gray-900 dark:text-white"
|
||||
>
|
||||
{{ image.name }}
|
||||
</p>
|
||||
<p
|
||||
class="block text-sm font-medium text-gray-500 dark:text-gray-400"
|
||||
>
|
||||
{{ (image.size / 1024 / 1024)|number_format(2) }}
|
||||
MB
|
||||
</p>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% include 'component/confirm-delete-image.html.twig' %}
|
||||
</main>
|
||||
|
||||
<aside
|
||||
class="fixed inset-y-0 right-0 hidden w-96 overflow-y-auto border-l border-gray-200 px-4 py-6 sm:px-6 lg:px-8 xl:block dark:border-white/10"
|
||||
>
|
||||
<!-- Secondary column (hidden on smaller screens) -->
|
||||
<a
|
||||
href="{{ path('admin_image_add') }}"
|
||||
class="rounded-md bg-amber-600 px-4 py-2.5 text-sm font-semibold text-white shadow-xs hover:bg-amber-500 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-amber-600 dark:bg-amber-500 dark:shadow-none dark:hover:bg-amber-400 dark:focus-visible:outline-amber-500"
|
||||
>
|
||||
Ajouter des images
|
||||
</a>
|
||||
</aside>
|
||||
</div>
|
||||
{% endblock %}
|
||||
3
templates/news/_form.html.twig
Normal file
3
templates/news/_form.html.twig
Normal file
@@ -0,0 +1,3 @@
|
||||
{{ form_start(form) }}
|
||||
{{ form_widget(form) }}
|
||||
{{ form_end(form) }}
|
||||
90
templates/news/add.html.twig
Normal file
90
templates/news/add.html.twig
Normal file
@@ -0,0 +1,90 @@
|
||||
{% extends 'base_admin.html.twig' %}
|
||||
{% block body %}
|
||||
<main class="lg:pl-72">
|
||||
<div class="xl:pr-96">
|
||||
<div
|
||||
class="px-4 py-10 sm:px-6 lg:px-8 lg:py-6"
|
||||
data-controller="news--image-selector"
|
||||
data-image-selector-target="container"
|
||||
>
|
||||
{% for message in app.flashes('error') %}
|
||||
<div class="mb-4 rounded-md bg-red-50 p-4">
|
||||
<div class="flex">
|
||||
<div class="shrink-0">
|
||||
<svg
|
||||
class="size-5 text-red-400"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewbox="0 0 24 24"
|
||||
stroke-width="1.5"
|
||||
stroke="currentColor"
|
||||
aria-hidden="true"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
d="M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z"
|
||||
/>
|
||||
</svg>
|
||||
</div>
|
||||
<div class="ml-3">
|
||||
<p class="text-sm font-medium text-red-800">
|
||||
{{ message }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
||||
{{ form_start(form) }}
|
||||
{{ form_widget(form) }}
|
||||
|
||||
<div class="mt-4">
|
||||
<button
|
||||
command="show-modal"
|
||||
commandfor="dialog"
|
||||
type="button"
|
||||
class="rounded-md bg-amber-600 px-4 py-2.5 text-sm font-semibold text-white"
|
||||
>
|
||||
Ajouter des images
|
||||
</button>
|
||||
<span
|
||||
data-news--image-selector-target="count"
|
||||
class="text-sm text-gray-700 dark:text-gray-300"
|
||||
>
|
||||
0 sélectionnée(s)
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div
|
||||
id="selected-images-preview"
|
||||
data-news--image-selector-target="preview"
|
||||
class="mt-4 flex gap-3 flex-wrap"
|
||||
></div>
|
||||
|
||||
<div class="mt-4">
|
||||
<button
|
||||
type="submit"
|
||||
class="rounded-md bg-amber-600 px-4 py-2.5 text-sm font-semibold text-white"
|
||||
>
|
||||
Enregistrer l'actualité
|
||||
</button>
|
||||
</div>
|
||||
{{ form_end(form) }}
|
||||
{% include 'component/add-images-modal.html.twig' %}
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<aside
|
||||
class="fixed inset-y-0 right-0 hidden w-96 overflow-y-auto border-l border-gray-200 px-4 py-6 sm:px-6 lg:px-8 xl:block dark:border-white/10"
|
||||
>
|
||||
<!-- Secondary column (hidden on smaller screens) -->
|
||||
<a
|
||||
href="{{ path('admin_news_index') }}"
|
||||
class="rounded-md bg-amber-600 px-4 py-2.5 text-sm font-semibold text-white shadow-xs hover:bg-amber-500 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-amber-600 dark:bg-amber-500 dark:shadow-none dark:hover:bg-amber-400 dark:focus-visible:outline-amber-500"
|
||||
>
|
||||
Retour
|
||||
</a>
|
||||
</aside>
|
||||
{% endblock %}
|
||||
79
templates/news/edit.html.twig
Normal file
79
templates/news/edit.html.twig
Normal file
@@ -0,0 +1,79 @@
|
||||
{% extends 'base_admin.html.twig' %}
|
||||
{% block body %}
|
||||
<main class="lg:pl-72">
|
||||
<div class="xl:pr-96">
|
||||
<div
|
||||
class="px-4 py-10 sm:px-6 lg:px-8 lg:py-6"
|
||||
data-controller="news--edit-image-selector"
|
||||
data-news--edit-image-selector-target="container"
|
||||
>
|
||||
<!-- Main Area -->
|
||||
|
||||
{{ form_start(form) }}
|
||||
{{ form_widget(form) }}
|
||||
|
||||
<div class="mt-4">
|
||||
<button
|
||||
command="show-modal"
|
||||
commandfor="edit-news-image-dialog"
|
||||
type="button"
|
||||
class="rounded-md bg-amber-600 px-4 py-2.5 text-sm font-semibold text-white"
|
||||
>
|
||||
Modifier les images
|
||||
</button>
|
||||
<span
|
||||
data-news--edit-image-selector-target="count"
|
||||
class="text-sm text-gray-700 dark:text-gray-300"
|
||||
>
|
||||
0 sélectionnée(s)
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<!-- Conteneur des inputs cachés gérés par Stimulus -->
|
||||
<div id="hidden-inputs-container">
|
||||
{% for img in selectedImages %}
|
||||
<input type="hidden" name="selectedImages[]" value="{{ img.id }}" />
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
<!-- Zone de preview -->
|
||||
<div
|
||||
id="selected-images-preview"
|
||||
data-news--edit-image-selector-target="preview"
|
||||
class="mt-4 flex gap-3 flex-wrap"
|
||||
>
|
||||
{% for img in selectedImages %}
|
||||
<img
|
||||
src="{{ asset(img.url) }}"
|
||||
data-id="{{ img.id }}"
|
||||
class="w-20 h-20 rounded object-cover cursor-move"
|
||||
/>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
<div class="mt-4">
|
||||
<button
|
||||
type="submit"
|
||||
class="rounded-md bg-amber-600 px-4 py-2.5 text-sm font-semibold text-white"
|
||||
>
|
||||
Enregistrer l'actualité
|
||||
</button>
|
||||
</div>
|
||||
{{ form_end(form) }}
|
||||
{% include 'component/edit-images-modal.html.twig' %}
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<aside
|
||||
class="fixed inset-y-0 right-0 hidden w-96 overflow-y-auto border-l border-gray-200 px-4 py-6 sm:px-6 lg:px-8 xl:block dark:border-white/10"
|
||||
>
|
||||
<!-- Secondary column (hidden on smaller screens) -->
|
||||
<a
|
||||
href="{{ path('admin_news_index') }}"
|
||||
class="rounded-md bg-amber-600 px-4 py-2.5 text-sm font-semibold text-white shadow-xs hover:bg-amber-500 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-amber-600 dark:bg-amber-500 dark:shadow-none dark:hover:bg-amber-400 dark:focus-visible:outline-amber-500"
|
||||
>
|
||||
Retour
|
||||
</a>
|
||||
</aside>
|
||||
{% endblock %}
|
||||
276
templates/news/index.html.twig
Normal file
276
templates/news/index.html.twig
Normal file
@@ -0,0 +1,276 @@
|
||||
{% extends 'base_admin.html.twig' %}
|
||||
{% block body %}
|
||||
<div data-controller="news--delete">
|
||||
<main class="lg:pl-72">
|
||||
<div class="xl:pr-96">
|
||||
<div class="px-4 py-10 sm:px-6 lg:px-8 lg:py-6">
|
||||
<!-- Main area -->
|
||||
<div class="bg-white py-6 sm:py-8">
|
||||
<div class="mx-auto max-w-7xl px-6 lg:px-8">
|
||||
{% if news is empty %}
|
||||
<div class="text-center mt-60">
|
||||
<svg
|
||||
viewbox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
aria-hidden="true"
|
||||
class="mx-auto size-12 text-gray-400"
|
||||
>
|
||||
<path
|
||||
d="M9 13h6m-3-3v6m-9 1V7a2 2 0 012-2h6l2 2h6a2 2 0 012 2v8a2 2 0 01-2 2H5a2 2 0 01-2-2z"
|
||||
stroke-width="2"
|
||||
vector-effect="non-scaling-stroke"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
/>
|
||||
</svg>
|
||||
<h3 class="mt-2 text-sm font-semibold text-gray-900">
|
||||
Pas d'actualité
|
||||
</h3>
|
||||
<p class="mt-1 text-sm text-gray-500">
|
||||
Commencez par ajouter une nouvelle actualité.
|
||||
</p>
|
||||
<div class="mt-6">
|
||||
<a
|
||||
class="inline-flex items-center rounded-md bg-amber-600 px-3 py-2 text-sm font-semibold text-white shadow-xs hover:bg-amber-500 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-amber-600"
|
||||
href="{{ path('admin_news_add') }}"
|
||||
>
|
||||
Ajouter des actualités
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
{% else %}
|
||||
<div
|
||||
class="mx-auto mt-16 grid max-w-2xl auto-rows-fr grid-cols-1 gap-8 sm:mt-20 lg:mx-0 lg:max-w-none lg:grid-cols-3"
|
||||
data-controller="news--sortable"
|
||||
data-news--sortable-url-value="{{
|
||||
path(
|
||||
'admin_news_reorder'
|
||||
)
|
||||
}}"
|
||||
>
|
||||
{% for new in news %}
|
||||
<article
|
||||
class="relative isolate flex flex-col justify-end overflow-hidden rounded-2xl bg-gray-900 px-8 pt-80 pb-8 sm:pt-48 lg:pt-80"
|
||||
data-news--sortable-target="item"
|
||||
data-id="{{ new.id }}"
|
||||
>
|
||||
{% if new.getNewsImages is not empty %}
|
||||
<img
|
||||
src="{{ new.getNewsImages[0].getImage().getUrl() }}"
|
||||
alt=""
|
||||
class="absolute inset-0 -z-10 size-full object-cover"
|
||||
/>
|
||||
{% else %}
|
||||
<div
|
||||
class="flex justify-center items-center absolute inset-0 -z-10 text-amber-500"
|
||||
>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewbox="0 0 24 24"
|
||||
stroke-width="1.5"
|
||||
stroke="currentColor"
|
||||
class="w-1/2 h-1/2 object-cover"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
d="m2.25 15.75 5.159-5.159a2.25 2.25 0 0 1 3.182 0l5.159 5.159m-1.5-1.5 1.409-1.409a2.25 2.25 0 0 1 3.182 0l2.909 2.909m-18 3.75h16.5a1.5 1.5 0 0 0 1.5-1.5V6a1.5 1.5 0 0 0-1.5-1.5H3.75A1.5 1.5 0 0 0 2.25 6v12a1.5 1.5 0 0 0 1.5 1.5Zm10.5-11.25h.008v.008h-.008V8.25Zm.375 0a.375.375 0 1 1-.75 0 .375.375 0 0 1 .75 0Z"
|
||||
/>
|
||||
</svg>
|
||||
</div>
|
||||
{% endif %}
|
||||
<!-- BANDEAU -->
|
||||
<div
|
||||
class="absolute top-0 left-0 w-full flex justify-end p-3 bg-black/40 backdrop-blur-sm opacity-100 z-50 items-center"
|
||||
>
|
||||
<!-- Icône move -->
|
||||
<span
|
||||
class="text-amber-500 cursor-move mx-2"
|
||||
data-news--sortable-target="handle"
|
||||
>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewbox="0 0 24 24"
|
||||
stroke-width="1.5"
|
||||
stroke="currentColor"
|
||||
class="size-6"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
d="M3.75 3.75v4.5m0-4.5h4.5m-4.5 0L9 9M3.75 20.25v-4.5m0 4.5h4.5m-4.5 0L9 15M20.25 3.75h-4.5m4.5 0v4.5m0-4.5L15 9m5.25 11.25h-4.5m4.5 0v-4.5m0 4.5L15 15"
|
||||
/>
|
||||
</svg>
|
||||
</span>
|
||||
<form
|
||||
action="{{
|
||||
path(
|
||||
'admin_news_toggle_active',
|
||||
{
|
||||
id: new.id
|
||||
}
|
||||
)
|
||||
}}"
|
||||
method="POST"
|
||||
class="flex items-center"
|
||||
>
|
||||
<input
|
||||
type="hidden"
|
||||
name="_token"
|
||||
value="{{ csrf_token('toggle' ~ new.id) }}"
|
||||
/>
|
||||
<input
|
||||
type="hidden"
|
||||
name="active"
|
||||
value="{{ new.isActive ? 1 : 0 }}"
|
||||
/>
|
||||
<button type="submit" class="mx-2 cursor-pointer">
|
||||
{% if new.isActive %}
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewbox="0 0 24 24"
|
||||
stroke-width="1.5"
|
||||
stroke="currentColor"
|
||||
class="size-6 text-red-500"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
d="M6 18 18 6M6 6l12 12"
|
||||
/>
|
||||
</svg>
|
||||
{% else %}
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewbox="0 0 24 24"
|
||||
stroke-width="1.5"
|
||||
stroke="currentColor"
|
||||
class="size-6 text-green-500"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
d="m4.5 12.75 6 6 9-13.5"
|
||||
/>
|
||||
</svg>
|
||||
{% endif %}
|
||||
</button>
|
||||
</form>
|
||||
<!-- Icône éditer -->
|
||||
<a
|
||||
href="{{
|
||||
path(
|
||||
'admin_news_edit',
|
||||
{
|
||||
id: new.id
|
||||
}
|
||||
)
|
||||
}}"
|
||||
class="text-amber-500 mx-2"
|
||||
>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewbox="0 0 24 24"
|
||||
stroke-width="1.5"
|
||||
stroke="currentColor"
|
||||
class="size-6"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
d="m16.862 4.487 1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8.8-2.685a4.5 4.5 0 0 1 1.13-1.897L16.863 4.487Zm0 0L19.5 7.125"
|
||||
/>
|
||||
</svg>
|
||||
</a>
|
||||
<!-- Icône supprimer -->
|
||||
<button
|
||||
class="text-red-500 cursor-pointer mx-2"
|
||||
data-action="news--delete#open"
|
||||
data-url="{{
|
||||
path(
|
||||
'admin_news_delete',
|
||||
{
|
||||
id: new.id
|
||||
}
|
||||
)
|
||||
}}"
|
||||
data-token="{{ csrf_token('delete' ~ new.id) }}"
|
||||
>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewbox="0 0 24 24"
|
||||
stroke-width="1.5"
|
||||
stroke="currentColor"
|
||||
class="size-6"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
d="m14.74 9-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 0 1-2.244 2.077H8.084a2.25 2.25 0 0 1-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 0 0-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 0 1 3.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 0 0-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 0 0-7.5 0"
|
||||
/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
{% if new.isActive == 0 %}
|
||||
<div
|
||||
class="absolute inset-0 -z-10 bg-linear-to-t from-gray-900 via-gray-800/70"
|
||||
></div>
|
||||
<div
|
||||
class="absolute inset-0 -z-10 rounded-2xl inset-ring inset-ring-gray-800/30"
|
||||
></div>
|
||||
{% else %}
|
||||
<div
|
||||
class="absolute inset-0 -z-10 bg-linear-to-t from-gray-900 via-gray-900/40"
|
||||
></div>
|
||||
<div
|
||||
class="absolute inset-0 -z-10 rounded-2xl inset-ring inset-ring-gray-900/10"
|
||||
></div>
|
||||
{% endif %}
|
||||
|
||||
<!-- FOOTER -->
|
||||
<div
|
||||
class="flex flex-wrap items-center gap-y-1 overflow-hidden text-sm/6 text-gray-300"
|
||||
>
|
||||
<time
|
||||
datetime="{{ new.updatedAt|date('Y-m-d') }}"
|
||||
class="mr-8"
|
||||
>
|
||||
{{ new.updatedAt|date('d M Y') }}
|
||||
</time>
|
||||
</div>
|
||||
<h3 class="mt-3 text-lg/6 font-semibold text-white">
|
||||
<a href="#">
|
||||
<span class="absolute inset-0"></span>
|
||||
{{ new.title }}
|
||||
</a>
|
||||
</h3>
|
||||
</article>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% include 'component/confirm-delete-news.html.twig' %}
|
||||
</main>
|
||||
</div>
|
||||
<aside
|
||||
class="fixed inset-y-0 right-0 hidden w-96 overflow-y-auto border-l border-gray-200 px-4 py-6 sm:px-6 lg:px-8 xl:block dark:border-white/10"
|
||||
>
|
||||
<!-- Secondary column (hidden on smaller screens) -->
|
||||
<a
|
||||
href="{{ path('admin_news_add') }}"
|
||||
class="rounded-md bg-amber-600 px-4 py-2.5 text-sm font-semibold text-white shadow-xs hover:bg-amber-500 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-amber-600 dark:bg-amber-500 dark:shadow-none dark:hover:bg-amber-400 dark:focus-visible:outline-amber-500"
|
||||
>
|
||||
Ajouter une actualité
|
||||
</a>
|
||||
</aside>
|
||||
{% endblock %}
|
||||
226
templates/page/about.html.twig
Normal file
226
templates/page/about.html.twig
Normal file
@@ -0,0 +1,226 @@
|
||||
{% extends 'base.html.twig' %}
|
||||
{% block metadata %}
|
||||
{# ============================
|
||||
METADATA / SEO
|
||||
============================ #}
|
||||
|
||||
{% set meta_title = meta_title is defined
|
||||
? meta_title
|
||||
: 'À propos – Parcours artistique et engagement culturel'
|
||||
%}
|
||||
{% set meta_description = meta_description is defined
|
||||
? meta_description
|
||||
: 'Découvrez le parcours professionnel et artistique à l’origine de projets culturels et pédagogiques destinés aux écoles, collectivités et structures d’accueil.'
|
||||
%}
|
||||
{% set meta_image = meta_image is defined
|
||||
? meta_image
|
||||
: asset('images/logo.jpg')
|
||||
%}
|
||||
{% set meta_url = meta_url is defined ? meta_url : app.request.uri %}
|
||||
{% set meta_site_name = meta_site_name is defined
|
||||
? meta_site_name
|
||||
: 'Nom du site'
|
||||
%}
|
||||
{% set meta_type = meta_type is defined ? meta_type : 'website' %}
|
||||
|
||||
<title>
|
||||
{{ meta_title }}
|
||||
</title>
|
||||
|
||||
<meta name="description" content="{{ meta_description }}" />
|
||||
<meta name="robots" content="index, follow" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta charset="utf-8" />
|
||||
|
||||
<link rel="canonical" href="{{ meta_url }}" />
|
||||
|
||||
{# ============================
|
||||
OPEN GRAPH (Facebook, LinkedIn…)
|
||||
============================ #}
|
||||
|
||||
<meta property="og:title" content="{{ meta_title }}" />
|
||||
<meta property="og:description" content="{{ meta_description }}" />
|
||||
<meta property="og:type" content="{{ meta_type }}" />
|
||||
<meta property="og:url" content="{{ meta_url }}" />
|
||||
<meta property="og:image" content="{{ meta_image }}" />
|
||||
<meta property="og:site_name" content="{{ meta_site_name }}" />
|
||||
<meta property="og:locale" content="fr_FR" />
|
||||
|
||||
{# Optionnel mais recommandé #}
|
||||
<meta property="og:image:width" content="1200" />
|
||||
<meta property="og:image:height" content="630" />
|
||||
|
||||
{# ============================
|
||||
TWITTER CARDS
|
||||
============================ #}
|
||||
|
||||
<meta name="twitter:card" content="summary_large_image" />
|
||||
<meta name="twitter:title" content="{{ meta_title }}" />
|
||||
<meta name="twitter:description" content="{{ meta_description }}" />
|
||||
<meta name="twitter:image" content="{{ meta_image }}" />
|
||||
{% endblock %}
|
||||
{% block body %}
|
||||
<main class="isolate">
|
||||
<!-- Hero section -->
|
||||
<div class="relative isolate -z-10">
|
||||
<svg
|
||||
aria-hidden="true"
|
||||
class="absolute inset-x-0 top-0 -z-10 h-256 w-full mask-[radial-gradient(32rem_32rem_at_center,white,transparent)] stroke-gray-200"
|
||||
>
|
||||
<defs>
|
||||
<pattern
|
||||
id="1f932ae7-37de-4c0a-a8b0-a6e3b4d44b84"
|
||||
width="200"
|
||||
height="200"
|
||||
x="50%"
|
||||
y="-1"
|
||||
patternUnits="userSpaceOnUse"
|
||||
>
|
||||
<path d="M.5 200V.5H200" fill="none" />
|
||||
</pattern>
|
||||
</defs>
|
||||
<svg x="50%" y="-1" class="overflow-visible fill-gray-50">
|
||||
<path
|
||||
d="M-200 0h201v201h-201Z M600 0h201v201h-201Z M-400 600h201v201h-201Z M200 800h201v201h-201Z"
|
||||
stroke-width="0"
|
||||
/>
|
||||
</svg>
|
||||
<rect
|
||||
width="100%"
|
||||
height="100%"
|
||||
fill="url(#1f932ae7-37de-4c0a-a8b0-a6e3b4d44b84)"
|
||||
stroke-width="0"
|
||||
/>
|
||||
</svg>
|
||||
<div
|
||||
aria-hidden="true"
|
||||
class="absolute top-0 right-0 left-1/2 -z-10 -ml-24 transform-gpu overflow-hidden blur-3xl lg:ml-24 xl:ml-48"
|
||||
>
|
||||
<div
|
||||
style="clip-path: polygon(63.1% 29.5%, 100% 17.1%, 76.6% 3%, 48.4% 0%, 44.6% 4.7%, 54.5% 25.3%, 59.8% 49%, 55.2% 57.8%, 44.4% 57.2%, 27.8% 47.9%, 35.1% 81.5%, 0% 97.7%, 39.2% 100%, 35.2% 81.4%, 97.2% 52.8%, 63.1% 29.5%)"
|
||||
class="aspect-801/1036 w-200.25 bg-linear-to-tr from-[#ff80b5] to-[#F59E0B] opacity-30"
|
||||
></div>
|
||||
</div>
|
||||
<div class="overflow-hidden">
|
||||
<div
|
||||
class="mx-auto max-w-7xl px-6 pt-36 pb-32 sm:pt-60 lg:px-8 lg:pt-32"
|
||||
>
|
||||
<div
|
||||
class="mx-auto max-w-2xl gap-x-14 lg:mx-0 lg:flex lg:max-w-none lg:items-center"
|
||||
>
|
||||
<div class="relative w-full lg:max-w-xl lg:shrink-0 xl:max-w-2xl">
|
||||
<h1
|
||||
class="text-5xl font-semibold tracking-tight text-pretty text-gray-900 sm:text-7xl"
|
||||
>
|
||||
A titre professionnel
|
||||
</h1>
|
||||
<p
|
||||
class="mt-8 text-lg font-medium text-pretty text-gray-500 sm:max-w-md sm:text-xl/8 lg:max-w-none"
|
||||
>
|
||||
Après une carrière au sein de l’Education Nationale, je souhaite
|
||||
poursuivre mon activité et mettre au service de chacun mes
|
||||
expériences acquises. Grâce à ma formation de professeur
|
||||
d’éducation manuelle et technique je maîtrise les bases dans
|
||||
différentes disciplines dont le cartonnage et la couture.
|
||||
Enseignante j’ai initié de nombreux projets artistiques et
|
||||
culturels et notamment avec des élèves les plus en difficulté.
|
||||
Coordinatrice de l’éducation artistique à la DSDEN de l’Ain j’ai
|
||||
approché le fonctionnement des compagnies artistiques et
|
||||
rencontré des partenaires institutionnels.
|
||||
</p>
|
||||
<h2
|
||||
class="text-5xl font-semibold tracking-tight text-pretty text-gray-900 sm:text-7xl mt-5"
|
||||
>
|
||||
A titre personnel
|
||||
</h2>
|
||||
<p
|
||||
class="mt-8 text-lg font-medium text-pretty text-gray-500 sm:max-w-md sm:text-xl/8 lg:max-w-none"
|
||||
>
|
||||
J’ai étudié solfège et piano durant plusieurs années. Avec deux
|
||||
amies nous avons créé le Trio « Sans rendez-vous », chants et
|
||||
mise en scène J’ai créé un One woman show : j’ai perdu ma voie :
|
||||
écriture des textes, jeu scénique, accompagnement à la création,
|
||||
Sylvie Delom atelier du Réverbère Passionnée par les arts
|
||||
vivants, j’ai participé à plusieurs formations autour du clown
|
||||
(Christine Girod), du jeu scénique (Sylvie Delom, Nathalie
|
||||
Stora), l’écriture de chansons (les Trapettistes)
|
||||
</p>
|
||||
<p
|
||||
class="mt-8 text-lg font-medium text-pretty text-gray-500 sm:max-w-md sm:text-xl/8 lg:max-w-none"
|
||||
>
|
||||
Très manuelle, je cherche à donner vie et exploiter les
|
||||
matériaux qui sont à ma disposition et à moindre coût.
|
||||
Initiation à la création artistique avec de jeunes enfants « le
|
||||
chevalier de la Chalaronne »
|
||||
</p>
|
||||
</div>
|
||||
<div
|
||||
class="mt-14 flex justify-end gap-8 sm:-mt-44 sm:justify-start sm:pl-20 lg:mt-0 lg:pl-0"
|
||||
>
|
||||
<div
|
||||
class="ml-auto w-44 flex-none space-y-8 pt-32 sm:ml-0 sm:pt-80 lg:order-last lg:pt-36 xl:order-0 xl:pt-80"
|
||||
>
|
||||
<div class="relative">
|
||||
<img
|
||||
src="images/about/mp-photo-affiche.jpg"
|
||||
alt=""
|
||||
class="aspect-2/3 w-full rounded-xl bg-gray-900/5 object-cover shadow-lg"
|
||||
/>
|
||||
<div
|
||||
class="pointer-events-none absolute inset-0 rounded-xl ring-1 ring-gray-900/10 ring-inset"
|
||||
></div>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="mr-auto w-44 flex-none space-y-8 sm:mr-0 sm:pt-52 lg:pt-36"
|
||||
>
|
||||
<div class="relative">
|
||||
<img
|
||||
src="images/about/sans-rendez-vous-concert-MJC-2004.jpg"
|
||||
alt=""
|
||||
class="aspect-2/3 w-full rounded-xl bg-gray-900/5 object-cover shadow-lg"
|
||||
/>
|
||||
<div
|
||||
class="pointer-events-none absolute inset-0 rounded-xl ring-1 ring-gray-900/10 ring-inset"
|
||||
></div>
|
||||
</div>
|
||||
<div class="relative">
|
||||
<img
|
||||
src="images/about/mp-photo-affiche.jpg"
|
||||
alt=""
|
||||
class="aspect-2/3 w-full rounded-xl bg-gray-900/5 object-cover shadow-lg"
|
||||
/>
|
||||
<div
|
||||
class="pointer-events-none absolute inset-0 rounded-xl ring-1 ring-gray-900/10 ring-inset"
|
||||
></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="w-44 flex-none space-y-8 pt-32 sm:pt-0">
|
||||
<div class="relative">
|
||||
<img
|
||||
src="images/about/mp-carton-invitation-4.jpg"
|
||||
alt=""
|
||||
class="aspect-2/3 w-full rounded-xl bg-gray-900/5 object-cover shadow-lg"
|
||||
/>
|
||||
<div
|
||||
class="pointer-events-none absolute inset-0 rounded-xl ring-1 ring-gray-900/10 ring-inset"
|
||||
></div>
|
||||
</div>
|
||||
<div class="relative">
|
||||
<img
|
||||
src="images/about/sans-rendez-vous-duo-recadré.jpg"
|
||||
alt=""
|
||||
class="aspect-2/3 w-full rounded-xl bg-gray-900/5 object-cover shadow-lg"
|
||||
/>
|
||||
<div
|
||||
class="pointer-events-none absolute inset-0 rounded-xl ring-1 ring-gray-900/10 ring-inset"
|
||||
></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
{% endblock %}
|
||||
69
templates/page/confidentiality-policy.html.twig
Normal file
69
templates/page/confidentiality-policy.html.twig
Normal file
@@ -0,0 +1,69 @@
|
||||
{% extends 'base.html.twig' %}
|
||||
|
||||
{# === Metadata (No Index pour le SEO) === #}
|
||||
{% block metadata %}
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<title>
|
||||
Politique de confidentialité - Arts-ticule
|
||||
</title>
|
||||
{% endblock %}
|
||||
|
||||
{# === Contenu principal === #}
|
||||
{% block body %}
|
||||
<section class="max-w-4xl mx-auto px-4 py-16">
|
||||
<h1 class="text-3xl font-bold mb-6 text-center">
|
||||
Politique de confidentialité
|
||||
</h1>
|
||||
|
||||
<p class="mb-4">
|
||||
Chez Arts-ticule, nous respectons votre vie privée et nous nous engageons
|
||||
à protéger vos informations personnelles. Cette politique explique comment
|
||||
nous collectons, utilisons et protégeons vos données.
|
||||
</p>
|
||||
|
||||
<h2 class="text-xl font-semibold mt-6 mb-2">
|
||||
1. Collecte des informations
|
||||
</h2>
|
||||
<p class="mb-4">
|
||||
Nous pouvons collecter certaines informations lorsque vous utilisez notre
|
||||
site, notamment votre nom, votre adresse e-mail, et toute donnée que vous
|
||||
nous fournissez volontairement via nos formulaires de contact.
|
||||
</p>
|
||||
|
||||
<h2 class="text-xl font-semibold mt-6 mb-2">
|
||||
2. Utilisation des informations
|
||||
</h2>
|
||||
<p class="mb-4">
|
||||
Les informations collectées sont utilisées pour :<ul
|
||||
class="list-disc list-inside ml-4"
|
||||
>
|
||||
<li>Répondre à vos demandes et questions</li>
|
||||
<li>Améliorer notre site et nos services</li>
|
||||
<li>
|
||||
Vous envoyer des communications importantes si vous y avez consenti
|
||||
</li>
|
||||
</ul>
|
||||
</p>
|
||||
|
||||
<h2 class="text-xl font-semibold mt-6 mb-2">3. Partage des informations</h2>
|
||||
<p class="mb-4">
|
||||
Nous ne vendons ni ne louons vos informations personnelles à des tiers.
|
||||
Vos données peuvent être partagées uniquement avec des prestataires de
|
||||
confiance pour le fonctionnement du site ou si la loi l'exige.
|
||||
</p>
|
||||
|
||||
<h2 class="text-xl font-semibold mt-6 mb-2">4. Sécurité des données</h2>
|
||||
<p class="mb-4">
|
||||
Nous mettons en œuvre des mesures techniques et organisationnelles pour
|
||||
protéger vos données contre tout accès non autorisé, modification ou
|
||||
suppression.
|
||||
</p>
|
||||
|
||||
<h2 class="text-xl font-semibold mt-6 mb-2">5. Vos droits</h2>
|
||||
<p class="mb-4">
|
||||
Vous pouvez accéder, rectifier ou demander la suppression de vos données
|
||||
personnelles. Pour exercer ces droits, contactez-nous via notre formulaire
|
||||
de contact.
|
||||
</p>
|
||||
</section>
|
||||
{% endblock %}
|
||||
179
templates/page/home.html.twig
Normal file
179
templates/page/home.html.twig
Normal file
@@ -0,0 +1,179 @@
|
||||
{% extends 'base.html.twig' %}
|
||||
{% block metadata %}
|
||||
{# ============================
|
||||
METADATA / SEO
|
||||
============================ #}
|
||||
|
||||
{% set meta_title = meta_title is defined
|
||||
? meta_title
|
||||
: 'Spectacles vivants et artisanat au service des collectivités'
|
||||
%}
|
||||
{% set meta_description = meta_description is defined
|
||||
? meta_description
|
||||
: 'Découvrez des spectacles vivants et des fabrications artisanales conçus pour les collectivités, écoles et lieux culturels, alliant création, transmission et savoir-faire.'
|
||||
%}
|
||||
{% set meta_image = meta_image is defined
|
||||
? meta_image
|
||||
: asset('images/logo.jpg')
|
||||
%}
|
||||
{% set meta_url = meta_url is defined ? meta_url : app.request.uri %}
|
||||
{% set meta_site_name = meta_site_name is defined
|
||||
? meta_site_name
|
||||
: 'Nom du site'
|
||||
%}
|
||||
{% set meta_type = meta_type is defined ? meta_type : 'website' %}
|
||||
|
||||
<title>
|
||||
{{ meta_title }}
|
||||
</title>
|
||||
|
||||
<meta name="description" content="{{ meta_description }}" />
|
||||
<meta name="robots" content="index, follow" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta charset="utf-8" />
|
||||
|
||||
<link rel="canonical" href="{{ meta_url }}" />
|
||||
|
||||
{# ============================
|
||||
OPEN GRAPH (Facebook, LinkedIn…)
|
||||
============================ #}
|
||||
|
||||
<meta property="og:title" content="{{ meta_title }}" />
|
||||
<meta property="og:description" content="{{ meta_description }}" />
|
||||
<meta property="og:type" content="{{ meta_type }}" />
|
||||
<meta property="og:url" content="{{ meta_url }}" />
|
||||
<meta property="og:image" content="{{ meta_image }}" />
|
||||
<meta property="og:site_name" content="{{ meta_site_name }}" />
|
||||
<meta property="og:locale" content="fr_FR" />
|
||||
|
||||
{# Optionnel mais recommandé #}
|
||||
<meta property="og:image:width" content="1200" />
|
||||
<meta property="og:image:height" content="630" />
|
||||
|
||||
{# ============================
|
||||
TWITTER CARDS
|
||||
============================ #}
|
||||
|
||||
<meta name="twitter:card" content="summary_large_image" />
|
||||
<meta name="twitter:title" content="{{ meta_title }}" />
|
||||
<meta name="twitter:description" content="{{ meta_description }}" />
|
||||
<meta name="twitter:image" content="{{ meta_image }}" />
|
||||
{% endblock %}
|
||||
{% block body %}
|
||||
<!-- Header -->
|
||||
|
||||
<main class="isolate py-15">
|
||||
<!-- Hero section -->
|
||||
<div class="relative pt-14">
|
||||
<div
|
||||
aria-hidden="true"
|
||||
class="absolute inset-x-0 -top-40 -z-10 transform-gpu overflow-hidden blur-3xl sm:-top-80"
|
||||
>
|
||||
<div
|
||||
style="clip-path: polygon(74.1% 44.1%, 100% 61.6%, 97.5% 26.9%, 85.5% 0.1%, 80.7% 2%, 72.5% 32.5%, 60.2% 62.4%, 52.4% 68.1%, 47.5% 58.3%, 45.2% 34.5%, 27.5% 76.7%, 0.1% 64.9%, 17.9% 100%, 27.6% 76.8%, 76.1% 97.7%, 74.1% 44.1%)"
|
||||
class="relative left-[calc(50%-11rem)] aspect-1155/678 w-144.5 -translate-x-1/2 rotate-30 bg-linear-to-tr from-[#ff80b5] to-[#F59E0B] opacity-30 sm:left-[calc(50%-30rem)] sm:w-288.75"
|
||||
></div>
|
||||
</div>
|
||||
<div class="py-5 sm:py-6 lg:pb-7">
|
||||
<div class="mx-auto max-w-7xl px-6 lg:px-8">
|
||||
<div class="mx-auto max-w-2xl text-center">
|
||||
<h1
|
||||
class="text-5xl font-semibold tracking-tight text-balance text-gray-900 sm:text-7xl"
|
||||
>
|
||||
Spectacles vivants et fabrications artisanales
|
||||
</h1>
|
||||
<p
|
||||
class="mt-8 text-lg font-medium text-pretty text-gray-500 sm:text-xl/8"
|
||||
>
|
||||
Les voyages, les projets de classe font partie de nos bons
|
||||
souvenirs d’école.
|
||||
|
||||
Alors poursuivons et proposons aux plus jeunes de vivre <strong>
|
||||
des projets artistiques
|
||||
</strong> !
|
||||
</p>
|
||||
<div class="mt-10 flex items-center justify-center gap-x-6">
|
||||
<a
|
||||
href="{{ path('show') }}"
|
||||
class="rounded-md bg-amber-600 px-3.5 py-2.5 text-sm font-semibold text-white shadow-xs hover:bg-amber-500 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-amber-600"
|
||||
>
|
||||
Mes spectacles
|
||||
</a>
|
||||
<a
|
||||
href="{{ path('about') }}"
|
||||
class="text-sm/6 font-semibold text-gray-900"
|
||||
>
|
||||
Me connaître <span aria-hidden="true">→</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
aria-hidden="true"
|
||||
class="absolute inset-x-0 top-[calc(100%-13rem)] -z-10 transform-gpu overflow-hidden blur-3xl sm:top-[calc(100%-30rem)]"
|
||||
>
|
||||
<div
|
||||
style="clip-path: polygon(74.1% 44.1%, 100% 61.6%, 97.5% 26.9%, 85.5% 0.1%, 80.7% 2%, 72.5% 32.5%, 60.2% 62.4%, 52.4% 68.1%, 47.5% 58.3%, 45.2% 34.5%, 27.5% 76.7%, 0.1% 64.9%, 17.9% 100%, 27.6% 76.8%, 76.1% 97.7%, 74.1% 44.1%)"
|
||||
class="relative left-[calc(50%+3rem)] aspect-1155/678 w-144.5 -translate-x-1/2 bg-linear-to-tr from-[#ff80b5] to-[#F59E0B] opacity-30 sm:left-[calc(50%+36rem)] sm:w-288.75"
|
||||
></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Testimonial section -->
|
||||
<div class="mx-auto mt-6 max-w-7xl sm:mt-12 sm:px-6 lg:px-8">
|
||||
<div
|
||||
class="relative overflow-hidden bg-gray-900 px-6 py-20 shadow-xl sm:rounded-3xl sm:px-10 sm:py-24 md:px-12 lg:px-20"
|
||||
>
|
||||
<img
|
||||
src="images/mp-photo-affiche-gros-plan.jpg"
|
||||
alt=""
|
||||
class="absolute inset-0 size-full object-cover brightness-150 saturate-0"
|
||||
/>
|
||||
<div class="absolute inset-0 bg-gray-900/90 mix-blend-multiply"></div>
|
||||
<div
|
||||
aria-hidden="true"
|
||||
class="absolute -top-56 -left-80 transform-gpu blur-3xl"
|
||||
>
|
||||
<div
|
||||
style="clip-path: polygon(74.1% 44.1%, 100% 61.6%, 97.5% 26.9%, 85.5% 0.1%, 80.7% 2%, 72.5% 32.5%, 60.2% 62.4%, 52.4% 68.1%, 47.5% 58.3%, 45.2% 34.5%, 27.5% 76.7%, 0.1% 64.9%, 17.9% 100%, 27.6% 76.8%, 76.1% 97.7%, 74.1% 44.1%)"
|
||||
class="aspect-1097/845 w-274.25 bg-linear-to-r from-[#ff4694] to-[#F59E0B] opacity-[0.45]"
|
||||
></div>
|
||||
</div>
|
||||
<div
|
||||
aria-hidden="true"
|
||||
class="hidden md:absolute md:bottom-16 md:left-200 md:block md:transform-gpu md:blur-3xl"
|
||||
>
|
||||
<div
|
||||
style="clip-path: polygon(74.1% 44.1%, 100% 61.6%, 97.5% 26.9%, 85.5% 0.1%, 80.7% 2%, 72.5% 32.5%, 60.2% 62.4%, 52.4% 68.1%, 47.5% 58.3%, 45.2% 34.5%, 27.5% 76.7%, 0.1% 64.9%, 17.9% 100%, 27.6% 76.8%, 76.1% 97.7%, 74.1% 44.1%)"
|
||||
class="aspect-1097/845 w-274.25 bg-linear-to-r from-[#ff4694] to-[#F59E0B] opacity-25"
|
||||
></div>
|
||||
</div>
|
||||
<div class="relative mx-auto max-w-2xl lg:mx-0">
|
||||
<figure>
|
||||
<blockquote
|
||||
class="mt-6 text-lg font-semibold text-white sm:text-xl/8"
|
||||
>
|
||||
<p>
|
||||
“Dans un monde de plus en plus technologique, au rythme
|
||||
précipité, laissons de la place à l’imaginaire et la créativité.
|
||||
Acceptons de se donner des bulles suspendues de création et
|
||||
d’évasion Mettons en valeur et en commun nos savoir-faire, nos
|
||||
savoir-être Retrouvons de l’humanité, de l’écoute, du partage,
|
||||
de la cohésion ”
|
||||
</p>
|
||||
</blockquote>
|
||||
<figcaption class="mt-6 text-base text-white">
|
||||
<div class="font-semibold">
|
||||
Marie-Pierre NAUCHE
|
||||
</div>
|
||||
<div class="mt-1">
|
||||
Fondatrice de Arts-ticule
|
||||
</div>
|
||||
</figcaption>
|
||||
</figure>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
{% endblock %}
|
||||
61
templates/page/legal-mentions.html.twig
Normal file
61
templates/page/legal-mentions.html.twig
Normal file
@@ -0,0 +1,61 @@
|
||||
{% extends 'base.html.twig' %}
|
||||
|
||||
{# === Metadata (No Index pour le SEO) === #}
|
||||
{% block metadata %}
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<title>
|
||||
Mentions légales - Arts-ticule
|
||||
</title>
|
||||
{% endblock %}
|
||||
|
||||
{# === Contenu principal === #}
|
||||
{% block body %}
|
||||
<section class="max-w-4xl mx-auto px-4 py-16">
|
||||
<h1 class="text-3xl font-bold mb-6 text-center">Mentions légales</h1>
|
||||
|
||||
<p class="mb-4">
|
||||
Conformément à la législation en vigueur, voici les informations légales
|
||||
concernant le site <strong>Arts-ticule</strong>.
|
||||
</p>
|
||||
|
||||
<h2 class="text-xl font-semibold mt-6 mb-2">1. Éditeur du site</h2>
|
||||
<p class="mb-4">
|
||||
Arts-ticule<br />
|
||||
Adresse : 8 rue de la Dombes, Saint Etienne sur Chalaronne<br />
|
||||
Directeur de la publication : Marie-Pierre NAUCHE
|
||||
</p>
|
||||
|
||||
<h2 class="text-xl font-semibold mt-6 mb-2">2. Hébergeur</h2>
|
||||
<p class="mb-4">
|
||||
Le site est hébergé par :<br />
|
||||
Contabo GmbH<br />
|
||||
Adresse : Welfenstrasse 22 81541 Munich Germany<br />
|
||||
Téléphone : +49 89 3564717 70
|
||||
</p>
|
||||
|
||||
<h2 class="text-xl font-semibold mt-6 mb-2">3. Propriété intellectuelle</h2>
|
||||
<p class="mb-4">
|
||||
Tous les contenus présents sur le site (textes, images, vidéos, logos)
|
||||
sont la propriété exclusive d’Arts-ticule ou de leurs auteurs respectifs.
|
||||
Toute reproduction, modification ou distribution sans autorisation est
|
||||
interdite.
|
||||
</p>
|
||||
|
||||
<h2 class="text-xl font-semibold mt-6 mb-2">4. Données personnelles</h2>
|
||||
<p class="mb-4">
|
||||
Pour plus d’informations sur la collecte et le traitement des données
|
||||
personnelles, veuillez consulter notre <a
|
||||
href="{{ path('confidentialitypolicy') }}"
|
||||
class="text-amber-600 underline"
|
||||
>
|
||||
Politique de confidentialité
|
||||
</a>.
|
||||
</p>
|
||||
|
||||
<h2 class="text-xl font-semibold mt-6 mb-2">5. Responsabilité</h2>
|
||||
<p class="mb-4">
|
||||
Arts-ticule ne saurait être tenu responsable des dommages directs ou
|
||||
indirects pouvant survenir suite à l’accès ou à l’utilisation du site.
|
||||
</p>
|
||||
</section>
|
||||
{% endblock %}
|
||||
217
templates/page/manual-project.html.twig
Normal file
217
templates/page/manual-project.html.twig
Normal file
@@ -0,0 +1,217 @@
|
||||
{% extends 'base.html.twig' %}
|
||||
{% block metadata %}
|
||||
{# ============================
|
||||
METADATA / SEO
|
||||
============================ #}
|
||||
|
||||
{% set meta_title = meta_title is defined
|
||||
? meta_title
|
||||
: 'Ateliers artisanaux et créations manuelles pour collectivités'
|
||||
%}
|
||||
{% set meta_description = meta_description is defined
|
||||
? meta_description
|
||||
: 'Conception et animation d’ateliers artisanaux pour collectivités et écoles, autour de la couture, du cartonnage et de la création d’objets à partir de matériaux variés.'
|
||||
%}
|
||||
{% set meta_image = meta_image is defined
|
||||
? meta_image
|
||||
: asset('images/logo.jpg')
|
||||
%}
|
||||
{% set meta_url = meta_url is defined ? meta_url : app.request.uri %}
|
||||
{% set meta_site_name = meta_site_name is defined
|
||||
? meta_site_name
|
||||
: 'Nom du site'
|
||||
%}
|
||||
{% set meta_type = meta_type is defined ? meta_type : 'website' %}
|
||||
|
||||
<title>
|
||||
{{ meta_title }}
|
||||
</title>
|
||||
|
||||
<meta name="description" content="{{ meta_description }}" />
|
||||
<meta name="robots" content="index, follow" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta charset="utf-8" />
|
||||
|
||||
<link rel="canonical" href="{{ meta_url }}" />
|
||||
|
||||
{# ============================
|
||||
OPEN GRAPH (Facebook, LinkedIn…)
|
||||
============================ #}
|
||||
|
||||
<meta property="og:title" content="{{ meta_title }}" />
|
||||
<meta property="og:description" content="{{ meta_description }}" />
|
||||
<meta property="og:type" content="{{ meta_type }}" />
|
||||
<meta property="og:url" content="{{ meta_url }}" />
|
||||
<meta property="og:image" content="{{ meta_image }}" />
|
||||
<meta property="og:site_name" content="{{ meta_site_name }}" />
|
||||
<meta property="og:locale" content="fr_FR" />
|
||||
|
||||
{# Optionnel mais recommandé #}
|
||||
<meta property="og:image:width" content="1200" />
|
||||
<meta property="og:image:height" content="630" />
|
||||
|
||||
{# ============================
|
||||
TWITTER CARDS
|
||||
============================ #}
|
||||
|
||||
<meta name="twitter:card" content="summary_large_image" />
|
||||
<meta name="twitter:title" content="{{ meta_title }}" />
|
||||
<meta name="twitter:description" content="{{ meta_description }}" />
|
||||
<meta name="twitter:image" content="{{ meta_image }}" />
|
||||
{% endblock %}
|
||||
{% block body %}
|
||||
<div class="overflow-hidden bg-white py-12 sm:py-16">
|
||||
<div class="mx-auto max-w-2xl px-6 lg:max-w-7xl lg:px-8">
|
||||
<div class="max-w-4xl">
|
||||
<p class="text-base/7 font-semibold text-amber-600">
|
||||
Projets manuels et créatifs
|
||||
</p>
|
||||
<h1
|
||||
class="mt-2 text-4xl font-semibold tracking-tight text-pretty text-gray-900 sm:text-5xl"
|
||||
>
|
||||
Co-construction et Accompagnement
|
||||
</h1>
|
||||
<p class="mt-6 text-xl/8 text-balance text-gray-700">
|
||||
Vous avez des idées de « bricolage » avec vos élèves, vos enfants, vos
|
||||
résidents, vous souhaitez réaliser des objets pour une occasion
|
||||
spécifique, mais ils sont trop nombreux, vous avez peu de temps, peu
|
||||
de place, peu de moyens, vous ne savez pas comment vous y prendre ? Je
|
||||
suis là pour vous aider ! Proposition d’accompagnement à la conduite
|
||||
d’ateliers de créations manuelles plus spécifiquement en lien avec la
|
||||
couture et le cartonnage : enfants dans le milieu scolaire rural ou
|
||||
urbain, personnes âgées en structure d’accueil… Matériaux privilégiés
|
||||
: les matériaux souples tels que les tissus, fils, laines, cordes…les
|
||||
matériaux semi-rigides tels que les papiers, cartons…
|
||||
</p>
|
||||
</div>
|
||||
<section
|
||||
class="mt-20 grid grid-cols-1 lg:grid-cols-2 lg:gap-x-8 lg:gap-y-16"
|
||||
>
|
||||
<div class="lg:pr-8">
|
||||
<h2
|
||||
class="mt-8 text-2xl font-semibold tracking-tight text-pretty text-gray-900"
|
||||
>
|
||||
Le déroulé
|
||||
</h2>
|
||||
<ul class="mt-5 text-base/7 text-gray-600">
|
||||
<li>Recherche et choix des objets à réaliser</li>
|
||||
<li>Définition du calendrier et des modalités d’intervention</li>
|
||||
<li>Mise en œuvre des réalisations</li>
|
||||
<li>
|
||||
Présentation de la fin des travaux, mise en valeur des objets
|
||||
réalisés
|
||||
</li>
|
||||
</ul>
|
||||
<h2
|
||||
class="mt-8 text-2xl font-semibold tracking-tight text-pretty text-gray-900"
|
||||
>
|
||||
Objectifs
|
||||
</h2>
|
||||
<p class="mt-5 text-base/7 text-gray-600">
|
||||
Allier exigence et bienveillance, développer des qualités de
|
||||
rigueur, de concentration et d’écoute, de partage.
|
||||
</p>
|
||||
<h2
|
||||
class="mt-8 text-2xl font-semibold tracking-tight text-pretty text-gray-900"
|
||||
>
|
||||
Construction de soi
|
||||
</h2>
|
||||
<p class="mt-5 text-base/7 text-gray-600">
|
||||
Développer sa propre motricité, sa rigueur, sa sensibilité, son
|
||||
goût, exploiter et faire référence à ses compétences en calcul et
|
||||
mesures, enrichir sa culture intellectuelle et artistique.
|
||||
</p>
|
||||
</div>
|
||||
<div class="pt-16 lg:row-span-2 lg:-mr-16 xl:mr-auto">
|
||||
<div
|
||||
class="-mx-8 grid grid-cols-2 gap-4 sm:-mx-16 sm:grid-cols-4 lg:mx-0 lg:grid-cols-2 xl:gap-8"
|
||||
>
|
||||
<div
|
||||
class="aspect-square overflow-hidden rounded-xl shadow-xl outline-1 -outline-offset-1 outline-black/10"
|
||||
>
|
||||
<img
|
||||
src="/images/manual-project/COUT-coussin-champignon.jpg"
|
||||
alt=""
|
||||
class="block size-full object-cover"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="-mt-8 aspect-square overflow-hidden rounded-xl shadow-xl outline-1 -outline-offset-1 outline-black/10 lg:-mt-40"
|
||||
>
|
||||
<img
|
||||
src="/images/manual-project/COUT-tigre-enzo.jpg"
|
||||
alt=""
|
||||
class="block size-full object-cover"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="aspect-square overflow-hidden rounded-xl shadow-xl outline-1 -outline-offset-1 outline-black/10"
|
||||
>
|
||||
<img
|
||||
src="/images/manual-project/COUT-yan-tigre.jpg"
|
||||
alt=""
|
||||
class="block size-full object-cover"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="-mt-8 aspect-square overflow-hidden rounded-xl shadow-xl outline-1 -outline-offset-1 outline-black/10 lg:-mt-40"
|
||||
>
|
||||
<img
|
||||
src="/images/manual-project/TM-LAPINS-POMPOM.jpg"
|
||||
alt=""
|
||||
class="block size-full object-cover"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="bg-white py-6 sm:py-10">
|
||||
<div class="mx-auto max-w-7xl px-6 lg:px-8">
|
||||
<dl
|
||||
class="mx-auto mt-16 grid max-w-2xl grid-cols-1 gap-x-8 gap-y-16 text-base/7 sm:grid-cols-2 lg:mx-0 lg:max-w-none lg:grid-cols-3"
|
||||
>
|
||||
<div>
|
||||
<dt class="font-semibold text-gray-900">
|
||||
Gestion du groupe
|
||||
</dt>
|
||||
<dd class="mt-1 text-gray-600">
|
||||
rigueur, bienveillance, exigence, mettre en exergue pour chaque
|
||||
participant une de ses qualités
|
||||
</dd>
|
||||
</div>
|
||||
<div>
|
||||
<dt class="font-semibold text-gray-900">
|
||||
Economie et environnement
|
||||
</dt>
|
||||
<dd class="mt-1 text-gray-600">
|
||||
travailler pour partie avec des matériaux récupérés
|
||||
</dd>
|
||||
</div>
|
||||
<div>
|
||||
<dt class="font-semibold text-gray-900">
|
||||
Qualité
|
||||
</dt>
|
||||
<dd class="mt-1 text-gray-600">soin, esthétisme</dd>
|
||||
</div>
|
||||
<div>
|
||||
<dt class="font-semibold text-gray-900">
|
||||
Valorisation
|
||||
</dt>
|
||||
<dd class="mt-1 text-gray-600">
|
||||
donner à voir les travaux aboutis sous forme d’exposition publique,
|
||||
d’invitation de partenaires
|
||||
</dd>
|
||||
</div>
|
||||
<div>
|
||||
<dt class="font-semibold text-gray-900">
|
||||
Transmission
|
||||
</dt>
|
||||
<dd class="mt-1 text-gray-600">partage de savoir-faire</dd>
|
||||
</div>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
130
templates/page/news.html.twig
Normal file
130
templates/page/news.html.twig
Normal file
@@ -0,0 +1,130 @@
|
||||
{% extends 'base.html.twig' %}
|
||||
{% block body %}
|
||||
{% set images = news.newsImages|default([]) %}
|
||||
{% set mainImage = images|first %}
|
||||
{% set secondaryImages = images|slice(1) %}
|
||||
|
||||
<div class="bg-white py-32">
|
||||
<div class="mx-auto max-w-7xl px-6 lg:px-8">
|
||||
<div
|
||||
class="mx-auto flex max-w-2xl flex-col justify-between gap-16 lg:mx-0 lg:max-w-none lg:flex-row"
|
||||
>
|
||||
<div class="w-full lg:max-w-lg lg:flex-auto">
|
||||
<h2
|
||||
class="text-3xl font-semibold tracking-tight text-pretty text-gray-900 sm:text-4xl"
|
||||
>
|
||||
{{ news.title }}
|
||||
</h2>
|
||||
{% if mainImage %}
|
||||
<img
|
||||
src="{{ mainImage.image.url }}"
|
||||
alt="{{ news.title }}"
|
||||
class="mt-16 aspect-6/5 w-full rounded-2xl object-cover outline-1 -outline-offset-1 outline-black/5 lg:aspect-auto lg:h-138"
|
||||
/>
|
||||
{% endif %}
|
||||
{% if secondaryImages is not empty %}
|
||||
<div class="flex gap-2 mt-6">
|
||||
{% for image in secondaryImages %}
|
||||
<img
|
||||
src="{{ image.image.url }}"
|
||||
alt="{{ news.title }}"
|
||||
class="w-20 h-20 object-cover rounded-lg"
|
||||
/>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
<div
|
||||
class="mt-6 flex border-t border-gray-900/5 pt-6 items-center gap-x-2"
|
||||
>
|
||||
<span class="text-sm font-medium text-gray-700">Partager :</span>
|
||||
|
||||
{% set shareUrl =
|
||||
absolute_url(
|
||||
path(
|
||||
'actualites',
|
||||
{
|
||||
slug: news.slug
|
||||
}
|
||||
)
|
||||
)
|
||||
%}
|
||||
|
||||
<!-- LinkedIn -->
|
||||
<a
|
||||
href="https://www.linkedin.com/sharing/share-offsite/?url={{
|
||||
shareUrl
|
||||
}}"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="flex items-center justify-center size-9 rounded-full bg-gray-100 text-gray-600 hover:bg-amber-500/10 hover:text-amber-500 transition"
|
||||
aria-label="Partager sur LinkedIn"
|
||||
>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="16"
|
||||
height="16"
|
||||
fill="currentColor"
|
||||
class="bi bi-linkedin"
|
||||
viewbox="0 0 16 16"
|
||||
>
|
||||
<path
|
||||
d="M0 1.146C0 .513.526 0 1.175 0h13.65C15.474 0 16 .513 16 1.146v13.708c0 .633-.526 1.146-1.175 1.146H1.175C.526 16 0 15.487 0 14.854zm4.943 12.248V6.169H2.542v7.225zm-1.2-8.212c.837 0 1.358-.554 1.358-1.248-.015-.709-.52-1.248-1.342-1.248S2.4 3.226 2.4 3.934c0 .694.521 1.248 1.327 1.248zm4.908 8.212V9.359c0-.216.016-.432.08-.586.173-.431.568-.878 1.232-.878.869 0 1.216.662 1.216 1.634v3.865h2.401V9.25c0-2.22-1.184-3.252-2.764-3.252-1.274 0-1.845.7-2.165 1.193v.025h-.016l.016-.025V6.169h-2.4c.03.678 0 7.225 0 7.225z"
|
||||
/>
|
||||
</svg>
|
||||
</a>
|
||||
|
||||
<!-- Facebook -->
|
||||
<a
|
||||
href="https://www.facebook.com/sharer/sharer.php?u={{ shareUrl }}"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="flex items-center justify-center size-9 rounded-full bg-gray-100 text-gray-600 hover:bg-amber-500/10 hover:text-amber-500 transition"
|
||||
aria-label="Partager sur Facebook"
|
||||
>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="16"
|
||||
height="16"
|
||||
fill="currentColor"
|
||||
class="bi bi-facebook"
|
||||
viewbox="0 0 16 16"
|
||||
>
|
||||
<path
|
||||
d="M16 8.049c0-4.446-3.582-8.05-8-8.05C3.58 0-.002 3.603-.002 8.05c0 4.017 2.926 7.347 6.75 7.951v-5.625h-2.03V8.05H6.75V6.275c0-2.017 1.195-3.131 3.022-3.131.876 0 1.791.157 1.791.157v1.98h-1.009c-.993 0-1.303.621-1.303 1.258v1.51h2.218l-.354 2.326H9.25V16c3.824-.604 6.75-3.934 6.75-7.951"
|
||||
/>
|
||||
</svg>
|
||||
</a>
|
||||
|
||||
<!-- Twitter / X -->
|
||||
<a
|
||||
href="https://twitter.com/intent/tweet?url={{
|
||||
shareUrl
|
||||
}}&text={{ news.title|url_encode }}"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="flex items-center justify-center size-9 rounded-full bg-gray-100 text-gray-600 hover:bg-amber-500/10 hover:text-amber-500 transition"
|
||||
aria-label="Partager sur Twitter"
|
||||
>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="16"
|
||||
height="16"
|
||||
fill="currentColor"
|
||||
class="bi bi-twitter"
|
||||
viewbox="0 0 16 16"
|
||||
>
|
||||
<path
|
||||
d="M5.026 15c6.038 0 9.341-5.003 9.341-9.334q.002-.211-.006-.422A6.7 6.7 0 0 0 16 3.542a6.7 6.7 0 0 1-1.889.518 3.3 3.3 0 0 0 1.447-1.817 6.5 6.5 0 0 1-2.087.793A3.286 3.286 0 0 0 7.875 6.03a9.32 9.32 0 0 1-6.767-3.429 3.29 3.29 0 0 0 1.018 4.382A3.3 3.3 0 0 1 .64 6.575v.045a3.29 3.29 0 0 0 2.632 3.218 3.2 3.2 0 0 1-.865.115 3 3 0 0 1-.614-.057 3.28 3.28 0 0 0 3.067 2.277A6.6 6.6 0 0 1 .78 13.58a6 6 0 0 1-.78-.045A9.34 9.34 0 0 0 5.026 15"
|
||||
/>
|
||||
</svg>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="w-full lg:max-w-xl lg:flex-auto">
|
||||
{{ news.description|raw }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
267
templates/page/project.html.twig
Normal file
267
templates/page/project.html.twig
Normal file
@@ -0,0 +1,267 @@
|
||||
{% extends 'base.html.twig' %}
|
||||
{% block metadata %}
|
||||
{# ============================
|
||||
METADATA / SEO
|
||||
============================ #}
|
||||
|
||||
{% set meta_title = meta_title is defined
|
||||
? meta_title
|
||||
: 'Projets artistiques participatifs pour écoles et collectivités'
|
||||
%}
|
||||
{% set meta_description = meta_description is defined
|
||||
? meta_description
|
||||
: 'Accompagnement et co-construction de projets artistiques pour écoles, collectivités et structures d’accueil : création, scénographie et mise en jeu adaptées à chaque public.'
|
||||
%}
|
||||
{% set meta_image = meta_image is defined
|
||||
? meta_image
|
||||
: asset('images/logo.jpg')
|
||||
%}
|
||||
{% set meta_url = meta_url is defined ? meta_url : app.request.uri %}
|
||||
{% set meta_site_name = meta_site_name is defined
|
||||
? meta_site_name
|
||||
: 'Nom du site'
|
||||
%}
|
||||
{% set meta_type = meta_type is defined ? meta_type : 'website' %}
|
||||
|
||||
<title>
|
||||
{{ meta_title }}
|
||||
</title>
|
||||
|
||||
<meta name="description" content="{{ meta_description }}" />
|
||||
<meta name="robots" content="index, follow" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta charset="utf-8" />
|
||||
|
||||
<link rel="canonical" href="{{ meta_url }}" />
|
||||
|
||||
{# ============================
|
||||
OPEN GRAPH (Facebook, LinkedIn…)
|
||||
============================ #}
|
||||
|
||||
<meta property="og:title" content="{{ meta_title }}" />
|
||||
<meta property="og:description" content="{{ meta_description }}" />
|
||||
<meta property="og:type" content="{{ meta_type }}" />
|
||||
<meta property="og:url" content="{{ meta_url }}" />
|
||||
<meta property="og:image" content="{{ meta_image }}" />
|
||||
<meta property="og:site_name" content="{{ meta_site_name }}" />
|
||||
<meta property="og:locale" content="fr_FR" />
|
||||
|
||||
{# Optionnel mais recommandé #}
|
||||
<meta property="og:image:width" content="1200" />
|
||||
<meta property="og:image:height" content="630" />
|
||||
|
||||
{# ============================
|
||||
TWITTER CARDS
|
||||
============================ #}
|
||||
|
||||
<meta name="twitter:card" content="summary_large_image" />
|
||||
<meta name="twitter:title" content="{{ meta_title }}" />
|
||||
<meta name="twitter:description" content="{{ meta_description }}" />
|
||||
<meta name="twitter:image" content="{{ meta_image }}" />
|
||||
{% endblock %}
|
||||
{% block body %}
|
||||
<div class="overflow-hidden bg-white py-12 sm:py-16">
|
||||
<div class="mx-auto max-w-2xl px-6 lg:max-w-7xl lg:px-8">
|
||||
<div class="max-w-4xl">
|
||||
<p class="text-base/7 font-semibold text-amber-600">
|
||||
Projets artistiques
|
||||
</p>
|
||||
<h1
|
||||
class="mt-2 text-4xl font-semibold tracking-tight text-pretty text-gray-900 sm:text-5xl"
|
||||
>
|
||||
Co-construction et Accompagnement
|
||||
</h1>
|
||||
<p class="mt-6 text-xl/8 text-balance text-gray-700">
|
||||
Vous avez un projet de classe, un projet d’école, un thème défini ou
|
||||
non, des idées d’un scénario avec vos élèves, vos enfants, vos
|
||||
résidents pour une occasion spécifique, vous visualisez
|
||||
approximativement la fin du projet mais ils sont trop nombreux,
|
||||
novices, pas toujours très autonomes et vous avez peu de temps, peu de
|
||||
place, peu de moyens, vous ne savez pas comment vous y prendre… Je
|
||||
suis là pour vous aider ! Proposition d’accompagnement à la création
|
||||
et la mise en jeu de projets artistiques à destination des enfants
|
||||
dans le milieu scolaire rural ou urbain, des personnes âgées en
|
||||
structure d’accueil…
|
||||
</p>
|
||||
</div>
|
||||
<section
|
||||
class="mt-20 grid grid-cols-1 lg:grid-cols-2 lg:gap-x-8 lg:gap-y-16"
|
||||
>
|
||||
<div class="lg:pr-8">
|
||||
<h2
|
||||
class="mt-8 text-2xl font-semibold tracking-tight text-pretty text-gray-900"
|
||||
>
|
||||
Le déroulé
|
||||
</h2>
|
||||
<ul class="mt-5 text-base/7 text-gray-600">
|
||||
<li>Définition du cahier des charges</li>
|
||||
<li>Définition du calendrier et des modalités d’intervention</li>
|
||||
<li>
|
||||
Co-écriture de textes avec les acteurs du projet Recherche et
|
||||
co-construction d’éléments de décors et accessoires
|
||||
</li>
|
||||
<li>
|
||||
Mise en jeu dans un espace dédié Présentation de la fin des
|
||||
travaux ou d’un spectacle en fin de parcours
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h2
|
||||
class="mt-8 text-2xl font-semibold tracking-tight text-pretty text-gray-900"
|
||||
>
|
||||
Objectifs
|
||||
</h2>
|
||||
<p class="mt-5 text-base/7 text-gray-600">
|
||||
Faire émerger et valoriser les compétences de chaque participant,
|
||||
allier exigence et bienveillance, développer des qualités de
|
||||
rigueur, de partage, d’écoute et de concentration.
|
||||
</p>
|
||||
<h2
|
||||
class="mt-8 text-2xl font-semibold tracking-tight text-pretty text-gray-900"
|
||||
>
|
||||
Construction de soi
|
||||
</h2>
|
||||
<p class="mt-5 text-base/7 text-gray-600">
|
||||
Développer sa propre sensibilité, son imaginaire, sa créativité,
|
||||
enrichir sa culture artistique et intellectuelle, faire naître ou
|
||||
conforter l’estime de soi, la confiance en soi.
|
||||
</p>
|
||||
</div>
|
||||
<div class="pt-16 lg:row-span-2 lg:-mr-16 xl:mr-auto">
|
||||
<div
|
||||
class="-mx-8 grid grid-cols-2 gap-4 sm:-mx-16 sm:grid-cols-4 lg:mx-0 lg:grid-cols-2 xl:gap-8"
|
||||
>
|
||||
<div
|
||||
class="aspect-square overflow-hidden rounded-xl shadow-xl outline-1 -outline-offset-1 outline-black/10"
|
||||
>
|
||||
<img
|
||||
src="/images/project/TM-création-décor-baleine.jpg"
|
||||
alt=""
|
||||
class="block size-full object-cover"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="-mt-8 aspect-square overflow-hidden rounded-xl shadow-xl outline-1 -outline-offset-1 outline-black/10 lg:-mt-40"
|
||||
>
|
||||
<img
|
||||
src="/images/project/TM-pieuvre.JPG"
|
||||
alt=""
|
||||
class="block size-full object-cover"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="aspect-square overflow-hidden rounded-xl shadow-xl outline-1 -outline-offset-1 outline-black/10"
|
||||
>
|
||||
<img
|
||||
src="/images/project/TM-hector-papier-maché.jpg"
|
||||
alt=""
|
||||
class="block size-full object-cover"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="-mt-8 aspect-square overflow-hidden rounded-xl shadow-xl outline-1 -outline-offset-1 outline-black/10 lg:-mt-40"
|
||||
>
|
||||
<img
|
||||
src="/images/project/TM-création-décor-baleine.jpg"
|
||||
alt=""
|
||||
class="block size-full object-cover"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="bg-white py-6 sm:py-8">
|
||||
<div class="mx-auto max-w-7xl px-6 lg:px-8">
|
||||
<div class="mx-auto mt-16 max-w-2xl sm:mt-20 lg:mt-24 lg:max-w-none">
|
||||
<dl
|
||||
class="grid max-w-xl grid-cols-1 gap-x-8 gap-y-16 lg:max-w-none lg:grid-cols-3"
|
||||
>
|
||||
<div class="flex flex-col">
|
||||
<dt class="text-base/7 font-semibold text-gray-900">
|
||||
<div
|
||||
class="mb-6 flex size-10 items-center justify-center rounded-lg bg-amber-600"
|
||||
>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="1.5"
|
||||
stroke="currentColor"
|
||||
class="size-6 text-white"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
d="M7.5 21 3 16.5m0 0L7.5 12M3 16.5h13.5m0-13.5L21 7.5m0 0L16.5 12M21 7.5H7.5"
|
||||
/>
|
||||
</svg>
|
||||
</div>Adaptabilité
|
||||
</dt>
|
||||
<dd class="mt-1 flex flex-auto flex-col text-base/7 text-gray-600">
|
||||
<p class="flex-auto">
|
||||
à votre budget, votre localisation, votre thème.
|
||||
</p>
|
||||
</dd>
|
||||
</div>
|
||||
<div class="flex flex-col">
|
||||
<dt class="text-base/7 font-semibold text-gray-900">
|
||||
<div
|
||||
class="mb-6 flex size-10 items-center justify-center rounded-lg bg-amber-600"
|
||||
>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="1.5"
|
||||
stroke="currentColor"
|
||||
class="size-6 text-white"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
d="m7.848 8.25 1.536.887M7.848 8.25a3 3 0 1 1-5.196-3 3 3 0 0 1 5.196 3Zm1.536.887a2.165 2.165 0 0 1 1.083 1.839c.005.351.054.695.14 1.024M9.384 9.137l2.077 1.199M7.848 15.75l1.536-.887m-1.536.887a3 3 0 1 1-5.196 3 3 3 0 0 1 5.196-3Zm1.536-.887a2.165 2.165 0 0 0 1.083-1.838c.005-.352.054-.695.14-1.025m-1.223 2.863 2.077-1.199m0-3.328a4.323 4.323 0 0 1 2.068-1.379l5.325-1.628a4.5 4.5 0 0 1 2.48-.044l.803.215-7.794 4.5m-2.882-1.664A4.33 4.33 0 0 0 10.607 12m3.736 0 7.794 4.5-.802.215a4.5 4.5 0 0 1-2.48-.043l-5.326-1.629a4.324 4.324 0 0 1-2.068-1.379M14.343 12l-2.882 1.664"
|
||||
/>
|
||||
</svg>
|
||||
</div>Sur mesure
|
||||
</dt>
|
||||
<dd class="mt-1 flex flex-auto flex-col text-base/7 text-gray-600">
|
||||
<p class="flex-auto">
|
||||
projet unique et personnalisé.
|
||||
</p>
|
||||
</dd>
|
||||
</div>
|
||||
<div class="flex flex-col">
|
||||
<dt class="text-base/7 font-semibold text-gray-900">
|
||||
<div
|
||||
class="mb-6 flex size-10 items-center justify-center rounded-lg bg-amber-600"
|
||||
>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="1.5"
|
||||
stroke="currentColor"
|
||||
class="size-6 text-white"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
d="M9.813 15.904 9 18.75l-.813-2.846a4.5 4.5 0 0 0-3.09-3.09L2.25 12l2.846-.813a4.5 4.5 0 0 0 3.09-3.09L9 5.25l.813 2.846a4.5 4.5 0 0 0 3.09 3.09L15.75 12l-2.846.813a4.5 4.5 0 0 0-3.09 3.09ZM18.259 8.715 18 9.75l-.259-1.035a3.375 3.375 0 0 0-2.455-2.456L14.25 6l1.036-.259a3.375 3.375 0 0 0 2.455-2.456L18 2.25l.259 1.035a3.375 3.375 0 0 0 2.456 2.456L21.75 6l-1.035.259a3.375 3.375 0 0 0-2.456 2.456ZM16.894 20.567 16.5 21.75l-.394-1.183a2.25 2.25 0 0 0-1.423-1.423L13.5 18.75l1.183-.394a2.25 2.25 0 0 0 1.423-1.423l.394-1.183.394 1.183a2.25 2.25 0 0 0 1.423 1.423l1.183.394-1.183.394a2.25 2.25 0 0 0-1.423 1.423Z"
|
||||
/>
|
||||
</svg>
|
||||
</div>Originalité et créativité
|
||||
</dt>
|
||||
<dd class="mt-1 flex flex-auto flex-col text-base/7 text-gray-600">
|
||||
<p class="flex-auto">
|
||||
accessoires et scénographie créés avec les participants .
|
||||
</p>
|
||||
</dd>
|
||||
</div>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
189
templates/page/show.html.twig
Normal file
189
templates/page/show.html.twig
Normal file
@@ -0,0 +1,189 @@
|
||||
{% extends 'base.html.twig' %}
|
||||
{% block metadata %}
|
||||
{# ============================
|
||||
METADATA / SEO
|
||||
============================ #}
|
||||
|
||||
{% set meta_title = meta_title is defined
|
||||
? meta_title
|
||||
: 'Spectacles vivants et artisanat au service des collectivités'
|
||||
%}
|
||||
{% set meta_description = meta_description is defined
|
||||
? meta_description
|
||||
: 'Découvrez des spectacles vivants et des fabrications artisanales conçus pour les collectivités, écoles et lieux culturels, alliant création, transmission et savoir-faire.'
|
||||
%}
|
||||
{% set meta_image = meta_image is defined
|
||||
? meta_image
|
||||
: asset('images/logo.jpg')
|
||||
%}
|
||||
{% set meta_url = meta_url is defined ? meta_url : app.request.uri %}
|
||||
{% set meta_site_name = meta_site_name is defined
|
||||
? meta_site_name
|
||||
: 'Nom du site'
|
||||
%}
|
||||
{% set meta_type = meta_type is defined ? meta_type : 'website' %}
|
||||
|
||||
<title>
|
||||
{{ meta_title }}
|
||||
</title>
|
||||
|
||||
<meta name="description" content="{{ meta_description }}" />
|
||||
<meta name="robots" content="index, follow" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta charset="utf-8" />
|
||||
|
||||
<link rel="canonical" href="{{ meta_url }}" />
|
||||
|
||||
{# ============================
|
||||
OPEN GRAPH (Facebook, LinkedIn…)
|
||||
============================ #}
|
||||
|
||||
<meta property="og:title" content="{{ meta_title }}" />
|
||||
<meta property="og:description" content="{{ meta_description }}" />
|
||||
<meta property="og:type" content="{{ meta_type }}" />
|
||||
<meta property="og:url" content="{{ meta_url }}" />
|
||||
<meta property="og:image" content="{{ meta_image }}" />
|
||||
<meta property="og:site_name" content="{{ meta_site_name }}" />
|
||||
<meta property="og:locale" content="fr_FR" />
|
||||
|
||||
{# Optionnel mais recommandé #}
|
||||
<meta property="og:image:width" content="1200" />
|
||||
<meta property="og:image:height" content="630" />
|
||||
|
||||
{# ============================
|
||||
TWITTER CARDS
|
||||
============================ #}
|
||||
|
||||
<meta name="twitter:card" content="summary_large_image" />
|
||||
<meta name="twitter:title" content="{{ meta_title }}" />
|
||||
<meta name="twitter:description" content="{{ meta_description }}" />
|
||||
<meta name="twitter:image" content="{{ meta_image }}" />
|
||||
{% endblock %}
|
||||
{% block body %}
|
||||
<div class="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
|
||||
<!-- We've used 3xl here, but feel free to try other max-widths based on your needs -->
|
||||
<div class="mx-auto max-w-7xl">
|
||||
<!-- Content goes here -->
|
||||
{{
|
||||
render(
|
||||
controller(
|
||||
'App\\Controller\\RenderFeatureController::news',
|
||||
{
|
||||
isCarousel: true
|
||||
}
|
||||
)
|
||||
)
|
||||
}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="bg-white py-6 sm:py-8">
|
||||
<div class="mx-auto max-w-7xl px-6 lg:px-8">
|
||||
<div class="mx-auto max-w-2xl lg:mx-0">
|
||||
<h2
|
||||
class="text-4xl font-semibold tracking-tight text-pretty text-gray-900 sm:text-5xl"
|
||||
>
|
||||
Conte et marionnettes
|
||||
</h2>
|
||||
<p class="mt-6 text-lg/8 text-gray-600">
|
||||
Une démarche de création pour introduire, enrichir, conclure des
|
||||
projets de classe, des projets d’école ou s’inscrire dans la
|
||||
thématique d’une manifestation ou d’un projet global. Un spectacle
|
||||
pour s’initier à l’écoute, la concentration et devenir un spectateur
|
||||
averti. Un texte avec des mots choisis pour élargir le vocabulaire du
|
||||
jeune public. Des thématiques autour de problématiques actuelles,
|
||||
-relation avec les autres, respect de l’environnement- pour ouvrir
|
||||
débat et questionnement. Des choix scénographiques privilégiant des
|
||||
décors construits à partir d’éléments existants ou transformés.
|
||||
</p>
|
||||
</div>
|
||||
<div class="mx-auto mt-16 max-w-2xl sm:mt-20 lg:mt-24 lg:max-w-none">
|
||||
<dl
|
||||
class="grid max-w-xl grid-cols-1 gap-x-8 gap-y-16 lg:max-w-none lg:grid-cols-3"
|
||||
>
|
||||
<div class="flex flex-col">
|
||||
<dt class="text-base/7 font-semibold text-gray-900">
|
||||
<div
|
||||
class="mb-6 flex size-10 items-center justify-center rounded-lg bg-amber-600"
|
||||
>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="1.5"
|
||||
stroke="currentColor"
|
||||
class="size-6 text-white"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
d="M9.813 15.904 9 18.75l-.813-2.846a4.5 4.5 0 0 0-3.09-3.09L2.25 12l2.846-.813a4.5 4.5 0 0 0 3.09-3.09L9 5.25l.813 2.846a4.5 4.5 0 0 0 3.09 3.09L15.75 12l-2.846.813a4.5 4.5 0 0 0-3.09 3.09ZM18.259 8.715 18 9.75l-.259-1.035a3.375 3.375 0 0 0-2.455-2.456L14.25 6l1.036-.259a3.375 3.375 0 0 0 2.455-2.456L18 2.25l.259 1.035a3.375 3.375 0 0 0 2.456 2.456L21.75 6l-1.035.259a3.375 3.375 0 0 0-2.456 2.456ZM16.894 20.567 16.5 21.75l-.394-1.183a2.25 2.25 0 0 0-1.423-1.423L13.5 18.75l1.183-.394a2.25 2.25 0 0 0 1.423-1.423l.394-1.183.394 1.183a2.25 2.25 0 0 0 1.423 1.423l1.183.394-1.183.394a2.25 2.25 0 0 0-1.423 1.423Z"
|
||||
/>
|
||||
</svg>
|
||||
</div>Créativité
|
||||
</dt>
|
||||
<dd class="mt-1 flex flex-auto flex-col text-base/7 text-gray-600">
|
||||
<p class="flex-auto">
|
||||
conte créé à partir d’expériences vécues ; des objets de seconde
|
||||
vie prennent forment dans ce conte.
|
||||
</p>
|
||||
</dd>
|
||||
</div>
|
||||
<div class="flex flex-col">
|
||||
<dt class="text-base/7 font-semibold text-gray-900">
|
||||
<div
|
||||
class="mb-6 flex size-10 items-center justify-center rounded-lg bg-amber-600"
|
||||
>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="1.5"
|
||||
stroke="currentColor"
|
||||
class="size-6 text-white"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
d="m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607ZM10.5 7.5v6m3-3h-6"
|
||||
/>
|
||||
</svg>
|
||||
</div>Disponibilité
|
||||
</dt>
|
||||
<dd class="mt-1 flex flex-auto flex-col text-base/7 text-gray-600">
|
||||
<p class="flex-auto">
|
||||
déplacement partout en France pour partager un temps artistique.
|
||||
</p>
|
||||
</dd>
|
||||
</div>
|
||||
<div class="flex flex-col">
|
||||
<dt class="text-base/7 font-semibold text-gray-900">
|
||||
<div
|
||||
class="mb-6 flex size-10 items-center justify-center rounded-lg bg-amber-600"
|
||||
>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="1.5"
|
||||
stroke="currentColor"
|
||||
class="size-6 text-white"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
d="M7.5 21 3 16.5m0 0L7.5 12M3 16.5h13.5m0-13.5L21 7.5m0 0L16.5 12M21 7.5H7.5"
|
||||
/>
|
||||
</svg>
|
||||
</div>Adaptabilité
|
||||
</dt>
|
||||
<dd class="mt-1 flex flex-auto flex-col text-base/7 text-gray-600">
|
||||
<p class="flex-auto">
|
||||
Jeu et interactions en fonction du public
|
||||
</p>
|
||||
</dd>
|
||||
</div>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
237
templates/render_feature/news.html.twig
Normal file
237
templates/render_feature/news.html.twig
Normal file
@@ -0,0 +1,237 @@
|
||||
{% block body %}
|
||||
{% if (news|length) > 0 %}
|
||||
{% if isCarousel == false %}
|
||||
<div class="bg-white py-24 sm:py-32">
|
||||
<div class="mx-auto max-w-7xl px-6 lg:px-8">
|
||||
<div class="mx-auto max-w-2xl lg:max-w-4xl">
|
||||
<h2
|
||||
class="text-4xl font-semibold tracking-tight text-pretty text-gray-900 sm:text-5xl"
|
||||
>
|
||||
Les spectacles
|
||||
</h2>
|
||||
<p class="mt-2 text-lg/8 text-gray-600">
|
||||
Retrouvez mes derniers spectacles.
|
||||
</p>
|
||||
<div class="mt-16 space-y-20 lg:mt-20">
|
||||
{% for new in news %}
|
||||
<article
|
||||
class="relative isolate flex flex-col gap-8 lg:flex-row"
|
||||
>
|
||||
{% if new.newsImages is defined %}
|
||||
<div
|
||||
class="relative aspect-video sm:aspect-2/1 lg:aspect-square lg:w-64 lg:shrink-0"
|
||||
>
|
||||
<img
|
||||
src="{{ new.newsImages[0].image.url }}"
|
||||
alt=""
|
||||
class="absolute inset-0 size-full rounded-2xl bg-gray-50 object-cover"
|
||||
/>
|
||||
<div
|
||||
class="absolute inset-0 rounded-2xl inset-ring inset-ring-gray-900/10"
|
||||
></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div>
|
||||
<div class="flex items-center gap-x-4 text-xs">
|
||||
<time
|
||||
datetime="{{ new.updatedAt|date('Y-m-d') }}"
|
||||
class="text-gray-500"
|
||||
>
|
||||
{{ new.updatedAt|date('d M Y') }}
|
||||
</time>
|
||||
</div>
|
||||
<div class="group relative max-w-xl">
|
||||
<h3
|
||||
class="mt-3 text-lg/6 font-semibold text-gray-900 group-hover:text-gray-600"
|
||||
>
|
||||
<a href="#">
|
||||
<span class="absolute inset-0"></span>
|
||||
{{ new.title }}
|
||||
</a>
|
||||
</h3>
|
||||
<p class="mt-5 text-sm/6 text-gray-600">
|
||||
{{ new.description|u.truncate(300, '…', false)|raw }}
|
||||
</p>
|
||||
</div>
|
||||
<div
|
||||
class="mt-6 flex border-t border-gray-900/5 pt-6 items-center gap-x-2"
|
||||
>
|
||||
<span class="text-sm font-medium text-gray-700">
|
||||
Partager :
|
||||
</span>
|
||||
|
||||
{% set shareUrl =
|
||||
absolute_url(
|
||||
path(
|
||||
'actualites',
|
||||
{
|
||||
slug: news.slug
|
||||
}
|
||||
)
|
||||
)
|
||||
%}
|
||||
|
||||
<!-- LinkedIn -->
|
||||
<a
|
||||
href="https://www.linkedin.com/sharing/share-offsite/?url={{
|
||||
shareUrl
|
||||
}}"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="flex items-center justify-center size-9 rounded-full bg-gray-100 text-gray-600 hover:bg-amber-500/10 hover:text-amber-500 transition"
|
||||
aria-label="Partager sur LinkedIn"
|
||||
>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="16"
|
||||
height="16"
|
||||
fill="currentColor"
|
||||
class="bi bi-linkedin"
|
||||
viewbox="0 0 16 16"
|
||||
>
|
||||
<path
|
||||
d="M0 1.146C0 .513.526 0 1.175 0h13.65C15.474 0 16 .513 16 1.146v13.708c0 .633-.526 1.146-1.175 1.146H1.175C.526 16 0 15.487 0 14.854zm4.943 12.248V6.169H2.542v7.225zm-1.2-8.212c.837 0 1.358-.554 1.358-1.248-.015-.709-.52-1.248-1.342-1.248S2.4 3.226 2.4 3.934c0 .694.521 1.248 1.327 1.248zm4.908 8.212V9.359c0-.216.016-.432.08-.586.173-.431.568-.878 1.232-.878.869 0 1.216.662 1.216 1.634v3.865h2.401V9.25c0-2.22-1.184-3.252-2.764-3.252-1.274 0-1.845.7-2.165 1.193v.025h-.016l.016-.025V6.169h-2.4c.03.678 0 7.225 0 7.225z"
|
||||
/>
|
||||
</svg>
|
||||
</a>
|
||||
|
||||
<!-- Facebook -->
|
||||
<a
|
||||
href="https://www.facebook.com/sharer/sharer.php?u={{
|
||||
shareUrl
|
||||
}}"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="flex items-center justify-center size-9 rounded-full bg-gray-100 text-gray-600 hover:bg-amber-500/10 hover:text-amber-500 transition"
|
||||
aria-label="Partager sur Facebook"
|
||||
>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="16"
|
||||
height="16"
|
||||
fill="currentColor"
|
||||
class="bi bi-facebook"
|
||||
viewbox="0 0 16 16"
|
||||
>
|
||||
<path
|
||||
d="M16 8.049c0-4.446-3.582-8.05-8-8.05C3.58 0-.002 3.603-.002 8.05c0 4.017 2.926 7.347 6.75 7.951v-5.625h-2.03V8.05H6.75V6.275c0-2.017 1.195-3.131 3.022-3.131.876 0 1.791.157 1.791.157v1.98h-1.009c-.993 0-1.303.621-1.303 1.258v1.51h2.218l-.354 2.326H9.25V16c3.824-.604 6.75-3.934 6.75-7.951"
|
||||
/>
|
||||
</svg>
|
||||
</a>
|
||||
|
||||
<!-- Twitter / X -->
|
||||
<a
|
||||
href="https://twitter.com/intent/tweet?url={{
|
||||
shareUrl
|
||||
}}&text={{ new.title|url_encode }}"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="flex items-center justify-center size-9 rounded-full bg-gray-100 text-gray-600 hover:bg-amber-500/10 hover:text-amber-500 transition"
|
||||
aria-label="Partager sur Twitter"
|
||||
>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="16"
|
||||
height="16"
|
||||
fill="currentColor"
|
||||
class="bi bi-twitter"
|
||||
viewbox="0 0 16 16"
|
||||
>
|
||||
<path
|
||||
d="M5.026 15c6.038 0 9.341-5.003 9.341-9.334q.002-.211-.006-.422A6.7 6.7 0 0 0 16 3.542a6.7 6.7 0 0 1-1.889.518 3.3 3.3 0 0 0 1.447-1.817 6.5 6.5 0 0 1-2.087.793A3.286 3.286 0 0 0 7.875 6.03a9.32 9.32 0 0 1-6.767-3.429 3.29 3.29 0 0 0 1.018 4.382A3.3 3.3 0 0 1 .64 6.575v.045a3.29 3.29 0 0 0 2.632 3.218 3.2 3.2 0 0 1-.865.115 3 3 0 0 1-.614-.057 3.28 3.28 0 0 0 3.067 2.277A6.6 6.6 0 0 1 .78 13.58a6 6 0 0 1-.78-.045A9.34 9.34 0 0 0 5.026 15"
|
||||
/>
|
||||
</svg>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="bg-white py-24 sm:py-32">
|
||||
<div class="mx-auto px-6 lg:px-8">
|
||||
<h2 class="text-4xl font-semibold text-gray-900 sm:text-5xl">
|
||||
Les spectacles
|
||||
</h2>
|
||||
<p class="mt-2 text-lg text-gray-600">
|
||||
Retrouvez mes derniers spectacles.
|
||||
</p>
|
||||
|
||||
<div class="mt-16 flex">
|
||||
<div class="swiper" data-controller="render-feature--news-carousel">
|
||||
<div class="swiper-wrapper">
|
||||
{% for new in news %}
|
||||
{% set images = new.newsImages|default([]) %}
|
||||
{% set mainImage = images|first %}
|
||||
{% set secondaryImages = images|slice(1) %}
|
||||
<div class="swiper-slide">
|
||||
<article class="flex flex-col lg:flex-row rounded-2xl">
|
||||
{# Image à gauche #}
|
||||
{% if mainImage %}
|
||||
<div
|
||||
class="w-full lg:w-1/2 h-100 pl-20 pr-20 lg:pr-10 py-10"
|
||||
>
|
||||
<img
|
||||
src="{{ new.newsImages[0].image.url }}"
|
||||
alt="{{ new.title }}"
|
||||
class="w-full h-full object-cover"
|
||||
/>
|
||||
{% if secondaryImages is not empty %}
|
||||
<div class="flex gap-2 mt-6">
|
||||
{% for image in secondaryImages %}
|
||||
<img
|
||||
src="{{ image.image.url }}"
|
||||
alt="{{ new.title }}"
|
||||
class="w-20 h-20 object-cover rounded-lg"
|
||||
/>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{# Contenu à droite #}
|
||||
<div
|
||||
class="flex flex-col justify-center w-full lg:w-1/2 pr-20 pl-20 lg:pl-10"
|
||||
>
|
||||
<time class="text-xs text-gray-500">
|
||||
{{ new.updatedAt|date('d M Y') }}
|
||||
</time>
|
||||
|
||||
<a
|
||||
class="mt-2 text-xl font-semibold text-gray-900"
|
||||
href="{{
|
||||
path(
|
||||
'actualites',
|
||||
{
|
||||
slug: new.slug
|
||||
}
|
||||
)
|
||||
}}"
|
||||
>
|
||||
{{ new.title }}
|
||||
</a>
|
||||
<p class="mt-4 text-sm text-gray-600">
|
||||
{{
|
||||
new.description|striptags|u.truncate(220, '…', true)
|
||||
}}
|
||||
</p>
|
||||
</div>
|
||||
</article>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
<div class="swiper-pagination"></div>
|
||||
<div class="swiper-button-prev"></div>
|
||||
<div class="swiper-button-next"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
17
templates/sitemap/sitemap.xml.twig
Normal file
17
templates/sitemap/sitemap.xml.twig
Normal file
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><urlset
|
||||
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
|
||||
>
|
||||
{% for url in urls %}
|
||||
<url>
|
||||
<loc>
|
||||
{{ absolute_url(url.loc) }}
|
||||
</loc>
|
||||
<changefreq>
|
||||
weekly
|
||||
</changefreq>
|
||||
<priority>
|
||||
{{ url.priority }}
|
||||
</priority>
|
||||
</url>
|
||||
{% endfor %}
|
||||
</urlset>
|
||||
Reference in New Issue
Block a user