Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Не могу сообразить как организовать "динамически догружаемые" деревья / 23 сообщений из 23, страница 1 из 1
30.05.2007, 17:32
    #34562180
dennny
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу сообразить как организовать "динамически догружаемые" деревья
Не могу сообразить как организовать "динамически догружаемые" деревья.

Есть древовидный большой справочник - порядка 30000 позиций.
Так вот проблема в том, что написанный на JS (всё дерево храниться в древовидном массиве - дополнительно подключаемом JS) ужасно долго (30сек) открывается на нормальной тачке. Я так понял IE съедает сам массив долго. На машинах попроще - в разы дольше 8-(=).
Подумал про технологию "динамически подружаемых деревьев".
То есть хочется например сразу построить дерево на пару уровней, а далее если пользователь внутрь поползёт - подливать недостающее содерживое в массив с сервера БД.

Мысли на этот счёт:
Если через PHP делать запрос на сервер то конечно можно сформировать новый JS массив, но как его "исполнить" и заставить скрипт на странице "увидеть" новый массив. Как-то нужно пнуть открытие выбранной ветки дерева. Не понимаю как после выполнения PHP вернуть ход на сторону JS.

P.S. Сами ветки - это просто "<A HREF=". Сделать что ли кнопку фиктивную и с HREF позвать функцию которая фиктивно нажмёт кнопку, а по возвращению шарика на сторону клиента КАК-ТО допишет массив полученным ПОДмассивом. Не знаю сработает ли такая связка ...

Прошу совета и критических замечаний ...
...
Рейтинг: 0 / 0
30.05.2007, 17:40
    #34562223
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу сообразить как организовать "динамически догружаемые" деревья
Из чего формируется массив?
...
Рейтинг: 0 / 0
30.05.2007, 17:42
    #34562236
SkyLight
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу сообразить как организовать "динамически догружаемые" деревья
AJAX
...
Рейтинг: 0 / 0
30.05.2007, 17:47
    #34562257
dennny
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу сообразить как организовать "динамически догружаемые" деревья
AntonariyИз чего формируется массив?
Не очень понял вопрос. Суть пара таблиц в БД (таблица сущностей и таблица зависимостей).
На странице выглядит как труктура из картинок (+/-) и имени (ссылка HREF с вызовом функии раскрытия/зкрытия).
...
Рейтинг: 0 / 0
30.05.2007, 17:48
    #34562259
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу сообразить как организовать "динамически догружаемые" деревья
}{мм.
А зачем тогда как-то связывать массивы? Получили данные на корень + инфу о наличии потомков у его членов, построили узлы, забыли. Кликнули пор узлу - получили его идентификатор - получили список его членов + инфу о наличии потомков, достроили, показали, забыли.
...
Рейтинг: 0 / 0
30.05.2007, 17:49
    #34562267
dennny
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу сообразить как организовать "динамически догружаемые" деревья
SkyLightAJAX
Если можно чуть подробнее скажите возможности которые он предоставит для моей задачи.
Напомню, что всё должно строиться на базе живых данных из базы.
...
Рейтинг: 0 / 0
30.05.2007, 17:50
    #34562271
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу сообразить как организовать "динамически догружаемые" деревья
Нужно посмотреть структуру дерева и запрос, на основании которого оно строится.
...
Рейтинг: 0 / 0
30.05.2007, 17:50
    #34562274
dennny
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу сообразить как организовать "динамически догружаемые" деревья
Antonariy}{мм.
А зачем тогда как-то связывать массивы? Получили данные на корень + инфу о наличии потомков у его членов, построили узлы, забыли. Кликнули пор узлу - получили его идентификатор - получили список его членов + инфу о наличии потомков, достроили, показали, забыли.
Для автономности. Если закрыли ветку - при открытии снова тащить данные из базы что ли ?
...
Рейтинг: 0 / 0
30.05.2007, 17:51
    #34562279
dennny
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу сообразить как организовать "динамически догружаемые" деревья
AntonariyНужно посмотреть структуру дерева и запрос, на основании которого оно строится.
...
Рейтинг: 0 / 0
30.05.2007, 17:52
    #34562280
dennny
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу сообразить как организовать "динамически догружаемые" деревья
...
Рейтинг: 0 / 0
30.05.2007, 17:53
    #34562290
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу сообразить как организовать "динамически догружаемые" деревья
dennny , ты ж про аякс не в курсе, не обращай внимания на мои предыдущие посты.
Восплльзуйся поиском - "ajax" + "дерево" или "tree".
...
Рейтинг: 0 / 0
30.05.2007, 17:55
    #34562297
dennny
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу сообразить как организовать "динамически догружаемые" деревья
Приложил страничку где отображается и скрипт с массивом.
Запрос не запрос - проход по веткам с использованием врем. таблицы.

CodeMain
PROCEDURE MonCustomerTree
AS
BEGIN
IF (SELECT count(1) from SysObjects where name='#MonBranchTreeResult')=0
CREATE TABLE #MonBranchTreeResult (Line varchar(200))

IF (SELECT count(1) from SysObjects where name='#BranchTree')=0
BEGIN
CREATE TABLE #BranchTree (OwnerID varchar(15), TreeID varchar(15), TreeName#Rus varchar(100), TreeIntID int, Tree_Object varchar(15))
CREATE INDEX CT_OwnerID ON #BranchTree (Tree_Object, OwnerID)
CREATE INDEX CT_OwnerID_TreeID ON #BranchTree (Tree_Object, OwnerID, TreeID)
END

INSERT INTO #MonBranchTreeResult values ('var s = "''";');
INSERT INTO #MonBranchTreeResult values ('var myMenu = [');

DECLARE SpbCustFillials CURSOR FOR
SELECT TreeID, TreeName#Rus FROM MonTree WHERE Tree_Object='CompanyTree' and OwnerID='13285' and isnumeric(TreeID)<>1 ORDER BY TreeID

DECLARE @TreeID varchar(15), @TreeName varchar(100)

OPEN SpbCustFillials
FETCH NEXT FROM SpbCustFillials INTO @TreeID, @TreeName
WHILE @@Fetch_Status=0
BEGIN
INSERT INTO #MonBranchTreeResult VALUES
('[null,'''+@TreeName+''',''SelectItem1 (''+s+'''+@TreeName+'''+s+'',''+s+'''+@TreeID+'''+s+'')'',''customers'',s+'''+@TreeID+'''+s,')

EXECUTE MonTreeBranch @OwnerID=@TreeID, @Tree_Object='CompanyTree'
FETCH NEXT FROM SpbCustFillials INTO @TreeID, @TreeName

INSERT INTO #MonBranchTreeResult VALUES ('],');
END;

INSERT INTO #MonBranchTreeResult VALUES (']; ctDraw (''myMenuID'', myMenu, ctThemeXP1, ''ThemeXP'', 0, 0);');

SELECT Line FROM #MonBranchTreeResult
TRUNCATE TABLE #MonBranchTreeResult
DEALLOCATE SpbCustFillials
END


CodeBranch
PROCEDURE MonTreeBranch (@OwnerID varchar(15), @Tree_Object varchar(15))
AS
BEGIN

DECLARE @tID varchar(15), @TName varchar(100)
DECLARE @TIntID int, @RecNo int

INSERT INTO #BranchTree SELECT @OwnerID, TreeID, TreeName#Rus, TreeIntID, @Tree_Object
FROM MonTree T WHERE Tree_Object=@Tree_Object AND OwnerID=@OwnerID ORDER BY TreeID

SELECT @RecNo=count(1) FROM #BranchTree WHERE ID=@OwnerID
WHILE @RecNo>0
BEGIN
SET ROWCOUNT 1
SELECT @tID=TreeID, @TName=TreeName#Rus, @TIntID=TreeIntID FROM #BranchTree WHERE OwnerID=@OwnerID and Tree_Object=@Tree_Object ORDER BY TreeID
SET ROWCOUNT 0

IF (SELECT COUNT(1) FROM MonTree T WHERE Tree_Object=@Tree_Object AND OwnerID=@tID) > 0
BEGIN
INSERT INTO #MonBranchTreeResult VALUES ('[null,'''+@TName+''','+'''SelectItem (''+s+'''+@tName+'''+s+'''+',''+s+'''+@tID+'''+s+'')'+char(39)+','+char(39)+'customers'+char(39)+',s+'''+@tID+'''+s,')

EXECUTE MonTreeBranch @OwnerID=@tID, @Tree_Object=@Tree_Object
INSERT INTO #MonBranchTreeResult VALUES ('],')
END
ELSE
INSERT INTO #MonBranchTreeResult VALUES ('[null,'''+@TName+''','+'''SelectItem (''+s+'''+@tName+'''+s+'''+',''+s+'''+@tID+'''+s+'')'+char(39)+','+char(39)+'customers'+char(39)+',s+'''+@tID+'''+s],')

DELETE FROM #BranchTree WHERE OwnerID=@OwnerID AND TreeID=@tID AND Tree_Object=@Tree_Object
SELECT @RecNo=count(1) FROM #BranchTree WHERE ID=@OwnerID AND Tree_Object=@Tree_Object
END
END
...
Рейтинг: 0 / 0
30.05.2007, 18:02
    #34562325
dennny
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу сообразить как организовать "динамически догружаемые" деревья
Вообщем-то можно и плюнуть на ведение всего масива данной секции.
И самое главное -
1) как со ссылки HREF позвать PHP скрипт и получив данные
вернуть ход JS для отрисовки данных полученных открытой ветки
2) как получить данные от PHP в JS. Вероятно использовать некое уникальное
для сесси временное имя JS куда PHP сгенерит скрипт дорисовки недостающей ветки ?
А можно ли тогда окно для исполнения этого скрипта сделать невидимым ?
...
Рейтинг: 0 / 0
30.05.2007, 18:24
    #34562392
SkyLight
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу сообразить как организовать "динамически догружаемые" деревья
Все уже было сказано. Слушать совета Antonariy - юзать Гугл. Можно и прямо: http://www.w3schools.com/ajax/default.asp (это если англицкий знаешь).
...
Рейтинг: 0 / 0
30.05.2007, 18:30
    #34562414
LINUXER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу сообразить как организовать "динамически догружаемые" деревья
можно и по-русски
статья
книжка

Данные можно подгружать без перезагрузки страницы в формате JSON .
Его даже парсить не надо.
...
Рейтинг: 0 / 0
30.05.2007, 19:48
    #34562591
М.Голованов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу сообразить как организовать "динамически догружаемые" деревья
dennnyНе могу сообразить как организовать "динамически догружаемые" деревья.

Есть древовидный большой справочник - порядка 30000 позиций.

Я в свое время сделал это с использованием Yahoo!UI library (http://developer.yahoo.net/yui/). Получилось вот что, например:

https://www.catalog-on-demand.com/webcatalogs/edgemkt/reference_catalog_3/

Как раз Ваши 30000 позиций по продуктам и еще 1...10 SKU по каждому.
...
Рейтинг: 0 / 0
30.05.2007, 19:56
    #34562598
dennny
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу сообразить как организовать "динамически догружаемые" деревья
М.Голованов
Я в свое время сделал это с использованием Yahoo!UI library (http://developer.yahoo.net/yui/). Получилось вот что, например:
https://www.catalog-on-demand.com/webcatalogs/edgemkt/reference_catalog_3/
Как раз Ваши 30000 позиций по продуктам и еще 1...10 SKU по каждому.

не слишком то резво открывается 8(
...
Рейтинг: 0 / 0
30.05.2007, 20:05
    #34562614
dennny
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу сообразить как организовать "динамически догружаемые" деревья
Ошибся - грузиться хорошо.
Подскажите пример использования JSON.
Наверно это будет лучше для моего приложения ...
...
Рейтинг: 0 / 0
31.05.2007, 10:47
    #34563542
SkyLight
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу сообразить как организовать "динамически догружаемые" деревья
Тебе дали ссылку на сайт, посвященный JSON. Что непонятно?
...
Рейтинг: 0 / 0
31.05.2007, 11:00
    #34563622
dennny
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу сообразить как организовать "динамически догружаемые" деревья
Не вижу примера использования - лишь оторванные куски кода.
Закиньте пример использования у кого есть ...
...
Рейтинг: 0 / 0
31.05.2007, 13:53
    #34564629
LINUXER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу сообразить как организовать "динамически догружаемые" деревья
сервлет
Код: plaintext
1.
2.
3.
4.
5.
6.
...
response.setContentType("text/json;charset=UTF-8");
        PrintWriter out = response.getWriter();
        out.print("{id:"+ad.getId()+",");        
        out.print("type:'"+ad.getType()+"',");        
        out.print("length:"+ad.getLength()+"}");        
        out.close();
Тут просто текстом. Чтобы генерить, на json.org много ссылок на либы.
клиент
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
...
function requestAd(id){
    var req=window.XMLHttpRequest? new XMLHttpRequest(): new ActiveXObject("Microsoft.XMLHTTP");
    req.onreadystatechange=function(){
        if (req.readyState== 4 ){
            if (req.status== 200 ){
                var ad=eval("("+req.responseText+")");//вообще рекомендуют использовать официальную библиотеку
                insAd(ad);
            }
            else alert("No response. ad:"+id+";status:"+req.status);
        }
    }
    req.open("GET","Adverts?id="+id,true)
    req.send(null);
}
function insAd(ad){   
    alert("length:"+ad.length);....
};
...
...
Рейтинг: 0 / 0
01.06.2007, 09:39
    #34566683
М.Голованов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу сообразить как организовать "динамически догружаемые" деревья
dennny М.ГоловановПолучилось вот что, например:

не слишком то резво открывается 8(

А что Вы хотите? Это же Ajax. Это приложение тащит с собой хорошую пачку Javascript модулей (к счастью, сжатых), поэтому ПЕРВЫЙ раз и грузится долго. Потом кэш браузера спасает.

Потом, там задействован не только TreeView из Yahoo!UI library , но и Container (модальные диалоги и прочее).
...
Рейтинг: 0 / 0
01.06.2007, 10:29
    #34566801
dennny
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу сообразить как организовать "динамически догружаемые" деревья
Всё сделал без лишней JS дабы обеспечить работоспособность на слабых тачках филиалов.
Я просто вызываю PHP и оттуда изменённой дерево возвращаю. Всем БОЛЬШОЕ спасибо.
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Не могу сообразить как организовать "динамически догружаемые" деревья / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]