很多年前就用MediaWiki并投放Google AdSense广告,中间也很多次修改过广告代码及投放方式,最近又在升级MediaWiki软件,也对广告投放进行了一些调整,现在小结一下我用过的几种广告代码投放方式:
- 最简单直接的整站投放办法是修改皮肤文件,例如MonoBook.php或者Vector.php等,把广告代码放在需要放置的位置代码前后;
- 只对某个页面投放,可以把广告代码直接嵌入wiki文本中(需要在LocalSettings.php中打开raw html功能,在之间放置广告代码);
- 对某一部分使用共同模板的页面投放,可以把广告代码放在模板页面中,这样调用该模板的所有页面都可以看到广告;
- 只在网页顶部投放,可以利用“网站通知(Site Notice)”功能,修改MediaWiki:Sitenotice,在之间放置广告代码;
- 在网页底部投放,可以修改MediaWiki:Lastmodifiedat,放置广告代码就会显示在页面内容的下方;
- 通过LocalSettings.php来投放,在其中设置$wgSiteNotice、$wgOut->prependHTML、$wgOut->addHTML、$wgOut->addScript等分别投放广告到不同的位置。
以前也一直想把广告代码投放在页面下方(但在“隐私政策”等底部链接的上方)但没有找到很合适的办法,这次在网上搜索到一位老外写的博客《Displaying Google Adsense in MediaWiki》可以解决这个问题:
- 投放在顶部:
$wgHooks['SiteNoticeAfter'][] = function(&$siteNotice, $skin) { $siteNotice .= $adsense_code_top; return true; }; - 投放在底部:
$wgHooks['SkinAfterContent'][] = function(&$data, $skin) { global $myAdCode; $data .= ''; $data .= $adsense_code_bottom; $data .= ''; return true; - 投放在侧面菜单下:
$wgHooks['SkinBuildSidebar'][] = function($skin, &$bar) { $out = $adsense_code_sidebar; $out .= ""; $bar['Ads'] = $out; return true; };
另外,还可以不把上面的函数放在LocalSettings.php中,而是专门写一个小的第三方扩展程序,这样显得更专业,修改起来也更方便。
上面的办法不仅适用于投放Google AdSense广告,其它的广告代码,例如百度联盟等,也都可以,包括内部推荐页面链接的代码。
我们在MonoBook, Vector中投放广告都正常,但在WPtouch和MobileFrontend这样的移动皮肤中遇到广告位置错误或者部分广告内容不显示、遮盖广告位附近其它链接等问题,经过排查是css定义的问题,去掉main.css中对iframe的定义就可以恢复正常了。