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

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

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

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

Прошу совета и критических замечаний ...
...
Рейтинг: 0 / 0
Не могу сообразить как организовать "динамически догружаемые" деревья
    #34562223
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из чего формируется массив?
...
Рейтинг: 0 / 0
Не могу сообразить как организовать "динамически догружаемые" деревья
    #34562236
Фотография SkyLight
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AJAX
...
Рейтинг: 0 / 0
Не могу сообразить как организовать "динамически догружаемые" деревья
    #34562257
dennny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyИз чего формируется массив?
Не очень понял вопрос. Суть пара таблиц в БД (таблица сущностей и таблица зависимостей).
На странице выглядит как труктура из картинок (+/-) и имени (ссылка HREF с вызовом функии раскрытия/зкрытия).
...
Рейтинг: 0 / 0
Не могу сообразить как организовать "динамически догружаемые" деревья
    #34562259
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
}{мм.
А зачем тогда как-то связывать массивы? Получили данные на корень + инфу о наличии потомков у его членов, построили узлы, забыли. Кликнули пор узлу - получили его идентификатор - получили список его членов + инфу о наличии потомков, достроили, показали, забыли.
...
Рейтинг: 0 / 0
Не могу сообразить как организовать "динамически догружаемые" деревья
    #34562267
dennny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SkyLightAJAX
Если можно чуть подробнее скажите возможности которые он предоставит для моей задачи.
Напомню, что всё должно строиться на базе живых данных из базы.
...
Рейтинг: 0 / 0
Не могу сообразить как организовать "динамически догружаемые" деревья
    #34562271
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно посмотреть структуру дерева и запрос, на основании которого оно строится.
...
Рейтинг: 0 / 0
Не могу сообразить как организовать "динамически догружаемые" деревья
    #34562274
dennny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy}{мм.
А зачем тогда как-то связывать массивы? Получили данные на корень + инфу о наличии потомков у его членов, построили узлы, забыли. Кликнули пор узлу - получили его идентификатор - получили список его членов + инфу о наличии потомков, достроили, показали, забыли.
Для автономности. Если закрыли ветку - при открытии снова тащить данные из базы что ли ?
...
Рейтинг: 0 / 0
Не могу сообразить как организовать "динамически догружаемые" деревья
    #34562279
dennny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyНужно посмотреть структуру дерева и запрос, на основании которого оно строится.
...
Рейтинг: 0 / 0
Не могу сообразить как организовать "динамически догружаемые" деревья
    #34562280
dennny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Не могу сообразить как организовать "динамически догружаемые" деревья
    #34562290
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dennny , ты ж про аякс не в курсе, не обращай внимания на мои предыдущие посты.
Восплльзуйся поиском - "ajax" + "дерево" или "tree".
...
Рейтинг: 0 / 0
Не могу сообразить как организовать "динамически догружаемые" деревья
    #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
Не могу сообразить как организовать "динамически догружаемые" деревья
    #34562325
dennny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообщем-то можно и плюнуть на ведение всего масива данной секции.
И самое главное -
1) как со ссылки HREF позвать PHP скрипт и получив данные
вернуть ход JS для отрисовки данных полученных открытой ветки
2) как получить данные от PHP в JS. Вероятно использовать некое уникальное
для сесси временное имя JS куда PHP сгенерит скрипт дорисовки недостающей ветки ?
А можно ли тогда окно для исполнения этого скрипта сделать невидимым ?
...
Рейтинг: 0 / 0
Не могу сообразить как организовать "динамически догружаемые" деревья
    #34562392
Фотография SkyLight
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все уже было сказано. Слушать совета Antonariy - юзать Гугл. Можно и прямо: http://www.w3schools.com/ajax/default.asp (это если англицкий знаешь).
...
Рейтинг: 0 / 0
Не могу сообразить как организовать "динамически догружаемые" деревья
    #34562414
LINUXER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно и по-русски
статья
книжка

Данные можно подгружать без перезагрузки страницы в формате JSON .
Его даже парсить не надо.
...
Рейтинг: 0 / 0
Не могу сообразить как организовать "динамически догружаемые" деревья
    #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
Не могу сообразить как организовать "динамически догружаемые" деревья
    #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
Не могу сообразить как организовать "динамически догружаемые" деревья
    #34562614
dennny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибся - грузиться хорошо.
Подскажите пример использования JSON.
Наверно это будет лучше для моего приложения ...
...
Рейтинг: 0 / 0
Не могу сообразить как организовать "динамически догружаемые" деревья
    #34563542
Фотография SkyLight
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тебе дали ссылку на сайт, посвященный JSON. Что непонятно?
...
Рейтинг: 0 / 0
Не могу сообразить как организовать "динамически догружаемые" деревья
    #34563622
dennny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не вижу примера использования - лишь оторванные куски кода.
Закиньте пример использования у кого есть ...
...
Рейтинг: 0 / 0
Не могу сообразить как организовать "динамически догружаемые" деревья
    #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
Не могу сообразить как организовать "динамически догружаемые" деревья
    #34566683
М.Голованов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dennny М.ГоловановПолучилось вот что, например:

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

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

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


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