web-dev-qa-db-ja.com

AJAXで更新された別のビュー内のビュー

分類用語(本のカテゴリー)のビューがあります。このビューには、ユーザーが使用できるすべてのカテゴリが一覧表示されます。次に、ユーザーがカテゴリをクリックすると、divがいくつかの本(別のビュー、コンテキストフィルター付き)とともに表示されます。リンクをクリックすると、書籍の全文または詳細に移動できますが、リンクをクリックせずに別のセクションに移動してタイトルをクリックすると、前のセクションを閉じますdiv、および新しい本を含む別のdivがこの新しいセクションに表示されます。

スキーマは次のようになります。

  • カテゴリー1
  • カテゴリー2
  • カテゴリー3

カテゴリ1をクリックすると、AJAXが表示されます。

  • カテゴリー1 ---> AJAXで取得された次のパーツが表示されます
    • ブック1
    • ブック2
    • ブック3カテゴリー1に関する他のブックを見る<--- END AJAX呼び出しによってスローされたコンテンツの終わり。
  • カテゴリー2
  • カテゴリー3

両方のモジュール Views Field View および Views Accordion を使用して、AJAXなしで機能させることができました。

ただし、AJAXで動作させる方法を見つけることができないため、タブのコンテンツは読み込まれませんAJAXで1つのタブカテゴリをクリックして開くと、ブラウザのメモリ/速度/ 1つのカテゴリの書籍のみを表示したい場合でも、サーバーの再要求に影響はありません。

enter image description here

2
Cesar

モジュール「Views Ajax Get」を使用してみることができます

https://www.drupal.org/project/views_ajax_get

または、ビュー自体がAjaxを介してビューを取得するためのコールバック/ views/ajaxを提供するため、以下のサンプルコードを使用して独自に実装することもできます-

PHP:

$view = views_get_view('taxonomy_term');
$view->set_display('page');
$view->set_use_ajax(TRUE);
$view->set_arguments(array($tid));
$settings = array(
  'views' => array(
    'ajax_path' => url('views/ajax'),
    'ajaxViews' => array(
      array(
        'view_name' => $view->name,
        'view_display_id' => $view->current_display,
        'view_args' => check_plain(implode('/', $view->args)),
        'view_path' => check_plain($_GET['q']),
        'view_base_path' => $view->get_path(),
        'view_dom_id' => 1,
        'pager_element' => $view->pager['element'],
      ),
    ),
  ),
);
drupal_add_js($settings, 'setting');
views_add_js('ajax_view');

JavaScript:

$.ajax({
  url: Drupal.settings.views.ajax_path,
  type: 'GET',
  data: data,
  success: function(response) {
    var viewDiv = '.view-dom-id-' + data.view_dom_id;
    $('#content > div.limiter').html(response.display);
    // Call all callbacks.
    if (response.__callbacks) {
      $.each(response.__callbacks, function(i, callback) {
        eval(callback)(viewDiv, response);
      });
    }
  },
  error: function(xhr) {
    $('#content > div.limiter').html('<p id="artist-load-error">Error text.</p>');
    $('#block-request-0').hide();
  },
  dataType: 'json'
});

リファレンス: https://stackoverflow.com/questions/4932523/embed-a-view-using-ajax

1

Views Megarow 望みのようにビューの真ん中に新しい「アコーディオン」ページを開くので、この状況に理想的だと思われます。

書籍をリストする親用語の新しいビューページ/パネルページを作成する必要があります。これはさまざまな方法で行うことができますが、/ categories /%tidのビューが最も簡単だと思います。

利点は、そのページ内で本当にたくさんのことができるということです。ブロック/コメント/複数のビューなど、本をリストするだけです。すでに各カテゴリーのページがある場合、それはメガロウ内にロードするのに適したバージョンを作成する場合でしょう。

最後のカテゴリは閉じませんが、いくつかの基本的なjQueryでそれを乗り越えることができると思います。

2
Niall Murphy