add insertable tag to generate link to node inside content

This commit is contained in:
Simon Vieille 2021-05-29 12:52:03 +02:00
parent 92887b029e
commit 34ac2280c8
4 changed files with 82 additions and 3 deletions

View file

@ -80,7 +80,9 @@
"No action": "Aucune action"
"Alias element": "Élement alias"
"This element is an alias so the next configuration is ignored.": "Cet élement est un alias donc cette configuration sera ignorée"
"Route name: <code>%routeName%</code>": "Nom de la route : <code>%routeName%</code>"
"Route name": "Nom de la route"
"Tag to insert in content": "Tag à insérer dans le contenu"
"Technical information": "Informations techniques"
"Content": "Contenu"
"Routing": "Routage"
"Attributs": "Attributs"

View file

@ -170,8 +170,34 @@
{{ form_row(form.url) }}
<div class="pb-1">
{{ 'Route name: <code>%routeName%</code>'|trans({'%routeName%': entity.routeName})|raw }}
<div class="pb-3">
<details>
<summary>
{{ 'Technical information'|trans }}
</summary>
<p class="pt-2">
{% set code = 'url://' ~ entity.routeName %}
{% if entity.parameters|length %}
{% set code = code ~ '?' %}
{% for param in entity.parameters %}
{% set code = code ~ param.name ~ '=&' %}
{% endfor %}
{% set code = code|trim('&') %}
{% endif %}
{% set code = '{{' ~ code ~ '}}' %}
<ul class="list-group">
<li class="list-group-item">
<div>{{ 'Route name'|trans }}</div>
<code>{{ entity.routeName }}</code>
</li>
<li class="list-group-item">
<div>{{ 'Tag to insert in content'|trans }}</div>
<code>{{ code }}</code>
</li>
</ul>
</p>
</details>
</div>
{{ form_row(form.disableUrl) }}

View file

@ -14,6 +14,8 @@
<li class="list-group-item">
<a href="{{ url }}" target="_blank">{{ url }}</a>
</li>
{% else %}
{{ 'No result'|trans }}
{% endfor %}
</ul>
</div>

View file

@ -0,0 +1,49 @@
<?php
namespace App\Core\Twig\Extension;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Twig\Extension\AbstractExtension;
use Twig\TwigFilter;
class BlockExtension extends AbstractExtension
{
protected UrlGeneratorInterface $urlGenerator;
public function __construct(UrlGeneratorInterface $urlGenerator)
{
$this->urlGenerator = $urlGenerator;
}
/**
* {@inheritdoc}
*/
public function getFilters()
{
return [
new TwigFilter('murph_url', [$this, 'replaceUrl']),
];
}
public function replaceUrl($content)
{
preg_match_all('#\{\{\s*url://(?P<route>[a-z_]+)(\?(?P<params>.*))?\s*\}\}#isU', $content, $match, PREG_SET_ORDER);
foreach ($match as $block) {
$url = null;
try {
$block['params'] = str_replace(['&amp;', ' '], ['&', '%20'], $block['params']);
$route = $block['route'];
parse_str($block['params'], $params);
$url = $this->urlGenerator->generate($route, $params, UrlGeneratorInterface::ABSOLUTE_URL);
} catch (\Exception $e) {
}
$content = str_replace($match[0], $url, $content);
}
return $content;
}
}