bzcoding/bz-contact-php

此包已被废弃,不再维护。没有建议的替代包。

适用于静态网站和着陆页的简单联系表单管理器

2.1.3 2017-09-10 17:18 UTC

This package is not auto-updated.

Last update: 2023-12-28 13:23:54 UTC


README

Build Status Test Coverage Code Climate

BZContact 是用 PHP 编写的简单联系表单管理器。它可以用来管理静态网站的联系表单,或者创建着陆页并收集行动号召请求。

此仓库旨在被分支和自定义,以创建您自己的联系表单或着陆页。

功能

  • 一个单独的着陆页,具有表单处理和“感谢”或错误页面
  • 由 JSON 文件定义的联系表单结构
  • 可自定义的隐私和 ToS 页面
  • 将条目存储在 MongoDB 中
  • 向管理员发送通知电子邮件
  • 向订阅者发送“感谢”电子邮件
  • 与 MailChimp 集成
  • 与 Webhooks 集成
  • 简单的默认 UI 主题,易于自定义

安装

在 Heroku 上的部署

Deploy

部署脚本将为后台任务分配一个 Web 进程和一个 Worker 进程。

该脚本还将为以下附加组件分配免费计划: MongoLabPostmarkCloudAMQPLogentriesRollbar。如果您在这些服务上已有付费计划,或想使用其他服务,您可以删除它们并自定义您的配置。

如果您使用提供的免费版 Postmark,您需要 创建发送者签名,否则您将无法发送电子邮件通知。

在 Linux/macOS 机器上的安装

从您想要安装新应用程序的目录运行此命令

$ composer create-project bzcoding/bz-contact-php [your-app-name]

自定义表单和 UI 主题。

开发中运行

  • .env.example 重命名为 .env 并输入您的自定义设置
  • 通过运行 composer run server --timeout=0 启动开发服务器

您可以使用提供的 Vagrant 虚拟机和 Ansible 设置,但请注意,它们仅适用于开发。

在预发布和生成环境中运行

  • 将您的虚拟主机文档根目录指向应用程序的 app/public/ 目录
  • .env.example 中的所需环境变量复制到您的虚拟主机文件中
  • 如果您不将日志记录到 stdout,请确保您的日志文件路径可由 Web 可写。

配置

为了使 BZContact 有一个可工作的实例,您需要通过环境变量提供设置。以下设置是必需的

  • MAILER_* 用于 SMTP 服务器
  • DATABASE_* 用于 MongoDB 服务器
  • AMQP_* 用于队列服务器

以下这些是可选的

  • NEWSLETTER_* 启用 MailChimp 集成
  • WEBHOOK_* 启用 webhook 处理
  • REDIRECT_THANKYOU 使用自定义“感谢”页面
  • ROLLBAR_ACCESS_TOKEN 启用 Rollbar 错误跟踪

要求

  • Apache 或 Nginx 网络服务器
  • PHP 5.6 或更高版本,并支持 MongoDB(在 PHP 5.6 上使用 ext-mongo 进行测试,您需要 PHP 7 上的 ext-mongodb
  • MongoDB 服务器
  • RabbitMQ 或其他 AMQP 兼容服务器
  • 用于开发的 SMTP 邮件服务器(或 MailCatcher

JSON 表单对象

表单从简单的 JSON 对象加载,包含两个顶级属性:attributes(对象)和 fields(字段对象的数组)。每个字段对象至少必须有一个 name 或唯一的 id 属性,默认输入类型是 text

支持的字段类型有:texttextareaemailtelselectcheckboxradiosubmit

请注意 BZContact 是设计用于与联系表单一起使用的,更复杂的表单结构可能导致不期望的结果。

{
    "attributes": {
        "id": "frm-contact",
        "class": "contact-form",
        "accept-charset": "utf-8",
        "novalidate":"novalidate"
    },
    "fields": [
        {
            "id": "contact-name",
            "name": "name",
            "label": "Your name",
            "placeholder": "eg. John Appleseed",
            "required": true,
            "error": "Your name is a required field"
        },
        ...
        {
            "id": "contact-submit",
            "name": "saveForm",
            "type": "submit",
            "value": "Send message",
            "save": false
        }
    ]
}

Webhook POST 格式

通过将 WEBHOOK_URL 环境变量设置为期望的目标 URL 启用 webhook 功能。

将表单订阅的内容以 POST 方式发送到 webhook URL,内容类型为 application/json,JSON 主体。

BZContact 发送两个自定义头

  • X-Bzcontact-Event:事件对象(例如 message
  • X-Bzcontact-Delivery:提交的 ID

可以使用 WEBHOOK_HEADERS 环境变量添加可选的自定义头,每个头用 | 分隔:WEBHOOK_HEADERS="X-Foo:123|X-Bar:xyz"

JSON 有效负载具有以下格式

{
  "action": "saved",
  "created_at": "YYYY-MM-DD HH:MM:SS",
  "data": {
    "name": "John Doe",
    "company": "ACME Ltd",
    "email": "john@acme.com",
    "phone": "",
    "subject": "It's only Rock'n Roll...",
    "message": "but I like it!\r\n~M\r\n",
    "referral": "friends",
    "client-type": "business",
    "privacy": "1",
    "ip": "xxx.xxx.xxx.xxx",
    "datetime": "YYYY-MM-DD HH:MM:SS",
    "id": "<SubmissionID>"
  }
}

action 属性包含事件类型(目前只有 saved)。data 对象包含所有表单字段,以及订阅者 IP 地址、日期时间和提交 ID。

鸣谢

BZContact 建立在 Slim-Skeleton 应用程序之上。它使用 Slim 3 框架和 PHP-View 模板渲染器。

默认 UI 主题建立在 Skeleton CSS 模板之上,封面照片由 Yair Hazout from Unsplash 提供。

favicon 和应用程序徽标(logo.svg)是使用来自 Freepik 的图标和 Flaticon 的图标制作的,由 CC 3.0 BY 许可。

许可

BZContact 在 MIT 许可下发布 - 请参阅 LICENSE 文件以获取详细信息。