CKEditor + HTML Purifier - Настройка ссылок для администратора

Полная инструкция по изменению поведения редактора ссылок. Администратор получает ссылки с rel="dofollow" и без принудительных target="_blank", noreferrer, noopener.

Рейтинг на основе отзывов:
Звезд получено: 0
Oтзывов всего: 0
Средняя оценка: 0
Опубликовано в: Блог пользователей

Настройка ссылок с rel="dofollow" для администратора в Cotonti (CKEditor + HTML Purifier)

Описание: Полная инструкция по изменению поведения редактора ссылок. Администратор получает ссылки с rel="dofollow" и без принудительных target="_blank", noreferrer, noopener. Обычные пользователи сохраняют стандартное поведение CKEditor. Все изменения выполняются через правку пресета HTML Purifier и условного блока в шаблоне, без вмешательства в ядро системы.


Шаг 1. Настройка HTML Purifier (разрешить rel="dofollow" и запретить target для администратора)

Файл: plugins/htmlpurifier/presets/htmlpurifier.group_5.preset.php

  1. было 'HTML.Nofollow'=> true,
  2. стало 'HTML.Nofollow'=>false,

Затем, Добавьте в массив $htmlpurifier_preset две строки (если их нет):

'Attr.AllowedRel' => ['dofollow', 'nofollow', 'noreferrer', 'noopener', 'external', 'ugc', 'sponsored'],
'HTML.ForbiddenAttributes' => ['*@target'],

Первая строка разрешает HTML Purifier оставлять у ссылок атрибут rel с перечисленными значениями (в том числе dofollow, которое по умолчанию вырезается).
Вторая строка полностью удаляет атрибут target у всех элементов (включая ссылки), поэтому администратор никогда не получит target="_blank".

Убедитесь, что в том же массиве есть 'HTML.Nofollow' => false (обычно уже стоит) — это отключает принудительную вставку nofollow.


Шаг 2. Настройка CKEditor (только для администратора)

В шаблоне, который выводит редактор (например, market.edit.tpl, page.edit.tpl), перед формой вставьте следующий блок:

<!-- IF {PHP.usr.maingrp} == 5 -->
<script>
var ckeditorConfig = {
    link: {
        addTargetToExternalLinks: false,
        decorators: {
            dofollow: {
                mode: 'manual',                // ручной чекбокс в диалоге ссылки
                label: 'dofollow',             // подпись рядом с чекбоксом
                attributes: {
                    rel: 'dofollow'            // устанавливаемый атрибут
                }
            }
        }
    }
};
</script>
<!-- ENDIF -->

Этот код:

  • Отключает автоматическое добавление target="_blank" и rel="noreferrer noopener" для администратора.
  • Добавляет в диалог вставки/редактирования ссылки чекбокс с подписью «dofollow».
    Если чекбокс отмечен — ссылка получит rel="dofollow".
    Если не отмечен — ссылка останется без атрибута rel (или с тем, что вы укажете вручную).

Обычные пользователи (не группа 5) не увидят этот блок, и для них CKEditor продолжит работать со стандартными настройками.


Шаг 3. Очистка кэша браузера

После сохранения всех файлов откройте страницу с редактором и нажмите Ctrl+Shift+R (или Cmd+Shift+R на macOS) — это загрузит обновлённые скрипты.


Результат

  • Администратор:
    – Ссылки никогда не содержат target="_blank", noreferrer, noopener.
    – При вставке ссылки доступен чекбокс «dofollow», который управляет атрибутом rel.
    – HTML Purifier больше не вырезает rel="dofollow" и убирает target при сохранении.
  • Обычный пользователь:
    – Поведение не меняется: внешние ссылки по‑прежнему получают target="_blank" и rel="noreferrer noopener".
  • Другие шаблоны: если CKEditor используется на других страницах (статьи, комментарии), повторите Шаг 2 для соответствующих шаблонов.
  • Обратная совместимость: если нужно временно вернуть старое поведение для админа, достаточно удалить или закомментировать условный блок в шаблоне. Настройки Purifier можно оставить — они не мешают.

Данная инструкция проверена на Cotonti с CKEditor и HTML Purifier. Если что‑то пойдёт не так, убедитесь, что файлы сохранены без синтаксических ошибок и кэш браузера действительно сброшен.

Может кому пригодится, Вот именно мой файл: plugins/htmlpurifier/presets/htmlpurifier.group_5.preset.php

<?php
/**
 * HTML Purifier preset for Superadmins (MainGroupId=5)
 *
 * @package HTML Purifier
 * @copyright (c) Cotonti Team
 * @license https://github.com/Cotonti/Cotonti/blob/master/License.txt
 */

defined('COT_CODE') or die('Wrong URL');

require_once Cot::$cfg['plugins_dir'] . '/htmlpurifier/lib/standalone/HTMLPurifier/Filter/YouTube.php';

/**
 * HTML Purifier config set
 * @see http://htmlpurifier.org/live/configdoc/plain.html
 */
$htmlpurifier_preset = [
    // === Автоформатирование ===
    'AutoFormat.AutoParagraph'                  => false, // Не оборачивать автоматически текст в <p>
    'AutoFormat.DisplayLinkURI'                 => false, // Не показывать URL рядом со ссылкой
    'AutoFormat.Linkify'                        => false, // Не превращать обычные URL в ссылки
    'AutoFormat.RemoveEmpty.RemoveNbsp'         => false, // Не удалять &nbsp; при удалении пустых элементов
    'AutoFormat.RemoveEmpty'                    => true,  // Удалять пустые элементы (например, <span></span>)
    'AutoFormat.RemoveSpansWithoutAttributes'   => true,  // Удалять <span> без атрибутов

    // === Пользовательские фильтры ===
    'Filter.Custom'                             => [],    // Дополнительные фильтры не добавляем

    // === HTML и вывод ===
    'HTML.Allowed'                              => null,  // Разрешены все теги (null = использовать политику по умолчанию)
    'HTML.FlashAllowFullScreen'                 => true,  // Разрешить полноэкранный режим для Flash (устаревшее, но оставлено)
    'HTML.Nofollow'                             => false, // НЕ добавлять автоматически rel="nofollow" ко всем ссылкам
    'HTML.SafeObject'                           => true,  // Включать безопасный режим для <object>
    'HTML.SafeEmbed'                            => true,  // Включать безопасный режим для <embed>

    // === ДОБАВЛЕНО: управление rel и target для администратора ===
    // Разрешаем только указанные значения для атрибута rel (остальные будут вырезаны)
    'Attr.AllowedRel' => ['dofollow', 'nofollow', 'noreferrer', 'noopener', 'external', 'ugc', 'sponsored'],
    // Запрещаем атрибут target у всех элементов (в том числе у <a>), чтобы убрать target="_blank"
    'HTML.ForbiddenAttributes' => ['*@target'],

    // === Доверие и безопасность ===
    'HTML.Trusted'                              => true,  // Входные данные считаются доверенными → больше тегов/атрибутов разрешено
    'HTML.ForbiddenElements'                    => ['script'], // Явно запрещаем <script> (несмотря на Trusted)

    // === Flash и YouTube ===
    'Output.FlashCompat'                        => true,  // Совместимость с Flash (для старых вставок)
    'Filter.YouTube'                            => true,  // Включаем фильтр для преобразования YouTube-ссылок во встраиваемые плееры

    // === URI ===
    'URI.DisableExternal'                       => false, // Не запрещать внешние ссылки
    'URI.DisableExternalResources'              => false, // Не запрещать внешние ресурсы (изображения и т.п.)

    // === Атрибуты ===
    'Attr.AllowedFrameTargets'                  => array( '_blank', '_self', '_parent', '_top'), // Разрешённые значения target для фреймов (если они есть)
    'Attr.EnableID'                             => true,  // Разрешить использование атрибута id (для якорей)
];

 

 

 

 



Отзывы

Отзывов пока нет


Комментарии (0)

Комментарии отсутствуют
Добавление комментариев доступно только зарегистрированным пользователям

Рекомендуемые товары и услуги

Профессиональные услуги по Cotonti CMF (Siena/Verona)

Профессиональные услуги по Cotonti CMF (Siena/Verona)

Профессиональные услуги по Cotonti (Siena/Verona): создание плагинов, адаптация под PHP 8.5, темы,

Обсуждение страницы в Telegram

Автор контента

webitproff

Оффлайн

Carbonate Sodium

Последняя авторизация: 04.08.2026 20:41

  • Чем могу помочь?

    Оказываю весь спектр услуг по CMF Cotonti. Разработка открытых и закрытых корпоративных интернет порталов, небольших социальных сетей, торговые площадки, маркетплейсы, биржи фриланса, каталоги товаров оптовых поставщиков, интернет-магазин под заказ, чтобы делать совместные покупки и групповые совместные продажи от имени нескольких продавцов.

  • Разработки на GitHub бесплатно
    • Страница размещена: 29.07.2026 18:45
    • Последнее обновление: 29.07.2026 19:30
    • Язык: