cbeaudry1
asked on
Setting conditional regions on PHP slideshow
The following thread contains a neat little PHP function that will allow a slide show of pictures contained within a directory. The problem is that the first picture displays the "previous" link as well as the last picture displaying "next" The thread is located at https://www.experts-exchange.com/questions/20860190/Simple-PHP-array-for-a-folder-of-JPG's.html?query=php+slide+show&clearTAFilter=true
My question is how to get those links to create either a loop, so that clicking "previous" while viewing the first pic will take you to the last one OR how to set a conditional region on those links if they happen to be on the first or last picture.
Here's my current code:
$dir = @opendir("./slideshow");
$x = 0;
while( $file = @readdir($dir) )
{
if( preg_match("/^\.$/", $file) || preg_match("/^\.\.$/", $file) )
{
//do nothing :)
}
else
{
$image[$x] = $file;
$x++;
}
}
@closedir($dir);
$key = ( isset($_GET['next']) ) ? $_GET['next'] : 0;
$prev_id = $key - 1;
$next_id = $key + 1;
echo "<center><img src=\"slideshow/" . $image[$key] . "\">\n<br>\n<br>\n";
echo "<a href=\"" . $PHP_SELF . "?next=" . $prev_id . "\" class=mainlink>Previous Image</a>\n";
echo " & nbsp;\n";
echo "<a href=\"" . $PHP_SELF . "?next=" . $next_id . "\" class=mainlink>Next Image</a>\n";
echo "</center>\n";
My question is how to get those links to create either a loop, so that clicking "previous" while viewing the first pic will take you to the last one OR how to set a conditional region on those links if they happen to be on the first or last picture.
Here's my current code:
$dir = @opendir("./slideshow");
$x = 0;
while( $file = @readdir($dir) )
{
if( preg_match("/^\.$/", $file) || preg_match("/^\.\.$/", $file) )
{
//do nothing :)
}
else
{
$image[$x] = $file;
$x++;
}
}
@closedir($dir);
$key = ( isset($_GET['next']) ) ? $_GET['next'] : 0;
$prev_id = $key - 1;
$next_id = $key + 1;
echo "<center><img src=\"slideshow/" . $image[$key] . "\">\n<br>\n<br>\n";
echo "<a href=\"" . $PHP_SELF . "?next=" . $prev_id . "\" class=mainlink>Previous Image</a>\n";
echo " &
echo "<a href=\"" . $PHP_SELF . "?next=" . $next_id . "\" class=mainlink>Next Image</a>\n";
echo "</center>\n";
Also you may want to add code for FIRST/LAST image:
echo "<a href=\"" . $PHP_SELF . "?next=1\" class=mainlink>First Image</a>\n";
echo "<a href=\"" . $PHP_SELF . "?next=" . $x . "\" class=mainlink>Last Image</a>\n";
echo "<a href=\"" . $PHP_SELF . "?next=1\" class=mainlink>First Image</a>\n";
echo "<a href=\"" . $PHP_SELF . "?next=" . $x . "\" class=mainlink>Last Image</a>\n";
ASKER
I'm more of a newbie at PHP. I usually program in ASP...
I'm running into a problem where the first image will only show up when there's no querystring at the end of the URL. Otherwise, I get a broken link that doesn't have an image file name when I hit the first image.
The loop works fine except when it gets to that first image.
Do I need to assign specific values to $key and $x?
I'm running into a problem where the first image will only show up when there's no querystring at the end of the URL. Otherwise, I get a broken link that doesn't have an image file name when I hit the first image.
The loop works fine except when it gets to that first image.
Do I need to assign specific values to $key and $x?
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Works like a charm. Thanks!
peyox:
I have this working but after the second image, all I get are broken image icons.
I know this question is closed so I am willing to open a new question to trouble shoot this.
here is my URL:
http://www.akersdesignrender.com/photoscript.php
I have all the images in a folder call "slideshow"
-- Dan
I have this working but after the second image, all I get are broken image icons.
I know this question is closed so I am willing to open a new question to trouble shoot this.
here is my URL:
http://www.akersdesignrender.com/photoscript.php
I have all the images in a folder call "slideshow"
-- Dan
Hi Dan,
How does your directory structure looks like?
You probably have folder(s) in it.
Try to put all images in one folder, without subfolder, because that simple function doesn't check whenever "file" is a folder or not.
Let me know if you have any problems.
Cheers,
peyox
How does your directory structure looks like?
You probably have folder(s) in it.
Try to put all images in one folder, without subfolder, because that simple function doesn't check whenever "file" is a folder or not.
Let me know if you have any problems.
Cheers,
peyox
This is what I have:
/slideshow/name_of_image.j pg (no sub folders here)
/photoscript.php/slideshow /name_of_i mage.jpg
/ = root of site
/slideshow/name_of_image.j
/photoscript.php/slideshow
/ = root of site
Add this line
print_r ($image);
after
@closedir($dir);
I want to see have these files' names look like.
What is "C" in your folder?
http://www.akersdesignrender.com/slideshow/C
Let me know when ready
print_r ($image);
after
@closedir($dir);
I want to see have these files' names look like.
What is "C" in your folder?
http://www.akersdesignrender.com/slideshow/C
Let me know when ready
ok, try it now. I am not sure what you mean by "C"
http://akersdesignrender.com/photoscript.php
-- dan
http://akersdesignrender.com/photoscript.php
-- dan
Ok, I see....
You have register globals ON in your php.ini file. When entering to the script $image variable is already set... this couses the problem.
Change the variable name $image[] to $image_list[] in the following lines:
$image_list[++$noOfImages] = $file;
echo "<img src=\"slideshow/" . $image_list[$imageid] . "\">\n<br>\n<br>";
This will solve the problem.
I would also recommend you to turn off register global in php.ini!
Cheers,
peyox
You have register globals ON in your php.ini file. When entering to the script $image variable is already set... this couses the problem.
Change the variable name $image[] to $image_list[] in the following lines:
$image_list[++$noOfImages]
echo "<img src=\"slideshow/" . $image_list[$imageid] . "\">\n<br>\n<br>";
This will solve the problem.
I would also recommend you to turn off register global in php.ini!
Cheers,
peyox
Article about register globals... and related problems :)
http://us4.php.net/register_globals
--
peyox
http://us4.php.net/register_globals
--
peyox
yes that works!
I have no control over the php.ini file, it's hosted at a commercial hosting company.
thanks!
I have no control over the php.ini file, it's hosted at a commercial hosting company.
thanks!
$x - number of pictures
INIFINITE LOOP:
Simple coditional statements will do the job:
$prev_id = $key>1 ? $key-1 : $x;
$next_id = $key<$x ? $key+1 : 1;
BLOCKING PREVIOUS/NEXT LINKS:
if ($prev_id>0) // added line
echo "<a href=\"" . $PHP_SELF . "?next=" . $prev_id . "\" class=mainlink>Previous Image</a>\n";
echo " &
if ($next_id<=$x) // added line
echo "<a href=\"" . $PHP_SELF . "?next=" . $next_id . "\" class=mainlink>Next Image</a>\n";
echo "</center>\n";