Simplified
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -8,3 +8,6 @@ composer.lock
|
||||
# Base de données SQLite
|
||||
/database/*.sqlite
|
||||
/database/*.db
|
||||
|
||||
# Cache et logs
|
||||
/var/
|
||||
@@ -1,151 +0,0 @@
|
||||
<?php
|
||||
|
||||
use Twig\Environment;
|
||||
use Twig\Error\LoaderError;
|
||||
use Twig\Error\RuntimeError;
|
||||
use Twig\Extension\CoreExtension;
|
||||
use Twig\Extension\SandboxExtension;
|
||||
use Twig\Markup;
|
||||
use Twig\Sandbox\SecurityError;
|
||||
use Twig\Sandbox\SecurityNotAllowedTagError;
|
||||
use Twig\Sandbox\SecurityNotAllowedFilterError;
|
||||
use Twig\Sandbox\SecurityNotAllowedFunctionError;
|
||||
use Twig\Source;
|
||||
use Twig\Template;
|
||||
use Twig\TemplateWrapper;
|
||||
|
||||
/* pages/home.twig */
|
||||
class __TwigTemplate_9471f8175ca69249c24a559aa9930d1d extends Template
|
||||
{
|
||||
private Source $source;
|
||||
/**
|
||||
* @var array<string, Template>
|
||||
*/
|
||||
private array $macros = [];
|
||||
|
||||
public function __construct(Environment $env)
|
||||
{
|
||||
parent::__construct($env);
|
||||
|
||||
$this->source = $this->getSourceContext();
|
||||
|
||||
$this->blocks = [
|
||||
'title' => [$this, 'block_title'],
|
||||
'content' => [$this, 'block_content'],
|
||||
];
|
||||
}
|
||||
|
||||
protected function doGetParent(array $context): bool|string|Template|TemplateWrapper
|
||||
{
|
||||
// line 1
|
||||
return "layout.twig";
|
||||
}
|
||||
|
||||
protected function doDisplay(array $context, array $blocks = []): iterable
|
||||
{
|
||||
$macros = $this->macros;
|
||||
$this->parent = $this->load("layout.twig", 1);
|
||||
yield from $this->parent->unwrap()->yield($context, array_merge($this->blocks, $blocks));
|
||||
}
|
||||
|
||||
// line 3
|
||||
/**
|
||||
* @return iterable<null|scalar|\Stringable>
|
||||
*/
|
||||
public function block_title(array $context, array $blocks = []): iterable
|
||||
{
|
||||
$macros = $this->macros;
|
||||
yield "Mon Blog";
|
||||
yield from [];
|
||||
}
|
||||
|
||||
// line 5
|
||||
/**
|
||||
* @return iterable<null|scalar|\Stringable>
|
||||
*/
|
||||
public function block_content(array $context, array $blocks = []): iterable
|
||||
{
|
||||
$macros = $this->macros;
|
||||
// line 6
|
||||
$context['_parent'] = $context;
|
||||
$context['_seq'] = CoreExtension::ensureTraversable(($context["posts"] ?? null));
|
||||
$context['_iterated'] = false;
|
||||
foreach ($context['_seq'] as $context["_key"] => $context["post"]) {
|
||||
// line 7
|
||||
yield "<article class=\"post\">
|
||||
<h2>";
|
||||
// line 8
|
||||
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["post"], "title", [], "any", false, false, false, 8), "html", null, true);
|
||||
yield "</h2>
|
||||
|
||||
<div class=\"post-meta\">
|
||||
<small>Publié le ";
|
||||
// line 11
|
||||
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Twig\Extension\CoreExtension']->formatDate(CoreExtension::getAttribute($this->env, $this->source, $context["post"], "createdAt", [], "any", false, false, false, 11), "d/m/Y à H:i"), "html", null, true);
|
||||
yield "</small>
|
||||
";
|
||||
// line 12
|
||||
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["post"], "isRecent", [7], "method", false, false, false, 12)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
|
||||
// line 13
|
||||
yield " <span class=\"badge badge-new\">Nouveau</span>
|
||||
";
|
||||
}
|
||||
// line 15
|
||||
yield " </div>
|
||||
|
||||
<p>";
|
||||
// line 17
|
||||
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["post"], "getExcerpt", [200], "method", false, false, false, 17), "html", null, true);
|
||||
yield "</p>
|
||||
|
||||
<p>
|
||||
<a href=\"/article/";
|
||||
// line 20
|
||||
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["post"], "getSlug", [], "method", false, false, false, 20), "html", null, true);
|
||||
yield "\">Lire la suite →</a>
|
||||
</p>
|
||||
</article>
|
||||
";
|
||||
$context['_iterated'] = true;
|
||||
}
|
||||
// line 23
|
||||
if (!$context['_iterated']) {
|
||||
// line 24
|
||||
yield "<p>Aucun article publié.</p>
|
||||
";
|
||||
}
|
||||
$_parent = $context['_parent'];
|
||||
unset($context['_seq'], $context['_key'], $context['post'], $context['_parent'], $context['_iterated']);
|
||||
$context = array_intersect_key($context, $_parent) + $_parent;
|
||||
yield from [];
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function getTemplateName(): string
|
||||
{
|
||||
return "pages/home.twig";
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function isTraitable(): bool
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function getDebugInfo(): array
|
||||
{
|
||||
return array ( 114 => 24, 112 => 23, 104 => 20, 98 => 17, 94 => 15, 90 => 13, 88 => 12, 84 => 11, 78 => 8, 75 => 7, 70 => 6, 63 => 5, 52 => 3, 41 => 1,);
|
||||
}
|
||||
|
||||
public function getSourceContext(): Source
|
||||
{
|
||||
return new Source("", "pages/home.twig", "/home/julien/Documents/Git/julien/blog-slim/views/pages/home.twig");
|
||||
}
|
||||
}
|
||||
@@ -109,68 +109,67 @@ class __TwigTemplate_1bca1bf826c65d946ceb9c6169e6cfec extends Template
|
||||
|
||||
<p>
|
||||
<label for=\"editor\">Contenu<br>
|
||||
<textarea id=\"editor\" name=\"content\" rows=\"6\" required>";
|
||||
// line 31
|
||||
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(((CoreExtension::getAttribute($this->env, $this->source, ($context["post"] ?? null), "content", [], "any", true, true, false, 31)) ? (Twig\Extension\CoreExtension::default(CoreExtension::getAttribute($this->env, $this->source, ($context["post"] ?? null), "content", [], "any", false, false, false, 31), "")) : ("")), "html", null, true);
|
||||
yield "</textarea>
|
||||
";
|
||||
// line 32
|
||||
yield " <textarea id=\"editor\" name=\"content\" rows=\"6\" required></textarea>
|
||||
</label>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<button type=\"submit\" class=\"btn btn-primary\">
|
||||
";
|
||||
// line 37
|
||||
if (((array_key_exists("post", $context) && !(null === ($context["post"] ?? null))) && (CoreExtension::getAttribute($this->env, $this->source, ($context["post"] ?? null), "id", [], "any", false, false, false, 37) > 0))) {
|
||||
// line 38
|
||||
// line 38
|
||||
if (((array_key_exists("post", $context) && !(null === ($context["post"] ?? null))) && (CoreExtension::getAttribute($this->env, $this->source, ($context["post"] ?? null), "id", [], "any", false, false, false, 38) > 0))) {
|
||||
// line 39
|
||||
yield " Mettre à jour
|
||||
";
|
||||
} else {
|
||||
// line 40
|
||||
// line 41
|
||||
yield " Enregistrer
|
||||
";
|
||||
}
|
||||
// line 42
|
||||
// line 43
|
||||
yield " </button>
|
||||
<a href=\"/admin\" class=\"btn btn-secondary\">Annuler</a>
|
||||
</p>
|
||||
</form>
|
||||
|
||||
";
|
||||
// line 47
|
||||
if (((array_key_exists("post", $context) && !(null === ($context["post"] ?? null))) && (CoreExtension::getAttribute($this->env, $this->source, ($context["post"] ?? null), "id", [], "any", false, false, false, 47) > 0))) {
|
||||
// line 48
|
||||
// line 48
|
||||
if (((array_key_exists("post", $context) && !(null === ($context["post"] ?? null))) && (CoreExtension::getAttribute($this->env, $this->source, ($context["post"] ?? null), "id", [], "any", false, false, false, 48) > 0))) {
|
||||
// line 49
|
||||
yield "<hr>
|
||||
<small>
|
||||
Créé le : ";
|
||||
// line 50
|
||||
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Twig\Extension\CoreExtension']->formatDate(CoreExtension::getAttribute($this->env, $this->source, ($context["post"] ?? null), "createdAt", [], "any", false, false, false, 50), "d/m/Y à H:i"), "html", null, true);
|
||||
// line 51
|
||||
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Twig\Extension\CoreExtension']->formatDate(CoreExtension::getAttribute($this->env, $this->source, ($context["post"] ?? null), "createdAt", [], "any", false, false, false, 51), "d/m/Y à H:i"), "html", null, true);
|
||||
yield "<br>
|
||||
Modifié le : ";
|
||||
// line 51
|
||||
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Twig\Extension\CoreExtension']->formatDate(CoreExtension::getAttribute($this->env, $this->source, ($context["post"] ?? null), "updatedAt", [], "any", false, false, false, 51), "d/m/Y à H:i"), "html", null, true);
|
||||
// line 52
|
||||
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Twig\Extension\CoreExtension']->formatDate(CoreExtension::getAttribute($this->env, $this->source, ($context["post"] ?? null), "updatedAt", [], "any", false, false, false, 52), "d/m/Y à H:i"), "html", null, true);
|
||||
yield "
|
||||
</small>
|
||||
";
|
||||
}
|
||||
// line 54
|
||||
// line 55
|
||||
yield "
|
||||
";
|
||||
yield from [];
|
||||
}
|
||||
|
||||
// line 57
|
||||
// line 58
|
||||
/**
|
||||
* @return iterable<null|scalar|\Stringable>
|
||||
*/
|
||||
public function block_scripts(array $context, array $blocks = []): iterable
|
||||
{
|
||||
$macros = $this->macros;
|
||||
// line 58
|
||||
// line 59
|
||||
yield "<script src=\"/js/tinymce/tinymce.min.js\" referrerpolicy=\"origin\" crossorigin=\"anonymous\"></script>
|
||||
<script>
|
||||
tinymce.init({
|
||||
selector: '#editor',
|
||||
base_url: '/js/tinymce', // assure le bon chemin relatif
|
||||
base_url: '/js/tinymce',
|
||||
license_key: 'gpl',
|
||||
height: 400,
|
||||
menubar: false,
|
||||
@@ -189,6 +188,11 @@ class __TwigTemplate_1bca1bf826c65d946ceb9c6169e6cfec extends Template
|
||||
].join(' '),
|
||||
content_style: 'body {font-family:Helvetica,Arial,sans-serif;font-size:14px}'
|
||||
});
|
||||
|
||||
// Synchroniser TinyMCE avant soumission du formulaire
|
||||
document.getElementById('articleForm').addEventListener('submit', function (e) {
|
||||
tinymce.triggerSave();
|
||||
});
|
||||
</script>
|
||||
";
|
||||
yield from [];
|
||||
@@ -215,7 +219,7 @@ class __TwigTemplate_1bca1bf826c65d946ceb9c6169e6cfec extends Template
|
||||
*/
|
||||
public function getDebugInfo(): array
|
||||
{
|
||||
return array ( 169 => 58, 162 => 57, 156 => 54, 150 => 51, 146 => 50, 142 => 48, 140 => 47, 133 => 42, 129 => 40, 125 => 38, 123 => 37, 114 => 31, 105 => 25, 98 => 22, 94 => 19, 90 => 17, 86 => 15, 84 => 14, 80 => 12, 73 => 11, 66 => 7, 62 => 5, 60 => 4, 53 => 3, 42 => 1,);
|
||||
return array ( 168 => 59, 161 => 58, 155 => 55, 149 => 52, 145 => 51, 141 => 49, 139 => 48, 132 => 43, 128 => 41, 124 => 39, 122 => 38, 114 => 32, 105 => 25, 98 => 22, 94 => 19, 90 => 17, 86 => 15, 84 => 14, 80 => 12, 73 => 11, 66 => 7, 62 => 5, 60 => 4, 53 => 3, 42 => 1,);
|
||||
}
|
||||
|
||||
public function getSourceContext(): Source
|
||||
|
||||
@@ -1,182 +0,0 @@
|
||||
<?php
|
||||
|
||||
use Twig\Environment;
|
||||
use Twig\Error\LoaderError;
|
||||
use Twig\Error\RuntimeError;
|
||||
use Twig\Extension\CoreExtension;
|
||||
use Twig\Extension\SandboxExtension;
|
||||
use Twig\Markup;
|
||||
use Twig\Sandbox\SecurityError;
|
||||
use Twig\Sandbox\SecurityNotAllowedTagError;
|
||||
use Twig\Sandbox\SecurityNotAllowedFilterError;
|
||||
use Twig\Sandbox\SecurityNotAllowedFunctionError;
|
||||
use Twig\Source;
|
||||
use Twig\Template;
|
||||
use Twig\TemplateWrapper;
|
||||
|
||||
/* pages/admin.twig */
|
||||
class __TwigTemplate_9953ee20db26573f1b0e2b3758f3423d extends Template
|
||||
{
|
||||
private Source $source;
|
||||
/**
|
||||
* @var array<string, Template>
|
||||
*/
|
||||
private array $macros = [];
|
||||
|
||||
public function __construct(Environment $env)
|
||||
{
|
||||
parent::__construct($env);
|
||||
|
||||
$this->source = $this->getSourceContext();
|
||||
|
||||
$this->blocks = [
|
||||
'title' => [$this, 'block_title'],
|
||||
'content' => [$this, 'block_content'],
|
||||
];
|
||||
}
|
||||
|
||||
protected function doGetParent(array $context): bool|string|Template|TemplateWrapper
|
||||
{
|
||||
// line 1
|
||||
return "layout.twig";
|
||||
}
|
||||
|
||||
protected function doDisplay(array $context, array $blocks = []): iterable
|
||||
{
|
||||
$macros = $this->macros;
|
||||
$this->parent = $this->load("layout.twig", 1);
|
||||
yield from $this->parent->unwrap()->yield($context, array_merge($this->blocks, $blocks));
|
||||
}
|
||||
|
||||
// line 3
|
||||
/**
|
||||
* @return iterable<null|scalar|\Stringable>
|
||||
*/
|
||||
public function block_title(array $context, array $blocks = []): iterable
|
||||
{
|
||||
$macros = $this->macros;
|
||||
yield "Admin – Gestion des articles";
|
||||
yield from [];
|
||||
}
|
||||
|
||||
// line 5
|
||||
/**
|
||||
* @return iterable<null|scalar|\Stringable>
|
||||
*/
|
||||
public function block_content(array $context, array $blocks = []): iterable
|
||||
{
|
||||
$macros = $this->macros;
|
||||
// line 6
|
||||
yield "<h2>Gestion des articles</h2>
|
||||
|
||||
<!-- Lien d'ajout -->
|
||||
<p>
|
||||
<a href=\"/admin/edit/0\" class=\"btn btn-primary\">+ Ajouter un article</a>
|
||||
</p>
|
||||
|
||||
";
|
||||
// line 13
|
||||
if ((($tmp = !Twig\Extension\CoreExtension::testEmpty(($context["posts"] ?? null))) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
|
||||
// line 14
|
||||
yield "<table class=\"admin-table\">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Titre</th>
|
||||
<th>Créé le</th>
|
||||
<th>Modifié le</th>
|
||||
<th>Actions</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
";
|
||||
// line 24
|
||||
$context['_parent'] = $context;
|
||||
$context['_seq'] = CoreExtension::ensureTraversable(($context["posts"] ?? null));
|
||||
foreach ($context['_seq'] as $context["_key"] => $context["post"]) {
|
||||
// line 25
|
||||
yield " <tr>
|
||||
<td>
|
||||
<strong>";
|
||||
// line 27
|
||||
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["post"], "title", [], "any", false, false, false, 27), "html", null, true);
|
||||
yield "</strong>
|
||||
";
|
||||
// line 28
|
||||
if ((($tmp = CoreExtension::getAttribute($this->env, $this->source, $context["post"], "isRecent", [7], "method", false, false, false, 28)) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
|
||||
// line 29
|
||||
yield " <span class=\"badge badge-new\">Nouveau</span>
|
||||
";
|
||||
}
|
||||
// line 31
|
||||
yield " </td>
|
||||
<td>";
|
||||
// line 32
|
||||
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Twig\Extension\CoreExtension']->formatDate(CoreExtension::getAttribute($this->env, $this->source, $context["post"], "createdAt", [], "any", false, false, false, 32), "d/m/Y H:i"), "html", null, true);
|
||||
yield "</td>
|
||||
<td>";
|
||||
// line 33
|
||||
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Twig\Extension\CoreExtension']->formatDate(CoreExtension::getAttribute($this->env, $this->source, $context["post"], "updatedAt", [], "any", false, false, false, 33), "d/m/Y H:i"), "html", null, true);
|
||||
yield "</td>
|
||||
<td class=\"admin-actions\">
|
||||
<a href=\"/admin/edit/";
|
||||
// line 35
|
||||
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["post"], "id", [], "any", false, false, false, 35), "html", null, true);
|
||||
yield "\" class=\"btn btn-sm btn-secondary\">Éditer</a>
|
||||
|
||||
<form method=\"post\" action=\"/admin/delete/";
|
||||
// line 37
|
||||
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, $context["post"], "id", [], "any", false, false, false, 37), "html", null, true);
|
||||
yield "\" style=\"display:inline;\">
|
||||
<button type=\"submit\" class=\"btn btn-sm btn-danger\"
|
||||
onclick=\"return confirm('Supprimer cet article ?')\">
|
||||
Supprimer
|
||||
</button>
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
";
|
||||
}
|
||||
$_parent = $context['_parent'];
|
||||
unset($context['_seq'], $context['_key'], $context['post'], $context['_parent']);
|
||||
$context = array_intersect_key($context, $_parent) + $_parent;
|
||||
// line 46
|
||||
yield " </tbody>
|
||||
</table>
|
||||
";
|
||||
} else {
|
||||
// line 49
|
||||
yield "<p><em>Aucun article à gérer.</em></p>
|
||||
";
|
||||
}
|
||||
yield from [];
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function getTemplateName(): string
|
||||
{
|
||||
return "pages/admin.twig";
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function isTraitable(): bool
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function getDebugInfo(): array
|
||||
{
|
||||
return array ( 148 => 49, 143 => 46, 128 => 37, 123 => 35, 118 => 33, 114 => 32, 111 => 31, 107 => 29, 105 => 28, 101 => 27, 97 => 25, 93 => 24, 81 => 14, 79 => 13, 70 => 6, 63 => 5, 52 => 3, 41 => 1,);
|
||||
}
|
||||
|
||||
public function getSourceContext(): Source
|
||||
{
|
||||
return new Source("", "pages/admin.twig", "/home/julien/Documents/Git/julien/blog-slim/views/pages/admin.twig");
|
||||
}
|
||||
}
|
||||
@@ -29,7 +29,7 @@ Créer un article
|
||||
<p>
|
||||
<label for="editor">Contenu<br>
|
||||
{# <textarea id="editor" name="content" rows="6" required>{{ post.content|default('') }}</textarea> #}
|
||||
<textarea id="editor" name="content" rows="6">{{ post.content|default('') }}</textarea>
|
||||
<textarea id="editor" name="content" rows="6" required></textarea>
|
||||
</label>
|
||||
</p>
|
||||
|
||||
@@ -60,7 +60,7 @@ Créer un article
|
||||
<script>
|
||||
tinymce.init({
|
||||
selector: '#editor',
|
||||
base_url: '/js/tinymce', // assure le bon chemin relatif
|
||||
base_url: '/js/tinymce',
|
||||
license_key: 'gpl',
|
||||
height: 400,
|
||||
menubar: false,
|
||||
@@ -79,5 +79,10 @@ Créer un article
|
||||
].join(' '),
|
||||
content_style: 'body {font-family:Helvetica,Arial,sans-serif;font-size:14px}'
|
||||
});
|
||||
|
||||
// Synchroniser TinyMCE avant soumission du formulaire
|
||||
document.getElementById('articleForm').addEventListener('submit', function (e) {
|
||||
tinymce.triggerSave();
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
Reference in New Issue
Block a user