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

Главные вкладки

Аватар пользователя gera8774 gera8774 18 марта 2022 в 14:31

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

Лучший ответ

Аватар пользователя gera8774 gera8774 26 марта 2022 в 10:18

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

Комментарии

Аватар пользователя VasyOK VasyOK 18 марта 2022 в 19:33

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

Аватар пользователя gera8774 gera8774 19 марта 2022 в 21:42

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

Аватар пользователя gera8774 gera8774 19 марта 2022 в 22:13

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

Аватар пользователя marassa marassa 20 марта 2022 в 7:04

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

Аватар пользователя OldWarrior OldWarrior 20 марта 2022 в 9:59

gera8774 wrote: пхп

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

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

Аватар пользователя OldWarrior OldWarrior 21 марта 2022 в 10:26

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

Аватар пользователя marassa marassa 20 марта 2022 в 10:32

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

Аватар пользователя gera8774 gera8774 22 марта 2022 в 13:53

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

Аватар пользователя marassa marassa 22 марта 2022 в 14:04

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

Аватар пользователя gera8774 gera8774 23 марта 2022 в 10:23

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

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

Аватар пользователя marassa marassa 21 марта 2022 в 11:09

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

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

Аватар пользователя OldWarrior OldWarrior 21 марта 2022 в 12:32

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

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

Аватар пользователя marassa marassa 23 марта 2022 в 10:41

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

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

Аватар пользователя gera8774 gera8774 26 марта 2022 в 10:18

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