2011-08-03 8 views
2

CKEditorのどこに私がセットアップできるのか知っていますか?ユーザーが指定しなくても、追加されたすべてのリンクはrel = "nofollow"になりますか?すべてのリンクをチェックし、このページで説明したようにCKEditorのリンクにnofollow

答えて

7

あなたはデータフィルタを作成することができます。 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'; 
     } 
    } 
}); 
+0

ありがとう、これは私が探していたexcatelyでした。 – Dofs

+0

希望の結果を得るためにこのコードをどこに追加できますか? – Bhargav

+2

このコードをinstanceReadyイベントの本文に追加する必要があります。 'CKEDITOR.on( 'instanceReady'、function(ev){....});' – hkulekci

0

editor.on('instanceReady',function(){...}) 
0

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'; 
       } 
      } 
     }); 
    }) 
+0

rel = "nofollow"のみを外部リンク*に追加するには? – hakiko

0

CKEditorでPHP Codeigniterを使用していますが、外部リンクに対して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; 
}