Tomasz Krzak

Tomasz Krzak spragniony zmian

Temat: pobieranie nazw pliku z katalogu do skryptu

Witam,
Jako mocno początkujący w temacie js nie potrafię sobie poradzić z poniższym skryptem. A chodzi o to, że chciałbym, aby pobierał on obrazki ze wskazanego katalogu, a nie żebym musiał ręcznie podawać nazwy i ścieżki plików.
Znalazłem kilka rozwiązań i próbowałem wykorzystać funkcje glob czy readdir ale nie wiem czemu - nie działało mi to.
Czy mógłby ktoś na to zerknąć i doradzić jak stworzyć tablicę, z której skrypt będzie korzystał?
(Oryginalny skrypt pochodzi z http://srobbin.com/jquery-plugins/backstretch)

// Create an array of images that you'd like to use
var images = new Array();
images[1] = "img/bg1.jpeg";
images[2] = "img/bg2.jpeg";
images[3] = "img/bg3.jpeg";
images[4] = "img/bg4.jpeg";
images[5] = "img/bg5.jpeg";
images[6] = "img/bg6.jpeg";
images[7] = "img/bg7.jpeg";
images[8] = "img/bg8.jpeg";
images[9] = "img/bg9.jpeg";

Array.prototype.shuffle = function() {
var len = this.length;
var i = len;
while (i--) {
var p = parseInt(Math.random()*len);
var t = this[i];
this[i] = this[p];
this[p] = t;
}
};

images.shuffle();

// A little script for preloading all of the images
// It"s not necessary, but generally a good idea
$(images).each(function(){
$("<img/>")[0].src = this;
});

// The index variable will keep track of which image is currently showing
var index = 0;

// Call backstretch for the first time,
// In this case, I"m settings speed of 500ms for a fadeIn effect between images.
$.backstretch(images[index], {speed: 500});

// Set an interval that increments the index and sets the new image
// Note: The fadeIn speed set above will be inherited
setInterval(function() {
index = (index >= images.length - 1) ? 0 : index + 1;
$.backstretch(images[index]);
}, 5000);

konto usunięte

Temat: pobieranie nazw pliku z katalogu do skryptu

np tak:


<script type="text/javascript">
var images = new Array();<?php

//path to directory to scan
$directory = __DIR__ . '/img/';

//get all image files with a .jpg extension.
$images = glob($directory . "*.jpg");

//print each file name
foreach($images as $image)
{
$path_parts = pathinfo($image);
echo 'images[] = "' . $path_parts['basename'] . '";';
}

?>


// Create an array of images that you'd like to use

Array.prototype.shuffle = function() {
var len = this.length;
var i = len;
while (i--) {
var p = parseInt(Math.random()*len);
var t = this[i];
this[i] = this[p];
this[p] = t;
}
};

images.shuffle();

// A little script for preloading all of the images
// It"s not necessary, but generally a good idea
$(images).each(function(){
$("<img/>")[0].src = this;
});

// The index variable will keep track of which image is currently showing
var index = 0;

// Call backstretch for the first time,
// In this case, I"m settings speed of 500ms for a fadeIn effect between images.
$.backstretch(images[index], {speed: 500});

// Set an interval that increments the index and sets the new image
// Note: The fadeIn speed set above will be inherited
setInterval(function() {
index = (index >= images.length - 1) ? 0 : index + 1;
$.backstretch(images[index]);
}, 5000); </script>


tylko dobrze ustaw $directory,
no i oczywiście lepiej by było jakbyś miał skanowanie katalogu w jakiejś funkcji i tylko ją wywoływał w widoku

konto usunięte

Temat: pobieranie nazw pliku z katalogu do skryptu

Tomasz Krzak:

To co chcesz zrobić jest niemożliwe w client side JavaScript. Możesz pokusić się o rozwiązanie czysto backendowe, np w node.js, albo taki koszmarek jak zapronował Cezary wyżej.
Tomasz Krzak

Tomasz Krzak spragniony zmian

Temat: pobieranie nazw pliku z katalogu do skryptu

Dziękuję za odpowiedź. Zdaję sobie sprawę, że samo js nie załatwi sprawy.

Cezary: dziękuję za skrypt, problem tylko, że u mnie on nie działa - co może być nie tak, że nie skrypt js nie widzi plików (ścieżek, nazw) generowanych przez php?

konto usunięte

Temat: pobieranie nazw pliku z katalogu do skryptu

może masz źle ustawioną ścieżkę do plików graficznych,
wklej wygenerowany kod

Temat: pobieranie nazw pliku z katalogu do skryptu

Tomasz Krzak:
Dziękuję za odpowiedź. Zdaję sobie sprawę, że samo js nie załatwi sprawy.

Cezary: dziękuję za skrypt, problem tylko, że u mnie on nie działa - co może być nie tak, że nie skrypt js nie widzi plików (ścieżek, nazw) generowanych przez php?

Tomek, to oczywiscie przyklad ale czy mniej wiecej o takie cos Ci chodzi: http://slick.pl/wiedza/php/php-dynamiczne-czytanie-zaw... ??

Pzdr.
Tomasz Krzak

Tomasz Krzak spragniony zmian

Temat: pobieranie nazw pliku z katalogu do skryptu

Cezary: ścieżki nie zmieniałem bo katalog z obrazkami to 'img'. Czy mając na myśli wygenerowany kod masz na myśli źródło strony? Bo jeśli tak to wygląda on tak:

<script>
// Create an array of images that you'd like to use
var images = new Array();

Array.prototype.shuffle = function() {
var len = this.length;
var i = len;
while (i--) {
var p = parseInt(Math.random()*len);
var t = this[i];
this[i] = this[p];
this[p] = t;
}
};

images.shuffle();

// A little script for preloading all of the images
// It"s not necessary, but generally a good idea
$(images).each(function(){
$("<img/>")[0].src = this;
});

// The index variable will keep track of which image is currently showing
var index = 0;

// Call backstretch for the first time,
// In this case, I"m settings speed of 500ms for a fadeIn effect between images.
$.backstretch(images[index], {speed: 500});

// Set an interval that increments the index and sets the new image
// Note: The fadeIn speed set above will be inherited
setInterval(function() {
index = (index >= images.length - 1) ? 0 : index + 1;
$.backstretch(images[index]);
}, 5000);
</script>

konto usunięte

Temat: pobieranie nazw pliku z katalogu do skryptu

a co Ci zwraca glob ?

[edit]

masz źle ustawioną ścieżkę, którą przekazujesz do globCezary H. edytował(a) ten post dnia 13.07.12 o godzinie 16:20
Robert P.

Robert P. Senior PHP Developer

Temat: pobieranie nazw pliku z katalogu do skryptu

Najlepiej wziąć i użyć tutaj AJAX-a. Tj pobrać za pomocą np php nazwy plików i zwrócić w JSON lub XML. Następnie dodać to tablicy JS. Samo losowanie też można zrobić już w php za pomocą shuffle(array &$arr). Pobranie plików to użycie iteratora klasy DirectoryIterator. A wyświetlenie wyników w php to json_encode();

Potem w Java S. $.ajax(); i tam jako dataType: "json".

Mam nadzieję, że pomogłem :)
Tomasz Krzak

Tomasz Krzak spragniony zmian

Temat: pobieranie nazw pliku z katalogu do skryptu

Oj, coraz to bardziej skomplikowane się robi... Czy moglibyście mi prosto wyjaśnić o co z tą ścieżką chodzi? Jak ją powinienem zapisać?

konto usunięte

Temat: pobieranie nazw pliku z katalogu do skryptu

Jak ją powinienem zapisać?

Powinieneś mieć ustawioną bezwzględną ścieżkę do katalogu z obrazkami np:

/domains/site.com/public_html/imt_test/img

__DIR__ zwraca ścieżkę do katalogu w którym znajduje się plik php,
czyli plik php w którym masz skrypt powinien być w tym samym katalogu co katalog z obrazkami,
wtedy ten skrypt Ci powinien zadziałać
Tomasz Krzak

Tomasz Krzak spragniony zmian

Temat: pobieranie nazw pliku z katalogu do skryptu

Dzięki Cezary za cierpliwość i rady, jednak niestety nawet podanie bezwzględnej ścieżki nie pomaga i nadal nie widzi obrazów. Próbowałem zarówno na xamppie, jak też wrzuciłem na serwer - efekt ten sam. Już sam nie wiem gdzie leży problem...

konto usunięte

Temat: pobieranie nazw pliku z katalogu do skryptu

Już sam nie wiem gdzie leży problem...

rozszerzenie w glob masz dobre ?
i to chyba ostatni z pomysłów
Maja Miarecki

Maja Miarecki Senior Frontend
Developer

Temat: pobieranie nazw pliku z katalogu do skryptu

Sprawdz jaki src ma obrazek w HTML a jaki powinien miec, zeby sie wyswietlal. Zobacz roznice i w ten sposob wydedukuj co jest nie tak.



Wyślij zaproszenie do