Сохранить из @ HTML в страницу...?

NetWood

Lotus Team
17.04.2008
565
96
BIT
174
Задачка. Есть тяжеловесная конструкция на собаках. Лукапов штук пять шесть восемь... Вычисляет меню на сайте. Несколько собак надо, иначе не влезает в ограничение текста.
Вроде как надо один раз вычислить и потом брать готовое статиком. Тоха такое любит. При необходимости пересчитать. Иначе это по скорости самая затратная операция на странице.

Типа такого на подформе и так несколько раз
Код:
cat :="Рога и копыта";
cat2a := @DbLookup("":""; ""; "(LookupCategory2)";cat; 5);
cat2a := @If(@IsError(cat2a);"";cat2a);

cat2 := @DbLookup("":""; ""; "(LookupCategory2)";cat; "Category2");
cat2 := @If(@IsError(cat2);"";cat2);

cat_ :="";
n := 1;
    @DoWhile(
        @Do(
            cat3 := "<li>"+@DbLookup("":""; ""; "(LookupCategory_Category2)";cat +"_"+cat2[n]; 4)+"</li>";
            cat3 := @Trim(@If(@IsError(cat3);@Nothing;cat3));
            cat2li := "<li>":cat2a[n];
            cat3ul:= @If(cat3=@Nothing;@Nothing;"<ul>":cat3:"</ul>");
            cat_ := cat_:cat2li:cat3ul:"</li>"
        );
        n := n + 1;
    n <= @Elements(cat2)
);

@Implode(cat_;@NewLine)

Как бы ее один раз вычислить и сохранить в страницу дизайна? Ну или в страницу html. Вычислил, сохранил и я потом ее аяксом заберу.
Понятно, что агентом, но переписывать с собак лениво. Может есть изворотливый способ?
Надо мне с Вами поговорить. Обычно нахожу решение сам, но что-то подтупливаю... На странице дизайна же полей нет.
Собственно вопрос как из собак статик html автоматом сохранить.
 
Последнее редактирование:

savl

Lotus Team
28.10.2011
2 624
314
BIT
524
я правильно понимаю, что требуется сделать некий html шаблон, куда надо вставлять значения?
И что этот шаблон хочется получить из готовой страницы?
или нужно что-то иное?
 

NetWood

Lotus Team
17.04.2008
565
96
BIT
174
Не совсем. Шаблона нет. Он формируется из собак. Хочется страницу получить вычисленную из собак. Поскольку содержимое меню может меняться, то шаблон не очень подходит.
По факту я эту страницу генерю каждый раз и забираю аяксом. А можно же из готовой статиком.
 

savl

Lotus Team
28.10.2011
2 624
314
BIT
524
Не совсем. Шаблона нет. Он формируется из собак. Хочется страницу получить вычисленную из собак. Поскольку содержимое меню может меняться, то шаблон не очень подходит.
По факту я эту страницу генерю каждый раз и забираю аяксом. А можно же из готовой статиком.
а вычисления всегда разные или есть 5-6 наборов постоянных?
 

NetWood

Lotus Team
17.04.2008
565
96
BIT
174
Уточню задачу. Сделал спец форму и вычисляю меню в документе, с перспективой вынуть из него. Сделал набор полей с вычисляемыми формулами как выше...
Это работает, НО! то, что работало на вычисляемом тексте на подформе, натыкается на 32 к в поле. Сама менюха около 150k. Считается 200мсек.
 
Последнее редактирование:

duchan

Green Team
20.09.2006
128
11
BIT
239
У меня была похожая задача, генерил на сабаках html, но для показа в карточке, и так же напоролся на 32К. Обошел следующим образом: создал несколько полей с приставками в конце "_0"-"_9"(у меня они вычисляемые для показа сами на себя [@ThisValue], т.к. мне их не надо хранить - Вам простые поля, чтоб сохранялись в доке), в отдельном поле считаю html, заводим счетчик = изначально 0, html генерится циклами и на каждой итерации, проверяю размер получившегося html, если он превышает 16К (русские буквы то у нас 2 байта), то сбрасываю html в поле с "_"+счетчик, счетчик+1, html="", и пошли на новый круг. в конце остаток html в новое "_"+счетчик поле...
по итогу html сгенерирован, но по кускам лежит в 10 полях, сшить которые, для показа, уже без проблем....
 
  • Нравится
Реакции: VladSh и NetWood

NetWood

Lotus Team
17.04.2008
565
96
BIT
174
html генерится циклами и на каждой итерации, проверяю размер получившегося html, если он превышает 16К (русские буквы то у нас 2 байта)
Да, это оно. И борьба за 50-100мсек, чтобы было быстрее. Или забить или потом переписать...
duchan а не осталось ли с той задачки потрохов, глянуть на расстановку "знаков препинания" ?
 
Последнее редактирование:

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
466
если вычисляется один раз - зачем собаками?
 

NetWood

Lotus Team
17.04.2008
565
96
BIT
174
если вычисляется один раз - зачем собаками?
Ну так проще было. И не совсем один раз. Менюшка же меняться может. Вот тут подумалось, что можно этот огород вычислять по-прежнему и простым агентом из урла запихивать в RTF и потом как из дока доставать...
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
466
Ну так проще было. И не совсем один раз. Менюшка же меняться может. Вот тут подумалось, что можно этот огород вычислять по-прежнему и простым агентом из урла запихивать в RTF и потом как из дока доставать...
да и сделать на ЛС, тогда не будет заморочек с ограничениями
 
  • Нравится
Реакции: VladSh

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
да ну, что-то вы без энтузиазма ;)

собачки с лукапами можно сделать и вот так @GetDocField или @GetProfileField берём значение которое заранее рендерит агент по расписанию, или раз в день ;)
особенно для меню, которое порой пересчитать нужно только при изменении дока и его свойств

ну и чистая статика, агент накидывает в поля Field_Х сам нарезая по 16К
 
  • Нравится
Реакции: VladSh

NetWood

Lotus Team
17.04.2008
565
96
BIT
174
вот так @GetDocField или @GetProfileField
О да! С @GetProfileField отдельный карнавал.
Покуда переписывать лениво, я с менюшкой сделал так: Вначале загружается шапка. Она статичная. А потом гружу в нее уже аяксом вычисляемые кишки.
Код:
$(function() {
        Link ='doSub?readform&sub=menu';
         $.get(Link, function(htmlStr) {
            // insert menu structure
            $('#main-menu').html(htmlStr);
            // SmartMenus initialization code
            $('#main-menu').smartmenus();       
        }); 
    
});
Ведь сразу ломиться в меню никто не будет. Получается, что страница грузится влет, а танки подходят позже.

Спасибо. Приятно пообщался со сторожилами ).
 
Последнее редактирование:
  • Нравится
Реакции: VladSh

rinsk

Lotus Team
12.11.2009
1 156
126
BIT
43
Уточню задачу. Сделал спец форму и вычисляю меню в документе, с перспективой вынуть из него. Сделал набор полей с вычисляемыми формулами как выше...
Это работает, НО! то, что работало на вычисляемом тексте на подформе, натыкается на 32 к в поле. Сама менюха около 150k. Считается 200мсек.
150 к менюха??? Может в json на бэк отдавать - а там отрисовывать уж..
И да - лучше хранить все в профильных докахб которые вычисляются 1 раз...
Еще вариант - динамический запрос и сохранение в localStorage браузера. Я так храню много чего с сервера. списки для select и т.д.
 

rinsk

Lotus Team
12.11.2009
1 156
126
BIT
43
О да! С @GetProfileField отдельный карнавал.
Покуда переписывать лениво, я с менюшкой сделал так: Вначале загружается шапка. Она статичная. А потом гружу в нее уже аяксом вычисляемые кишки.
Код:
$(function() {
        Link ='doSub?readform&sub=menu';
         $.get(Link, function(htmlStr) {
            // insert menu structure
            $('#main-menu').html(htmlStr);
            // SmartMenus initialization code
            $('#main-menu').smartmenus();      
        });
   
});
Ведь сразу ломиться в меню никто не будет. Получается, что страница грузится влет, а танки подходят позже.

Спасибо. Приятно пообщался со сторожилами ).
Вот верно :)
и бегать постояноо не надо на сервер - хранить в localStorage в ключе типа user+role+трампампам
я использую JStorage - GitHub - andris9/jStorage: jStorage is a simple key/value database to store data on browser side
 
  • Нравится
Реакции: NetWood

NetWood

Lotus Team
17.04.2008
565
96
BIT
174
Спасибо за подгон! Изучнул ее слегка. Так она ключи в открытом виде хранит в локалсторадж. Возникла мысль для авторизации использовать, но... И яблоки относятся к ней приватно...
Я намедни пильнул регистрацию и авторизацию без пароля только по кодам на email. Пароли автоматом генерятся и хранятся не на локал. Само понятие логин исчезло, так как он 123@321.com=123_321_com и в интернете уникален. На каждое действие в браузере выдаться ключ из ID, которых у нас полная база. А при реге аж два. SSO LtpaToken или single DomAuthSessId без разницы. Ну там куки задействованы, естественно, и автологин...
Вот эту либу можно еще сверху для секюритности подумать как повесить.
 
Последнее редактирование:

rinsk

Lotus Team
12.11.2009
1 156
126
BIT
43
Спасибо за подгон! Изучнул ее слегка. Так она ключи в открытом виде хранит в локалсторадж. Возникла мысль для авторизации использовать, но... И яблоки относятся к ней приватно...
Я намедни пильнул регистрацию и авторизацию без пароля только по кодам на email. Пароли автоматом генерятся и хранятся не на локал. Само понятие логин исчезло, так как он 123@321.com=123_321_com и в интернете уникален. На каждое действие в браузере выдаться ключ из ID, которых у нас полная база. А при реге аж два. SSO LtpaToken или single DomAuthSessId без разницы. Ну там куки задействованы, естественно, и автологин...
Вот эту либу можно еще сверху для секюритности подумать как повесить.
Ну если пароли в MD5 \etc храниятся, пофиг где хранить.
А вот при SSO можно генерить штатный LtpaToken и даже если юзера нет нигде в ак, он будет виден доминой и можно использовать. Имя юзера без разницы.
 

NetWood

Lotus Team
17.04.2008
565
96
BIT
174
А вот при SSO можно генерить штатный LtpaToken и даже если юзера нет нигде в ак, он будет виден доминой и можно использовать. Имя юзера без разницы.
Уже читаю https://codeby.net/threads/smena-sostojanija-polzovatelskoj-veb-sessi.56756/ . Надо обнять эту инфу. Яву не люблю.
То бишь если включен SSO и сгенерить LtpaToken и подсунуть его в куки, то Domino это слопает без пароля и без юзера в AK или в DA?
 
Последнее редактирование:

rinsk

Lotus Team
12.11.2009
1 156
126
BIT
43
  • Нравится
Реакции: NetWood

NetWood

Lotus Team
17.04.2008
565
96
BIT
174
И вот интересная вещь обнаружилась #хозяйкеназаметку. Я уже тут напишу коль разговор пошел...
Обнаружил по ходу тестов, что на Хроме и Edge LtpaToken не ставится в куки на тестовый сервер у которого домен без точки. Скажем, если домен test - не работает. test.ru - работает.
Голову сломал, чего не работало на тестовом сервере.
На DomAuthSessId такой проблемы нет, так как нет директивы домена.
1644703339737.png

А на FireFox все работает. Куки LtpaToken прекрасно ставятся и на тестовом домене и на боевом. Такие дела...
 

rinsk

Lotus Team
12.11.2009
1 156
126
BIT
43
И вот интересная вещь обнаружилась #хозяйкеназаметку. Я уже тут напишу коль разговор пошел...
Обнаружил по ходу тестов, что на Хроме и Edge LtpaToken не ставится в куки на тестовый сервер у которого домен без точки. Скажем, если домен test - не работает. test.ru - работает.
Голову сломал, чего не работало на тестовом сервере.
На DomAuthSessId такой проблемы нет, так как нет директивы домена.
Посмотреть вложение 57017
А на FireFox все работает. Куки LtpaToken прекрасно ставятся и на тестовом домене и на боевом. Такие дела...
Имхо - SSO ключ ставится именно на домен и оно вообще не должно работать если FQDN хоста не <host>.<domain>
В данном случае тестовый сервер должен адресоваться как test.local например и SSO должно выдаваться на .local.
Короткое имя - пережиток NetBios )))
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!