2011-08-03 61 views

回答

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

謝謝,這是我想要的。 – 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」only *外部鏈接*? – hakiko

0

我正在使用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; 
}