如果您在网站上的区块中有多个相同尺寸的展示广告,那么将它们在区块中的位置随机化是一个好主意。 这样对广告商来说更公平,不同的布局可以减少广告盲视现象。 目前该网站上来自 BuySellAds 的广告会自动执行此操作,但如果您有自己的手动系统,这里有三种不同的随机化方法。
方法 #1) 使用 PHP 随机化,随机起始图像
我认为在服务器端进行随机化是理想的,这样广告在页面加载时就已经随机化了。 我的第一个想法是在 1 到广告总数之间生成一个随机数。 然后运行两个 for 循环,一个从 1 到该随机数,另一个从该随机数到总数。
<?php
$totalImages = 6;
$randomFirst = rand(1,$totalImages);
for ( $i=$randomFirst; $i <= $totalImages; $i++ ) {
echo "<img src='images/ad-$i.png' alt='ad' /> ";
}
for ( $i=1; $i < $randomFirst; $i++ ) {
echo "<img src='images/ad-$i.png' alt='ad' /> ";
}
?>
效果不错,但它不像预期那样随机。 只有起始广告是随机的,但顺序始终相同。
方法 #2) 使用 PHP 随机化,随机顺序
为了获得更随机的结果,PHP 内置了一个用于随机化数组的函数。 所以只需使用 range 函数从 1 到广告总数设置数组,将其随机化,然后使用 foreach 循环将其输出。
<?php
$totalImages = 6;
$all = range(1,$totalImages);
shuffle($all);
foreach ($all as $single) {
echo "<img src='images/ad-$single.png' alt='ad' /> ";
}
?>
方法 #3) 使用 jQuery 随机化
这不太理想,因为图像可能已经加载,然后 JavaScript 开始执行并将其重新排列(很尴尬)。 不过,随机化确实在 DOM 就绪时发生,因此理论上它应该在图像加载之前发生。 当您可以在页面上控制 JavaScript 但无法控制 HTML 时,这将非常有用。
这里的方法是加载 jQuery 并加载 James Padolsey 的 shuffle 插件,然后只需定位图像并调用函数即可。
(function($){
$.fn.shuffle = function() {
var allElems = this.get(),
getRandom = function(max) {
return Math.floor(Math.random() * max);
},
shuffled = $.map(allElems, function(){
var random = getRandom(allElems.length),
randEl = $(allElems[random]).clone(true)[0];
allElems.splice(random, 1);
return randEl;
});
this.each(function(i){
$(this).replaceWith($(shuffled[i]));
});
return $(shuffled);
};
})(jQuery);
$(function() {
$("#ad-group-one img").shuffle();
});
还有其他随机化技巧吗?
哇,这对我很有用。 我现在已经找了几个小时的横幅/广告解决方案了。
非常感谢您:)
我希望 PHP 方法能够更详细地解释一下。 比如,逐行解释。:)
感谢您,Chris。
真的没有比这更简单的了。
当然,这篇文章有助于人们了解事物的工作原理,但我只是想提一下,Nico 为 WordPress 开发了一个很棒的插件,可以处理 125px X 125px 的广告区块。 您可以将其设置为静态或轮播
http://blogio.net/blog/wp-ad-plugin/
如果您将所有广告存储在一个数组中,您可以简单地使用内置的 PHP 函数 shuffle(); 对该数组进行随机排序
http://ca3.php.net/manual/en/function.shuffle.php
如果广告存储在 MySQL 数据库中,您可以让数据库为您完成工作 -
select ad_src from ads order by rand()
如果您在查询中使用 MySQL rand 函数,MySQL 将永远不会缓存该查询...
最好从 MySQL 中获取所有广告,然后使用 PHP 对其进行随机排序
我一直最喜欢这个!:-)
我更喜欢第二种方法,我已经尝试过使用 jQuery,它有时会产生一些不想要的效果。
另外 Angelo,那段代码只是随机化了一张图像,而不是将所有图像都以随机位置显示出来,对吗?
我认为使用 MySQL 数据库对于这样简单的操作来说有点 overkill 了。
只是我的一些想法!
实际上 Damian,我们以这段代码为例
由于 shuffle 的作用,它会重新排列该数组,使您可以使用其新键显示它。
如果您想让我详细介绍如何向图像添加链接,请告诉我,但原理基本相同。 只是,一个数组的值将作为另一个数组的键。
不知为何它去掉了 echo 语句,但实际上您需要使用它来输出图像。
我正在尝试将图像添加到我正在构建的网站中。 我需要您的帮助。 谢谢
正如许多人可能已经说过的那样,数据库解决方案对于这种情况来说是最优的。 您可以为它创建一个小的管理面板,方便管理等等。 这条评论与广告的随机放置本身无关,但我认为它建立在这一想法之上。
Chris,
在第一个方法中,使用 “mt_rand” 代替 “rand”。
同意。 如果您每天或每小时有数千次点击,为了节省一些时间,请使用 mt_rand。
不过您仍然会忽略那些广告。 您需要将它们以随机的方式散布在页面上。 不过要以一种微妙的方式。
我个人的方法是放弃一组广告,而是将广告分散在文本中,使用 PHP 随机地将广告浮动到某一段落旁边。
我想补充一下 shuffle() 方法。 不要使用数字数组,而是创建一个包含文件名/图像 URL 的数组,并对该数组进行随机排序。 这意味着您可以显示来自外部位置或并非来自同一域的广告。
跑题了
为什么重新设计得如此难看和不友好?
主文章有一个“显眼的广告”,然后是 4 篇难看的、难以阅读的旧文章?
以前是博客的时候好多了,这样您就可以阅读更多文章,而不只是最新的文章。
我同意 Nyte 的观点,以前好多了,现在它正努力模仿 http://www.smashingmagazine.com,但它也存在这个问题。
这就是设计凌驾于内容之上的结果。
一大堆又大又难看的乱七八糟的东西
我欢迎批评,但这完全没有用。
“非常难看”
“不友好”
“一大堆又大又难看的乱七八糟的东西”
这些是什么意思? 这不是有用的批评,只是负面词语。 为什么不整理一下真正的批评并发表出来? 我很乐意看看。
也许他们只是生气,因为没有人愿意为在他们的网站上投放广告付费……嗯……
无论如何,这篇文章很棒。 我很喜欢重新设计。
我只是很沮丧那个小生物从页脚消失了。它叫什么名字?我也很喜欢旧的设计,但也许新设计需要我慢慢接受。干杯。
我同意 Chris 的观点,如果你要批评一位优秀的设计师,你需要有理有据,你在这里做的只是证明你无法为你的论点提供理由。
至于对重新设计的批评,我个人很喜欢它,在我看来,设计需要不断变化来保持我们的思考,所以现在与其一味地表达毫无意义的憎恨,不如想想为什么你不喜欢它,然后用良好的英语发布一个包含你理由的回复。
如果我使用 Adsense 或 Adbrite 等广告网络,这适用吗?
好的建议,有道理
我同意,我不太喜欢广告块。将它们分散在页面上,看起来好多了。
嗨,我正在使用 jQuery 方法,我想知道如何一次显示 6 张随机图片,同时拥有 20 张图片。
不错的 php 技巧,用于随机化广告位置。它也可以用于其他随机内容放置。感谢这个酷炫的小贴士。
反正我从来没有点击过它们。
你可以认为我,相对来说......在 php 方面比较无知。因此,说到这里,在技术 #2 中,你如何将链接放在那里并确保它们与你提取的随机图像匹配?
没关系。我只是使用了自定义循环。
我可以将它与 wordpress 一起使用吗?
不幸的是,在您有具有多个权重的广告的情况下,这些选项都不起作用。
看到针对这种情况的解决方案会很好。