Изменения в функцию модуля ядра

18 марта 2022 в 14:31
Аватар пользователя gera8774 gera8774 0 17 Решено

Всем привет! У модуля user в файле user.module есть функция function user_pass_reset_url
Мне нужно внести небольшие изменения в эту функцию, но не могу понять, как это правильно сделать.

Комментарии

1. Написать патч https://shra.ru/2017/12/sozdanie-patcha-dlya-modulya-drupal/
2. Использовать Композер для контроля накладывания патчей. Если патчей будет много их надо как-то контролировать. https://niklan.net/blog/130#avtomaticheskoe-primenenie-patchey
3. Желательно пишите тут и на орге к модулям патчи и цели для которых их пишете. Если ахинеи напишете - вас поправят.

18 марта 2022 в 19:33

ой-ёй
Мне надо-то всего ничего
При восстановлении пароля приходит письмо с одноразовой ссылкой [user:one-time-login-url]
По сути этот токен представляет из себя строку вида < a href="link" >link< /a >
Мне нужно убрать теги а и оставить только link в письме
Может я слишком сложный способ думаю, и можно как-то попроще?

19 марта 2022 в 21:42

да, но там токен представляет из себя сформированную ссылку. Можно было бы регуляркой убрать теги, но пхп не срабатывает в шаблоне письма. Видимо неправильно понимаю, как правильно использовать пхп в шаблоне писем

19 марта 2022 в 22:13

И что конкретно Вы собрались менять в функции user_pass_reset_url? Она ведь не добавляет никаких тегов, а формирует голый URL. Сначала надо найти где именно добавляются эти теги, а потом уж смотреть как их убрать.

20 марта 2022 в 7:04

gera8774 wrote: пхп

1. Как бы не совсем по существу, но такого продукта нет - "пхп". Есть PHP. Суть-то понятна, но в таких деталях заключается отношение к предмету вопроса. Это как если прийти на форум бас-гитаристов и что-то там спрашивать про "басуху" (за это можно было вербально получить люлей).

2. Если речь всего лишь о токенах то, собственно, нужно альтерить токены. Например, hook_tokens_alter. И здесь, к слову, было бы очень правильным указать версию Друпала при постановке вопроса. Для этого даже есть отдельное поле.

20 марта 2022 в 9:59

Или так. Но, имхо, альтер токенов здесь в самый раз и быстрее. Поскольку речь о том, чтобы убрать из токена оборачивающие URL теги <a>.

21 марта 2022 в 10:26

Вот прям только что проверил (на девятке): никаких тегов <a> в почте не формируется, пишется голый URL. В заголовке стоит Content-Type: text/plain;.
Возможно это у вас умный почтовый клиент превращает текстовый URL в гиперссылку? Или используются какие-то дополнительные сторонние средства для формирования HTML-почты?

20 марта 2022 в 10:32

Это наверное я коряво изъясняюсь. В почту по итогу приходит кликабельная ссылка (это эти теги а я имею в виду, т.к. в письме это выглядит именно так). А надо, чтобы приходила не кликабельная.
Изначально планировалось решить через hook_tokens_alter, но более опытный человек сказал, что лучше смотреть функцию user_pass_reset_url
Хотя, вообще была надежда, что можно это как-то сделать с помощью htmlmail, но пока тоже не могу понять, на сколько это возможно.

22 марта 2022 в 13:53

Вы каким почтовым клиентом пользуетесь? У него есть функция посмотреть исходник сообщения? Если там нет никакой ссылки (как у меня), то бессмысленно что-то менять со стороны Друпала (да там и менять-то нечего), Ваш собственный почтовый клиент сам делает из адреса ссылку.
PS А зачем делать адрес некликабельным?

22 марта 2022 в 14:04

Ну вот, к примеру, на данном сайте drupal.ru я восстанавливаю пароль. Мне приходит такое письмо.

Ссылка кликабельная. Я по ней перехожу и меняю пароль.
А у меня задача сделать ее не кликабельной. На сайте настроена проверка рефереров. То есть, при клике из письма пользователь ничего не сможет сделать, он попадет на главную страницу сайта, т.к. там запрещены переходы по страницам сайта, связанным с личным кабинетом, из посторонних источников. Поэтому пользователю надо скопировать эту ссылку и вставить во вкладку браузера. Изначально на это и было рассчитано. Но пользователи игнорируют фразу "скопируйте", они по ней переходят и ничего не могут понять. Плюс к этому ссылка обрезается в почте и некоторые ее не могут скопировать (потому что хотят ее выделить). Поэтому поставили задачу - чтобы ссылка приходила полностью, не обрезанная и не кликабельная.
Мне наверное изначально так и надо было описать проблему, а не спрашивать про функцию, тем более что еще ни разу не приходилось лазить так глубоко.

23 марта 2022 в 10:23

OldWarrior wrote: альтер токенов здесь в самый раз и быстрее. Поскольку речь о том, чтобы убрать из токена оборачивающие URL теги

Проблема только в том, что в этом токене нет этих тегов Wink

21 марта 2022 в 11:09

Я исхожу из этого:

gera8774 wrote: По сути этот токен представляет из себя строку вида < a href="link" >link< /a >
Мне нужно убрать теги а и оставить только link в письме

21 марта 2022 в 12:32

gera8774 wrote: Ну вот, к примеру, на данном сайте drupal.ru...

Мы сейчас какой сайт ремонтируем - Ваш или drupal.ru? На drupal.ru явно используется какой-то контрибный или кастомный форматтер почты. У Вас тоже? Если да, то какой? И почему бы об этом сразу не сказать? В общем, боюсь, что консультации не получится...

23 марта 2022 в 10:41

Всё решилось из админки. Mime Mail позволил вставить код в шаблон письма, а там уже регулярка убрала лишнее.

26 марта 2022 в 10:18