如何设置嵌套的可重复选项字段?

时间:2014-02-12 作者:INT

我正在努力思考如何创建一组选项字段,这些字段应该能够重复尽可能多的次数。但我很难想出如何继续下去。

目前,我已经设置了用于管理选项的可视化界面,但我不知道如何将它们保存到保存时的选项中。

这样的逻辑将如何区分不同的部分?在选项数组中将每个部分保持为单独的数组(我想是吧?)这样,您就可以添加任意多的节,以及任意多的嵌套数据字段。

这个想法很简单

1) 单击添加节以创建新节First Step————————

3)。。并将多个输入字段关联到节Third Step————
您还可以添加更多节Fourth Step


我的atm代码是:

PHP

<?php
function rd_settings_page() {
    ?>
    <div class="wrap">
        <h2><?php _e( \'Settings\', \'blog\' ); ?></h2>
        <form enctype="multipart/form-data" action="options.php" method="POST">
            <?php settings_fields( \'rd-settings-group\' ); ?>
            <?php do_settings_sections( \'rd-settings\' ); ?>
            <?php submit_button(); ?>
        </form>
    </div>
    <?php
}

function rd_settings_api_init() {
    add_settings_section(
        \'rd_blog_info_section\',
        __( \'Blog info settings\', \'blog\' ),
        \'rd_blog_info_section_callback_function\',
        \'rd-settings\'
    );

    if ( 1 === get_current_blog_id() ) {        
        register_setting( \'rd-settings-group\', \'rd_fashion_list\' );
        register_setting( \'rd-settings-group\', \'rd_blog_description\' );
    }

    if ( 1 === get_current_blog_id() ) {        
        add_settings_field(
            \'rd_fashion_list\',
            __( \'Fashion Blogs\', \'blog\' ),
            \'rd_fashion_list_callback_function\',
            \'rd-settings\',
            \'rd_blog_info_section\'
        );
    }
}

add_action( \'admin_init\', \'rd_settings_api_init\' );

function rd_blog_info_section_callback_function() {
    echo \'<p>Blog info settings</p>\';
}

function rd_fashion_list_callback_function() {
    $setting = get_option( \'rd_fashion_list\' );?>

    <div class="inner-wrap"></div>
    <span class="addsection button-primary">
        + Add Section
    </span>

    <?php
}

JS

$(document).on(\'click\', \'.addsection\', function () {
    $(this).prev(\'.inner-wrap\').append(\'<div class="section">\'+
        \'<input type="text" name="rd_facebook" id="rd-facebook" value=""/>\'+
        \' Name for section\'+
        \'<ul>\'+
        \'<li>\'+
        \'<select>\'+
        \'<option value="" disabled="disabled" selected="selected">Please select a blog</option>\'+
        \'<option value="1">One</option>\'+
        \'<option value="2">Two</option>\'+
        \'</select>\'+
        \'<span class="close">×</span>\'+
        \'</li>\'+
        \'</ul>\'+
        \'<span class="addblog button">+ Add Blog</span>\'+
        \'</div>\');
});

$(document).on(\'click\', \'.addblog\', function () {
    $(this).prev(\'ul\').append(\'<li>\'+
        \'<select>\'+
        \'<option value="" disabled="disabled" selected="selected">Please select a blog</option>\'+
        \'<option value="1">One</option>\'+
        \'<option value="2">Two</option>\'+
        \'</select>\'+
        \'<span class="close">×</span>\'+
        \'</li>\');
});

1 个回复
SO网友:davidcondrey

这并不是对你的具体情况的直接回答,但这可能会帮助你找到解决方法。

我在这里找到一篇文章:http://www.sutanaryan.com/jquery-duplicate-fields-form-submit-with-php/ 它详细说明了可以使用jQuery重复的过帐字段的过程。

在他的示例中,他创建了一个HTML表单:

<form action="process.php" method="post">
    <p class="clone">
        <label> Name: </label>
        <input type="text" name="name[]" />
    </p>
    <p><a href="#" class="name" rel=".clone">Add Name</a></p>
    <p><input type="submit" value="Submit" /></p>
</form>
并将其设置为可重复:

$(document).ready(function(){
    var removeName = \'<a href="#" onClick="$(this).parent().slideUp(
    function(){$(this).remove()}); return false">remove</a>\';
    $(\'a.name\').relCopy({append:removeName});
});
并循环遍历每个字段,直到剩下0个字段可循环遍历,将每个字段保存到数据库中的一个表中。

$names=$_POST[\'name\'];

if(isset($names)) {
    foreach($names as $name) {
        if(strlen($name)>0) {
            $sql=mysql_query("INSERT INTO tbl_name(name) VALUES (\'$name\')");
        } else {
            echo \'Oops no value to be inserted.\';
        }
    }
}
进一步搜索,我在这里找到了另一篇文章,详细介绍了类似的过程:我现在只是略读了一下,但正在将其添加到书签中,以备明天阅读。

http://www.web-design-talk.co.uk/58/adding-unlimited-form-fields-with-jquery-mysql/

结束