Фильтр, преобразующий код вида <a href="/link-path">Link text</a>
, в <a href="/link-path"><span>Link text</span></a>
.
<?php
// modulename/src/Plugin/Filter/LinkSpanFilter.php
namespace Drupal\modulename\Plugin\Filter;
use Drupal\Component\Utility\Html;
use Drupal\filter\FilterProcessResult;
use Drupal\filter\Plugin\FilterBase;
/**
* @Filter(
* id = "link_span",
* title = @Translation("Wrap link text to span"),
* description = "",
* type = Drupal\filter\Plugin\FilterInterface::TYPE_TRANSFORM_IRREVERSIBLE,
* weight = 20,
* )
*/
class LinkSpanFilter extends FilterBase {
/**
* {@inheritDoc}
*/
public function process($text, $langcode): FilterProcessResult {
$result = new FilterProcessResult($text);
if (stripos($text, '<a') !== FALSE) {
$dom = Html::load($text);
$links = $dom->getElementsByTagName('a');
/** @var \DOMElement $link */
foreach ($links as $link) {
$span = $dom->createElement('span');
while ($link->childNodes->length) {
$span->appendChild($link->childNodes[0]);
}
$link->appendChild($span);
}
$result->setProcessedText(Html::serialize($dom));
}
return $result;
}
}
Написанное актуально для
Drupal 8+
Похожие записи
- Текстовый фильтр добавляющий внешним ссылкам атрибут rel=nofollow
- Создание своего текстового фильтра (оборачиваем таблицы в div)
- Вставка в CKEditor видео из ВКонтакте и Rutube (расширение модуля CKEditor 5 Media Embed)
- Как из PhpStorm выполнить тест(ы)
- Как работает опция "Aggregation type" в настройках полей Views при включённой агрегации
Добавить комментарий