2009-08-14 17 views
5

Używam binarnego środowiska ASP.NET dla mojego FCKeditora i muszę wstawić dwa edytory na tej samej stronie. Przesłane obrazy/przeglądanie musi przejść do dwóch różnych katalogów, w jaki sposób mogę to zrobić z tyłu kodu?Jak zmienić ścieżkę przesyłania obrazu * dynamicznie * w FCKeditor

wiem ścieżka dla plików przesłanych są ustawione w config.ascx -file z ustawieniem UserFilesPath, ale nie mogę znaleźć sposób, aby zastąpić tę wartość z mojego pliku aspx.cs.

Ponadto znalazłem (sprzeczną) dokumentację stwierdzającą, że można ustawić Session["FCKeditor:UserFilesPath"], ale nie podoba mi się umieszczanie informacji specyficznych dla użytkownika w globalnej zmiennej sesji.

Odpowiedz

1

najpierw trzeba przypisać informacji identyfikatora użytkownika w sesji [ "userinfo"]

następnie przejść do [FCKeditor folderu root] /filemanager/connector/aspx/config.ascx

string Userfolder = Session["UserInfo"].ToString(); // URL path to user files. UserFilesPath = "~/Upload/" + Userfolder;

0

Och, po długich zmaganiach Jedyne co jestem w stanie uzyskać to:

fckEditor1.Config

nieruchomość. Spróbuj ustawić go do edytora chcesz skonfigurować:

fckEditor1.Config [ "UserFilesPath"] = "ścieżkę"

+0

Dziękuję za próbę pomocy, ale to nie działa. Właściwość config-only dotyczy tylko edytora, a nie edytora plików. – Espo

0

To chyba działa. Przynajmniej to działało dla mnie.

Session["FCKeditor:UserFilesPath"] = "~/images/"; 
0

Przepraszam, myślę, że najlepiej będzie, jeśli przestaniesz używać kontrolki, i zamiast tego użyj api javascript.

0

Pełny temat: Edytor FCK 2.x: Przesyłanie pliku/obrazu/wideo w różnych folderach dla różnych aplikacji przy użyciu jednego FCKeditora, dzięki czemu $ Config ['UserFilesPath'] jest w pełni dynamiczny w bezpieczny sposób

Można to zrobić na wiele sposobów. Wyjaśniam proces, który zastosowałem zgodnie ze strukturą kodu mojej aplikacji php. Ta sama struktura/struktura kodu, którą stosowałem w przypadku różnych aplikacji, z każdą aplikacją jako podfolderem na moim serwerze. Tak więc istnieje logiczna potrzeba użycia jednego FCKeditora i skonfigurowania go w pewien sposób, aby działał poprawnie we wszystkich aplikacjach. Część zawartości FCKeditor jest w porządku. Może być łatwo ponownie wykorzystany przez różne aplikacje lub projekty z jednego komponentu FCKeditor. Ale problem pojawia się w przypadku przesyłania plików, takich jak obraz, wideo lub inny dokument. Aby było możliwe zastosowanie do innego projektu, pliki muszą zostać przesłane w oddzielnych folderach dla różnych projektów. I dla tego $ Config ['UserFilesPath'] musi być skonfigurowany z dynamiczną ścieżką folderu, oznacza inną ścieżkę folderu dla każdego projektu, ale wywołanie tego samego komponentu FCKeditor w tej samej lokalizacji. Wyjaśniam kilka różnych procesów razem krok po kroku. Te pracował dla mnie dobrze z FCKeditor wersja 2.5.1 i VersionBuild 17566 i mam nadzieję, że będą działać również dla innych. Jeśli nie działa to w przypadku innych deweloperów, może być konieczne wprowadzenie pewnych poprawek w tym procesie, zgodnie ze strukturą kodu projektu i uprawnieniami do zapisu folderów, a także zgodnie z wersją FCKeditor.

1) W fckeditor \ editor \ filemanager \ connectors \ phpconfig.plik php

a) Przejdź do globalnej konfiguracji $; i $ Config ['Enabled'] = false; i) Tam, jeśli chcesz sesji utrzymaniu bezpiecznej metody: tylko dla ustawienia pojedynczej stronie: czyli jeden FCKeditor dla każdej domeny jeden projekt lub subdomenie, a nie jeden FCKeditor do wielokrotnego projektu następnie umieścić ten kod:

if(!isset($_SESSION)){ 
session_start(); 
} 

if(isset($_SESSION['SESSION_SERVER_RELATIVEPATH']) && $_SESSION['SESSION_SERVER_RELATIVEPATH']!="") { 
$relative_path=$_SESSION['SESSION_SERVER_RELATIVEPATH']; 
include_once($_SERVER['DOCUMENT_ROOT'].$relative_path."configurations/configuration.php"); 
} 

NB: Tutaj $ _SESSION ['SESSION_SERVER_RELATIVEPATH']: względna ścieżka do folderu projektu odpowiadająca webrootowi; powinno być jak "/ projekt/folder/ścieżka /" i ustawić tę zmienną sesji we wspólnym pliku w projekcie, w którym rozpoczęła się sesja. I powinny być konfiguracje/configuration.php jako plik konfiguracyjny w twoim projekcie. Jeśli jego nazwa lub ścieżka jest inna, musisz umieścić odpowiednią ścieżkę tutaj zamiast konfiguracji/configuration.php

ii) Jeśli chcesz użyć pojedynczego komponentu FCKeditor dla różnych projektów reprezentowanych jako różne podfoldery i zależnych od sesji bezpieczny sposób (Zakładając różne nazwy sesji dla różnych projektów, w celu rozróżnienia ich sesji na jednym serwerze). Ale nie zadziała, jeśli projekty będą reprezentowane jako subdomeny lub różne domeny, a następnie będą musiały korzystać z niezależnego od sesji sposobu (iii) podanym poniżej (choć jest to niebezpieczne). Umieść ten kod:

if(!isset($_SESSION)){ 
session_name($_REQUEST['param_project_to_fck']); 
session_start(); 
} 

if(isset($_SESSION['SESSION_SERVER_RELATIVEPATH']) && $_SESSION['SESSION_SERVER_RELATIVEPATH']!="") { 
$relative_path=$_SESSION['SESSION_SERVER_RELATIVEPATH']; 
include_once($_SERVER['DOCUMENT_ROOT'].$relative_path."configurations/configuration.php"); 
} 

Proszę przeczytać N.B. na końcu poprzedniego punktu, tj. (i)

iii) Jeśli chcesz użyć pojedynczego komponentu FCKeditor dla różnych projektów reprezentujących różne podfoldery, a także subdomen lub domen (chociaż nie jest to w pełni bezpieczne). Umieść ten kod:

if(isset($_REQUEST['param_project_to_fck']) && $_REQUEST['param_project_to_fck']!=""){ //base64 encoded relative folder path of the project corresponding to the webroot; should be like "/project/folder/path/" before encoding 
$relative_path=base64_decode($_REQUEST['param_project_to_fck']); 
include_once($_SERVER['DOCUMENT_ROOT'].$relative_path."configurations/configuration.php"); 
} 

Proszę przeczytać N.B. na końcu punktu (I)

b) Teraz po tym za każdym przypadku wybranego, proszę znaleźć ten kod:

// Path to user files relative to the document root. 
$Config['UserFilesPath'] = '/userfiles/' ; 

i zastąpić następujący kod:

if(isset($SERVER_RELATIVEPATH) && $SERVER_RELATIVEPATH==$relative_path) { //to make it relatively secure so that hackers can not create any upload folder automatcally in the server, using a direct link and can not upload files there 
$Config['Enabled'] = true ; 
$file_upload_relative_path=$SERVER_RELATIVEPATH; 
}else{ 
$Config['Enabled'] = false ; 
exit(); 
} 
// Path to user files relative to the document root. 
//$Config['UserFilesPath'] = '/userfiles/' ; 
//$Config['UserFilesPath'] = $file_upload_relative_path.'userfiles/' ; 
$Config['UserFilesPath'] = '/userfiles'.$file_upload_relative_path; 

Tu $ SERVER_RELATIVEPATH jest ścieżką względną i musi być ustawiona w pliku konfiguracyjnym twojego projektu zawartym wcześniej.

Tutaj możesz ustawić $ Config ['UserFilesPath'] z dowolną inną ścieżką do folderu dynamicznego za pomocą zmiennej $ file_upload_relative_path. W moim serwerze linuksowym bluehost, ponieważ był to konflikt uprawnień użytkownika folderu pomiędzy folderem głównym projektu (uprawnienie 0755) oraz folder userfiles pod nim i podfoldery w plikach userfiles (powinno być 0777 zgodnie z kodowaniem FCKeditor), więc nie pozwala na przesyłanie plików do tych folderów. Więc stworzyłem folder userfiles w webroot serwera (poza głównym folderze projektu), i ustawić uprawnienie do 0777 do niego użyć kodu dla ustawienia config $ jak:

$Config['UserFilesPath'] = '/userfiles'.$file_upload_relative_path; 

Ale jeśli masz nie ma problemu z praw zapisu podfolderów projektu w Twoim przypadku, to można skorzystać z poprzednią linię (wypowiedziało się w poprzednim segmencie kodu):

$Config['UserFilesPath'] = $file_upload_relative_path.'userfiles/' ; 

przeszkadza, to maszt wykomentuj istniejącą $ config [” UserFilesPath '] ='/userfiles/'; w tym pliku, zastępując lub po prostu komentując, jeśli istnieje w innym miejscu pliku.

2) Jeśli wybierzesz 1) (a) (ii) lub (iii) następnie otwórz metodę
(a) fckeditor \ editor \ filemanager \ browser \ default \ browser.html file.

Wyszukaj tę linię: var sConnUrl = GetUrlParam ("Connector");

umieścić te polecenia po tej linii:

var param_project_to_fck = GetUrlParam('param_project_to_fck') ; 

Teraz Szukaj dla tej linii: SURL + = '& currentfolder =' + encodeURIComponent (this.CurrentFolder);

Umieść tę komendę po tej linii:

sUrl += '&param_project_to_fck=' + param_project_to_fck ; 

(B) Teraz otwórz CKEditor \ editor \ filemanager \ przeglądarki \ domyślny plik \ frmupload.html.

Szukaj tej linii (powinien być w funkcji SetCurrentFolder()):

sUrl += '&CurrentFolder=' + encodeURIComponent(folderPath) ; 

Umieść tę komendę po tej linii:

sUrl += '&param_project_to_fck='+window.parent.param_project_to_fck; 

3) Teraz, w którym chcesz, aby pokazać FCKeditor w projekcie, trzeba umieścić te linie najpierw w odpowiednim pliku php/strony:

include_once(Absolute/Folder/path/for/FCKeditor/."fckeditor/fckeditor.php") ; 
$oFCKeditor = new FCKeditor(Field_name_for_editor_content_area) ; 
$oFCKeditor->BasePath = http_full_path_for_FCKeditor_location.'fckeditor/' ; 
$oFCKeditor->Height = 400; 
$oFCKeditor->Width = 600; 
$oFCKeditor->Value =Your_desired_content_to_show_in_editor; 
$oFCKeditor->Create() ; 

a) Teraz, jeśli wybierzesz metodę 1) (a) (ii) lub (iii), umieść następujący fragment kodu przed tą linią: $ oFCKeditor-> Create();

$oFCKeditor->Config["LinkBrowserURL"] = ($oFCKeditor->BasePath)."editor/filemanager/browser/default/browser.html?Connector=../../connectors/php/connector.php&param_project_to_fck=".base64_encode($SERVER_RELATIVEPATH); 
$oFCKeditor->Config["ImageBrowserURL"] = ($oFCKeditor->BasePath)."editor/filemanager/browser/default/browser.html?Type=Image&Connector=../../connectors/php/connector.php&param_project_to_fck=".base64_encode($SERVER_RELATIVEPATH); 
$oFCKeditor->Config["FlashBrowserURL"] = ($oFCKeditor->BasePath)."editor/filemanager/browser/default/browser.html?Type=Flash&Connector=../../connectors/php/connector.php&param_project_to_fck=".base64_encode($SERVER_RELATIVEPATH); 

b) jeśli wybrano 1) (a) (ii) metoda, po czym w powyższym segmencie kodu kodu, po prostu wymienić wszystkie teksty: base64_encode ($ SERVER_RELATIVEPATH) z tego jeden: base64_encode (session_name())

I gotowe.