Inserire un target di default al bottone link nel plugin CkEditor

Sto cercando di impostare il bottone link nel plugin CkEditor esattamente come viene utilizzato in questo sito, ovvero:

  • non devono comparire le altre tab ma solo quella principale nella quale inserire il link;
  • il link dovrà avere di default l'attributo target="_blank".

Grazie a tutti.

inviato 4 anni fa
zeropingas
modificato 4 anni fa
X 0 X

La personalizzazione della finestra di dialogo che gestisce i link avviene con questo javascript:

CKEDITOR.on('dialogDefinition', function(ev) {
        // Take the dialog name and its definition from the event data.
        var dialogName = ev.data.name;
        var dialogDefinition = ev.data.definition;

        // Check if the definition is from the dialog we're
        // interested on (the Link dialog).
        if (dialogName == 'link') {
                dialogDefinition.minHeight = 100;
                dialogDefinition.height = 100;
                dialogDefinition.minWidth = 400;
                dialogDefinition.width = 400;
                dialogDefinition.resizable = CKEDITOR.DIALOG_RESIZE_NONE;
                dialogDefinition.removeContents('advanced');
                dialogDefinition.removeContents('target');
                var infoTab = dialogDefinition.getContents('info');
                infoTab.remove('linkType');
        }
});

L'attributo target invece viene inserito dallo script PHP prima che il contenuto HTML venga inserito nella pagina

public static function sanitizeExternalLink($content, $rel_nofollow = true, $target_blank = true, $class = 'ext') {
    $callback = function($matches) use($rel_nofollow, $target_blank, $class) {
            $att = array();
            preg_match_all('@([^=]+)="([^"]+)"@U', $matches[1], $trovati, PREG_SET_ORDER);
            foreach ($trovati as $t) {
                    $att[trim($t[1])] = $t[2];
            }
            if(isset($att['href']) && substr($att['href'],0,4) == 'http') {
                    if(parse_url($att['href'], PHP_URL_HOST) != $_SERVER['SERVER_NAME']) {
                            if($rel_nofollow) {
                                    $att['rel'] = 'nofollow';
                            }
                            if($target_blank) {
                                    $att['target'] = '_blank';
                            }
                            if($class) {
                                    if(isset($att['class'])) {
                                            $att['class'] .= ' ' . $class;
                                    } else {
                                            $att['class'] = $class;
                                    }
                            }
                    }
            }

            $html = '<a ';
            foreach ($att as $key => $value) {
                    $html .= ' ' . $key . '="' . $value . '"';
            }
            $html .= '>';

            return $html;
    };

    return preg_replace_callback('@<a([^>]+)>@iU', $callback, $content);
}
risposto 4 anni fa
Gianni Tomasicchio
Per puntualizzare, il primo parametro indica il contenuto HTML da modificare, il secondo specifica l'attributo rel con valore nofollow, il terzo l'attributo target con valore _blank e l'ultimo una classe aggiuntiva ai vari link. Ottima funzione!zeropingas 4 anni fa
la variabile $matches a cosa serve esattamente? Potresti chiarire questo passaggio, perchè neanche sulla documentazione sembra essere spiegato bene. Grazie.zeropingas 4 anni fa
La funzione preg_replace_callback passa il risultato della ricerca effettuata alla funzione anonima definita in $callback. Questo passaggio avviene tramite la variabile $matches che quindi contiene il testo individuato dall'espressione regolare, ovvero del contenuto del tag <a>. $matches è quindi un normale parametro di una funzione che preg_replace_callback provvederà ad avvalorare nel momento in cui eseguirà la funzione.Gianni Tomasicchio 4 anni fa
X 1 X X
Effettua l'accesso o registrati per rispondere a questa domanda