Re: fckeditor and PDF and pesky users

From: Date: Mon, 17 Oct 2005 21:36:44 +0000
Subject: Re: fckeditor and PDF and pesky users
References: 1 2 3  Groups: php.general 
Request: Send a blank email to php-general+get-224260@lists.php.net to get a copy of this message
Richard Lynch said the following on Monday, October 17, 2005 3:30 PM:
On Fri, October 14, 2005 6:03 pm, Jason Kovacs wrote:
Richard Lynch said the following on Friday, October 14, 2005 3:39 PM:
I added a custom drop-down menu to FCKEditor's Link window that fills in the URL upon selecting the menu item, but this url consisted of just a path to a redirect.php script where I set a GET variable to the ID of the document, then passing through the PDF or DOC data. Though you could link the full path to the PDF in the URL, I just had my documents stored behind the web-accessible address. Every time a new document was uploaded, I decided to write the URL's statically to a file that the FCKEditor script (changed fck_link.html to fck_link.php) will read into Javascript arrays, as opposed to accessing the DB every time this Link window was viewed. I added about 50 lines of Javascript code to fck_link.php to do what I wanted in setting the URL from the Select list.
Sweet!
I must warn you though, every time that I upgrade FCKEditor, I have to reapply the changes I've done and there is the possibility that the FCKEditor scripts may change to cause compatibility problems. Let me know if you are interested in this route and I can post my alterations to FCKEditor,
Please do!
but the PDF file management is up to you.
Oh yeah. That's for sure.
I've had many non-technical users working with this utility just fine for about 6 months, so it works and though its not the most graceful implementation from a developer's standpoint, it makes the user interface easiest to work with.
It certainly sounds like a very good solution. Be really nifty if fckEditor folks took a look at it and considered adding it as a feature. We can't be the only ones needing this kind of thing.
Here's my changes to FCKEditor, and it works on version 2.0 RC3, but should work for other later versions too unless drastic changes have been made by it's developers to the affected scripts. I tried to clean it up for you as much as possible and took out my customizations using doc ID's and broadened it to use string URL's, which you'll need to write along with the doc entry's Title to a static JS file that gets read by FCKEditor (using php). The code also handles grouping uploaded documents into 1-level-deep groups, so this is something you'll have to keep track of in your upload utility. If that's not something you need or can easily figure out, just take out the JS code that deals with Option Groups and flatten the document data array. FCKEditor Customization Notes for linking Documents --------------------------------------------------- By Jason Kovacs - 2005-05-04 1. Install the FCKeditor utility to /path/to/public_html/js/FCKeditor/. 2. The directory /path/to/public_html/js/data/ must be created and have permissions of 777. 3. Set up the Document Upload utility to write static data to the file /path/to/public_html/js/data/fck_link_docdata.js with the following structure: --- var documentGroups = ["Group 1","Group 2"]; var documentData = [ [ ["Doc Title 1","URL"], ["Doc Title 2","URL"] ], [ ["Doc Title 1","URL"], ["Doc Title 2","URL"] ] ]; --- 4. Rename ./js/FCKeditor/editor/dialog/fck_link.html to fck_link.php and Edit it to have these changes: 4a. Below <meta name="robots" content="noindex, nofollow" />, insert: <SCRIPT Language="JavaScript"><!-- <? @readfile("/path/to/public_html/js/data/fck_link_docdata.js"); ?> //--></SCRIPT> 4b. Insert the following two Table rows above the <tr> for "Protocol":
    <tr>
     <td nowrap="nowrap" colspan=3>
      <span fckLang="DlgLnkDocument">Documents</span><br />
      <select style="WIDTH: 100%" id="cmbLinkDocument"
onchange="SetDocumentUrl(this.value);">
                                                        <option
value=0>Select a Document File</option>
      </select>
     </td>
    </tr>
5. Edit ./js/FCKeditor/editor/dialog/fck_link/fck_link.html to have these changes: 5a. Add these lines after "LoadSelection() ;" in the window.onload function() call: // Load the Documents select menu with optgroups/options from the included data arrays. LoadDocumentData() ; 5b. Before the SetLinkType function, add the following: function LoadDocumentData() { var sUrl = GetE('txtUrl').value; var docSelectObj = GetE('cmbLinkDocument'); for(var i=0; i < documentGroups.length; i++) { optGroup = document.createElement('optgroup'); optGroup.label = documentGroups[i]; docSelectObj.appendChild(optGroup); for(var j=0; j < documentData[i].length; j++) { var objOption = document.createElement("option"); objOption.innerHTML = documentData[i][j][0]; objOption.value = documentData[i][j][1]; if(objOption.value == sUrl) objOption.selected = true;
                       optGroup.appendChild(objOption);
} } } 5c. Change the line in the function SetLinkType from: window.parent.SetTabVisibility( 'Advanced' , (linkType != 'anchor' || bHasAnchors) ) ; To the line: window.parent.SetTabVisibility( 'Advanced' , false ) ; 5d. Change the line in the function OnUrlChange from: var sProtocol = oRegex.UrlOnChangeProtocol.exec( sUrl ) ; To the lines: var sProtocol = oRegex.UrlOnChangeProtocol.exec( "" ) ; // force change protocol sProtocol = oRegex.UrlOnChangeProtocol.exec( sUrl ) ; 5e. Add the following function after SetUrl at the end of the file: function SetDocumentUrl( url ) { if(url=="") { SetUrl(""); SetTarget(""); OnTargetNameChange(); } else { SetUrl( url ); SetTarget("_blank"); OnTargetNameChange(); var pageSelectObj = GetE('cmbLinkContentPage'); pageSelectObj.selectedIndex = 0; } } 6. Alter ./js/FCKeditor/editor/js/fckeditorcode_ie_2.js where fck_link.html is used and change it to fck_link.php . This should be a good base for you to work with, but make customizations to get to work for your needs, and obviously change the paths where necessary. Hope it helps you and others. -Jason Kovacs

« previous php.general (#224260) next »