atk14 / custom-forms
一套功能,允许用户在管理中可视编程表单
v0.5.4
2023-11-15 15:02 UTC
Requires
- php: >=5.4.0
- atk14/csv-reader: ^1.1
- atk14/csv-writer: ^1.2
- atk14/emails-field: ^0|>=0.1.2
- atk14/hcaptcha-field: ^0.1
- atk14/recaptcha-field: ^0.1.2
- yarri/full-text-search-query-like: ^0.2
README
一套功能,允许用户在管理中可视编程表单。
自定义表单是为在Atk14Skelet上构建的应用程序而设计的。
使用方法
先决条件
用户授权
安装
cd path/to/your/project/
composer require atk14/custom-forms
ln -s ../../../vendor/atk14/custom-forms/src/app/controllers/admin/custom_form_data_controller.php app/controllers/admin/
ln -s ../../../vendor/atk14/custom-forms/src/app/controllers/admin/custom_form_field_choices_controller.php app/controllers/admin/
ln -s ../../../vendor/atk14/custom-forms/src/app/controllers/admin/custom_form_fields_controller.php app/controllers/admin/
ln -s ../../../vendor/atk14/custom-forms/src/app/controllers/admin/custom_form_fieldsets_controller.php app/controllers/admin/
ln -s ../../../vendor/atk14/custom-forms/src/app/controllers/admin/custom_forms_controller.php app/controllers/admin/
ln -s ../../../vendor/atk14/custom-forms/src/app/controllers/admin/trait_custom_forms_utils.php app/controllers/admin/
ln -s ../../../vendor/atk14/custom-forms/src/app/forms/admin/custom_form_data app/forms/admin/
ln -s ../../../vendor/atk14/custom-forms/src/app/forms/admin/custom_form_field_choices app/forms/admin/
ln -s ../../../vendor/atk14/custom-forms/src/app/forms/admin/custom_form_fields app/forms/admin/
ln -s ../../../vendor/atk14/custom-forms/src/app/forms/admin/custom_form_fieldsets app/forms/admin/
ln -s ../../../vendor/atk14/custom-forms/src/app/forms/admin/custom_forms app/forms/admin/
ln -s ../../../vendor/atk14/custom-forms/src/app/views/admin/custom_form_data app/views/admin/
ln -s ../../../vendor/atk14/custom-forms/src/app/views/admin/custom_form_field_choices app/views/admin/
ln -s ../../../vendor/atk14/custom-forms/src/app/views/admin/custom_form_fields app/views/admin/
ln -s ../../../vendor/atk14/custom-forms/src/app/views/admin/custom_form_fieldsets app/views/admin/
ln -s ../../../vendor/atk14/custom-forms/src/app/views/admin/custom_forms app/views/admin/
ln -s ../../vendor/atk14/custom-forms/src/app/controllers/custom_form_data_files_controller.php app/controllers/
ln -s ../../vendor/atk14/custom-forms/src/app/controllers/custom_forms_controller.php app/controllers/
ln -s ../../vendor/atk14/custom-forms/src/app/forms/custom_forms app/forms/
ln -s ../../vendor/atk14/custom-forms/src/app/views/custom_forms app/views/
ln -s ../../../vendor/atk14/custom-forms/src/app/views/mailer/notify_custom_form_submission.html.tpl app/views/mailer/
ln -s ../../vendor/atk14/custom-forms/src/app/models/custom_form_data_file.php app/models/
ln -s ../../vendor/atk14/custom-forms/src/app/models/custom_form_data.php app/models/
ln -s ../../vendor/atk14/custom-forms/src/app/models/custom_form_field_choice.php app/models/
ln -s ../../vendor/atk14/custom-forms/src/app/models/custom_form_field.php app/models/
ln -s ../../vendor/atk14/custom-forms/src/app/models/custom_form_fieldset.php app/models/
ln -s ../../vendor/atk14/custom-forms/src/app/models/custom_form.php app/models/
ln -s ../../vendor/atk14/custom-forms/src/app/fields/custom_form_fieldset_field.php app/fields/
ln -s ../../vendor/atk14/custom-forms/src/app/fields/custom_form_choice_field.php app/fields/
ln -s ../../vendor/atk14/custom-forms/src/app/fields/custom_form_fields app/fields/
ln -s ../../vendor/atk14/custom-forms/src/app/widgets/custom_form_widgets app/widgets/
ln -s ../../vendor/atk14/custom-forms/src/config/routers/custom_forms_router.php ./config/routers/
ln -s ../../vendor/atk14/custom-forms/src/app/helpers/function.drink_shortcode__custom_form.php app/helpers/
ln -s ../../vendor/atk14/emails-field/src/app/fields/emails_field.php app/fields/emails_field.php
将迁移文件复制到您的项目中。前面的编号序列可以随意更改,但最好保留它们以跟踪自定义表单未来版本中的更改。
cp vendor/atk14/custom-forms/src/db/migrations/0145_custom_forms.sql db/migrations/
cp vendor/atk14/custom-forms/src/db/migrations/0146_adding_custom_form_id_to_pages.sql db/migrations/
cp vendor/atk14/custom-forms/src/db/migrations/0147_adding_contact_form_migration.php db/migrations/
需要手动合并几件事情。
// file: app/controllers/admin/admin.php
$items = array(
array(_("Welcome screen"), "main"),
array(_("Articles"), "articles"),
array(_("Pages"), "pages"),
array(_("Link Lists"), "link_lists,link_list_items"),
array(_("Custom forms"), "custom_forms,custom_form_fieldsets,custom_form_fields,custom_form_field_choices,custom_form_data"),
array(_("Tags"), "tags"),
array(_("Password recoveries"), "password_recoveries"),
array(_("Newsletter subscribers"), "newsletter_subscribers"),
array(_("404 Redirections"), "error_redirections"),
array(_("Nastavení webu"), "site_settings"),
);
// file: app/controllers/application_mailer.php
class ApplicationMailer extends Atk14Mailer {
function notify_custom_form_submission($custom_form_data){
$custom_form = $custom_form_data->getCustomForm();
$this->to = $custom_form->getNotifyToEmail();
$this->from_name = $custom_form->getSenderName($custom_form_data);
$this->subject = $custom_form->getNotificationSubject($custom_form_data);
// # a custom fallback subject pattern can be set by the option fallback_pattern:
// $this->subject = $custom_form->getNotificationSubject($custom_form_data,["fallback_pattern" => "Form submission at %page_title%"]);
$this->tpl_data["custom_form"] = $custom_form;
$this->tpl_data["custom_form_data"] = $custom_form_data;
$this->tpl_data["data"] = $custom_form_data->getDataAsArray();
}
}
// file: app/forms/admin/pages/pages_form.php
class PagesForm extends AdminForm {
function set_up(){
// ... after adding the field parent_page_id
$this->add_field("custom_form_id", new CustomFormChoiceField([
"label" => _("Custom form"),
"required" => false,
]));
}
}
// file: app/models/page.php
class Page extends ApplicationModel implements Translatable, Rankable, iSlug {
function getCustomForm(){
return Cache::Get("CustomForm",$this->getCustomFormId());
}
}
{* file: app/views/pages/detail.tpl *}
{if $page->getCustomForm()}
{render_component controller="custom_forms" action="detail" id=$page->getCustomForm()}
{/if}
编辑 config/routers/load.php 并添加加载 CustomFormsRouter 的指令
Atk14Url::AddRouter("CustomFormsRouter");
配置
要使用 reCaptcha 字段,必须定义常量 RECAPTCHA_SITE_KEY 和 RECAPTCHA_SECRET_KEY。请参阅 https://packagist.org.cn/packages/atk14/recaptcha-field。
要使用 hCaptcha 字段,必须定义常量 HCAPTCHA_SITE_KEY 和 HCAPTCHA_SECRET_KEY。请参阅 https://packagist.org.cn/packages/atk14/hcaptcha-field。
自定义表单的本地自定义字段
如果需要额外字段来构建具有特殊需求的表单,则可以将其放置在应用程序的 app/fields/local_custom_form_fields/ 文件夹中。此类字段的命名空间必须是 LocalCustomFormFields。请参阅以下示例。
<?php
// file: app/fields/local_custom_form_fields/opening_hours_field.php
namespace LocalCustomFormFields;
/**
* Opening hours
*
* cs: Otevírací doba
* sk: Otváracia doba
*/
class OpeningHoursField extends \RegexField {
// ...
}