19. maj 2010 - 23:39Der er
16 kommentarer og 1 løsning
CKeditor interne links
Hej Eksperter.
Jeg har siddet og rodet med CKeditor for at få muligheden for at kunne indsætte interne links til det system jeg arbejder på.
Jeg fandt en løsning hvor der skal ændres i "link"-plugin'et, så den kan åbne en fil i et nyt vindue hvor man kan skrive sine links.
Men jeg er ikke så vild med den løsning, og tænkte på i stedet at lave en <select> uden for CKeditor, hvor man kan vælge interne sider på en liste, og så bliver de indsat i CKeditor-feltet der hvor cursoren er/var.
Der er jeg dog løbet i et par problemer. Indtil videre har jeg følgende kode (snapset og modificeret fra deres dokumentation):
var element = new CKEDITOR.dom.element("a"); element.setAttribute("href", "#"); element.setAttribute("title", "Test"); element.setHtml("Test");
var writer = new CKEDITOR.htmlWriter(); writer.openTag("a"); writer.attribute("href", "#"); writer.attribute("title", "Test"); writer.text("Test"); writer.closeTag("a"); });
console.log(CKEDITOR) : giver mig fint en oversigt over CKeditor-objektet new CKEDITOR.dom.element("a") : giver mig fejlen: "CKEDITOR.dom is undefined" new CKEDITOR.htmlWriter() : giver mig fejlen: "CKEDITOR.htmlWriter is not a constructor"
Er det nogen der: 1. ved hvad der er galt ? 2. har forslag til hvad jeg kan prøve ? 3. kender en løsning på mit generelle problem (indsæt HTML i CKeditor, udenfor CKeditor) ?
Nuvel, det kan jeg godt læse, men 11 års erfaring med Eksperten viser tydeligt, at feltet er meget bredt og kompetencerne meget forskellige. Derfor ved jeg ikke, om du mener, at du får et godt overblik over objektet eller over constructor'en =)
Hvis dine fejlmeldinger ellers er korrekte, eksisterer der ikke et objekt, der hedder CKEDITOR - og som har en metode, der hedder dom. Derfor lyder det overvejende usandsynligt, at du har instantieret objektet.
Den eneste anden forklaring er, at du instantieret objektet og derefter slettet det igen. Det tillader jeg miog at anse for endnu mere usandsynligt
Eksisterer objektet - det har en metode ved navn dom - og her kan din kode godt afvikles uden fejl. Alt (og nu endnu mere) tyder med andre ord på, du ikke har instantieret objektet =)
Ved min "console.log(CKEDITOR)" får en komplet oversigt over CKeditor objektet som har både "dom"-metoden (function()), og "dom"-metoden har en "element"-metode (function()). Og det samme gør sig gældende med "htmlWriter".
Den måde CKeditor bliver instantieret på er:
function load_ckeditor(){ var ckeditor = CKEDITOR.replaceAll(function(textarea, config){ if (textarea.className == '' || textarea.className != 'rich_text_editor'){ return false; } // Masser af indstillinger // ... }); }; window.onload = load_ckeditor;
Som ligger i "config_custom.js" i "CKeditor" mappen.
Og det script jeg kører hvor jeg prøver at indsætte noget HTML i editoren ligger efter det <textarea> der bliver erstattet af CKeditor, altså i en anden fil.
#6 Gider ikke lige til at pille det ud af systemet, så du kan få lov til at kigge på den lokale version: http://87.55.65.166/_JECMS/log-ind admin / 1234
Altså det er for mig ligemeget om jeg via standard JS, eller jQuery, eller endda bare som en HTML-streng opretter et element. Mit problem er bare hvordan jeg får det element smidt ind i editoren (gerne der hvor markøren er/var).
Og den måde jeg kom frem til at det skulle gøres på var via CKeditors "dom.element", eller "htmlwriter" funktioner/metoder.
Det var åbenbart et problem at det blev kørt "direkte", eller hvad man nu skal kalde det.
Smed din kode i en funktion, og så med en "onclick" på en knap virker det perfekt :D
function insert_element(){ var element = new CKEDITOR.dom.element("a"); element.setAttribute("href", "#"); element.setAttribute("title", "Test"); element.setHtml("Test");
Uden din hjælp kunne jeg have stirret mig blind på det problem i flere dage ! :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.