Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   PHP и jquery (https://javascript.ru/forum/jquery/29694-php-i-jquery.html)

jeysmook 07.07.2012 17:27

PHP и jquery
 
Есть модальное окно, и есть php функция для просмотра картинок. Проблема в том , что я не могу их никак соединить ...
Мне нужно, чтобы в модальном окне выводилась фотка на которую кликнули. А при клики на фотку в модальном окне выводилась следующая картинка и т.д. Это аналогично Вконтакте.
http://vk.com/id64969895?z=photo64969895_283837685%2Falbum649698 95_0%2Frev
------------------------------------------------------------------
//php функция переключает фотки
$photo_id = $_GET['photo'];
	echo'<div class="album">';
	for($i=1; $i<25; $i++){
		 echo'<a href="photos.php?photo='.$i.'" name="window"><img src="photos/mini/'.$i.'.jpg" /></a>';		 
 	}
	echo'</div>';
	echo $photo_id;
	function photo_gallery($id, $max){
		$next = $id+1;
		$window_skillet = '
			<div class="window">'.
				'<div class="conteiner_content">'.
					'<div class="conteiner_info">'.
							'<a href="photos.php" class="close"></a>'.
					'</div>'.
					'<div class="content">'.
						'<div><a href="photos.php?photo='.$next.'"><img src="photos/'.$id.'.jpg" /></a></div>'.
					'</div>'.
				'</div>'.
			'</div>		
		';
		if($id>$max-1){echo'<div class="window"><a href="photos.php?photo=1">Начать заново</a></div>';}
		elseif($id==0){echo'<div class="window" style="display:none;"></div>';}
		else{echo $window_skillet;}
	}
	photo_gallery($photo_id, $i);

//javascript модальное окно
$(document).ready(function(){
	$('a[name=window]').click(function(){
		var id = $(this).attr('href');
		var content = $(id).html();
		var get_window = function(){
			var structure_window = 
							'<div class="window">'+
								'<div class="conteiner_content">'+
									'<div class="conteiner_info">'+
											'<a href="" class="close"></a>'+
											'Изображение '+id+
									'</div>'+
									'<div class="content" style="display:block;">'+
										'<div>'+content+'</div>'+
									'</div>'+
								'</div>'+
							'</div>';
			return structure_window;
		}
		$('body').prepend(get_window());
		$('.window').fadeIn();
		if($('.conteiner_content').height()+60>=$(window).height()){
			$('body').css({'overflow':'hidden','padding-right':'17px'});
		} else{
			$('body').css({'overflow':'auto'});
		}
		return false;	
	});
	$('.close').live('click', function(){		
		$('.window').remove();
		$('body').css({'overflow':'auto','padding':'0'});
		return false;
	});
});

zlodeeev 11.07.2012 21:24

Вот так, но только надо бы photo.php подправить, флаг например добавить, чтобы если был клик по миниатюре - передавалось одно значение флага и соответсвенно выполнялась функция возвращающая ту самую структуру
$window_skillet = '
			<div class="window">'.
				'<div class="conteiner_content">'.
					'<div class="conteiner_info">'.
							'<a href="photos.php" class="close"></a>'.
					'</div>'.
					'<div class="content">'.
						'<div><a href="photos.php?photo='.$next.'"><img src="photos/'.$id.'.jpg" [B]class="big"[/B]/></a></div>'.
					'</div>'.
				'</div>'.
			'</div>		
		';


И аяксом подтянуть необходимое изображение вместе со структурой:

$.post("photos.php", { photo: $(this).attr('id')}    
function(data) {
     var structure_window = data;
   });


В итоге получим нечто подобное:
$(document).ready(function(){
	$('a[name=window]').click(function(){
		var id = $(this).attr('href');
		var content = $(id).html();
		var get_window = function(){
                $.post("photos.php", { photo: $(this).attr('id')}    
                function(data) {
                  var structure_window = data;
                });
		$('body').prepend(get_window());
		$('.window').fadeIn();
		if($('.conteiner_content').height()+60>=$(window).height()){
			$('body').css({'overflow':'hidden','padding-right':'17px'});
		} else{
			$('body').css({'overflow':'auto'});
		}
		return false;	
	});

        $('.big').click(function(){
           $.post("photos.php", { photo: $(this).attr('id')}    
             function(data) {
                $('div.window').html = data;
              });
        });

	$('.close').live('click', function(){		
		$('.window').remove();
		$('body').css({'overflow':'auto','padding':'0'});
		return false;
	});


});

jeysmook 12.07.2012 09:14

zlodeeev, я просто не пойму, как мне GET из php поместить в модальное окно на jquery. Просто страница перезагружается и jquery начинает работу заново. Если можно то принцип объясните.

zlodeeev 12.07.2012 11:49

jeysmook,
Функция $.post() - передает параметры php файлу и ждет ответа переданного от него обратно. По сути,е сли пофантазировать, то можно представить, что не пользователь открывает страничку photo.php, а сам браузер незаметно от пользователя.

Вот мы и делаем
$.post("photos.php", { 
    photo: $(this).attr('id')}   // открываем photo.php?photo=*id фотографии, по которой был клик*
    function(data) { // после передачи запускаем функцию, в качестве ответа от photo.php будет переменная data
        $('div.window').html = data; // запихиваем, по сути всю страничку photo.php?photo=*id* в блок div.window
    }
);


Т.е. мы вставляем страницу photo.php в ту часть кода, где это нам необходимо, осталось только сделать photo.php таким образом, чтобы он выводил только структуру попапа вместе с самой картинкой и ссылкой на следующую, что у вас уже сделано.

jeysmook 13.07.2012 17:09

zlodeeev,
Спасибо большое , буду разбираться, по мере разбора буду задавать вопрос в этой теме )


Часовой пояс GMT +3, время: 11:08.