2010-12-30 7 views
1

기본적으로 FancyBox의 약간 비표준적인 구현이 있습니다. 기본적으로 Lightbox에 표시 할 수 있도록 이미지의 큰 버전에 대한 링크를 포함해야합니다. 그러나 구현시 이미지 링크 URL은 이미지 파일에 직접 연결되는 것이 아니라 스크립트를 가리 킵니다. 그래서, 대신 예 :라이트 박스 이미지/링크 URL

<a href="mysite/images/myimage.jpg" rel="gallery"> 

내가 가진 :

<a href="mysite/photos/view/abc123" rel="gallery"> 

위의 URL 포인트를 함수에 :

public function actionPhotos($view) 
{ 
    $photo=Photo::model()->find('name=:name', array(':name'=>$view)); 

    if(!empty($photo)) 
    {   
     $this->renderPartial('_photo', array('photo'=>$photo, true)); 
    } 
} 

은 "$ this-> renderPartial()"비트를 출력 할 표준 HTML 태그가 포함 된 레이아웃 파일을 호출하기 만하면됩니다.

사용자가 미리보기 이미지를 클릭하면 위의 함수가 호출되고 라이트 박스에 큰 이미지가 표시됩니다.

사용자가 미리보기 이미지를 마우스 오른쪽 버튼으로 클릭하고 "새 탭/창에서 열기"를 선택하면 이미지가 일반 이미지 즉 브라우저에 표시됩니다. 이 레이아웃을 변경하여 레이아웃 내에 이미지를 표시하려고합니다. 나는 다음과 IF 문에 넣어 포함 할 수 있습니다 위의 코드에서

:.

$this->render('photos', array('photo'=>$photo)); 

이있는 이미지를 표시 할 수있는 레이아웃을 포함하는 레이아웃 파일 "사진을"호출을

여기에 특정 제한이 있습니다. 이미지 URL은 동일하게 유지되어야합니다. 즉, URL에 추가 GET 변수가 없어야합니다. 그러나 백그라운드에서 GET 변수를 전달할 수 있다면 OK입니다.

이 기능을 위해 다른 파일을 호출 할 수 있도록 위 기능을 변경해야 할 가능성이 높습니다.

편집 : 사진 탭으로

http://www.starnow.co.uk/KimberleyMarren

이동을하고, 미리보기 이미지에 마우스를 가져가 - URL을 참고 : 다음 체크 아웃, 내가 할 노력하고 있어요 정확히 보여주기 위해. 미리보기 이미지를 클릭하면 라이트 박스에 열립니다. 그런 다음 동일한 축소판을 마우스 오른쪽 단추로 클릭하고 "새 탭/새 창에서 열기"를 선택하십시오. 이미지가 이제 레이아웃에 표시됩니다. Lightbox와 자체 페이지에 이미지를 표시 할 때 동일한 URL이 사용됩니다.

StarNow가 수행 한 방식은 일부 미친 긴 JavaScript 기능을 사용하고 있습니다. 복제에는 너무 열광하지 않습니다.

답변

2

하는 HTML 링크는 기본적으로 새 페이지에 이미지를 보여주는 레이아웃, 예를 가리켜 야 : 라이트가 열리기 전

<a href="mysite/images/show/123" rel="gallery"> 

의 구별하기 위해 URL에 쿼리 문자열을 추가 일반 링크를 클릭하고 라이트 박스의 레이아웃을로드합니다. 이미지가 라이트 박스에로드되면 바로 링크를 원래 상태로 변경하십시오. 새 탭에서

<a href="mysite/images/show/123?mode=lightbox" rel="gallery"> 
+0

건배 동료, 그게 정확히 내가 한 것입니다. 완벽하게 작동합니다! – GSTAR

+0

당신을 환영합니다! – steffenbew

0

<img /> 태그를 사용하여 HTML을 생성하는 JavaScript 함수를 수정하여 해당 페이지에 이미지를 연결할 수 있어야합니다. 비록 "새 탭에서 이미지 열기"를 선택하면 다음과 같은 페이지가 열리므로 불가능할 수도 있습니다 (단, 쿠키가/세션을 구현하는 미친 종류가 아니라면 그냥 지나가는 이미지 스크립트를 번갈아 가며 이미지를 생성하고 가능한 페이지를 생성 할 수 있습니다.) "새 탭에서 링크 열기"를 클릭 할 때 링크에 새로운 href을 할당하려면 JavaScript 함수를 수정하면됩니다.

정확히 무엇을 하려는지 명확히 할 수 있습니까? 새 탭에서 링크를 열거 나 새 탭에서 이미지를여시겠습니까?

편집 : FancyBox 스크립트가 링크의 href을 이미지를 직접 가리 키도록 변경하는 것으로 보입니다. 스크립트에서 각 링크 태그를 rel="gallery"으로 선택하고 href을 이미지를 가리 키도록 바꿔야합니다. 예를 들어, "mysite/photos/view/abc123"으로 남겨두고 싶다면 href을 변경하지 않기를 원할 것입니다.

+0

링크 열기 :

$("a[rel=gallery]").fancybox({ 'onStart': function (selectedArray, selectedIndex, selectedOpts) { var el = $(selectedArray[selectedIndex]); el.attr('href', el.attr('href') + '?mode=lightbox'); }, 'onComplete': function (currentArray, currentIndex, currentOpts) { var el = $(currentArray[currentIndex]); el.attr('href', el.attr('href').split("?")[0]); } }); 

그런 라이트 레이아웃을 반환하기 위해 다음과 같은 링크를 처리해야합니다. URL이 실제 이미지 파일이 아닌 스크립트를 가리키고 있기 때문에 어떤 데이터를 전달할 수 있는지, 즉 ajax/GET 변수가 수신되면 지정된 레이아웃 파일이 렌더링되는지 여부를 알 수 있도록해야합니다. – GSTAR

+0

방금 ​​질문을 수정했습니다. 이제는 더 이해가됩니다. – GSTAR

+0

사실 나는 그것이 반대 일 필요가 있다고 생각합니다. GET 변수가 수신되면 라이트 박스 호출입니다. URL은 수동으로 입력 할 수 있으므로이 경우 레이아웃에 표시해야합니다. 따라서 클릭 이벤트를 확인할 필요가 없습니다. – GSTAR

0

게시 한 데모 사이트가 사용하고있는 기능과 동일한 기능이 필요한 경우이 방법은 쉽게 구현할 수 있지만 사이트에서 팝업 및 독립형 이미지 페이지에 동일한 URL을 사용하고 있지 않습니다.

Firebug 콘솔이 열려있는 썸네일을 클릭하면 이미지가 다른 URL로 전송됩니다. 이는 명백한 행동입니다. http://www.starnow.co.uk/profile/PhotosTrackView.aspx?photo_id=2129864

링크가 가리키는 있지만 :의 경우,

당신이 당신의 링크가 올바른 이미지를 표시해야한다 참조

http://www.starnow.co.uk/KimberleyMarren/photos/2129864/

페이지 JS는 브라우징을하지 못하게하거나 오른쪽 클릭을합니다 (d) JS를 사용하여 링크 기본 비헤이비어 (이미지 페이지로 리디렉션)를 무시합니다.

예를 들어 당신이 레이아웃/페이지, 이것은 href 표기 이미지 생성하는 방법을 가질 수 있도록; 유사한 메소드 (ajax 사용)를 호출하기 위해 링크의 click 이벤트를 오버라이드하지만 이번에는 이미지 자체를 검색하여 라이트 박스에서 사용합니다.

+0

안녕하세요 ifaour - 실제로 AJAX 요청이 사진의 조회수를 업데이트한다고 생각합니다. 이미지 데이터를 가져 오는 것이 아니라고 생각합니다. – GSTAR

+0

@GSTAR - 사실, 아약스 요청은 이미지를 검색하지 않습니다. 그러나 여전히'onclick'은 lightbox img 태그'src' 속성을 생성하는'switchPhoto (photo_id)'를 호출합니다 :'photo.src = 'http : // – ifaour

+0

기본적으로 우리는 여전히 동일한 접근 방법에 대해 말하고 있습니다 : 1) 이미지 페이지로 연결되는 링크, 2) '이미지 폴더' click' 이벤트 라이트 박스에 표시 할 원시 이미지를 얻고 실제로 이미지 페이지로 이동하지 못하게합니다. – ifaour