2013-05-07 3 views
1

Мне действительно нужна помощь здесь! У меня есть страница с изображениями в группах по 1, 2 или 3. Я нажимаю на изображение, и класс отправляется в некоторый jquery-файл ajax для получения id (mysql), после чего он отправляется в php-файл для создания html для изображений, отображаемых на div на моей странице. Этот бит работает нормально, но я пытаюсь использовать плагин galleria, чтобы показать изображение, которое было отправлено, но он просто действует, как galleria, нет! Если я жестко задаю некоторые изображения в погружении. galleria работает так, как должно!Может ли Galleria использоваться с данными ajax?

вот мой project.js файл

// whenever a link with category class is clicked 
$('a.project').click(function(e) { 
// first stop the link to go anywhere 
e.preventDefault(); 
// you can get the text of the link by converting the clicked object to string 
// you something like 'http://mysite/categories/1' 
// there might be other methods to read the link value 
var linkText = new String(this); 
// the value after the last/is the category ID 
var projectvalue = linkText.substring(linkText.lastIndexOf('/') + 1); 
// send the category ID to the showprojects.php script using jquery ajax post method 
// send along a category ID 
// on success insert the returned text into the shownews div 
$.post('../inc/showprojects.php', {project: projectvalue}, function(data) { 
$('#shownews').html(data); 
}); 


}); 

Это мой showproducts.php файл

<?php 
include 'connect.php'; 
// if no project was sent, display some error message 
if(!isset($_POST['project'])) { 
die('No project has been chosen'); 
} 
// cast the project to integer (just a little bit of basic security) 
$project = (int) $_POST['project']; 
// this will be the string that you will return into the shownews div 
$returnHtml = ''; 
$q = "SELECT * FROM projects WHERE id='$project'"; 
if($r = mysql_query($q)) { 
// construct the html to return 
while($row = mysql_fetch_array($r)) { 
    $returnHtml .= "<img src='{$row['filename']}' />"; 
    $returnHtml .= "<img src='{$row['filename1']}' />"; 
    $returnHtml .= "<img src='{$row['filename2']}' />"; 
} 
} 
// display the html (you actually return it this way) 
echo $returnHtml; 
?> 

Это, как я звоню Галериа на DIV

// Load the classic theme 
Galleria.loadTheme('../galleria/themes/classic/galleria.classic.min.js'); 
// Initialize Galleria 
$('#shownews').galleria(); 

Может кто-нибудь мне помочь?

Благодаря

+0

какая ошибка вы получаете ?? –

+0

У меня нет ошибок, изображения добавляются в div, но на div нет галереи! Как я уже сказал, если я жестко рисую изображения в div, то galleria показывается и работает так, как должно! –

ответ

0

Я думаю, вам нужно позвонить Galleria.run после ПРИИХ данных PHP

EDIT: уродливый путь - уничтожить галереи, если уже запущены перед установкой нового изображения в div

if($('#shownews').data('galleria')){$('#shownews').data('galleria').destroy()} //destroy, if allready running 
$.post('../inc/showprojects.php', {project: projectvalue}, function(data) { 
    $('#shownews').html(data); 
    Galleria.run('#shownews'); 
}); 

и удалите $('#shownews').galleria();

EDIT 2: использовать .load апи Galleria, чтобы загрузить новые данные

// whenever a link with category class is clicked 
$('a.project').click(function(e) { 
    // first stop the link to go anywhere 
    e.preventDefault(); 
    // you can get the text of the link by converting the clicked object to string 
    // you something like 'http://mysite/categories/1' 
    // there might be other methods to read the link value 
    var linkText = new String(this); 
    // the value after the last/is the category ID 
    var projectvalue = linkText.substring(linkText.lastIndexOf('/') + 1); 
    // send the category ID to the showprojects.php script using jquery ajax post method 
    // send along a category ID 
    // on success insert the returned text into the shownews div 
    $.post('../inc/showprojects.php', {project: projectvalue}, 
     function(data) { 
      $('#shownews').data('galleria').load(data); 
     },"json" 
    ); 
}); 

PHP

<?php 
include 'connect.php'; 
// if no project was sent, display some error message 
if(!isset($_POST['project'])) { 
    die('No project has been chosen'); 
} 
// cast the project to integer (just a little bit of basic security) 
$project = (int) $_POST['project']; 
// this will be data array that you will return into galleria 
$returnData = array(); 
$q = "SELECT * FROM projects WHERE id='$project'"; 
if($r = mysql_query($q)) { 
    // construct datat object to return 
    while($row = mysql_fetch_array($r)) { 
     $returnData[] = array('image'=>$row['filename']); 
     $returnData[] = array('image'=>$row['filename1']); 
     $returnData[] = array('image'=>$row['filename2']); 
    } 
} 
// return JSON 
echo json_encode($returnData); 
?> 

Galleria INIT: (галерея будет пустым, пока не будет загружать в него данные)

// Load the classic theme 
Galleria.loadTheme('../galleria/themes/classic/galleria.classic.min.js'); 
// Initialize Galleria 
Galleria.run('#shownews'); 
+0

Спасибо за ответ, но это не работает. Он делает то же самое, помещая изображения в div, но не загружая галерею! –

+0

Я стою исправлены. Работает! –

+0

Большое спасибо –

1

попробовать это один

// whenever a link with category class is clicked 
    $('a.project').click(function(e) { 
    // first stop the link to go anywhere 
    e.preventDefault(); 
    // you can get the text of the link by converting the clicked object to string 
    // you something like 'http://mysite/categories/1' 
    // there might be other methods to read the link value 
    var linkText = new String(this); 
    // the value after the last/is the category ID 
    var projectvalue = linkText.substring(linkText.lastIndexOf('/') + 1); 
    // send the category ID to the showprojects.php script using jquery ajax post method 
    // send along a category ID 
    // on success insert the returned text into the shownews div 
    $.ajax({url:'../inc/showprojects.php', 
      type:'POST' , 
      method,async:false , 
      data:{project: projectvalue}, 
      success:function(data) { 
       $('#shownews').html(data); 
     }}); 
Galleria.run('#shownews'); 

}); 
+0

Теперь div отображает мое сообщение о смерти от showprojects.php –

+0

if (! Isset ($ _ POST ['project'])) { die ('Проект не выбран'); } –

+0

добавьте тип: «POST» ключ-значение в запросе $ .ajax. –

0

Попробуйте загрузить галерею после успешного запроса ajax завершено. Делая это, jquery ждет, пока не будет отображено ShowNews, а затем будет запущено galleria.

$.ajax(
    { 
     type: "POST", 
     url:'../inc/showprojects.php', 
     data:{project: projectvalue}, 
     success: function(data) 
     { 
      $('#shownews').html(data); 
     }, 
     complete: function() 
     { 
      Galleria.loadTheme('../galleria/themes/classic/galleria.classic.min.js'); 

      $('#shownews').galleria(); 
     } 
    }); 

Этот метод используется при сборе данных изображения из удаленного источника. Надеюсь это поможет!

+0

Это дает мне эту« Неустранимая ошибка: не удалось извлечь высоту сцены из CSS. Высота трассировки: 0px. ' А также, когда я нажимаю группу изображений, а затем нажимаю другую, она снова показывает мне первую группу изображений! –

+0

Вы уверены, что у вас есть оба, Galleria- {version} .min.js и Galleria CSS импортированы в начало страницы? – drobson

+0

Да и файлы min.js и css импортируются! –

0

Я пробовал этот ответ и другие ответы в Интернете и ничего не работал. Затем я переместил galleria-1.3.5.min.js на родительскую страницу, и это сработало. Какое удивительно простое решение!

Смежные вопросы