×

消息

EU e-Privacy Directive

This website uses cookies to manage authentication, navigation, and other functions. By using our website, you agree that we can place these types of cookies on your device.

View e-Privacy Directive Documents

You have declined cookies. This decision can be reversed.

今天给领导博客的广告做了些调整。原本首页横幅广告的位置是固定的,即便进入单篇文章它也还在原地:

这种单调的布局据说非常不好,容易让访客认出广告位置,减少点击。所以应领导强烈要求,要改进一下。仔细看了看好像不太好改,因为我对joomla的架构不熟,当年对wordpress狠下功夫研究了一阵,知道各个页面大概的生命周期,所以到适当页面上增加或去除广告即可。现在joomla这个广告是我强行修改模版加上的,而joomla模版是全局组件,很难针对所显示的页面内容修改行为。于是决定避重就轻,先在新位置加上广告,然后再回来看怎么去掉旧的。选好的新位置是文章中间,准备上纯文字广告,我的第一想法是修改"阅读更多",也就是摘要标记那条线的代码,把广告夹进去了事。但领导不同意,说那个位置还是太靠近header了,和原来没啥区别。然后我又没辙了,因为除摘要以外,joomla文章的全文是一整个字符串存在数据库里的,不把框架原理搞清楚,别指望把正文掰开。

要换个思路了,既然不能直接往数据里注水,那就在编辑器上动脑筋,如果能找到编辑器向数据库输出那一点,不就找到门路了?于是各种看代码,看了小半天,无果,一团浆糊。。。意外收获是找到一篇非常不错的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页面,这正好是我要的效果。
由这个问题的解决可以看出,搞技术真不能钻牛角尖。应该多多迂回,说不定绕着绕着,就柳暗花明了。

评论   

#6 mrdaydreamer 2015-02-10 10:19
引用 Sumhat:
那岂不是要每篇博文都手动插入广告?看上去很麻烦的样子

还好,因为代码是预定义好的,所以只要在适当的位置点两下按钮就好了。不过以后有时间还是要自动化的,可以 做成一个插件。
引用
#5 mrdaydreamer 2015-02-10 10:17
引用 奇遇:
你的博客是用joomla构建的?

对,最早用过WP,很不爽,所以换成Joomla,现在总体感觉还不错,但随着文章多起来,已经开始遇到性 能问题了,正在着手解决
引用
#4 mrdaydreamer 2015-02-10 10:16
引用 王语双:
十全十美的程序少见啊,肯定有破绽,“在编辑器上动脑筋”倒是不错的办法。多用下发散式思维,然后聚合起来,问题或许更好地解决。

会写程序就是有这个好处,遇到问题可以比普通用户多一种解决方法 :lol:
引用
#3 Sumhat 2015-02-09 10:46
那岂不是要每篇博文都手动插入广告?看上去很麻烦的样子
引用
#2 奇遇 2015-02-09 06:56
你的博客是用joomla构建的?
引用
#1 王语双 2015-02-09 06:39
十全十美的程序少见啊,肯定有破绽,“在编辑器上动脑筋”倒是不错的办法。多用下发散式思维,然后聚合起来 ,问题或许更好地解决。
引用

提交评论


安全码
刷新