重力形式 - 获取当前页码

Posted

技术标签:

【中文标题】重力形式 - 获取当前页码【英文标题】:Gravity Forms - Get Current Page Number 【发布时间】:2013-02-15 03:53:14 【问题描述】:

我有一个多页表单。

我想在此表单的最后一页上执行一些自定义 javascript。从理论上讲,我所要做的就是检索当前页码并编写条件。

很简单,对吗?显然不是。

我原来的解决方法是这样的:

if ($('gform_page').last().css('display') !== 'none') 
    // perform custom scripts now that the last
    // Gravity Form page is being shown

$('...').css('display') 在我在表单中尝试过的每个 元素上返回undefined。每次用户点击“下一步”按钮时,都会触发自定义脚本。没有雪茄。

然后,在查看the Gravity Forms documentation 之后,我发现了两个看起来很有用的事件:gform_post_rendergform_page_loaded

但是,文档没有说明如何访问参数。

jQuery(document).bind('gform_page_loaded', function(event, form_id, current_page)
    console.log(current_page);
    // returns nothing when loaded in the footer
    // returns [Object, object] when placed in an html field in the form
);

除了没有正确的代码之外,我还怀疑我没有将代码放在正确的位置,因为我在functions.php和header.php(as the documentation suggests)中也徒劳地尝试了以下内容:

<?php
function enqueue_custom_script($form, $is_ajax)
    if ($is_ajax) :
        echo '<script>console.log(current_page);</script>';
    endif;

add_action("gform_enqueue_scripts", "enqueue_custom_script", 10, 2);
?>

问题:

我需要什么代码来检索当前页码,更重要的是,该代码应该放在哪里?

【问题讨论】:

这不是结束问题的目的。当问题偏离主题或由于缺少信息而无法回答时,问题将被关闭。这表明问题有问题。如果您不想再与该问题互动,可以忽略它。 【参考方案1】:

我明白了。

函数rgpost 显然对于访问当前页码至关重要。经过我自己的一些混乱之后,我能够在两个functions.php中以及在header.php中的wp_head()函数之前获得以下代码。

function run_script_on_last_page($form) 
    if (!is_admin()) 
        $current_page = rgpost('gform_source_page_number_' . $form['id']) ? rgpost('gform_source_page_number_' . $form['id']) : 1;
        if ($current_page == 10) 
            wp_enqueue_script('custom_script', get_template_directory_uri() . '/js/custom_script.js', array('jquery'), null, true);
        
    

add_action('gform_enqueue_scripts_63', 'run_script_on_last_page');

如果您要复制/粘贴上面的代码,请确保:

10替换为您要检查的页面 确保wp_enqueue_script 中的参数正确无误 用您的表单 ID 替换 63

我发现一些有用的资源:

this sectiongform_validation 过滤器的文档 gform_enqueue_scripts 的文档。

【讨论】:

我实际上认为 McNab 上面的答案是一个更好的答案。 :) 如果有人单击上一个按钮然后再次单击下一个按钮,这将无法正常工作,页码会减少 1。【参考方案2】:

OPs 接受的答案可能很有效,但如果您有使用 Ajax 进行分页的表单设置,则它不起作用。

在那种情况下,我只能使用 Javascript 和以下方法让它工作;

http://www.gravityhelp.com/documentation/page/Gform_post_render

jQuery(document).bind('gform_post_render', function (event, formId, current_page) 
    if (current_page == 2) 
        // do something
    
);

您当然可以使用formId 参数将其限制为特定形式

【讨论】:

我可以将用户重定向到最后一页吗?最后一页 URL 是什么?【参考方案3】:

我写了一个返回当前页面的小函数:

// Get Gravity Forms Current Page
// Syntax: gf_current_page()
function gf_get_current_page()

    return rgpost('gform_source_page_number_' . $_POST['gform_submit']) ? rgpost('gform_target_page_number_' . $_POST['gform_submit']) : 1;

【讨论】:

【参考方案4】:

当前接受的答案仅在用户从未转到表单中的上一页时才有效,如果他们这样做了,那么gform_sourge_page_number 总是滞后一个。我找到了一个更好的解决方案(以这个钩子为例,但你应该能够在任何传递了 $form 的钩子中使用它):

function run_script_on_last_page( $form)  
  if ( !is_admin() ) 
    if ( \GFFormDisplay::get_current_page( $form['id'] ) == 10) 
        wp_enqueue_script( 'custom_script', get_template_directory_uri() . '/js/custom_script.js', array( 'jquery' ), null, true );
    
  


add_action( 'gform_enqueue_scripts_63', 'run_script_on_last_page' );

GFFormDisplay::get_current_page( $form_id ) 是众多方便的未记录函数之一。

【讨论】:

【参考方案5】:

除了已接受的答案之外,这里有一个查找当前页面并动态查找表单中有多少页面的示例。此示例根据是否是表单的最后一页来更改按钮文本,而不是将脚本排入队列。

// Change the text of the 'Next' form button to 'Submit' when
// the current page is the final page of the form
add_filter( 'gform_next_button', 'next_to_submit', 10, 2 );
function next_to_submit( $next_button, $form ) 
    $replacement_next_button = $next_button;
    $last_page_number = 1;
    foreach ($form['fields'] as $field) 
        $is_hidden = RGFormsModel::is_field_hidden( $form, $field, array() );
        if ($field['pageNumber'] > $last_page_number && !$is_hidden) 
            $last_page_number = $field['pageNumber'];
        
    
    $current_page_number = rgpost('gform_source_page_number_' . $form['id']) ? rgpost('gform_source_page_number_' . $form['id']) : 1;
    if ($last_page_number === $current_page_number) 
        // If the current page is the final page
        $replacement_next_button = str_replace( 'Next', 'Submit', $next_button );
    
    return $replacement_next_button;

【讨论】:

【参考方案6】:

以下代码在 JavaScript 中适用于我:

$('.gf_step_active .gf_step_number').html()

它将以多页的形式为您提供当前页面的页码。

【讨论】:

【参考方案7】:

使用 Jquery

  var current_page_ = 1+parseInt(jQuery('.gform_page:visible').index());

【讨论】:

【参考方案8】:

试试这个:

var current_visible_page = jQuery('.gf_step_active .gf_step_number').html();
console.log(current_visible_page);

在控制台中使用上面的方法来检查它是如何工作的。

【讨论】:

以上是关于重力形式 - 获取当前页码的主要内容,如果未能解决你的问题,请参考以下文章

页码的控制

Element Pagination 分页修改页码当前页无效

关于vue+Element-ui项目分页刷新不停留在当前页码bug解决

Word页码从当前页自增

Word页码从当前页自增

java jsp分页页码问题?