【问题标题】:Gravity Forms Find Sum of List Column重力形式查找列表列的总和
【发布时间】:2016-03-08 16:16:13
【问题描述】:

我正在尝试计算重力形式中列表列的总和, 不幸的是,这不是主插件中包含的功能,所以我不得不找到一个不同的来源来完成这个。我能够找到一个应该完成此任务的脚本,可在此处获得, jsFiddle

function calculateLFColumnTotal(formId, columnClass, totalFieldId, currency) {
var columnTotal = 0,
    preField = '#field_' + formId + '_' + totalFieldId,
    totalField = jQuery('#input_' + formId + '_' + totalFieldId),
    cellValue;
currency = (currency && typeof gf_global !== 'undefined');
jQuery(columnClass).each(function () {
    cellValue = jQuery(this).val();
    cellValue = (currency) ? gformToNumber(cellValue) : cellValue;
    columnTotal += parseFloat(cellValue) || 0;
});x
if (jQuery(preField).hasClass('gfield_price')) {
    columnTotal = gformFormatMoney(columnTotal);
    if (jQuery(preField + ' input').length > 1) {
        totalField.html(columnTotal);
        totalField = jQuery('input[name="input_' + totalFieldId + '.2"]');
    }
} else {
    columnTotal = (currency) ? gformFormatMoney(columnTotal) : columnTotal;
}
totalField.val(columnTotal).change();
gformCalculateTotalPrice(formId);
}
    function listFieldColumnTotal(formId, fieldId, column, totalFieldId,       currency) {
var listField = '#field_' + formId + '_' + fieldId,
    columnClass = '.gfield_list_' + fieldId + '_cell' + column + ' input';
jQuery(listField).on('blur', columnClass, function () {
    if (currency && typeof gf_global !== 'undefined') {
        gformFormatPricingField(this);
    }
    calculateLFColumnTotal(formId, columnClass, totalFieldId, currency);
});
jQuery(listField).on('click', '.add_list_item', function () {
    jQuery(listField + ' .delete_list_item').removeProp('onclick');
});
jQuery(listField).on('click', '.delete_list_item', function () {
    gformDeleteListItem(this, 0);
    calculateLFColumnTotal(formId, columnClass, totalFieldId, currency);
});
}
 listFieldColumnTotal( 140, 1, 3, 3, true );

但是,我不确定应该更改哪些元素以及应该保留哪些元素。如果有人有这方面的经验,并且可以指导我朝着正确的方向前进,那就太好了。

【问题讨论】:

    标签: javascript php wordpress pdf-generation gravity-forms-plugin


    【解决方案1】:

    这里有点晚了,但我偶然发现了这个脚本并决定使用它来创建用户定义的价格字段数量。客户希望能够输入多个发票金额并显示总金额,而我可以使用以下方法来完成这项工作:

    1. 脚本的魔力在于最后一行:

      listFieldColumnTotal( 140, 1, 3, 3, true );
      

    函数中对元素进行了描述,但按如下顺序描述:

    • 表单 ID(例如 gform_wrapper_6
    • 列表容器的 ID(例如#field_6_7
    • 我们要用作动态值的列项目位于列表容器下方(例如 .gfield_list_7_cell2
    • 结果输入容器的 ID(例如 field_6_18
    • 定义我们是否使用货币(我没有尝试将此值设置为“false”,但我想它的工作原理相同

    因此,这将导致我们的最终声明如下所示:

        listFieldColumnTotal( 6, 7, 2, 18, true );
    
    1. 我使用 gform_pre_render 过滤器将脚本附加到表单。为了做到这一点,我们将上面的脚本集成到我们的functions.php文件中:

        add_filter( 'gform_pre_render', 'realtimePriceListUpdate' );
    	function realtimePriceListUpdate( $form ) {
    	?>
    
    		<script type="text/javascript">
    
    			jQuery(document).ready(function(){
    
    				function calculateLFColumnTotal(formId, columnClass, totalFieldId, currency) {
    				    var columnTotal = 0,
    				        preField = '#field_' + formId + '_' + totalFieldId,
    				        totalField = jQuery('#input_' + formId + '_' + totalFieldId),
    				        cellValue;
    				    currency = (currency && typeof gf_global !== 'undefined');
    				    jQuery(columnClass).each(function () {
    				        cellValue = jQuery(this).val();
    				        cellValue = (currency) ? gformToNumber(cellValue) : cellValue;
    				        columnTotal += parseFloat(cellValue) || 0;
    				    });
    				    if (jQuery(preField).hasClass('gfield_price')) {
    				        columnTotal = gformFormatMoney(columnTotal);
    				        if (jQuery(preField + ' input').length > 1) {
    				            totalField.html(columnTotal);
    				            totalField = jQuery('input[name="input_' + totalFieldId + '.2"]');
    
    				        }
    				    } else {
    				        columnTotal = (currency) ? gformFormatMoney(columnTotal) : columnTotal;
    				    }
    
    					totalField.val(columnTotal);
    		    		gformCalculateTotalPrice(formId);
    
    				}
    
    				function listFieldColumnTotal(formId, fieldId, column, totalFieldId, currency) {
    				    var listField = '#field_' + formId + '_' + fieldId,
    				        columnClass = '.gfield_list_' + fieldId + '_cell' + column + ' input';
    				    
    				    jQuery(listField).on('focusout', columnClass, function () {
    
    				        if (currency && typeof gf_global !== 'undefined') {
    				            gformFormatPricingField(this);
    				        }
    				        calculateLFColumnTotal(formId, columnClass, totalFieldId, currency);
    
    				    });
    
    				    jQuery(listField).on('click', '.add_list_item', function () {
    				        jQuery(listField + ' .delete_list_item').removeProp('onclick');
    				    });
    
    				    jQuery(listField).on('click', '.delete_list_item', function () {
    				        gformDeleteListItem(this, 0);
    				        calculateLFColumnTotal(formId, columnClass, totalFieldId, currency);
    				    });
    
    				}
    
    			 	listFieldColumnTotal( 6, 7, 2, 18, true );
    
    			});	
    
    		</script>
    
    		<?php
    
    		return $form;
    
    	}
    1. 最后,我们不能使用 Gravity 表单提供的“总计”字段。我们必须创建一个“产品”字段,这是我们在步骤 1 中获取 id 的字段(结果输入容器的 id)。此外,我们必须在“产品”字段的“高级”选项卡中启用“允许动态填充字段”选项。或者,我们可以将产品的字段类型更改为“隐藏”,因为我们不想同时显示总计和产品字段。 Here's a screenshot of the fields required for this list calculation script

    【讨论】:

      【解决方案2】:

      你试过List Field Calculations插件吗?

      它扩展了数字字段计算选项以包括列表字段列。

      您可以获取列的总数和字段中的行数,然后配置自己的计算,例如“第 3 列的总和”。计算将自动填充数字字段。

      【讨论】:

      • 这个插件脚本很好地促进了原始请求。刚刚使用 Wordpress 5.4.1 和 Gravity Forms 版本 2.4.18 进行了测试
      猜你喜欢
      • 2014-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-13
      • 1970-01-01
      • 2021-11-28
      • 2023-04-05
      相关资源
      最近更新 更多