随机排序广告

Aug 5th, 2010 Add Comment

博客流行在侧边栏放置 4 到 6 个 125x125 的广告, 但一般的摆放顺序存在问题. 如果广告位置被固定, 各个位置的天然关注度肯定是不一样的.

投放广告的人都很关注他的广告会放在哪个位置, 因为这可能影响点击次数, 甚至是否在第一屏显示. 就这个问题, 其实很容易解决, 只要随机显示广告即可.

代码如何实现? 在这我推荐两种随机显示广告的处理办法.

在后端处理

在后端排序好再输出页面. 将广告节点用数组存放, 对数组进行随机排序, 再输出经过排序的数组. 参考代码 (PHP) 如下:

// 用数组存放广告列表
$ads = array('<a href="#"><img src="ad-125x125.png" alt="广告 1" width="125" height="125" /></a>'
			,'<a href="#"><img src="ad-125x125.png" alt="广告 2" width="125" height="125" /></a>'
			,'<a href="#"><img src="ad-125x125.png" alt="广告 3" width="125" height="125" /></a>'
			,'<a href="#"><img src="ad-125x125.png" alt="广告 4" width="125" height="125" /></a>'
);
 
// 对数组进行随机排序
shuffle($ads);
 
// 输出经过排序的数组
$html = '';
foreach ($ads as $ad) {
	$html .= $ad;
}
echo $html;

我们来扩展一下, 如果我是站长, 预留了 4 个广告位, 但现在只有 3 个在投放; 我想在空置的广告位放置一个 "虚位以待" 的广告招租链接, 并显示在最后, 该如何处理呢? 在排序完成之后再插放广告招租链接就可以了.

// 用数组存放广告列表
$ads = array('<a href="#"><img src="ad-125x125.png" alt="广告 1" width="125" height="125" /></a>'
			,'<a href="#"><img src="ad-125x125.png" alt="广告 2" width="125" height="125" /></a>'
			,'<a href="#"><img src="ad-125x125.png" alt="广告 3" width="125" height="125" /></a>'
);
 
// 对数组进行随机排序
shuffle($ads);
 
// 输出经过排序的数组
$html = '';
foreach ($ads as $ad) {
	$html .= $ad;
}
 
// 添加广告招租链接
$html .= '<a href="#"><img src="sell-ad-125x125.png" alt="虚位以待" width="125" height="125" /></a>';
echo $html;

我就是用这个方法来输出 125x125 广告的, 因为它直观可靠, 处理方便. 但是如果你希望对页面做静态化, 建议选用 JS 随机排序的方法.

在前端处理

在后端按原有循序输出, 在页面通过 JavaScript 重新排序. 假设页面输出广告区域的 HTML 片段如下.

<div id="ads">
	<a href="#"><img src="ad-125x125.png" alt="广告 1" width="125" height="125" /></a>
	<a href="#"><img src="ad-125x125.png" alt="广告 2" width="125" height="125" /></a>
	<a href="#"><img src="ad-125x125.png" alt="广告 3" width="125" height="125" /></a>
	<a href="#"><img src="ad-125x125.png" alt="广告 4" width="125" height="125" /></a>
</div>

我们可以通过 JS 来对广告进行重新排序. 参考代码如下:

<div id="ads" style="display:none;">
	<a href="#"><img src="ad-125x125.png" alt="广告 1" width="125" height="125" /></a>
	<a href="#"><img src="ad-125x125.png" alt="广告 2" width="125" height="125" /></a>
	<a href="#"><img src="ad-125x125.png" alt="广告 3" width="125" height="125" /></a>
	<a href="#"><img src="ad-125x125.png" alt="广告 4" width="125" height="125" /></a>
</div>
<div id="random-ads" style="display:none;">
</div>
 
<script type="text/javascript">
//<![CDATA[
 
var source = document.getElementById('ads');
var target = document.getElementById('random-ads');
var ads = source.getElementsByTagName('a');
 
// 下标数组
var arr = new Array();
for(var i=0; i<ads.length; i++) {
	arr[i] = i;
}
 
// 随机排序
function randomSort(a, b){
	var tmp = parseInt((Math.random() + 0.5), 10);
	return tmp ? a-b : b-a;
}
 
// 将老的广告区的节点随机插放到新的广告区
arr.sort(randomSort);
for(var i=0; i<arr.length; i++) {
	target.appendChild(ads[arr[i]].cloneNode(true));
}
 
// 显示新的广告区和移除老的广告区
source.parentNode.removeChild(source);
target.style.display = 'block';
 
//]]>
</script>

如果有如同方法 1 那样的扩展需求, 将空广告位显示在最后, 且显示广告招租链接, 该如何处理? 这个当作课后习题吧...

声明: 本文采用 BY-NC-SA 协议进行授权. 转载请注明转自: 随机排序广告

  1. http://0.gravatar.com/avatar/6714c85cedbcb25c00912b08cbf4f8c2?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    我有个问题,为什么我的125×125广告。设置2纵列广告位4个却全部在左边一侧

  2. http://1.gravatar.com/avatar/953817d5f3de50185e7563f03f799548?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    代码放在哪里呀,不会呀

  3. http://0.gravatar.com/avatar/8b685b7c9425c18785135bf3a8ccd90c?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    站長真細心,連廣告商的心情的顧慮到了!

  4. http://1.gravatar.com/avatar/dd1635e688b764b024cfbead86871c54?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    有没办法显示随机广告啊?

  5. http://1.gravatar.com/avatar/b5c351332ed12bc29941055b196cd132?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    这个非常实用

  6. http://1.gravatar.com/avatar/967af788cc967b545cee7627a6f1af21?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    这个还真有用.

  7. http://0.gravatar.com/avatar/2a9c4f525050372a6fe0b10ce4fe8957?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    先插入 alt!='虚位以待' 的 ads ,然后插入虚位以待。这样可行不?JavaScript 先把所有广告遍历一次就行了

  8. http://0.gravatar.com/avatar/039a44c8227f60fedd140eafbfa84fb3?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    为什么我实现不了 我想在一个隐藏的div里 不让图片加载 可以不?

  9. http://1.gravatar.com/avatar/de771fcd863191472bba25ef8ff88c33?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    以前我是使用插件来实现的。。现在有代码可行就更好了。。

  10. http://1.gravatar.com/avatar/94edba5ccaf4f54d0891cf3a7b1e1280?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    我以前都是手动调整的
    汗啊。

  11. http://0.gravatar.com/avatar/0a810dbf6802d88f82f7caf0e9cc57b7?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    mark一下,有需要放广告的时候可以用上了

  12. http://1.gravatar.com/avatar/fbc02069dd6ae07f8af271f08b42af2d?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    呃。。。有插件吗:-)

  13. http://0.gravatar.com/avatar/c3bbb9ae30a86d6adbb98f71874a0b07?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    把那个“虚位以待”的图片做成a标签的背景,然后判断它的innerHTML,如果不为空,那就是内含一个img标签,是有投放的。如果内部没有img,那就是没投放的。

  14. http://0.gravatar.com/avatar/81ee746dc7ae5378301f69ce1b53138d?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    研究看看再说。
    不懂代码,一般需要最终执行版

  15. http://0.gravatar.com/avatar/82e58bf9a1df153a65f9f3d8704ea87d?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    初学者,好多不懂,慢慢学习。

  16. http://0.gravatar.com/avatar/ecdc14816bcdf17ffaab3f5aa51e6218?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    关于那思考题,将招租的在 JS 的执行的最后再手动写一个不就好了……

  17. http://0.gravatar.com/avatar/ecdc14816bcdf17ffaab3f5aa51e6218?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    整个 idea 不错,都可以做成插件了。
    倒是第一步的数组那儿,为什么要整条写进去,而不是类似:

    name => 广告一
    url => 地址
    alt => 描述

    这样的格式捏……其实都可以,= =,只是我不太喜欢整条 HTML 写进去的。

  18. http://0.gravatar.com/avatar/6ae83ef4bfaa6f98356a5187b6f171f6?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    我的没弄随机 就一个250*250和两个125*125

  19. http://0.gravatar.com/avatar/ceccb38265d7fc90c7e632db24a46897?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    这个可以可以应用..先留着,毕竟我是零收入广告~( ̄▽ ̄")

  20. http://1.gravatar.com/avatar/b2986defdd28dcaa196e317a94d82e31?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    e...文末还留个思考题。。。 :twisted:

  21. http://0.gravatar.com/avatar/2a9c4f525050372a6fe0b10ce4fe8957?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    也就是说用在后端排序的话在启用缓存插件的时候就要先考虑一下?

  22. http://0.gravatar.com/avatar/a20d3b51fbf7396462bb7ec0f9506fe1?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    :twisted: 先坐个沙发 再想想..我先想的是 在循环上做手脚.. :| 不知道还有什么好点的思路.

  23. http://0.gravatar.com/avatar/0fcfa7ff75012253db287414bd600fea?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G
  24. http://1.gravatar.com/avatar/bc0c69a6bf72455c4abb653a1d70747a?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    果然有些语法对刚学js的我看起来有点难,要研究研究

  25. http://0.gravatar.com/avatar/a934273986be6004493e139d0be23886?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    Mark
    随后再过后仔细看看