有没有办法从/ webform /src/WebformMessageManager.php中更改硬编码的webform消息?
例如,第284行上的
case WebformMessageManagerInterface::DRAFTS_PREVIOUS:
$t_args = [':href' => $this->requestHandler->getUrl($webform, $source_entity, 'webform.user.drafts')->toString()];
return $this->t('You have pending drafts for this webform.') . ' ' . $this->t('View your pending drafts.', $t_args);发布于 2019-04-24 03:39:18
服务的美妙之处在于,它们可以根据您的喜好被覆盖。
因此,我们所要做的就是扩展WebformMessageManager,以便继承它的所有属性和方法,并简单地修改您需要修改的方法。
my_module/src/CustomWebformMessageManager.php
getCustomMessage($key)) {
return $custom_message;
}
$webform = $this->webform;
$source_entity = $this->sourceEntity;
// Get custom message from settings with arguments.
switch ($key) {
case WebformMessageManagerInterface::PREVIOUS_SUBMISSION:
$webform_submission = $this->entityStorage->getLastSubmission($webform, $source_entity, $this->currentUser);
$args = [':href' => $this->requestHandler->getUrl($webform_submission, $source_entity, 'webform.user.submission')->toString()];
return $this->getCustomMessage('previous_submission_message', $args);
case WebformMessageManagerInterface::PREVIOUS_SUBMISSIONS:
$args = [':href' => $this->requestHandler->getUrl($webform, $source_entity, 'webform.user.submissions')->toString()];
return $this->getCustomMessage('previous_submissions_message', $args);
}
// Get hard-coded messages.
switch ($key) {
case WebformMessageManagerInterface::ADMIN_PAGE:
return $this->t('Only webform administrators are allowed to access this page and create new submissions.');
case WebformMessageManagerInterface::ADMIN_CLOSED:
$t_args = [':href' => $webform->toUrl('settings-form')->toString()];
return $this->t('This webform is closed. Only submission administrators are allowed to access this webform and create new submissions.', $t_args);
case WebformMessageManagerInterface::ADMIN_ARCHIVED:
$t_args = [':href' => $webform->toUrl('settings')->toString()];
return $this->t('This webform is archived. Only submission administrators are allowed to access this webform and create new submissions.', $t_args);
case WebformMessageManagerInterface::SUBMISSION_DEFAULT_CONFIRMATION:
$t_args = ['%form' => ($source_entity) ? $source_entity->label() : $webform->label()];
return $this->t('New submission added to %form.', $t_args);
case WebformMessageManagerInterface::FORM_SAVE_EXCEPTION:
$t_args = [
':handlers_href' => $webform->toUrl('handlers')->toString(),
':settings_href' => $webform->toUrl('settings')->toString(),
];
return $this->t('This webform is currently not saving any submitted data. Please enable the saving of results or add a submission handler to the webform.', $t_args);
case WebformMessageManagerInterface::HANDLER_SUBMISSION_REQUIRED:
$t_args = [':href' => $webform->toUrl('handlers')->toString()];
return $this->t('This webform\'s submission handlers requires submissions to be saved to the database.', $t_args);
case WebformMessageManagerInterface::DRAFT_PREVIOUS:
$webform_draft = $this->entityStorage->loadDraft($webform, $source_entity, $this->currentUser);
$t_args = [':href' => $webform_draft->getTokenUrl()->toString()];
return $this->t('You have a pending draft for this webform.') . ' ' . $this->t('Load your pending draft.', $t_args);
case WebformMessageManagerInterface::DRAFTS_PREVIOUS:
$t_args = [':href' => $this->requestHandler->getUrl($webform, $source_entity, 'webform.user.drafts')->toString()];
// ALTER THE LINE YOU WANT
return $this->t('MY CUSTOM VIEW PENDING DRAFT MESSAGE.') . ' ' . $this->t('MY CUSTOM VIEW PENDING DRAFT MESSAGE..', $t_args);
case WebformMessageManagerInterface::SUBMISSION_UPDATED:
$t_args = ['%form' => ($source_entity) ? $source_entity->label() : $webform->label()];
return $this->t('Submission updated in %form.', $t_args);
case WebformMessageManagerInterface::SUBMISSION_TEST:
return $this->t("The below webform has been prepopulated with custom/random test data. When submitted, this information will still be saved and/or sent to designated recipients.");
case WebformMessageManagerInterface::TEMPLATE_PREVIEW:
$t_args = [':href' => $webform->toUrl('duplicate-form')->toString()];
return $this->t('You are previewing the below template, which can be used to create a new webform. Submitted data will be ignored.', $t_args);
case WebformMessageManagerInterface::PREPOPULATE_SOURCE_ENTITY_TYPE:
case WebformMessageManagerInterface::PREPOPULATE_SOURCE_ENTITY_REQUIRED:
return $this->t('This webform is not available. Please contact the site administrator.');
case WebformMessageManagerInterface::PREVIOUS_SUBMISSION:
$webform_submission = $this->entityStorage->getLastSubmission($webform, $source_entity, $this->currentUser);
$args = [':href' => $this->requestHandler->getUrl($webform_submission, $source_entity, 'webform.user.submission')->toString()];
return $this->getCustomMessage('previous_submission_message', $args);
case WebformMessageManagerInterface::PREVIOUS_SUBMISSIONS:
$args = [':href' => $this->requestHandler->getUrl($webform, $source_entity, 'webform.user.submissions')->toString()];
return $this->getCustomMessage('previous_submissions_message', $args);
}
return FALSE;
}
}我的模块/我的_module.services.yml
services:
webform.message_manager: # The service ID you want to alter
class: Drupal\my_module\CustomWebformMessageManager // Your Custom Class
arguments: ['@current_user', '@config.factory', '@entity_type.manager', '@logger.channel.webform', '@renderer', '@messenger', '@webform.request', '@webform.token_manager']<#>重要:确保您的给你的模块更高的权重而不是webform,这样您的服务就可以运行。
您可以使用模块权重模块。
或
在Devel的执行php中,执行module_set_weight('my_module', 10);
发布于 2019-04-26 11:34:42
扩展WebformMessageManager是解决硬编码消息的直接问题/限制的正确方法。
为了解决更改/webform/src/WebformMessageManager.php中硬编码的WebformMessageManagerInterface::DRAFTS_PREVIOUS消息的具体问题,我创建了问题#3050884:允许WebformMessageManagerInterface::草稿_在需要定制之前
https://drupal.stackexchange.com/questions/279336
复制相似问题