Nofollow для ссылок в CKEditor

Кто-нибудь знает, где в CKEditor я могу настроить, чтобы все добавленные ссылки имели rel="nofollow", даже если пользователи этого не указали?


person Dofs    schedule 03.08.2011    source источник


Ответы (4)


Вы можете создать фильтр данных, как описано на этой странице, который проверяет каждую ссылку: http://docs.cksource.com/CKEditor_3.x/Developers_Guide/Data_Processor

Этот (непроверенный) код должен быть более или менее тем, что вам нужно:

editor.dataProcessor.htmlFilter.addRules(
{
    elements :
    {
        a : function( element )
        {
            if ( !element.attributes.rel )
                element.attributes.rel = 'nofollow';
        }
    }
});
person AlfonsoML    schedule 03.08.2011
comment
Спасибо, это было именно то, что я искал. - person Dofs; 03.08.2011
comment
Вы должны добавить этот код в тело события instanceReady. CKEDITOR.on('instanceReady', function( ev ) { .... }); - person hkulekci; 16.10.2013
comment
Как добавить rel=nofollow только внешние ссылки? @AlfonsoML - person hakiko; 09.09.2016
comment
Я вижу, что вы уже создали отдельный вопрос, и у него есть правильный ответ stackoverflow.com/questions/39416655/ - person AlfonsoML; 10.09.2016

Нужна обертка:

editor.on('instanceReady',function(){...})
person Sergey    schedule 06.03.2012

Поместите код на страницу, где загружается ckeditor

CKEDITOR.on('dialogDefinition', function(ev) {
      var editor = ev.editor;
      editor.dataProcessor.htmlFilter.addRules(
      {
          elements :
          {
              a : function( element )
              {
                  if ( !element.attributes.rel )
                      element.attributes.rel = 'nofollow';
              }
          }
      });
    })
person Vijay Chouhan    schedule 15.07.2015
comment
Как добавить rel=nofollow только внешние ссылки? - person hakiko; 09.09.2016

Я использую PHP Codeigniter с CKEditor, и если вы хотите добавить rel="nofollow" только для внешних ссылок, вы можете изменить вывод CKEditor, прежде чем сохранять его в базе данных. Вот функция PHP, которую я использую для изменения:

function addNofollow($content) {
    $dom = new DOMDocument();
    @$dom -> loadHTML(mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8'));
    $x = new DOMXPath($dom);

    // Add rel="nofollow"
    foreach ($x -> query("//a") as $node) {
        $href = $node -> getAttribute("href");
        if (!strpos($href, site_base())) {
            $node -> setAttribute("rel","nofollow");
        } else {
            $node -> removeAttribute("rel");
        }
    }

    // Remove <script> tag
    $script = $dom->getElementsByTagName('script');
    $remove = [];
    foreach ($script as $item) {
      $remove[] = $item;
    }
    foreach ($remove as $item) {
      $item -> parentNode -> removeChild($item); 
    }

    $newHtml = $dom -> saveHtml($dom->getElementsByTagName('div')->item(0));
    return $newHtml;
}
person user7057468    schedule 22.10.2016