{"id":13996,"date":"2023-06-09T18:19:17","date_gmt":"2023-06-09T12:19:17","guid":{"rendered":"https:\/\/shra.ru\/?p=13996"},"modified":"2023-06-09T18:19:18","modified_gmt":"2023-06-09T12:19:18","slug":"modifikaciya-tela-pisma-pered-otpravkojj-v-drupal","status":"publish","type":"post","link":"https:\/\/shra.ru\/2023\/06\/modifikaciya-tela-pisma-pered-otpravkojj-v-drupal\/","title":{"rendered":"\u041c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0442\u0435\u043b\u0430 \u043f\u0438\u0441\u044c\u043c\u0430 \u043f\u0435\u0440\u0435\u0434 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u0432 Drupal"},"content":{"rendered":"\n
\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430, \u043a\u0430\u043a \u0437\u0430\u0446\u0435\u043f\u0438\u0442\u044c\u0441\u044f \u043a \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u043c \u043f\u0438\u0441\u044c\u043c\u0430\u043c \u0438 \u0432\u043d\u0435\u0441\u0442\u0438 \u0442\u0443\u0434\u0430 \u0441\u0432\u043e\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f.<\/p>\n\n\n\n\n\n\n\n
\u041f\u0435\u0440\u0432\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u044f\u043c\u043e\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0442\u0435\u043b\u0430 \u043f\u0438\u0441\u044c\u043c\u0430 \u043f\u0435\u0440\u0435\u0434 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c hook_mail_alter(&message)<\/em>.<\/p>\n\n\n\n \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f $message<\/em> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0435\u0441\u044c \u043d\u0430\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u043f\u0440\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0435 \u043f\u0438\u0441\u044c\u043c\u0430. \u0422\u0430\u043c \u0435\u0441\u0442\u044c \u0438 \u0438\u043c\u044f \u043c\u043e\u0434\u0443\u043b\u044f, \u0438 \u043a\u043b\u044e\u0447 \u043f\u0438\u0441\u044c\u043c\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u0432 MailManagerInterface::mail<\/em> \u043a\u0430\u043a $params.<\/p>\n\n\n\n \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0433\u0438\u043f\u043e\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043d\u0435\u043a\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0438\u0437 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u041c\u044b \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u043c, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u043b\u0435 \u0434\u043b\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 user<\/em> — field_verification_code<\/em>.<\/p>\n\n\n\n \u0422\u043e, \u0447\u0442\u043e \u043c\u044b \u0434\u0435\u043b\u0430\u043b\u0438 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0442\u043e\u043a\u0435\u043d\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u044f\u0434\u0440\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 8\u0439 \u0432\u0435\u0440\u0441\u0438\u0438.<\/p>\n\n\n\n \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043e\u0431\u044a\u044f\u0432\u0438\u043c \u0442\u043e\u043a\u0435\u043d [user:verification-code]<\/em>, \u0438 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0435\u0433\u043e \u0432 \u0448\u0430\u0431\u043b\u043e\u043d\u0435 \u043f\u0438\u0441\u044c\u043c\u0430, \u043e\u043d \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u044b \u0437\u0430\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0435\u043c.<\/p>\n\n\n\n \u0425\u0443\u043a\u0438 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u044b \u0432 \u0444\u0430\u0439\u043b\u0435 MYMODULE.tokens.inc<\/em>. \u042d\u0442\u043e hook_tokens_info<\/em> \u0438 hook_tokens<\/em>. \u041f\u0435\u0440\u0432\u044b\u0439 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0435 \u0442\u043e\u043a\u0435\u043d\u044b, \u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442.<\/p>\n\n\n\n \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430, \u043a\u0430\u043a \u0437\u0430\u0446\u0435\u043f\u0438\u0442\u044c\u0441\u044f \u043a \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u043c \u043f\u0438\u0441\u044c\u043c\u0430\u043c \u0438 \u0432\u043d\u0435\u0441\u0442\u0438 \u0442\u0443\u0434\u0430 \u0441\u0432\u043e\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11],"tags":[163],"acf":[],"yoast_head":"\nMAIL ALTER \u0445\u0443\u043a<\/h2>\n\n\n\n
\/**\r\n * implements hook_mail_alter\r\n *\/\r\nfunction MYMODULE_mail_alter(&$message) {\r\n if ($message['module'] == 'user' && $message['key'] == 'register_pending_approval') {\r\n $message['body'] = str_replace(\n 'verification_code', \n $message['params']['account']->field_verification_code->value,\n $message['body']);\r\n }\r\n}<\/code><\/pre>\n\n\n\n
\u041e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u043e\u043a\u0435\u043d\u0430<\/h2>\n\n\n\n
<?php\r\n\r\n\/**\r\n * @file\r\n * Builds placeholder replacement tokens for user-related data.\r\n *\/\r\n\r\nuse Drupal\\Core\\Render\\BubbleableMetadata;\r\n\r\n\/**\r\n * Implements hook_token_info().\n *\/\r\nfunction MYMODULE_token_info() {\n \/\/ \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0441 \u0442\u0438\u043f\u0430\u043c\u0438 \u0438 \u043a\u043e\u0434\u0430\u043c\u0438 \u0442\u043e\u043a\u0435\u043d\u043e\u0432\n \/\/ \u044f \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u044e \u0433\u0440\u0443\u043f\u043f\u0443 user, \u0442\u043e\u043a\u0435\u043d\u043e\u043c verification-code\n\r $types['user'] = [\r\n 'name' => t('Users'),\r\n 'description' => t('Tokens related to individual user accounts.'),\r\n 'needs-data' => 'user',\r\n ];\r\n $user['verification-code'] = [\r\n 'name' => t(\"Verification code.\"),\r\n 'description' => t(\"Verification code after user registration.\"),\r\n ];\r\n\r\n return [\r\n 'types' => $types,\r\n 'tokens' => ['user' => $user],\r\n ];\r\n}\r\n\r\n\/**\r\n * Implements hook_tokens().\r\n *\/\r\nfunction api_tokens($type, $tokens, array $data, array $options, BubbleableMetadata $bubbleable_metadata) {\r\n\r\n $token_service = \\Drupal::token();\r\n $url_options = ['absolute' => TRUE];\r\n if (isset($options['langcode'])) {\r\n $url_options['language'] = \\Drupal::languageManager()->getLanguage($options['langcode']);\r\n $langcode = $options['langcode'];\r\n }\r\n else {\r\n $langcode = NULL;\r\n }\r\n $replacements = [];\r\n\r\n if ($type == 'user' && !empty($data['user'])) {\r\n \/** @var \\Drupal\\user\\UserInterface $account *\/\r\n $account = $data['user'];\r\n foreach ($tokens as $name => $original) {\r\n switch ($name) {\r\n \/\/ Basic user account information.\r\n case 'verification-code':\r\n \/\/ In the case of hook user_presave uid is not set yet.\r\n $replacements[$original] = $account->id() ? $account->field_verification_code->value : '';\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return $replacements;\r\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"