These are chat archives for dru-io/Drupal

6th
Apr 2017
delister
@delister
Apr 06 2017 07:58
в каком хуке можно получить доступ к уже отрендеренным готовым к выводу js скриптам ?
@delister сори не посмотрел хук) в общем всё зависть от конкретного модуля нет универсального хука, а называться должен примерно так hook ajax command alter
delister
@delister
Apr 06 2017 08:04
а что скрипты через ajax подключаются ?
речь о d8
boolboost
@boolboost
Apr 06 2017 08:05
А тогда сори и я вас не понял и почему то решил что решь об ajax command(
delister
@delister
Apr 06 2017 08:06
мне нужен хтмл в котором будут: <script type="text/javascript" src=""></script>
boolboost
@boolboost
Apr 06 2017 08:10
inline javascript что ли вам нужен свой добавить?
delister
@delister
Apr 06 2017 08:15
нет, проблема в том что при подключении внешней библотеки с get параметрами в url
drupal заменяет все амперсанды на его html код
и на выходе после рендеринга получается не рабочий url подключаемого скрипта
завел issue на d.org решения пока нет
я хочу получить доступ уже к отрендеренным скриптам и через str_replace заменить обратно на амперсанды
т.е. Вы хотите подключить http://cdn.com/script.js?param1=v1&param2=v2
а на выходе получаете http://cdn.com/script.js?param1=v1&param2=v2
блин автозамена сработала
вообще вы получаете html код амерасанда
boolboost
@boolboost
Apr 06 2017 08:19
Да, тут уже писали об этой ошибке.
delister
@delister
Apr 06 2017 08:20
дак я и писал
))
boolboost
@boolboost
Apr 06 2017 08:22
По inline js должно работать через attached с типом inline. Но нужно проверять не знаю работает ли это в последних версиях d8
Например забить его через preproccess page
delister
@delister
Apr 06 2017 08:26
всмысле а зачем inline js ?
boolboost
@boolboost
Apr 06 2017 08:26
Ну сами же писали хотите тег скрипт
Что то я сегодня вечно промащивываюсь((
delister
@delister
Apr 06 2017 08:27
нет мне нужены отрендеренные скрипты
boolboost
@boolboost
Apr 06 2017 08:27
Просто смотрите preproccess там наверника всё есть
delister
@delister
Apr 06 2017 08:28
какой препроцесс ? я смотрел preprocess_html там вместо хтмл скриптов плейсхолдеры
delister
@delister
Apr 06 2017 08:52
там они не отрендеренные
boolboost
@boolboost
Apr 06 2017 08:52
Ппц же запутали вывод js css
Но думаю тут тоже не отрендрены
delister
@delister
Apr 06 2017 08:53
да тут тоже
boolboost
@boolboost
Apr 06 2017 08:54
Так что да, бес понятия как найти где рендер js placeholder
delister
@delister
Apr 06 2017 08:54
капец какой-то))
boolboost
@boolboost
Apr 06 2017 08:54
Покопался по коду друпал, и ничего дельного не нашёл...
Плохо искал 100%.
delister
@delister
Apr 06 2017 09:09
я вот не понимаю систему этих плейсхолдеров, изначально я думал что они нужны для чего то вроде bigPipe ... но зачем скрипты выводить через плейсхолдеры, я понимаю что вообще не понимаю что это за механизм, может кто-то объяснить ?
strelkovandrey
@strelkovandrey
Apr 06 2017 11:44
Добрый день, кто нибудь решал подобную задачу, с помощью модуля Calendar отображаю страницу с в виде текущего месяца и показывающую определенный тип материала, хочу сделать так, чтобы у каждого дня (без разницы есть ли у него какое то значение или нету, т.е. ноды у которой дата совпадает с днём) была ссылка ведущая на создание ноды
KarmaBot
@KarmaBot
Apr 06 2017 11:44
@strelkovandrey, ну рассказывай. Как жизнь? :)
strelkovandrey
@strelkovandrey
Apr 06 2017 11:47
т.е. как бы как будто можно было щёлкать по дню, открывалась бы форма создания новой ноды, хочу таким образом с помощью кликнутого дня бралось выбранная дата и подставлялась в ссылку как параметр (это для модуля prepopulate), т.е. пользователь щёлкая по дню получал бы форму создания с уже заполненным полем даты
по идее что то подобное выполняет модуль Event calendar, но не хочу его использовать
delister
@delister
Apr 06 2017 15:07
ребят подключаю внешний скрипт (google invisible recaptcha) ... он подключается в боди и после него подключается мой скрипт где внутри Drupal.behaviors.mymodule.attach() выполняются действия с объектом из гугловского скрипта. Теперь внимание! Когда я делаю в браузере Empty cache and hard reload все отрабатывает нормально, но если просто обновить страницу то ругается что объект из гугловской библиотеки не существует
скрипты подключены без async и defer
т.е. по идее если даже они беруться из кеша а внешний загружается все равно же они должны исполняться последовательно...
strelkovandrey
@strelkovandrey
Apr 06 2017 17:46
Добрый вечер
KarmaBot
@KarmaBot
Apr 06 2017 17:46
Будь как дома, @strelkovandrey, я ни в чем не откажу. Много мануалов, коль желаешь, покажу :)
strelkovandrey
@strelkovandrey
Apr 06 2017 17:47
кто может подсказать, на drupal.org в своём профиле есть такое понятие dashboard
т.е. страница где можно на своё усмотрение добавить свои блоки и их расположение, сделано это с помощью модуля Homebox
когда кликаю добавить новый блок то отображается перечень доступных блоков, которые грубо говоря представляют собой ссылки и в конце некий токен
что это за такой токен, плохо в этом разбираюсь, какова вероятность что это какой то уникальный токен который ядро друпала выдаёт по текущему юзеру, т.е. какова вероятность что я могу сам его получить у друпала, или же это что то создаваемое самим модулем homebox
delister
@delister
Apr 06 2017 18:06
как можно прервать выполнение ajax запроса, а потом возобновить ? (d8)
boolboost
@boolboost
Apr 06 2017 18:08
А как это можно сделать на d7?
Как вообще это сделать на js, там же асенхрон?
delister
@delister
Apr 06 2017 18:09
вообщем я делаю так переопределяю например beforeSend у нужного ajax объекта и в нем делаю return false
выполнение ajax прекращается
потом в нужном месте делаю ajax_obj.execute()
ajax выполняется
но как всегда есть но
тот ajax объект с которым я работаю принадлежит (если так можно сказать) submit кнопке
так вот когда я делаю вручную execute значения формы не отправляются на сервер
boolboost
@boolboost
Apr 06 2017 18:11
Ну да this не тот
Или e.target но не суть
Ну интересный кейс а на практике зачем оно вообще надо?
Выглядит как костыль
delister
@delister
Apr 06 2017 18:14
так и есть)) есть библиотека от гугла invisible recaptcha она проверяет бот человек или нет и потом вызывает указанный callback куда передает токен. у меня ajax форма так вот во первых она отправляется быстрее чем придет ответ от гугла, а во вторых мне надо в ajax запрос передать токен
boolboost
@boolboost
Apr 06 2017 18:15
Может вообще заблокировать кнопку просто
Зачем оно надо если не ясно бот ли это
delister
@delister
Apr 06 2017 18:15
форма комментов
любой может оставить коммент
может быть бот и не бот
boolboost
@boolboost
Apr 06 2017 18:17
Может накатить обычный on submit и внём есть данные о форме
Записать в отложенную кнопку
А потом выполнить когда надо $button.submit()
Ivan
@Punk-UnDeaD
Apr 06 2017 18:18
@strelkovandrey это очень важный токен, он дырку в безопасности загораживает
csrf токен называется
его нельзя получить просто так кому попало
delister
@delister
Apr 06 2017 18:19
а on submit выполняется до ajax запроса ?
boolboost
@boolboost
Apr 06 2017 18:20
Ну ajax выполняется после клика на кнопку. Вот только там не всегда submit в d7 помню много где mousedown.
delister
@delister
Apr 06 2017 18:20
а можно подробнее про "this не тот" ? я переопредяляю beforeSubmit у объекта который находиться в Drupal.ajax.instances[i] в нем останавливаю ajax запрос, а потом из другого места опять ищу этот объект в Drupal.ajax.instances и делаю ему execute() это же вроде один и тот же объект или нет ?
boolboost
@boolboost
Apr 06 2017 18:21
Тут не помогу, на столбко хорошо js не знаю.
Просто логика остановить ajax и потом возобновить кажется не логичной по этому и считаю что надо раньше ловить
Ivan
@Punk-UnDeaD
Apr 06 2017 18:22
остановить аякс?
я вообще куда попал?
тут останавливают аяксы?
delister
@delister
Apr 06 2017 18:23
прервать его отправление
не цепляйтесь к словам
boolboost
@boolboost
Apr 06 2017 18:24
Ну выше читайте) ... Задача то написанна.
И мне кажется что она странная но да ладно.
delister
@delister
Apr 06 2017 18:25
другого варианта нет сабмит не срабатывает
там mousedown
и почему странной для чего тогда сделали все эти beforeSubmit beforeSend execute думаю что бы можно было получить доступ к каждой фазе
хотя это тоже лишь мнение) не очень хорошо понимаю это
Ivan
@Punk-UnDeaD
Apr 06 2017 18:27
а почему надо как-то восстанавливать аякс?
если его пришлось прервать
если надо было прервать, значит всё плохо
а если не всё плохо, то зачем прерывать?
ну влез ты в бефосенд
и прервал или не прервал
а восстанавливать потом зачем? что изменилось?
delister
@delister
Apr 06 2017 18:28
неет я ж написал выше, есть промежуточная фаза "получить ответ от гугла"...если не прерывать выполнение ajax отпрвку формы, то она отправляется, а ответ от гугла приходит после, а мне нужно на сервер передать и форму и данные от гугла
Ivan
@Punk-UnDeaD
Apr 06 2017 18:28
если совсем туго, то накрой кнопку прозрачным дивом и лови на него клик
delister
@delister
Apr 06 2017 18:28
раньше их получить до нажатия на кнопку тоже нельзя
изменилось то что пришел токен по которому проверяется уже на сервере
Ivan
@Punk-UnDeaD
Apr 06 2017 18:29
а блокировать кнопку до срабатывания капчи?
delister
@delister
Apr 06 2017 18:29
проверка происходит не до нажатия на кнопку а после
Ivan
@Punk-UnDeaD
Apr 06 2017 18:30
значит там должно быть апи
delister
@delister
Apr 06 2017 18:30
оно есть да
Ivan
@Punk-UnDeaD
Apr 06 2017 18:30
там точно есть апи
delister
@delister
Apr 06 2017 18:30
только что бы им воспользоваться
нужно подключить внешнюю библиотеку с 3мя гет параметрами
а 8й друпал заменяет все амперсанды на их html коды
и url становится не корректный
Ivan
@Punk-UnDeaD
Apr 06 2017 18:31
а что не так? это трудно?
delister
@delister
Apr 06 2017 18:31
)))
да просто нельзя подключить)
Ivan
@Punk-UnDeaD
Apr 06 2017 18:32
проблема в том чтоб что сделать?
ты придумываешь остановку аякса вместо того, чтоб амперсанды победить?
delister
@delister
Apr 06 2017 18:32
оуу))) звучит как вызов))
ты знаешь как это сделать ?)
Ivan
@Punk-UnDeaD
Apr 06 2017 18:33
какие амперсанды надо победить?
delister
@delister
Apr 06 2017 18:33
смотри ты объявляешь внешнюю js библиотеку в mymodule.libraries.yml например
Ivan
@Punk-UnDeaD
Apr 06 2017 18:33
ааа
Ivan
@Punk-UnDeaD
Apr 06 2017 18:34
та тю
кто тебя заставляет вот так это делать?
delister
@delister
Apr 06 2017 18:34
а как ?
Ivan
@Punk-UnDeaD
Apr 06 2017 18:34
всегда можно #attached использовать
html_head
delister
@delister
Apr 06 2017 18:35
всмысле я его и использую
когда подключаю её на страницу
можно захардкодить в шаблон
Ivan
@Punk-UnDeaD
Apr 06 2017 18:35
ну там линка хоть напрямую вставляй
ну в шаблон не надо
а так вставляй
delister
@delister
Apr 06 2017 18:36
и её нужна не в хеад а в низ перед /body
Ivan
@Punk-UnDeaD
Apr 06 2017 18:36
ну тогда #type = tag
и выводишь куда надо
в препроцессе html например подклеиваешь
тыщи способов вывалить разметку
а вот аяксы прерывать - это что-то странное
delister
@delister
Apr 06 2017 18:37
щас попробую но там проблема в том что он когда рендерит прогоняет через Html::escape
Ivan
@Punk-UnDeaD
Apr 06 2017 18:38
ну я не скажу, что сто раз так делал, но нет
главное не делать {{link}}
в крайнем случае {{link|raw}}
delister
@delister
Apr 06 2017 18:41
а как через #type => tag src задать ?
в препроцессе подклеивать еще больший костыль чем аякс останавливать, геморно управлять на каких страницах выводить на каких нет
Ivan
@Punk-UnDeaD
Apr 06 2017 18:42
в атрибуты
когда тег выводишь, любой атрибут можешь задать
delister
@delister
Apr 06 2017 18:45
через tag тоже заменяет
на html коды
я ж говорю он весь рендер прогоняет через escape
вообщем думаю с амперсандами это дохлый номер, можно захардкодить или в препроцессе или в шаблоне, но тут управлять зависимостями геморно, на какой странице подключать на какой нет тоже гемор
Ivan
@Punk-UnDeaD
Apr 06 2017 18:48
а вроде когда в коде линки оно и не страшно
браузер расшифровывает
delister
@delister
Apr 06 2017 18:49
нет
он расшифровывает если это в тексте
а какие минусы у остановки аякса ?
кроме того что никто не знает как это правильно сделать никаких)))))
Ivan
@Punk-UnDeaD
Apr 06 2017 18:51
<a href="http://www.risk.net/search/articles?page=1&amp;query=article">2</a>
это пейджер сёрча
рабочий
какие минусы от сования ноги в колесо?
delister
@delister
Apr 06 2017 18:52
возможно в ссылках работает но гугловская библиотека пишет что в качестве одного из параметров передана фигня
а конкретно ?
для этого даже есть механизм
почему ноги в колесо ?
Ivan
@Punk-UnDeaD
Apr 06 2017 18:54
потому что я считаю это хорошей аналогией
в меме велосипедист суёт палку
delister
@delister
Apr 06 2017 18:55
вы так считаете а объяснить не можете
Ivan
@Punk-UnDeaD
Apr 06 2017 18:59
яваскрипт можно подключить в другом яваскрипте
boolboost
@boolboost
Apr 06 2017 19:17
В общем можете обьяснить как js placeholder пашит в d8?
Ivan
@Punk-UnDeaD
Apr 06 2017 19:18
только js?
когда билдится страница, всё что всплывает, все библиотеки в самом конце концов, всё собирается и яваскрипты реплейсятся на место этого плейсхолдера
boolboost
@boolboost
Apr 06 2017 19:21
А где это replace проходит, это какой плагин twig делает?
Ivan
@Punk-UnDeaD
Apr 06 2017 19:21
тут ведь как
нельзя же вместо него выводить скрипты, потому как после вывода скриптов ещё что-то может вывестись с аттаченным скриптом
нет, это не плагин твига
это рендер
даже не рендер
boolboost
@boolboost
Apr 06 2017 19:22
То есть это последний этап работает уже с полностью отрендреной страницей?
Ivan
@Punk-UnDeaD
Apr 06 2017 19:22
это по событию кернел вью
что-то типа
ну типа того да
в определённый момент мы имеем страницу, в которой не вставлены яваскрипты
boolboost
@boolboost
Apr 06 2017 19:22
Просто сегодня искал в коде и не нашёл
Ivan
@Punk-UnDeaD
Apr 06 2017 19:22
а всё остальное вставлено
это в подписке на событие
хотя надо оттрассировать для точности
boolboost
@boolboost
Apr 06 2017 19:24
Вот с этим d8 всё стало немного сложнее в плане понимае как оно работает
delister
@delister
Apr 06 2017 19:25
блин интересную беседу пропустил меня это тоже интересовало как работают эти плейсхолдеры и для чего
перечитал, все равно не понял почему нельзя скрипты вывести напрямую ?
объясните плиз
boolboost
@boolboost
Apr 06 2017 19:26
Да можешь в принципе же {script|raw}
Ivan
@Punk-UnDeaD
Apr 06 2017 19:26
потому что это можно делать только в конце всего рендера, когда собраны и встроены все куски
boolboost
@boolboost
Apr 06 2017 19:27
Просто не правильно так выводить
Ivan
@Punk-UnDeaD
Apr 06 2017 19:27
каждый кусок может иметь аттач
и лайзи фрагмент с аттачем
оно вся по разному падает в кеш
и кешировать мы может только промежуточный вариант
а отдавать надо окончательный
так вот, сначала мы рендерим шаблон html
в нём остаётся плейсхолдер
потом встраиваем все лейзи куски
boolboost
@boolboost
Apr 06 2017 19:28
Почеиу не сделали рендел от обратного
Ivan
@Punk-UnDeaD
Apr 06 2017 19:28
а потом собираем в кучу все аттачи
от чего обратного?
boolboost
@boolboost
Apr 06 2017 19:29
Сначало контент потом html
Ivan
@Punk-UnDeaD
Apr 06 2017 19:29
сначала контент, потом хтмл
boolboost
@boolboost
Apr 06 2017 19:29
Ну шаблон html маленький
Ivan
@Punk-UnDeaD
Apr 06 2017 19:29
а потом лейзи куски
лейзибилд на то он и лейзи билд, что он потом
boolboost
@boolboost
Apr 06 2017 19:30
Я конкретно про шаблон тот что в d7 был html.page
Ivan
@Punk-UnDeaD
Apr 06 2017 19:30
но после него надо всё собрать, что вяплыло
delister
@delister
Apr 06 2017 19:30
а кто это делает ? сначала рендерим страницу получаем html с плейсхолдерами (кстати его же еще не отдаем) потом появляется какой-то пострендер которыйзаменяет плейсхолдеры ?
Ivan
@Punk-UnDeaD
Apr 06 2017 19:30
у не пострендер, но в какой-то момент плейсхолдеры заменяются
в конце концов, да
delister
@delister
Apr 06 2017 19:31
если обычный рендер очень гибкий в плане препроцесс процесс, альтер, то вот то что меняет плейсхолдеры туда уже никак не залезть ?
Ivan
@Punk-UnDeaD
Apr 06 2017 19:31
а зачем?
delister
@delister
Apr 06 2017 19:31
ну вот скажем что бы поменять амперсанды))))
boolboost
@boolboost
Apr 06 2017 19:31
Ну мне интересно реализацию глянуть)
Ivan
@Punk-UnDeaD
Apr 06 2017 19:32
можно в kernel.response подписаться даже
boolboost
@boolboost
Apr 06 2017 19:33
Извини еслти щас глупость напишу
Это типо сервис?
Ivan
@Punk-UnDeaD
Apr 06 2017 19:34
это типа событие
boolboost
@boolboost
Apr 06 2017 19:34
Подписувать через \Drupal->service('')
Ivan
@Punk-UnDeaD
Apr 06 2017 19:34
но писать надо сервис
delister
@delister
Apr 06 2017 19:35
а где их искать на какое событие мне подписаться что бы поучавствовать например в замене плейсхолдеров ?
Ivan
@Punk-UnDeaD
Apr 06 2017 19:35
services:
  render_cache:
    class: d\Cache\PlaceholderingRenderCache
    arguments: ['@request_stack', '@cache_factory', '@cache_contexts_manager', '@render_placeholder_generator']
  clear_tag_subscriber:
    class: d\Cache\ResponseCacheTagsCleaner
    tags:
      - { name: event_subscriber }
а это я не могу сказать
я сам отладчиком ищу
delister
@delister
Apr 06 2017 19:36
ясно спасибо, пролил свет для меня)
кстати с аяксом все было очень просто надо было вместо execute делать eventResponse
boolboost
@boolboost
Apr 06 2017 19:36
Может быть
Но задача блин
Запустить что бы остановить
delister
@delister
Apr 06 2017 19:37
так не я запускал
мне нужно было в этот поток красиво вклиниться
и не навредить)
как оказалось даже данные вручную туда подмешивать не пришлось он их сам подцепляет, нужно было просто дождаться пока эти данные от гугла приедут
boolboost
@boolboost
Apr 06 2017 19:41
В общем нужно symfony учить
@Punk-UnDeaD спасибо.
KarmaBot
@KarmaBot
Apr 06 2017 19:41
Спасибо (+1) для @Punk-UnDeaD принято! Текущая карма +16.
delister
@delister
Apr 06 2017 19:43
@Punk-UnDeaD Спасибо
KarmaBot
@KarmaBot
Apr 06 2017 19:43
Спасибо (+1) для @Punk-UnDeaD принято! Текущая карма +17.
bardachev
@bardachev
Apr 06 2017 20:17
,