Odpowiadajac,
Oczywiscie znam biblioteki jQueryUI/ExtJs/Dojo, etc ... ale powiem krotko jest z nimi tak, ze
"aby napic sie mleka to trzeba kupic krowe". U mnie moduly maja strukture hierarchiczna zaleznosci:
jGui->jDialog (rozmiar 31k) a pozostale sa niezalezne.
Zdecydowalem napisac sie swoj edytor RTE poniewaz chcialem go latwo dodawac do stron oraz w
PopUp Dialogs (Istniejace rozwiazania pozwalaja dodawac rte tylko na strone i sa bardzo nieporeczne).
Do RTE Edytora oczywiscie mozna dodac inne funkcje np. image ktora zawiera:
- image managment, rotate, resizing, croping, etc.
Napisanie RTE edytora nie jest skomplikowane ale trzeba znac dobrze algorytmy operowania na
iframe w design mode. Uzywajac modulow jGui+jDialog napisanie zajelo mi to dwa wieczory.
(Prosze pytajacego sie o RTE skontaktowac sie ze mna to wysle source code)
W jService udalo mi sie rozwiazac dwa wazne problemy:
- asymmetrical object marshaling (troche inny jak json i bardziej efektywny ), polega on na tym ze wysyla sie z browsera native javascript objects do php/python/perl i tam sa one widziane jak native php/python/perl classes i odwrotnie (tablice sa widziane w browser jako javascript objects)
- cross domain request forwarding: browser->web server->other web server
- ajax/post synchroniczny, asynchroniczny i abort (przydatny zwlaszcza do autocmplete z database, upload progres bar, etc ...)
Tutaj jest przyklad PHP jService container services implementation dla ajax, post, mysql services i cross domain forwarding:
//
// jService container services implementation
//
include_once("SowaSession.inc");
include_once("LogFile.inc");
include_once("SowaService.inc");
$_ses = new Session();
$_req = new Request();
$_log = new LogFile("../jservice.log",$_req->log());
if(!$_req->is_forward()) // forward request to other web server
switch($_req->service()) { // requested service name
case "mysql":
include_once("MySqlDb.inc"); // query service implementation for mysql
case "ajax": // ajax service implementation
$body=$_req->body(); // get request objects
$body->digit=time(); // set response object attribute $_req->body($body); // set response like object
}
break;
case "post": // post service implementation
$post = $_ses->robj("post_"); // get post request object
$post->files=$_FILES; // set uploaded files info
$_req->body($post);
}
break;
default:
$_req->error("Service '".$_SERVER['PHP_SELF']."/".$_req->service()."' not Implemented");
}
$_req->response(); // send response to browser
Przyklad jService browser ajax request
jService.ajax("service.php","ajax",[["sb",javascript object]],
function(body, args, error) {
if($d.Message("last","AJAX REQUEST ERROR",error)) return;
// process response (response: body - object, args - array name value pair)
});
Przyklad jService browser ajax cross domain request
jService.ajax("service.php?http://www.sowacms.com/service.php","ajax",
// target jService container -> www.sowacms.com/service.php
[["sb",javascript object]],
function(body, args, error) {
if($d.Message("last","AJAX REQUEST ERROR",error)) return;
// process response
});
Przyklad jService browser query request
// query sowacms.cms_content table (all columns), response array of objects
jService.query("service.php","sowacms",[["qos","cms_content","*","order by name"]],
function(objects, error, args) {
if($d.Message("last","QUERY OBJECTS ERROR",error)) return;
for(var i = 0; i < objects.length; i++) {
// process response object
}
});
Powyzsze przyklady pokazuja jak prosto korzysta sie z moich modulow, prosze porownac to z innymi bibliotekami.
Dziekuje za opinie/sugestie