今天给领导博客的广告做了些调整。原本首页横幅广告的位置是固定的,即便进入单篇文章它也还在原地:
m88体育 这种单调的布局据说非常不好,容易让访客认出广告位置,减少点击。所以应领导强烈要求,要改进一下。仔细看了看好像不太好改,因为我对joomla的架构不熟,当年对wordpress狠下功夫研究了一阵,知道各个页面大概的生命周期,所以到适当页面上增加或去除广告即可。现在joomla这个广告是我强行修改模版加上的,而joomla模版是全局组件,很难针对所显示的页面内容修改行为。于是决定避重就轻,先在新位置加上广告,然后再回来看怎么去掉旧的。选好的新位置是文章中间,准备上纯文字广告,我的第一想法是修改"阅读更多",也就是摘要标记那条线的代码,把广告夹进去了事。但领导不同意,说那个位置还是太靠近header了,和原来没啥区别。然后我又没辙了,因为除摘要以外,joomla文章的全文是一整个字符串存在数据库里的,不把框架原理搞清楚,别指望把正文掰开。
m88体育 要换个思路了,既然不能直接往数据里注水,那就在编辑器上动脑筋,如果能找到编辑器向数据库输出那一点,不就找到门路了?于是各种看代码,看了小半天,无果,一团浆糊。。。意外收获是找到一篇非常不错的joomla系统开发教程:
https://docs.joomla.org/Developing_a_Model-View-Controller_Component/3.1/Introduction
跟着做下来就可以对joomla系统有个很好的认识了,不过要花些时间,而且把系统吃透之前,我的问题还是不能解决,这个很郁闷。代码搞不定,那就看看设置,休息一下,没想到这种自暴自弃的行为却一下子为我打开了突破口。无意间发现,joomla自带的tinymce编辑器有个"扩展模式":
我平时对编辑器需求不多,所以一直用着"高级"模式,现在打开扩展模式一看,好多问题就都不是问题了。首先,文中插入广告的问题,tinymce就有自定义代码插入功能:
点击这个按钮会有选择mce代码模版的窗口弹出:
下一步就是自定义一个模版即可。这次免不了碰代码了,首先需要在/media/editors/tinymce/templates/下定义一个新的模版文件,比如google-ad-inline.html。其内容是要插入的广告代码,最好用一个div封装起来,方便做其他css处理。之后需要修改/media/editors/tinymce/templates/template_list.js文件,让它加载新建立的广告代码模版:
/** * Tinymce template_list.js sample file * @version tinymce 3.3.9 * @package Joomla * @copyright Copyright (C) 2005 - 2013 Open Source Matters. All rights reserved. * @license GNU/GPL, see LICENSE.php * Joomla! is free software. This version may have been modified pursuant * to the GNU General Public License, and as distributed it includes or * is derivative of works licensed under the GNU General Public License or * other free or open source software licenses. * See COPYRIGHT.php for copyright notices and details. */ // This list may be created by a server logic page PHP/ASP/ASPX/JSP in some backend system. // There templates will be displayed as a dropdown in all media dialog if the "template_external_list_url" // option is defined in TinyMCE init. var tinyMCETemplateList = [ // Name, URL, Description ["Simple snippet", "media/editors/tinymce/templates/snippet1.html", "Simple HTML snippet."], ["Layout", "media/editors/tinymce/templates/layout1.html", "HTMLLayout."], ["Google页面内广告", "media/editors/tinymce/templates/google-ad-inline.html", "嵌入文章内的文字"] ];
其实前面两个模版是示例用,完全可以删除,于是最终文件变成这样:
var tinyMCETemplateList = [ var id = new Date().getTime(); // Name, URL, Description ["Google页面内广告", "media/editors/tinymce/templates/google-ad-inline.html?u=" + id, "嵌入文章内的文字"] ];
最后url末尾的id是为了让地址一直变化,避免系统缓存这个文件。之后就大功告成了,光标停在文章中想插入广告的地方,点击按钮,选择广告模版即可。于是广告就可以出现在文章中任意位置了:
再回头看旧广告的删除,灵感爆发,也一下就找对了路子。原来我改动的是template的入口,index.php文件,那当然是所有页面都受影响的。现在把index.php还原,再去/components/com_content/views/category/tmpl/blog.php中最接近页面header的位置加上广告。这是分类页面的渲染器,因而对所有分类页面,包括主页都有用,唯独不影响单篇文章的article页面,这正好是我要的效果。
由这个问题的解决可以看出,搞技术真不能钻牛角尖。应该多多迂回,说不定绕着绕着,就柳暗花明了。
评论
还好,因为代码是预定义好的,所以只要在适当的位置点两下按钮就好了。不过以后有时间还是要自动化的,可以 做成一个插件。
对,最早用过WP,很不爽,所以换成Joomla,现在总体感觉还不错,但随着文章多起来,已经开始遇到性 能问题了,正在着手解决
会写程序就是有这个好处,遇到问题可以比普通用户多一种解决方法
订阅这条评论的RSS源