Categories
CodeProject Web Development

Display Featured Links Randomly Using PHP

Use PHP to read a CSV file and automatically generate links for display.
I had a request to add a “Link of the Day” feature to one of the pages on the Law-related Education pages of the OBA website using technology we already have. I’m sure there are widgets out there already that will do this for me, and it may even be built into whatever CMS we deploy next, but I wanted to learn a bit so I decided to add it to our current site. I don’t know much about PHP, but I learned to code in VB.NET and C++, so I can learn enough as I go to make things work.

With the help of “The Google”, I was able to piece together a bit of code that reads from a CSV file into an array, then randomly displays a link from within that array on each page load, so that a new link gets displayed on each visit.

The original code has appeared in several forms across the Internet already, so if it’s yours, please let me know so I can credit you. I’ve made some slight adjustments to fit my needs.

[sourcecode language=”php” wraplines=”false”]
<?php
/**
* @function makeClickableLinks
* @param string
* @returns string
*/
function makeClickableLinks($text) {
$text = eregi_replace(‘(((f|ht){1}(tp|tps)://)[-a-zA-Z0-9@:%_+.~#?&//=]+)’, ‘\1’, $text);
$text = eregi_replace(‘([:space:[{}])(www.[-a-zA-Z0-9@:%_+.~#?&//=]+)’, ‘\1\2’, $text);
$text = eregi_replace(‘([_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3})’, ‘\1’, $text);

return $text;

}
/**
* @function displayLink
* @param string // path to csv
*/
function displayLink($csv) {
$fp = fopen($csv, "r");

while (!feof($fp)) {
    $contents[] = explode(&quot;,&quot;, fgets($fp, 512));
} //!feof($fp)

fclose($fp);

do {
    $x = rand(0, count($contents) – 1);
}
while ($contents[$x] == 0);

// displays link title above clickable URL
echo $contents[$x][0] . &quot;n&quot; . makeClickableLinks($contents[$x][1]) . &quot;n&quot;;

// displays link title as clickable link
echo '&lt;a href=&quot;'.$contents[$x][1].'&quot; rel=&quot;nofollow&quot;&gt;'.$contents[$x][0].'&lt;/a&gt;';

}
?>
[/sourcecode]

UPDATE

WordPress keeps messing up code formatting, so I made it into a Github Gist.

UPDATE 2

Just learned of a shortcode for formatting code blocks on the hosted version of WordPress. Hooray for sourcecode!

View a working sample of this code.