nstcactus/craft-contact-form-settings-module

一个Craft模块,用于管理使用contact-form & contact-form-extensions插件的多份联系表单

1.1.0 2024-04-25 21:00 UTC

This package is auto-updated.

Last update: 2024-08-25 21:36:23 UTC


README

此模块有助于管理Craft contact-form & contact-form-extensions插件的多组设置。

需求

此模块需要

  • PHP 7.1或更高版本
  • Craft CMS 3, 4或5
  • contact-form插件2.2或更高版本
  • [可选] contact-form-extensions插件1.2.1或更高版本

安装

  1. 安装composer模块: composer require nstcactus/craft-contact-form-settings-module

  2. app.php文件的内容添加到您的config/app.php(如果不存在,则直接复制)。这确保了您的模块在每次请求时都会被加载。

    文件可能看起来像这样

    return [
        'modules' => [
            'contact-form-settings-module' => [
                'class' => \nstcactus\craftcms\modules\contactFormSettings\ContactFormSettingsModule::class,
                'components' => [
                    // More on this below
                ],
            ],
        ],
        'bootstrap' => ['contact-form-settings-module'],
    ];

添加表单

  1. 创建一个扩展\modules\contactFormSettings\forms\AbstractContactForm的表单类。此类将描述您的表单设置。

  2. config/app.php文件中注册此表单类:在模块的components数组中添加一个条目,键为表单名称,值为表单类的引用。

    示例

    return [
        'modules' => [
            'contact-form-settings-module' => [
                'class' => \nstcactus\craftcms\modules\contactFormSettings\ContactFormSettingsModule::class,
                'components' => [
                    'contact' => \project\modules\app\forms\ContactForm::class,
                ],
            ],
        ],
        'bootstrap' => ['contact-form-settings-module'],
    ];
  3. 在表单模板中添加以下内容,在<form>元素内部: {{ formNameInput('contact') }}

表单设置

插件设置覆盖

每个表单设置类必须实现getContactFormConfiguration() & getContactFormExtensionsConfiguration()方法。它们期望返回一个设置数组,就像在config/contact-form.php & contact-form-extensions.php中设置的那样。

自定义验证

自定义验证规则应通过覆盖afterValidateSubmission()方法定义。在这里,您可以在Submission实例(在$e->sender中可用)上添加验证错误,如下所示

public function afterValidateSubmission(Event $e): void
{
    /** @var Submission $submission */
    $submission = $e->sender;

    if (empty($submission->message['FirstName'])) {
        $submission->addError('message.FirstName', Craft::t('site', 'This field cannot be blank.'));
    }
}

常见问题解答

我如何安全地让用户从主题列表中选择?

例如,当用户在<select>元素中选择了主题时,建议的方法是

我如何动态设置收件人?

要动态设置收件人,您可以选择以下方法之一

  • getContactFormSetting()方法返回的数组中的toEmail属性中设置它

  • 使用contact-form-extensions覆盖机制beforeValidateSubmission()afterValidateSubmission()方法中设置它。示例

    public function beforeValidateSubmission(ModelEvent $e): void
    {
      parent::beforeValidateSubmission($e);
      $submission = $e->sender->message['toEmail'] = Craft::$app->getSecurity()->hashData($subject->contactSubjectRecipient);
    }

我如何使用单独的字段来分别输入姓和名?

当使用单独的姓和名字段而不是单个fromName字段时,请确保在afterValidateSubmission()方法中实际设置Submission实例的fromName属性。

这将提高控制面板中的提交索引。

示例

public function afterValidateSubmission(Event $e): void
{
    /** @var Submission $submission */
    $submission = $e->sender;

    if (!empty($submission->message['FirstName']) || empty($submission->message['LastName'])) {
        $submission->fromName = trim(sprintf(
            '%s %s',
            $submission->message['FirstName'] ?? '',
            $submission->message['LastName'] ?? ''
        ));
    }
}