rotating top banner smf 2.0

Started by aarbee, July 10, 2011, 10:03:57 AM

Previous topic - Next topic

aarbee

I have been trying to make the top banner (the one in body background image), to rotate.
Taking the code from my SMF 1.1.13 did not work.

I tried this:
// The ?fin11 part of this link is just here to make sure browsers dont cache it wrongly.

$numcss = 5 ; // # of css
$random = rand(1,$numcss);

                                        $cssran = array();

                        $cssran[1] = "style1.css";
                        $cssran[2] = "style2.css";
                        $cssran[3] = "style3.css";
$cssran[4] = "style4.css";
$cssran[5] = "style5.css";
echo '
        <link rel="stylesheet" type="text/css" href="', $settings['theme_url'], '/', $cssran[$random] , '?fin11" />


And this:

$banners = array(
   'http://www.domain.com/forum/bannerimages/1.jpg',
   'http://www.domain.com/forum/bannerimages/2.jpg',',
   'http://www.domain.com/forum/bannerimages/3.jpg',',
   'http://www.domain.com/forum/bannerimages/4.jpg',',
   'http://www.domain.com/forum/bannerimages/5.jpg',',
);

<style type="text/css">
body
{
background: #000 url(echo '<img src="', $banners[rand(0, count($banners) - 1)], '" alt="" />';) no-repeat 50% 0;
font: 78%/130% "Verdana", "Arial", "Helvetica", sans-serif;
margin: 0 auto;
padding: 15px 0;
}
</style>


Both things result in showing no stylesheet, when used in ModerationCenter.template.php
Or showing totally empty page when used in index.template.php

Where do I have to place to scripts to make it work?


dunczyk

If its only for the Banner try using the phpscript I have posted at the bottom of the page.

Create a folder in your image directory called 'banner' or something you find fit
Copy/paste the phpscript below into a file called 'random.php' and put it in that folder
Put all your banners in the folder you created
In when you want to display the images just link the file like you would link an image.

Code (CSS example) Select

.toplogo_banner{
background-image: url(../images/banner/random.php);
width:2000px;
height:127px;
}


Code (HTML example) Select

<img src="../images/random.php" width="2000" height="127" />


Remember to set the extensions of your images in the file :)

I am not the author of this, I found some years ago. All credit should go to the original creator

Code (The script) Select


<?php

/*

AUTOMATIC IMAGE ROTATOR
Version 2.2 - December 4, 2003
Copyright (c) 2002-2003 Dan P. Benjamin, Automatic, Ltd.
All Rights Reserved.

http://www.hiveware.com/imagerotator.php

http://www.automaticlabs.com/


DISCLAIMER
Automatic, Ltd. makes no representations or warranties about
the suitability of the software, either express or
implied, including but not limited to the implied
warranties of merchantability, fitness for a particular
purpose, or non-infringement. Dan P. Benjamin and Automatic, Ltd.
shall not be liable for any damages suffered by licensee
as a result of using, modifying or distributing this
software or its derivatives.


ABOUT
This PHP script will randomly select an image file from a
folder of images on your webserver.  You can then link to it
as you would any standard image file and you'll see a random
image each time you reload.

When you want to add or remove images from the rotation-pool,
just add or remove them from the image rotation folder.


VERSION CHANGES
Version 1.0
- Release version

Version 1.5
- Tweaked a few boring bugs

Version 2.0
- Complete rewrite from the ground-up
- Made it clearer where to make modifications
- Made it easier to specify/change the rotation-folder
- Made it easier to specify/change supported image types
- Wrote better instructions and info (you're them reading now)
- Significant speed improvements
- More error checking
- Cleaner code (albeit more PHP-specific)
- Better/faster random number generation and file-type parsing
- Added a feature where the image to display can be specified
- Added a cool feature where, if an error occurs (such as no
 images being found in the specified folder) *and* you're
 lucky enough to have the GD libraries compiled into PHP on
 your webserver, we generate a replacement "error image" on
 the fly.

   Version 2.1
       - Updated a potential security flaw when value-matching
         filenames

   Version 2.2
       - Updated a few more potential security issues
       - Optimized the code a bit.
       - Expanded the doc for adding new mime/image types.

       Thanks to faithful ALA reader Justin Greer for
       lots of good tips and solid code contribution!


INSTRUCTIONS
1. Modify the $folder setting in the configuration section below.
2. Add image types if needed (most users can ignore that part).
3. Upload this file (rotate.php) to your webserver.  I recommend
  uploading it to the same folder as your images.
4. Link to the file as you would any normal image file, like this:

<img src="http://example.com/rotate.php">

5. You can also specify the image to display like this:

<img src="http://example.com/rotate.php?img=gorilla.jpg">

This would specify that an image named "gorilla.jpg" located
in the image-rotation folder should be displayed.

That's it, you're done.

*/




/* ------------------------- CONFIGURATION -----------------------


Set $folder to the full path to the location of your images.
For example: $folder = '/user/me/example.com/images/';
If the rotate.php file will be in the same folder as your
images then you should leave it set to $folder = '.';

*/


$folder = '.';


/*

Most users can safely ignore this part.  If you're a programmer,
keep reading, if not, you're done.  Go get some coffee.

   If you'd like to enable additional image types other than
gif, jpg, and png, add a duplicate line to the section below
for the new image type.

Add the new file-type, single-quoted, inside brackets.

Add the mime-type to be sent to the browser, also single-quoted,
after the equal sign.

For example:

PDF Files:

$extList['pdf'] = 'application/pdf';

   CSS Files:

       $extList['css'] = 'text/css';

   You can even serve up random HTML files:

   $extList['html'] = 'text/html';
   $extList['htm'] = 'text/html';

   Just be sure your mime-type definition is correct!

*/

   
$extList = array();
$extList['gif'] = 'image/gif';
$extList['jpg'] = 'image/jpeg';
$extList['jpeg'] = 'image/jpeg';
$extList['png'] = 'image/png';


// You don't need to edit anything after this point.


// --------------------- END CONFIGURATION -----------------------

$img = null;

if (
substr($folder,-1) != '/') {
$folder = $folder.'/';
}

if (isset(
$_GET['img'])) {
$imageInfo = pathinfo($_GET['img']);
if (
   isset( $extList[ strtolower( $imageInfo['extension'] ) ] ) &&
       
file_exists( $folder.$imageInfo['basename'] )
   ) {
$img = $folder.$imageInfo['basename'];
}
} else {
$fileList = array();
$handle = opendir($folder);
while ( false !== ( $file = readdir($handle) ) ) {
$file_info = pathinfo($file);
if (
   isset( $extList[ strtolower( $file_info['extension'] ) ] )
) {
$fileList[] = $file;
}
}
closedir($handle);

if (count($fileList) > 0) {
$imageNumber = time() % count($fileList);
$img = $folder.$fileList[$imageNumber];
}
}

if (
$img!=null) {
$imageInfo = pathinfo($img);
$contentType = 'Content-type: '.$extList[ $imageInfo['extension'] ];
header ($contentType);
readfile($img);
} else {
if ( function_exists('imagecreate') ) {
header ("Content-type: image/png");
$im = @imagecreate (100, 100)
   or die ("Cannot initialize new GD image stream");
$background_color = imagecolorallocate ($im, 255, 255, 255);
$text_color = imagecolorallocate ($im, 0,0,0);
imagestring ($im, 2, 5, 5,  "IMAGE ERROR", $text_color);
imagepng ($im);
imagedestroy($im);
}
}

?>


Been using this ever since, still works like a charm :)

tassie73

Anyone tried to add code to make the above script rotate at a set time rather than on refresh?

I have it working like a charm on my site, but would like it to change images every 10-15 seconds.

Thanks for any assistance, in the meantime, I will continue to hunt for a solution!


puaj

Thank you, dunczyk!

This is exactly what I was looking for.  8)

Puaj

FrizzleFried

I follow the instructions above...

I put random.php in to the banner sub folder so I shouldn't have to set a path...

I direct the link for my forum's header to the random.php file...

Nothing... I get this error log generated though:

Quote

[30-Jan-2013 07:54:38 America/Los_Angeles] PHP Warning:  Cannot modify header information - headers already sent by (output started at /home/ahaforum/public_html/Themes/default/images/banners/random.php:2) in /home/ahaforum/public_html/Themes/default/images/banners/random.php on line 192

What am I doing wrong?  I am attempting to randomize/rotate my header/logo ...

Thanks!

All Colours Sam

Check that your random.php file doesnt contain any lines, tabs or spaces before <?php and after ?>

You can do that with a code editor, a text editor won't show empty lines.
Oh, wouldn't it be great if I *was* crazy? ...then the world would be okay
Suki

FrizzleFried

Quote from: Suki on January 30, 2013, 12:07:57 PM
Check that your random.php file doesnt contain any lines, tabs or spaces before <?php and after ?>

You can do that with a code editor, a text editor won't show empty lines.

There was an empty line at the end... it seems to be working now... odd.

Thanks Suki!

mpompiras

Hi guys im new to set up forum... I try to setup my forum and i want that... Rotate Banners. I make .php file and i put the image to same path... But nothing happend can anyone to help me?


Chalky



Advertisement: