뷰에서 아약스 로딩 동작을 어떻게 변경합니까?


34

블록에 일부 노출 된 필터가있는 것을 볼 수 있습니다. AJAX 및 자동 제출 기능을 사용하므로 필터 옵션이 변경되는 즉시보기가 다시로드됩니다.

옵션을 선택하고 다시로드하는보기 사이의 짧은 지연 시간에 익숙한 파란색 AJAX throbber가 양식 맨 아래에 표시됩니다 (숨겨진 제출 버튼이 현재있는 곳이라고 생각합니다).

throbber 요소의 CSS를 재정 의하여이 이미지를 사용자 정의 할 수 있다는 것을 알고 있지만 전혀 사용하지 않는 것이 좋습니다.

내가 오히려 많이하는 일은 jQuery 애니메이션을 사용하여 노출 된 필터 양식 (및 이상적으로 기본보기)을 일시적으로 페이드 아웃하는 것입니다. 그런 다음 AJAX 호출이 완료되면 페이드 인됩니다.

실패하면 뷰 UI 모듈이 업데이트 할 때 사용하는 것과 동일한 방법, 즉 페이지 중간 에이 아이콘을 배치하고 싶습니다.

여기에 이미지 설명을 입력하십시오

그것이 이미 내장되어 있기 때문에이 로딩 동작의 스타일 / 위치를 변경할 수있는 설정이 있다고 가정했습니다. 그래도 그런 행운은 없습니다.

이러한 방법 중 하나를 어떻게 구현합니까?

Views 7.x-3.3에서 Drupal 7을 사용하고 있습니다.


음 ... 아침 프로젝트 :)
레스터 피바디

이 작업을 수행해야하는 기간은 얼마입니까?
레스터 피바디

@Lester 저는 현재 진행중인 프로젝트의 릴리스 차단기가 아니기 때문에 서두르지 않습니다 ...하지만 나는 그것이 나를 괴롭 히고 있음을 인정해야합니다! 나는 Views를 거의 사용하지 않으며 더 낮은 수준에서 '관심을 가질'시간이 없다. 하지만 지금 전자 상거래 노력을 Drupal Commerce로 이전하기 시작하면서 이런 종류의 일을 할 수 있어야합니다. 7 일 현상금 기간 동안 좋은 답변을 받으면 달이 :을 것입니다 :)
Clive

이봐, 나는 뷰 throbber의 스타일을 지정하기 위해 사용자 정의 모듈 (설정 관리 페이지 포함)을 만들었습니다. 여전히 관심이 있습니까? drupal.org에 며칠 안에 업로드 할 수 있습니다
ANDiTKO

1
#random-: -o @Clive가 답에 관한 것이라고 생각했습니다. 심지어 질문도 가능합니다.) : D
SGhosh

답변:


42

작은 jquery를 사용하는 것이 마음에 들지 않으면 항상 다음과 같은 작업을 수행 할 수 있습니다.

$('#view-id').ajaxStart(function(){
   $('#view-filters-id').fadeTo(300, 0.5);
});
$('#view-id').ajaxSuccess(function(){
   $('#view-filters-id').fadeTo(300, 1.0);
});

4
예,이 솔루션에 동의합니다. 그냥 jQuery를 것을,주의 ajaxSendajaxComplete상태를 함께 사용할 수있는 if (settings.url == '/views/ajax') {//... }컨트롤에 대해.
kalabro

와우, 난 정말 너무 복잡한 것들이 너무 분명해 보인다! 나는 (그렇지 않으면 오히려보기보다 필터 형태로 이벤트를 부착했다 ajaxSuccess; 이벤트가 교체에 바인딩 재 자동으로하지 않기 때문에 내가 추측 한 번만 트리거됩니다 <div>이 완벽한 것을 아름답게 간단한 언급하지 않기 위하여보다하지만, 다른) . 대단히 감사합니다
Clive

@kalabro이 답변과 현상금을 나누어 줄 수 있다면 이것에 대해 다시 한 번 감사드립니다. 그러나 그것은 거의 완전히 작동하는 예제이기 때문에 실제로 이것을 위해 가야합니다 :)
Clive

@Clive, 나는 해결책을 찾은 것을 매우 기쁘게 생각합니다 :)
kalabro

1
jQuery 1.8부터 .ajaxSuccess () 메소드는 document 에만 첨부해야 합니다 . 위의 kalabro가 제안한 설정 값을 비교하는 것이 좋습니다. 출처 : api.jquery.com/ajaxSuccess
cjoy

29

완성을 위해 여기에 내가 사용한 코드가 있습니다. AJAX로드가 시작되면 노출 된 필터 형식과 뷰를 모두 페이드 아웃하고 완료되면 다시 다시 표시됩니다.

(function($) {
  Drupal.behaviors.events = {
    attach: function(context, settings) {
      $('#views-exposed-form-events-page', context).ajaxStart(function(){
        $('#views-exposed-form-events-page,div.view-id-events', context).fadeTo(300, 0.5);
      });
      $('#views-exposed-form-events-page', context).ajaxSuccess(function(){
         $('#views-exposed-form-events-page', context).fadeTo(300, 1.0);
         $('div.view-id-events', context).css('opacity', 0.5).fadeTo(300, 1.0);
      });
    }
  };
})(jQuery);

대박! 나는 당신을 위해 일하게되어 기쁘다.
Chance G

이것은 Drupal 6에서 어떻게 이루어 집니까?
Ryan G

정말 훌륭하지만 한 번만 적용됩니다 :)
Kojo

10

안녕하세요, 당신이 원하는 것을 정확하게 복용하는 매우 간단한 모듈을 만들었습니다. 이 모듈에는 throbber의 스타일을 제어하고 해킹없이 자신의 이미지를 업로드 할 수있는 구성 페이지가 있습니다.

이것은 샌드 박스 링크입니다 : http://drupal.org/sandbox/ANDiTKO/1556808

유용하다고 생각되면 여기에서 reveiw하여 공식 프로젝트로 승인 하십시오 : http://drupal.org/node/1556114


정말 감사합니다. :) 나는 그것을 설치하고 내가 기회를 얻었을 때 검토에 대한 의견을 게시 할 것이다
Clive

6

방금 조사했습니다.
throbber하드 코드 여기 의 생성자에서 Drupal.views.ajaxView.
의 인스턴스 Drupal.views.ajaxView에 저장되지 않습니다 Drupal.ajax하고 있다 @todo 그것에 대해.
그것은 우리가 객체에 들어가서 우리 자신의 매개 변수를 설정할 수 없다는 것을 의미합니다.

뷰는 어떻게합니까?

짧은 대답은 CSS입니다.
뷰 관리 페이지 는 부모 스타일을 숨기고 throbber 스타일을 추가합니다 .ajax-progress-throbber.

.ajax-progress-throbber {
  background-color: #232323;
  background-image: url("../images/loading-small.gif");
  background-position: center center;
  background-repeat: no-repeat;
  -moz-border-radius: 7px;
  -webkit-border-radius: 7px;
  border-radius: 7px;
  height: 24px;
  opacity: .9;
  padding: 4px;
  width: 24px;
}

Drupal.ajax로 무엇을 할 수 있습니까?

예, AJAX 요소 (버튼, 링크 등)를 덮어 쓸 수있는 몇 가지 방법을 찾았습니다. 여기에 예가 나와 있습니다 : Drupal Form AJAX를 확장하거나 "연결하는 방법"? . 그러나이 경우에는 좋지 않습니다.
진행 요소가 beforeSend단계에 표시되므로 발생하기 전에 무언가를 수행 할 수 있습니다.


정보에 대해 대단히 감사하지만 정보를 어떻게 사용하여 문제를 해결할지 잘 모르겠습니다. 적어도 Views 모듈을 해킹하지 않고는 CSS 이외의 기본 Views ajax 로딩 동작을 추가 / 변경할 수 없다고 말하는가?
Clive

뷰도 CSS를 사용하기 때문에 CSS를 사용할 수 있습니다. .throbber.ajax-progress-throbber
kalabro에

그렇다면 블록의 노출 된 필터 형식과 뷰 자체 .ajax-progress-throbber가 AJAX가 호출 될 때 클래스를 얻 습니까? 나는 그 일이 일어나지 않았다는 것을 인정해야하지만 확인하겠습니다. 그리고 beforeSend함수 에서 jQuery 애니메이션을 호출 할 수 있다고 생각 합니다 (다른 질문에 대한 답변을 기반으로)? 고맙게도 실제로 뷰를 사용하지 않으며 모든 코드를 완전히 분석하여 무슨 일이 일어나고 있는지 알 수 없습니다! 내가 시도해 보는 방법을 알려 드리겠습니다
Clive

1
jQuery 애니메이션은 최신 브라우저에서만 모든 브라우저와 CSS 전환에서 작동하지만 양식 요소에서 원하는 페이드 효과를 달성하기 위해 명심해야 할 사항은 jQuery 애니메이션 대신 CSS 전환을 사용할 수도 있습니다.
Lester Peabody

@Lester에게 감사드립니다. 당분간 jQuery를 사용하고 싶습니다. @kalabro 불행히도 귀하의 제안이 효과가 없습니다. 뷰나 노출 된 필터 블록 .ajax-progress-throbber은 어느 시점에서든 클래스를 적용하지 않으므로 메서드가 작동하지 않습니다. 시도해 주셔서 감사합니다
Clive
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.