代码之家  ›  专栏  ›  技术社区  ›  ozke

德鲁帕尔。使用AJAX更新视图的内容

  •  4
  • ozke  · 技术社区  · 16 年前

    查看当前视图配置(单击以放大):

    alt text

    我想使用AJAX来使用filter(按参数)功能 无需重新加载页面。我已经启用了“使用AJAX”选项,但我不知道如何继续。

    顺便说一句,我正在构建自己的主题(以防它改变什么)。


    更新: 基本上,当我浏览section/parameter1,section/parameter2。。。但是我想用AJAX做同样的事情,而不需要重新加载页面。我希望现在更清楚

    6 回复  |  直到 13 年前
        1
  •  2
  •   Iván Gabriel Campaña Naranjo    13 年前

    尽管这一点现在可能已经解决了,但最好的“德鲁帕里方式”是在这个屏幕上解释的:

    http://seanbuscay.com/ajax-reader-demo

    根据剧本的作者(我可以向你保证一切正常),以下是需要记住的步骤:

    1. 格式化链接(添加“no js”&用户ajax”到 菜单回调。
    2. 在页面中加载。
        2
  •  1
  •   chathura    12 年前
    //select required div area to refresh
    Drupal.behaviors.share_status = {
                attach: function (context) {
                    var initialLoad = false;
                    // Drupal passes document as context on page load.
                    if (context == document) {
                        initialLoad = true;
                    }
                    // Make sure we can run context.find().
                    var ctxt = $(context);
                       $('.empty-share-status').load( 'form-content',function(context) {
                        $(".view-share-status").load("share_status/get/ajax"); //call menu action
                    });
                }
            }
    
    //get action in module page using MENU_CALLBACK
    
    function share_status_menu() {
        $items['share_status/get/ajax'] = array(
        'page callback' => 'share_status_get_ajax', // Render HTML
        'type' => MENU_CALLBACK,
        'access arguments' => array('access content'),
      );
        return $items;
    }
    // render HTML content
    function share_status_get_ajax() {
      $block = module_invoke('views','block_view','share_status-block_1');
      print render($block);
    }
    
        3
  •  1
  •   echo    10 年前

    下面是我最后使用的javascript,它用ajax加载视图块,并从我在页面上创建的链接列表的href值传入上下文过滤器。希望这能帮上忙!

    function getInfo(args) {
    
      $.ajax({
        url: Drupal.settings.basePath + 'views/ajax',
        type: 'post',
        data: {
          view_name: 'agent_lookup',
          view_display_id: 'agent_lookup_block', //your display id
          view_args: args,
        },
        dataType: 'json',
        success: function (response) {
            if (response[1] !== undefined) {
            var viewHtml = response[1].data;
            $('#ajax-target').html(viewHtml);
            //Drupal.attachBehaviors(); //check if you need this.
          }
    
        },
            error: function(data) {
             alert('An error occured!');
            }
      });
    }
    
    
    
    $('.ajax_button').once().click(function(e){
        e.preventDefault();
        var the_id = $(this).attr('href');
        noSlashes = the_id.replace(/\//g,'');
        getInfo(noSlashes);
    
    });
    
        4
  •  0
  •   Scott Reynen    16 年前

        5
  •  0
  •   ozke    16 年前

    ajax调用:

    $('#output_div').load('path/ajax_all_projects.php?type=art');
    

    ajax文件(ajax\u all\u projects.php):

    <?php
    include_once './includes/bootstrap.inc';
    drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
    
    $get_param = $_GET["type"];
    $arguments = Array();
    if(!empty($get_param)){
        array_push($arguments, $get_param);
    }
    
    $view = views_get_view('all_projects');
    print $view->execute_display('Block', $arguments);
    ?>
    

        6
  •  0
  •   faboulaws    13 年前

    您还可以使用以下命令 从菜单创建一个页面,并在菜单函数中调用

     views_embed_view($name, $display_id = 'default')
    

    例如,如果您有一个参数

    print views_embed_view('my_test_view', 'block_1', $my_arg)
    

    view::execute_display($display_id = NULL, $args = array())
    

    你也可以用

    view::preview($display_id = NULL, $args = array())
    
    推荐文章