aneeshikmat/form-complete-ratio

用于yii2的Widget,用于计算用户填写任何表单的比率

安装: 28

依赖项: 0

建议者: 0

安全: 0

星级: 4

关注者: 2

分支: 1

开放问题: 0

类型:yii2-widget

dev-master 2021-10-09 12:53 UTC

This package is auto-updated.

Last update: 2024-09-09 19:05:37 UTC


README

formCompleteRatio Widget for yii2,用于计算用户填写的任何表单的比率(以完成度比率为例)

真实项目的截图

Yii2 formCompleteRatio screenshot_t1

为模板1设置此代码时的Widget截图

Yii2 formCompleteRatio screenshot_temp1

为模板2设置此代码时的Widget截图

Yii2 formCompleteRatio screenshot_temo2

功能

  1. 计算数据库中已填写和保存的表单/模型的比率
  2. 支持关系表单/模型
  3. 您可以选择需要计算比率的所需字段。
  4. 您可以选择结果样式为纯数字、带%的数字或模板。
  5. 您可以选择计算比率的字段组,如果其中任何一个字段已填写,则像所有字段都已填写一样添加比率。(注意:此组将仅获得1个字段的权重)。
  6. 您可以选择从关系表中获取一行或多行的比率。
  7. 支持基本和高级yii2模板

依赖性

  1. Yii2
  2. Twitter bootstrap资源

安装

通过composer安装此扩展是首选方式。

运行

php composer.phar require --prefer-dist aneeshikmat/form-complete-ratio "*@dev"

或将

"aneeshikmat/form-complete-ratio": "*@dev"

添加到您的composer.json文件的require部分。

使用方法

要使用此Widget,您需要将此代码添加到您的视图

/* you need to add needed field in your model to Calculate ratio, In our example these field in Signup() model */
public $formRatioField = [
        'id', 'name', 'email', 'phone', 'street'....etc
    ];

use aneeshikmat\yii2\FormCompleteRatio\FormCompleteRatio;// on top view page
<?= FormCompleteRatio::widget([
    'mainModel'         => new Signup(),
])?>

如您所见,它非常简单,现在我们将解释此代码,然后转到所有可能用到的显示选项,在上一个代码中,我们创建了FormCompleteRatio widget,mainModel用于确定我们需要为其计算比率的模型或表单,注册表单是一个模型,在这个例子中我们分配了一个新模型,这意味着我们将得到0比率。看看这张结果图

Yii2 formCompleteRatio screenshot_new_model

第二种选项用于获取比率,因此我们需要找到当前用户的所需记录,让我们看看这个例子

<?= FormCompleteRatio::widget([
            'mainModel'         => Signup::findOne(['id' => 1]),
            'withPercentage'    => true,
        ])?>

如您所见,我们使用了findOne,并使用了withPercentage来设置比率数字后面的%。看看这张结果图

Yii2 formCompleteRatio screenshot_update_model

现在让我们看看所有可以使用的选项

<?= FormCompleteRatio::widget([
            'mainModel'         => Signup::findOne(['id' => 1]),
            'templateStyle'     => 1,
            'withPercentage'    => true,
            'formRatioField'            => ['id', 'name', 'email', 'phone'],
            'ignoreMainModelRatioField' => true,
            'templateOption'    => [
                'templateClassWrapper' => 'col-xs-4',// Block Class
                'templateBlockId'      => 'form-complete-ratio',
                'urlText'              => 'Update',// Url Text
                'url'                  => 'javascript:void(0);',// Url
                'title'                => 'Nice Option',// Main Block Title
            ]
        ])?>

templateStyle:此选项有3个不同的值(0、1、2),默认选项是0,这意味着没有任何模板,1将渲染简单的模板,如“为模板1设置此代码时的Widget截图”中的图像,2将渲染如“为模板2设置此代码时的Widget截图”中的简单模板,并且这些选项的依赖性在于您可以编辑或更新为所需的任何样式。

withPercentage:此选项可以是false或true,这意味着是否将%连接到比率数字,不同的选项是false,仅对于模板1是true。

templateOption:此选项包含可以用于自定义模板1或模板2的选项。

formRatioField:这是一个非常重要的选项,也是此Widget的主要选项之一,我们可以直接在此Widget中将此选项设置到所需字段,或者我们可以在我们的模型中设置它而无需调用它,这样我们就可以覆盖字段比率或使用在模型中设置的初始字段集...但如果你在Widget中设置它,你需要设置ignoreMainModelRatioField为true。formRatioField仅接受数组,并且此数组可以包含以下选项:

  1. ['field1', 'field2',...等等]: 在这种风格中,我们的类将检查所有字段是否都已填写,如果有4个中的3个已填写,我们的类将返回百分比75%。

  2. ['field1', [['field2', 'field3']]]: 在这种风格中,我们设置了嵌套数组,这意味着如果field2或field3中任一已填写,则field2和field3都视为已填写,换句话说,field1的权重为1,field2和field3的权重也为1,因此如果用户只填写了field2而没有填写field1,field2和field3的比例将是50%,这在许多情况下很有用,例如,如果用户有社交媒体链接,他设置了facebook或tw,则可以显示消息“您的资料已完整”。

  3. ['field-1', ['model' => '/dir/ModelClassName', 'conditions' => ['field_db_name' => val]]]: 在这种风格中,我们需要与相关模型计算比例,'model'将包含类路径,如\app\models\SocialMedia,'conditions'将包含我们需要设置的规则,以获取所需的行,例如获取is_deleted = 0等相关的行,您也可以在conditions val中使用{{id}}作为mainModel中id的替换,这在您尝试根据FK渲染相关行时很有用,或者通过任何其他方式,此外,在这种风格中,我们仅在找到模型行时计算比例,而无需检查该模型中的字段,如果您需要根据相关字段计算比例,请参阅下一点。

  4. ['id', 'name', 'email', 'phone', [['model' => '\app\models\SocialMedia', 'oneOrMore' => 'more', 'modelItem' => [['tw', 'fb'], 'website'], 'conditions' => ['signup_id' => '{{id}}']]]]: 在这种风格中,我们添加了oneOrMore以确定比例,我们将计算模型中找到的所有行的依赖性或仅为一个行,因此您有两个选项:more用于所有行,one仅用于从一行获取字段,如果您使用oneOrMore,则需要使用modelItem,此选项具有类似于点1或2的字段数组。

以下是演示截图: Yii2 formCompleteRatio screenshot_new_model