You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
176 lines
4.4 KiB
PHTML
176 lines
4.4 KiB
PHTML
2 years ago
|
<?php
|
||
|
/*
|
||
|
PHP image slideshow - auto version - PHP > 5.0
|
||
|
*/
|
||
|
// set the absolute path to the directory containing the images
|
||
|
define('IMGDIR', '/home/members/jelkner/sites/elkner.net/users/jelkner/web/heleneyoung/slideshow/photos/');
|
||
|
// same but for www
|
||
|
define('WEBIMGDIR', 'https://elkner.net/heleneyoung/slideshow/photos/');
|
||
|
// set session name for slideshow "cookie"
|
||
|
define('SS_SESSNAME', 'slideshow_sess');
|
||
|
// global error variable
|
||
|
$err = '';
|
||
|
// start img session
|
||
|
session_name(SS_SESSNAME);
|
||
|
session_start();
|
||
|
// init slideshow class
|
||
|
$ss = new slideshow($err);
|
||
|
if (($err = $ss->init()) != '')
|
||
|
{
|
||
|
header('HTTP/1.1 500 Internal Server Error');
|
||
|
echo $err;
|
||
|
exit();
|
||
|
}
|
||
|
// get image files from directory
|
||
|
$ss->get_images();
|
||
|
// set variables, done.
|
||
|
list($curr, $caption, $first, $prev, $next, $last) = $ss->run();
|
||
|
/*
|
||
|
slideshow class, can be used stand-alone
|
||
|
*/
|
||
|
class slideshow
|
||
|
{
|
||
|
private $files_arr = NULL;
|
||
|
private $err = NULL;
|
||
|
|
||
|
public function __construct(&$err)
|
||
|
{
|
||
|
$this->files_arr = array();
|
||
|
$this->err = $err;
|
||
|
}
|
||
|
public function init()
|
||
|
{
|
||
|
// run actions only if img array session var is empty
|
||
|
// check if image directory exists
|
||
|
if (!$this->dir_exists())
|
||
|
{
|
||
|
return 'Error retrieving images, missing directory';
|
||
|
}
|
||
|
return '';
|
||
|
}
|
||
|
public function get_images()
|
||
|
{
|
||
|
// run actions only if img array session var is empty
|
||
|
if (isset($_SESSION['imgarr']))
|
||
|
{
|
||
|
$this->files_arr = $_SESSION['imgarr'];
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if ($dh = opendir(IMGDIR))
|
||
|
{
|
||
|
while (false !== ($file = readdir($dh)))
|
||
|
{
|
||
|
if (preg_match('/^.*\.(jpg|jpeg|gif|png)$/i', $file))
|
||
|
{
|
||
|
$this->files_arr[] = $file;
|
||
|
}
|
||
|
}
|
||
|
closedir($dh);
|
||
|
}
|
||
|
$_SESSION['imgarr'] = $this->files_arr;
|
||
|
}
|
||
|
}
|
||
|
public function run()
|
||
|
{
|
||
|
$curr = 1;
|
||
|
$last = count($this->files_arr);
|
||
|
if (isset($_GET['img']))
|
||
|
{
|
||
|
if (preg_match('/^[0-9]+$/', $_GET['img'])) $curr = (int) $_GET['img'];
|
||
|
if ($curr <= 0 || $curr > $last) $curr = 1;
|
||
|
}
|
||
|
if ($curr <= 1)
|
||
|
{
|
||
|
$prev = $curr;
|
||
|
$next = $curr + 1;
|
||
|
}
|
||
|
else if ($curr >= $last)
|
||
|
{
|
||
|
$prev = $last - 1;
|
||
|
$next = $last;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$prev = $curr - 1;
|
||
|
$next = $curr + 1;
|
||
|
}
|
||
|
// line below sets the caption name...
|
||
|
$caption = str_replace('-', ' ', $this->files_arr[$curr - 1]);
|
||
|
$caption = str_replace('_', ' ', $caption);
|
||
|
$caption = preg_replace('/\.(jpe?g|gif|png)$/i', '', $caption);
|
||
|
$caption = ucfirst($caption);
|
||
|
return array($this->files_arr[$curr - 1], $caption, 1, $prev, $next, $last);
|
||
|
}
|
||
|
private function dir_exists()
|
||
|
{
|
||
|
return file_exists(IMGDIR);
|
||
|
}
|
||
|
}
|
||
|
?>
|
||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||
|
<head>
|
||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||
|
<title>Slideshow</title>
|
||
|
<style type="text/css">
|
||
|
body {
|
||
|
margin: 0;
|
||
|
padding: 0;
|
||
|
background-color: #ADD8E6;
|
||
|
font: 100% Verdana, Arial, Helvetica, sans-serif;
|
||
|
font-size: 14px;
|
||
|
}
|
||
|
.gallery {
|
||
|
border: 1px #ccc solid;
|
||
|
background-color: #FFFFFF;
|
||
|
max-width: 600px;
|
||
|
margin: 0 auto;
|
||
|
padding: 40px;
|
||
|
text-align: center;
|
||
|
}
|
||
|
.gallery .gallery-nav {
|
||
|
margin-bottom: 40px;
|
||
|
}
|
||
|
.gallery .gallery-nav a:first-child {
|
||
|
margin-right: 10px;
|
||
|
}
|
||
|
.gallery .gallery-nav a:last-child {
|
||
|
margin-left: 10px;
|
||
|
}
|
||
|
.gallery .gallery-image img {
|
||
|
max-width: 100%;
|
||
|
height: auto;
|
||
|
}
|
||
|
.gallery .gallery-image-label {
|
||
|
color: #777;
|
||
|
}
|
||
|
a {
|
||
|
color: #333;
|
||
|
}
|
||
|
a:hover {
|
||
|
color: #cc0000;
|
||
|
}
|
||
|
.sp {
|
||
|
padding-right: 40px;
|
||
|
}
|
||
|
</style>
|
||
|
</head>
|
||
|
<body>
|
||
|
<div class="gallery">
|
||
|
<div class="gallery-nav">
|
||
|
<a href="?img=<?=$first;?>">First</a>
|
||
|
<a href="?img=<?=$prev;?>">Previous</a>
|
||
|
<span class="sp"></span>
|
||
|
<a href="?img=<?=$next;?>">Next</a>
|
||
|
<a href="?img=<?=$last;?>">Last</a>
|
||
|
</div>
|
||
|
<div class="gallery-image">
|
||
|
<img src="<?=WEBIMGDIR;?><?=$curr;?>" alt="" />
|
||
|
</div>
|
||
|
<p class="gallery-image-label"><?=$caption;?></p>
|
||
|
</div>
|
||
|
</body>
|
||
|
</html>
|