如何将内容动态加载到Bootstrap模式窗口的主体中?

时间:2017-06-06 作者:Michael Ecklund

我发现this answer on Stack Overflow, 回答这个确切的问题。

我稍微修改了一下,因为我使用了button 而不是anchor:

jQuery( ".modal" ).on( "show.bs.modal", function ( e ) {

    var target = jQuery( e.relatedTarget ).attr( "data-target" ).replace( "#", "" );

    var modal_ids = [
        "modal-request-estimate",
        "modal-schedule-appointment",
        "modal-rate-review"
    ];

    if ( modal_ids.indexOf( target ) == - 1 ) {
        return false;
    }

    jQuery( this ).find( ".modal-body" ).load( location.href + "?modal=" + target );

} );
If-then添加了一个PHP回调函数来运行template_redirect 为了检查$_GET[ \'modal\' ] 并在有效条件下输出适当的内容。

我的PHP回调如下所示:

add_action( \'template_redirect\', function () {

    $modal_id = null;

    if ( isset( $_GET[\'modal\'] ) ) {
        $modal_id = filter_var( $_GET[\'modal\'], FILTER_SANITIZE_STRING );
    }

    if ( ! $modal_id ) {
        return false;
    }

    echo render_form( $modal_id );

    return true;

} );
Note: render_form(); 是一个非常简单的函数,专门输出标准HTML输入表单。

Just to be clear: 我并不总是匿名编写回调函数。我这样做只是为了简单地问这个问题。

At this point: 单击按钮时,将弹出模式窗口,表单将在模式窗口的主体中呈现。但是,整个网站的模板也会输出到模式窗口中。

How do I get it to ONLY output the form into the modal\'s body, instead of the ENTIRE website\'s template?

1 个回复
SO网友:Mark Kaplun

我认为正确的解决方案是将表单嵌入到页面中。从总体上看,如果将html膨胀与您可能提供的所有图像和JS进行比较,那么额外的html膨胀就不算什么了。

至于AJAX,在wordpress中只有两个好的解决方案,AJAX端点或JSON端点(最好是第二个),任何使用模板层次结构的尝试,尽管最终可能会成功,但都将是一场与所有页眉和页脚挂钩的艰苦斗争,并会导致持续的维护头痛。

如果由于某种原因无法使用JSON端点,那么您只剩下一个页面模板,它不调用任何wordpress挂钩。您可以手动创建这样的“表单页面”,也可以在运行时创建(插件/主题激活)。如果你想从google隐藏这样的页面,还需要做一些额外的工作,这取决于你使用的SEO插件的类型。

结束