Βοήθεια σε script slideshow

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
vassilism
Δημοσιεύσεις: 1952
Εγγραφή: 17 Μαρ 2007 14:47
Επικοινωνία:

Βοήθεια σε script slideshow

Δημοσίευση από vassilism » 10 Οκτ 2009 21:18

Το παρακάτω script είναι ένα module για joomla το οποίο τραβάει όλες τις εικόνες που υπάρχουν σε κάποιο φάκελο και τις παρουσιάζει σε μορφή slideshow.

Πως θα μπορούσα να του βάλω ένα όριο? Δηλαδή να τραβάει έναν συγκεκριμένο αριθμό από εικόνες?

Κώδικας: Επιλογή όλων

$imagePath 	= cleanDir($params->get( 'imagePath', 'images/stories/fruit' ));
$showCaption 	= $params->get( 'showCaption', 1 );
$showTitleCaption 	= $params->get( 'showTitleCaption', 1 );
$heightCaption = $params->get('heightCaption', 45);
$width = $params->get( 'width', 400 );
$height = $params->get( 'height', 300 );
$altTag = $params->get( 'altTag', 'Slideshow' );
$imageDuration = $params->get( 'imageDuration', 9000 );
$transDuration = $params->get( 'transDuration', 2000);
$transType = $params->get( 'transType', 'combo');
$transition = $params->get( 'transition', 'Expo.easeOut');
$pan = $params->get( 'pan', 50);
$zoom = $params->get( 'zoom', 50);
$loadingDiv = $params->get( 'loadingDiv', 1);
$jslib = $params->get( 'jslib', 1);
$sortCriteria = $params->get( 'sortCriteria', 0);
$sortOrder = $params->get( 'sortOrder', 'asc');
$sortOrderManual = $params->get( 'sortOrderManual', '');
$imageResize = $params->get( 'imageResize', 1);
$titleSize = $params->get( 'titleSize', '13px');
$titleColor = $params->get( 'titleColor', '#fff');
$descSize = $params->get( 'descSize', '11px');
$descColor = $params->get( 'descColor', '#ccc');

if (trim($sortOrderManual) != "")
	$images = explode(",", $sortOrderManual);
else
	$images = imageList($imagePath, $sortCriteria, $sortOrder);
	
if (count($images) > 0) {
	if ($jslib == 1) {
		echo '<script src="modules/rokslideshow/mootools.js" type="text/javascript"></script>' . "\n";
	&#125;
  echo '<script src="modules/rokslideshow/slideshow.js" type="text/javascript"></script>' . "\n";
?>
	<div id="slidewrap">
	<div id="slideshow"></div>
	<div id="loadingDiv"></div>
	</div>
	<script type="text/javascript">
		window.addEvent&#40;'load', function&#40;&#41;&#123;
				var imgs = &#91;&#93;;

				<?php foreach&#40;$images as $img&#41; &#123; 
					$info = getInfo&#40;$imagePath, $img&#41;;
					?>
					imgs.push&#40;&#123;
						file&#58; '<?php echo $img; ?>',
						<?php if &#40;$showCaption==1&#41; &#123; ?>
						title&#58; '<?php echo&#40;trim&#40;$info&#91;0&#93;&#41;&#41;; ?>',
						desc&#58; '<?php echo&#40;trim&#40;$info&#91;2&#93;&#41;&#41;; ?>',
						url&#58; '<?php echo&#40;trim&#40;$info&#91;1&#93;&#41;&#41;; ?>'
					  <?php &#125; else &#123; ?>
						title&#58; '',
						desc&#58; '',
						url&#58; ''
						<?php &#125; ?>
					&#125;&#41;;
				<?php &#125; ?>
				
				var myshow = new Slideshow&#40;'slideshow', &#123; 
					type&#58; '<?php echo $transType; ?>',
					showTitleCaption&#58; <?php echo $showTitleCaption; ?>,
					captionHeight&#58; <?php echo $heightCaption; ?>,
					width&#58; <?php echo $width; ?>, 
					height&#58; <?php echo $height; ?>, 
					pan&#58; <?php echo $pan; ?>,
					zoom&#58; <?php echo $zoom; ?>,
					loadingDiv&#58; <?php echo $loadingDiv; ?>,
					resize&#58; <?php echo&#40;$imageResize==1?'true'&#58;'false'&#41;; ?>,
					duration&#58; &#91;<?php echo $transDuration; ?>, <?php echo $imageDuration; ?>&#93;,
					transition&#58; Fx.Transitions.<?php echo $transition; ?>,
					images&#58; imgs, 
					path&#58; '<?php echo $imagePath; ?>'
				&#125;&#41;;
				
				myshow.caps.h2.setStyles&#40;&#123;
					color&#58; '<?php echo $titleColor; ?>',
					fontSize&#58; '<?php echo $titleSize; ?>'
				&#125;&#41;;
				myshow.caps.p.setStyles&#40;&#123;
					color&#58; '<?php echo $descColor; ?>',
					fontSize&#58; '<?php echo $descSize; ?>'
				&#125;&#41;;
			&#125;&#41;;
		</script>
<?php
&#125;

//helper functions
function imageList &#40;$directory, $sortcriteria, $sortorder&#41; &#123;
    $results = array&#40;&#41;;
    $handler = opendir&#40;$directory&#41;;
		$i = 0;
    while &#40;$file = readdir&#40;$handler&#41;&#41; &#123;
        if &#40;$file != '.' && $file != '..' && isImage&#40;$file&#41;&#41; &#123;
					$results&#91;$i&#93;&#91;0&#93; = $file;
					$results&#91;$i&#93;&#91;1&#93; = filemtime&#40;$directory . "/" .$file&#41;;
					$i++;
				&#125;
    &#125;
    closedir&#40;$handler&#41;;

		//these lines sort the contents of the directory by the date
		// Obtain a list of columns
		
		foreach&#40;$results as $res&#41; &#123;
			if &#40;$sortcriteria == 0 &#41; $sortAux&#91;&#93; = $res&#91;0&#93;;
			else $sortAux&#91;&#93; = $res&#91;1&#93;;
		&#125;
		
		if &#40;$sortorder == 0&#41; &#123;
			array_multisort&#40;$sortAux, SORT_ASC, $results&#41;;
		&#125; elseif &#40;$sortorder == 2&#41; &#123;
			srand&#40;&#40;float&#41;microtime&#40;&#41; * 1000000&#41;;
			shuffle&#40;$results&#41;;
		&#125; else &#123;
			array_multisort&#40;$sortAux, SORT_DESC, $results&#41;;
		&#125;
		
		foreach&#40;$results as $res&#41; &#123;
			$sorted_results&#91;&#93; = $res&#91;0&#93;;
		&#125;

    return $sorted_results;
&#125;

function getInfo&#40;$imagePath, $file&#41; &#123;
		global $iso_client_lang;

		$langext = "";
		$fileext= ".txt";
		
		if &#40;isset&#40;$iso_client_lang&#41; && strlen&#40;$iso_client_lang&#41;>1&#41; $langext = "." . $iso_client_lang;

		$file_noext = substr&#40;$file, 0, strrpos&#40;$file,"."&#41;&#41;;
		$info = array&#40;&#41;;

		$infofile = $imagePath . $file_noext . $langext . $fileext;

		if &#40;!file_exists&#40;$infofile&#41;&#41; $infofile = $imagePath . $file_noext . $fileext;
		if &#40;file_exists&#40;$infofile&#41;&#41; &#123;
			$imginfo = file &#40;$infofile&#41;;
			foreach &#40;$imginfo as $line&#41; &#123;
				$info&#91;&#93; = addslashes&#40;$line&#41;;
			&#125;
			return $info;
		&#125;
		return array&#40;'','#',''&#41;;
&#125;

function isImage&#40;$file&#41; &#123;
	$imagetypes = array&#40;".jpg", ".jpeg", ".gif", ".png"&#41;;
	$extension = substr&#40;$file,strrpos&#40;$file,"."&#41;&#41;;
	if &#40;in_array&#40;$extension, $imagetypes&#41;&#41; return true;
	else return false;
&#125;

function cleanDir&#40;$dir&#41; &#123;
	if &#40;substr&#40;$dir, -1, 1&#41; == '/'&#41;
		return $dir;
	else
		return $dir . "/";
&#125;

Άβαταρ μέλους
Basilakis
PHP Moderator
Δημοσιεύσεις: 8575
Εγγραφή: 17 Νοέμ 2003 13:03
Τοποθεσία: Womans' Brain
Επικοινωνία:

Βοήθεια σε script slideshow

Δημοσίευση από Basilakis » 10 Οκτ 2009 22:24

Έχω παίξει μαζί του και στο manual δεν είχε κάτι όταν έψαχνα κάτι παρόμοιο... η λύση (στα γρήγορα χωρίς πολλά πολλά) είναι να κάνεις έναν άλλο φάκελο με τις φωτογραφίες και να το δουλέψεις έτσι...

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6237
Εγγραφή: 30 Νοέμ 2004 03:09

Βοήθεια σε script slideshow

Δημοσίευση από fafos » 10 Οκτ 2009 23:30

se auton ton kodika:

Κώδικας: Επιλογή όλων

function imageList &#40;$directory, $sortcriteria, $sortorder&#41; &#123;
    $results = array&#40;&#41;;
    $handler = opendir&#40;$directory&#41;;
      $i = 0;
    while &#40;$file = readdir&#40;$handler&#41;&#41; &#123;
        if &#40;$file != '.' && $file != '..' && isImage&#40;$file&#41;&#41; &#123;
               $results&#91;$i&#93;&#91;0&#93; = $file;
               $results&#91;$i&#93;&#91;1&#93; = filemtime&#40;$directory . "/" .$file&#41;;
               $i++;
            &#125;
    &#125; 
allakse ton me auton:

Κώδικας: Επιλογή όλων

function imageList &#40;$directory, $sortcriteria, $sortorder&#41; &#123;
    $results = array&#40;&#41;;
    $handler = opendir&#40;$directory&#41;;
      $i = 0;
    while &#40;$file = readdir&#40;$handler&#41;&#41; &#123;
        if &#40;$file != '.' && $file != '..' && isImage&#40;$file&#41;&#41; &#123;
if&#40;$i < 10&#41; &#123;
               $results&#91;$i&#93;&#91;0&#93; = $file;
               $results&#91;$i&#93;&#91;1&#93; = filemtime&#40;$directory . "/" .$file&#41;;
&#125;
               $i++;
            &#125;
    &#125; 

den eimai sigouros an einai auth h loopa pou trexei tis eikones... to if($i < 10) shmainei oti tha deixnei mono 10 photo...
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

Άβαταρ μέλους
vassilism
Δημοσιεύσεις: 1952
Εγγραφή: 17 Μαρ 2007 14:47
Επικοινωνία:

Βοήθεια σε script slideshow

Δημοσίευση από vassilism » 11 Οκτ 2009 15:50

Γεια σου ρε πατρίδα με την εμπειρία σου :D

Δυο ώρες παιδευόμουν εχθές με αυτό το πράγμα προσπαθώντας να δώσω αρχική τιμή στην i αλλά είμαι τόσο βλήμα που δεν πρόσεξα ότι ήταν μέσα σε while.

Πότε θα κατέβεις να ρίξω κανά κοψίδι στα κάρβουνα?

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6237
Εγγραφή: 30 Νοέμ 2004 03:09

Βοήθεια σε script slideshow

Δημοσίευση από fafos » 11 Οκτ 2009 17:38

vassilism έγραψε:Γεια σου ρε πατρίδα με την εμπειρία σου :D

Δυο ώρες παιδευόμουν εχθές με αυτό το πράγμα προσπαθώντας να δώσω αρχική τιμή στην i αλλά είμαι τόσο βλήμα που δεν πρόσεξα ότι ήταν μέσα σε while.

Πότε θα κατέβεις να ρίξω κανά κοψίδι στα κάρβουνα?
Katevhka thn Pempth gia na do ena filo pou ekane enxeirish.. epiasa ta xtapodakia mou kai anevhka to vrady athens..
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Βοήθεια σε script slideshow

Δημοσίευση από korgr » 11 Οκτ 2009 17:52

fafos απλα απο δικη μου απορια (δεν το εχω δοκιμασει ποτε)
Αν ο ελεγχος γινοταν μεσα στο while δεν θα γλυτωναμε τους ελεγχους για ολα τα αρχεια του φακελου? Εννοω ασχετα αν action θα ειχαμε μονο για τα πρωτα 10.
Δηλαδη θα μπορουσε να ισχυσει αυτο που ακολουθει?

Κώδικας: Επιλογή όλων

function imageList &#40;$directory, $sortcriteria, $sortorder&#41; &#123;
    $results = array&#40;&#41;;
    $handler = opendir&#40;$directory&#41;;
      $i = 0;
      $counter = 0;
    while &#40;$file = readdir&#40;$handler&#41; && $counter < 10&#41; &#123;
        if &#40;$file != '.' && $file != '..' && isImage&#40;$file&#41;&#41; &#123;
               $results&#91;$i&#93;&#91;0&#93; = $file;
               $results&#91;$i&#93;&#91;1&#93; = filemtime&#40;$directory . "/" .$file&#41;;
               $i++;
               $counter++;
            &#125;
    &#125;

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Βοήθεια σε script slideshow

Δημοσίευση από korgr » 11 Οκτ 2009 17:56

Εννοειται πως η δουλεια μπορει να γινει μονο με την $i
Την $counter την προσεθεσα για να τονισω την λογικη...

Άβαταρ μέλους
vassilism
Δημοσιεύσεις: 1952
Εγγραφή: 17 Μαρ 2007 14:47
Επικοινωνία:

Βοήθεια σε script slideshow

Δημοσίευση από vassilism » 11 Οκτ 2009 18:27

fafos έγραψε:epiasa ta xtapodakia mou kai anevhka to vrady athens..
Μήπως κάνεις παρέα με τον αδερφό μου και δεν το ξέρω? :think:
Και αυτός είχε πάει για χταπόδια την Πέμπτη.
korgr έγραψε:Εννοειται πως η δουλεια μπορει να γινει μονο με την $i
Την $counter την προσεθεσα για να τονισω την λογικη...
Νότη έτσι εννοείς?

Κώδικας: Επιλογή όλων

while &#40;$file = readdir&#40;$handler&#41; && $counter < 10&#41; &#123; 
        if &#40;$file != '.' && $file != '..' && isImage&#40;$file&#41;&#41; &#123; 
               $results&#91;$counter&#93;&#91;0&#93; = $file; 
               $results&#91;$counter&#93;&#91;1&#93; = filemtime&#40;$directory . "/" .$file&#41;; 
               $counter++; 
            &#125; 
    &#125; 
Σωστό πρέπει να είναι.

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Βοήθεια σε script slideshow

Δημοσίευση από korgr » 11 Οκτ 2009 18:31

Ναι Βασιλη, αρκει να μηδενισεις την $counter πριν το while loop
Δεν εχω δοκιμασει ποτε ομως αυτη τη λογικη σε while...
Αν σου δουλεψει και ετσι let us know :D

Άβαταρ μέλους
vassilism
Δημοσιεύσεις: 1952
Εγγραφή: 17 Μαρ 2007 14:47
Επικοινωνία:

Βοήθεια σε script slideshow

Δημοσίευση από vassilism » 11 Οκτ 2009 18:48

korgr έγραψε:Αν σου δουλεψει και ετσι let us know :D
Έκανα ένα test και δεν δουλεύει έτσι.
Μάλλον με αυτό τον τρόπο θα πρέπει να βάλουμε την for.

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Βοήθεια σε script slideshow

Δημοσίευση από korgr » 11 Οκτ 2009 20:08

Τοτε ακολουθουμε την σιγουρη λυση του δασκαλου fafos :D

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6237
Εγγραφή: 30 Νοέμ 2004 03:09

Βοήθεια σε script slideshow

Δημοσίευση από fafos » 11 Οκτ 2009 20:12

H while looparei panta esoterika kai giauon ton logo pairnei panta timh $counter = 0; giati authn thn timh vlepei prin treksei thn routina.. dhladh:


h while:


while(..analysh array...) {

kalei to 1 => typonei to 1

kalei to 2 => typonei to 2

kalei to 3 => typonei to 3

klpklp
}


h for kalei ena ena ta dedomena kai meta kanei print:

for($i=0;$i<count($array); ...kalei to 1...kalei to 2...kalei to 3... klpklp $i++) {
typonei to 1

typonei to 2

typonei to 3

klpklp

}


me liga logia, to parakato tha mas epistrepsei tis 3 protes egrafes kati to opoio h while den mporei na kanei (einai kai pio argh apo tis for kai foreach):

Κώδικας: Επιλογή όλων

<?php

$arr = array&#40;a, b, c, d&#41;;
for&#40;$i=0;$i<=2;$i++&#41;&#123;
    print $arr&#91;$i&#93;."<br>";
&#125;
?>
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

Άβαταρ μέλους
vassilism
Δημοσιεύσεις: 1952
Εγγραφή: 17 Μαρ 2007 14:47
Επικοινωνία:

Βοήθεια σε script slideshow

Δημοσίευση από vassilism » 11 Οκτ 2009 20:39

korgr έγραψε:του δασκαλου fafos :D
Εγώ του το λέω από καιρό, είναι μεγάλος δάσκαλος :D

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Βοήθεια σε script slideshow

Δημοσίευση από korgr » 11 Οκτ 2009 21:07

vassilism έγραψε: Εγώ του το λέω από καιρό, είναι μεγάλος δάσκαλος :D
Αλλα ...μεγαλυτερος ψαρας! :lol:
Που να πει και στους αλλους ψαραδες το μυστικο του (ψαρευει με loop) για μεγαλες ψαριες! :kaloe:

nbc
Honorary Member
Δημοσιεύσεις: 526
Εγγραφή: 05 Σεπ 2009 20:12
Επικοινωνία:

Βοήθεια σε script slideshow

Δημοσίευση από nbc » 11 Οκτ 2009 21:08

Η μόνη διαφορά μεταξύ for και while είναι η δυνατότητα αρχικοποίησης του μετρητή - τίποτε άλλο. Ότι μπορείς να κάνεις με τη μία, κάνεις και με την άλλη.

Απόδειξη (προσέξτε το πανομοιότυπο της συνθήκης):

Κώδικας: Επιλογή όλων

    function print_num_files&#40;$dir, $num, $for&#41;
    &#123;
        $Dir = opendir&#40;$dir&#41;;

        if &#40;$Dir&#41;
        &#123;
            if &#40;$for&#41;
            &#123;
                for &#40;$i = 0; &#40;$file = readdir&#40;$Dir&#41;&#41; && &#40;$i++ < $num&#41;;&#41;
                &#123;
                    echo "$i&#58; $file<br />";
                &#125;
            &#125;
            else
            &#123;
                $i = 0;

                while&#40;&#40;$file = readdir&#40;$Dir&#41;&#41; && &#40;$i++ < $num&#41;&#41;
                &#123;
                    echo "$i&#58; $file<br />";
                &#125;
            &#125;
        &#125;
    &#125;

    print_num_files&#40;dirname&#40;__FILE__&#41;, 10, TRUE&#41;;
    print_num_files&#40;dirname&#40;__FILE__&#41;, 10, FALSE&#41;;
Η πρόταση του korgr δεν δούλεψε λόγω παρενθέσεων:

Αυτό

Κώδικας: Επιλογή όλων

while &#40;$file = readdir&#40;$handler&#41; && $counter < 10&#41;
είναι διαφορετικό από αυτό

Κώδικας: Επιλογή όλων

while &#40;&#40;$file = readdir&#40;$handler&#41;&#41; && &#40;$counter < 10&#41;&#41;

Edit:

Και για να γίνει πιο εμφανής η ομοιότητα,

Αυτό

Κώδικας: Επιλογή όλων

for &#40;$i = 0; &#40;$file = readdir&#40;$Dir&#41;&#41; && &#40;$i++ < $num&#41;;&#41;
μπορεί να γραφτεί και έτσι

Κώδικας: Επιλογή όλων

$i = 0;
for &#40;; &#40;$file = readdir&#40;$Dir&#41;&#41; && &#40;$i++ < $num&#41;;&#41;
Οπότε η διαφορά περιορίζεται σε 2 semicolons!

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης