powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Поиск в Tree
13 сообщений из 13, страница 1 из 1
Поиск в Tree
    #36456919
well9999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Опять деревянный вопрос :).
Можно ли осуществить поиск по дереву?
Тоесть набрав в окне поиска слово, в дереве бы выделилась (и открылась) ветвь (узел) с соответствующим именем?
...
Рейтинг: 0 / 0
Поиск в Tree
    #36467626
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
well9999,

а как Вы формируете дерево?
...
Рейтинг: 0 / 0
Поиск в Tree
    #36471623
well9999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Создаю пустую страницу. На странице размещаю регион типа tree из Shared components. Дерево формирую на основе SQL запроса. Задаю стартовую строку, указываю деревянную таблицу. Ну и всё. Ещё добавляю линк для перехода на репорт.
...
Рейтинг: 0 / 0
Поиск в Tree
    #36492607
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
well9999,

извиняюсь, что с таким перерывом подымаю этот вопрос.
0. А что должно получиться в результате поиска? Допустим, у нас есть элемент типа Text, в который мы вводим строку для поиска в элементах дерева. Как пример дерева, можно взять:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
KING
--BLAKE
----ALLEN
----JAMES
------MARTIN
------TURNER
----WARD
--CLARK
----MILLER
--JONES
----FORD
------SMITH
----SCOTT
------ADAMS

Пользователь вводит 'A%'. Что должно остаться в этом дереве?
1. Поиск должен происходит с полным обновлением страницы или без сабмита?
...
Рейтинг: 0 / 0
Поиск в Tree
    #36500419
well9999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще поиск по шаблону мне не надо.
Допустим ввожу в окне поиска "А", активной должна стать первая ветка начинающаяся на "А"(ALLEN).
Ввожу следующую букву "AD", активной должна стать первая ветка начинающаяся на "АD"(ADAMS).
Обновлять не обязательно. Пусть пользователь нажимает на ветку :)
...
Рейтинг: 0 / 0
Поиск в Tree
    #36512306
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
well9999,

В общем, вот что удалось получить при помощи JS+jQuery: http://apex.oracle.com/pls/otn/f?p=44528:32:0 . В двух словах:

0. Создано дерево на основе таблицы EMP.
1. В дереве изменены запрос, Node Text Templates и Link Templates:
Query
Код: plaintext
1.
2.
3.
4.
5.
6.
select "EMPNO" id, 
       "MGR" pid, 
       "ENAME" name, 
       'javascript:select($x(''a'|| "EMPNO" ||'''));' link, 
       null a1, 
       "EMPNO" a2 
from "#OWNER#"."EMP"
Parent Node Template
Код: plaintext
<tr class="test-class-row">#INDENT#<td colspan="#COLSPAN#" valign="CENTER"  class="tiny user-tree-node">#NAME##A1# #DRILL_UP#</td></tr>
Node Text Template
Код: plaintext
<tr class="test-class-row">#INDENT#<td colspan="#COLSPAN#" valign="CENTER" class="tiny user-tree-node">#NAME##A1#</td></tr>
Name Link Anchor Tag
Код: plaintext
<a href="#LINK#" nodeval="#NAME#" id="a#A2#" nodeid="#A2#">#NAME#</a>

2. На страницу добавляем элементы для ввода текста ( P32_SEARCH_ENAME ), хранения айдишника выбранного элемента в дереве ( P32_SELECTED_EMPNO ), а также HTML-регион с дивом ( id="SELECTED_DIV" ), в котором отображается айдишник выбранного элемента либо по клику, либо по нажатию Enter в текстовом поле.
3. В Footer региона с деревом вставляем стиль и скрипт:
Region Footer
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
<style>
  a.selected-node{
    color: darkblue;
    font-style: italic;
    margin-left: 20px;
  }
</style>
<script type="text/javascript">
  var lastResult;

  function getKeyNum(e){
    var keynum;
  
    if(window.event) // IE
    {
      keynum = e.keyCode
    }
    else if(e.which) // Netscape/Firefox/Opera
    {
      keynum = e.which
    }
    
    return keynum;
  }

  function mark(node){
    if (node) {
      node.addClass("selected-node");
      $s("P32_SELECTED_EMPNO", node.attr("nodeid"));
    }
  }
  
  function unmark(node){
     node ? node.removeClass("selected-node") : null;
  }

  function search(val, e){
    if (e && getKeyNum(e) ==  13 ){
      return false;
    }
    else {
      unmark(lastResult);
      if (!!val) {
        lastResult = $("td.user-tree-node a[nodeval^="+ val +"]:first");
        mark(lastResult);
      }
      else {$s("P32_SELECTED_EMPNO", "");}
      return true;
    }
  }
  
  function select(node){
    unmark(lastResult);
    lastResult = $(node);
    $s("P32_SEARCH_ENAME", lastResult.text());
    mark(lastResult);
    show();
  }
  
  function show(e){
    if (!e || getKeyNum(e) ==  13 ) {
      $s("SELECTED_DIV", $v("P32_SELECTED_EMPNO"));
      return false;
    }
    else {
      return true;
    }
  }
/* Ищем при загрузке региона уже введённую фразу */
search($v("P32_SEARCH_ENAME"));
</script>

4. В Footer региона для отображения айдишника выбранного элемента вставляем вызов соответствующей функции:
Region Footer
Код: plaintext
1.
2.
<script type="text/javascript">
  show();
</script>


Всё. :) Конечно, всё это стоит оформить красивее - в класс/пространство имён, добавить всякие проверки и прочее... Но лень, мне кажется, для примера сойдёт и так. Если будет нужно - могу намылить данные учётки разработчика, чтобы глянуть на всё изнутри.
...
Рейтинг: 0 / 0
Поиск в Tree
    #36526723
well9999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо большое!
...
Рейтинг: 0 / 0
Поиск в Tree
    #36725058
well9999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем!
Ещё раз затрагиваю эту тему.
Как осуществить поиск по дереву, если узел находится в закрытой ветви?
Как вариант сделать EXPAND ALL потом искать, но это будет тяжеловесно, да и нехотелось бы открывать ненужные ветви...
...
Рейтинг: 0 / 0
Поиск в Tree
    #36893409
AlMoVi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подниму тему, может подскажете.

Есть ли возможность при поиске при втором нажатии Enter, чтобы подсветка переходила на следующую запись, содержащую эти же символы?

П.С.

suPPLer
1. В дереве изменены запрос, Node Text Templates и Link Templates:
+
Query
Код: plaintext
1.
2.
3.
4.
5.
6.
select "EMPNO" id, 
       "MGR" pid, 
       "ENAME" name, 
       'javascript:select($x(''a'|| "EMPNO" ||'''));' link, 
       null a1, 
       "EMPNO" a2 
from "#OWNER#"."EMP"
+
Parent Node Template
Код: plaintext
<tr class="test-class-row">#INDENT#<td colspan="#COLSPAN#" valign="CENTER"  class="tiny user-tree-node">#NAME##A1# #DRILL_UP#</td></tr>
+
Node Text Template
Код: plaintext
<tr class="test-class-row">#INDENT#<td colspan="#COLSPAN#" valign="CENTER" class="tiny user-tree-node">#NAME##A1#</td></tr>
+
Name Link Anchor Tag
Код: plaintext
<a href="#LINK#" nodeval="#NAME#" id="a#A2#" nodeid="#A2#">#NAME#</a>


Не могли бы подсказать, это находиться в регионе дерева или темплейте? никак не могу найти(
...
Рейтинг: 0 / 0
Поиск в Tree
    #36893449
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlMoVi,

версию APEX озвучьте.
...
Рейтинг: 0 / 0
Поиск в Tree
    #36893976
AlMoVi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
suPPLer,


Application Express 4.0.1.00.03
...
Рейтинг: 0 / 0
Поиск в Tree
    #36895829
AlMoVi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все еще требуется помощь:)
...
Рейтинг: 0 / 0
Поиск в Tree
    #36895875
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlMoVi,

изначально в этой теме разговор шёл про версию 3.x. В версии 4.0 для формирования деревьев используется плагин jsTree (причём, ЕМНИП, уже устаревшая версия). Поэтому Вам придётся почитать документацию этого плагина и освоить хоть немного JavaScript. А дальше - дело за Dynamic Action и соответствующим JavaScript-кодом...
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Поиск в Tree
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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