使用ajax在视图(或块)中将项目添加到其他项目之上

发布于 2024-09-18 03:09:24 字数 277 浏览 5 评论 0原文

大家好,drupalers,我有一个关于 ajax 加载视图的问题。假设我有 15 个项目,并且我有寻呼机来显示 5 个项目。现在我想要一个显示“更多”的按钮。当按下按钮时,我希望视图在视图中加载额外的 5 个项目。所以如果我有动物的话。猫、狗、熊猫、蛇、蠕虫、斑马、狮子 如果寻呼机位于 3,它应该显示猫、狗、熊猫。按下按钮时,它应该再加载 3 个项目,视图现在应该显示猫、狗、熊猫、蛇、蠕虫、斑马,如果我再次按下它应该显示整个列表。我不知道该怎么做,有人可以指出我正确的方向吗?内容比较重,所以不显示解决方案和jquery是不可接受的。

Hello fellow drupalers, I have a question about ajax loaded views. Lets say i have 15 items, and i have the pager to show 5. Now i want to have a button that says show "more". when the button is pressed i want the view to load an additional 5 items in the view. So if i have lets say animals. cat,dog,panda,snake,worm,zebra,lion if the pagers is at 3 it should show cat,dog,panda. On button press it should load 3 more items, and the view should now say cat,dog,panda,snake,worm,zebra, if i press again it should show the whole list. I don't know how to do this, someone could possibly point me in the right direction? The content is rather heavy, so a display none solution and jquery would be unacceptable.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一城柳絮吹成雪 2024-09-25 03:09:46

自己执行 ajax 回调,但使用视图进行实际查询。

在 hook_menu() 中为 ajax 回调设置一个 URL,然后在回调中找出正在请求哪个“页面”,并在回调中以编程方式设置它。仅返回您需要的内容。

function general_menu() {
    $item['callback/url'] = array(
        'type' => MENU_CALLBACK,
        'page callback' => 'my_ajax_callback',
        'access callback' => TRUE,
    );
}

function my_ajax_callback() {
    $page = $_REQUEST['page'] ? $_REQUEST['page'] : 0;
    $view = views_get_view('{view_name}');
    $view->set_display('{display_name}');
    $view->set_current_page($page);
    $view->pre_execute();
    $view->execute();
    print $view->render();
    exit;
}

您必须自己执行 ajax 请求并在客户端管理当前页面,但这应该不那么难。此外,您可能需要覆盖一些视图模板文件,以便在请求更多项目时无法获得所有视图包装器,而只能获得项目本身。当 ajax 调用返回时,您只需将结果插入到 DOM 中其他项目下方。

Do the ajax callback yourself but use views for the actual query.

Set up a URL for the ajax callback in hook_menu() and then in the callback figure out which "page" is being requested and set it programatically in the callback & return just what you need.

function general_menu() {
    $item['callback/url'] = array(
        'type' => MENU_CALLBACK,
        'page callback' => 'my_ajax_callback',
        'access callback' => TRUE,
    );
}

function my_ajax_callback() {
    $page = $_REQUEST['page'] ? $_REQUEST['page'] : 0;
    $view = views_get_view('{view_name}');
    $view->set_display('{display_name}');
    $view->set_current_page($page);
    $view->pre_execute();
    $view->execute();
    print $view->render();
    exit;
}

You'll have to do the ajax request yourself and manage the current page on the client-side, too, but it shouldn't be that hard. Also, you might need to override some view template files so you don't get all the view wrappers when requesting more items, only the items themselves. When the ajax call returns you can just insert the result into the DOM below the other items.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文