如何自主开发Joomla SEO插件

Joomla的内容组件的keywords和description标签默认是空的,需要在编辑文章时填入才有。在一篇文章中,通常都会在首段的文字对整篇文章的主要内容进行概述,所以为了提高编辑效率,我们可以写一个插件,把首段的文字抽取出来,放在meta description标签中,起到SEO的作用。

第一步:生成Joomla插件的基本安装文件
插件的基本安装文件是指一个插件需要的基本文件,包括配置xml文件,php文件,语言包文件等,如果手动创建会比较慢和容易出错,我们有提供插件生成工具,可以快速生成这些文件。生成器的地址是:http://www.phpdb.net/index.php/tools/plugin-creator 。按表单的要求填写插件的信息,点击“生成并下载文件”按钮,就可以获得一个zip压缩包

第二步:在Joomla后台安装插件
通过第一步生成的zip压缩包,是可以直接在Joomla后台安装的。安装完成以后,就可以在plugins/content/找到刚刚安装好的插件文件夹。

第三步:写代码实现功能
使用编辑器打开php文件,实现功能的代码都写在该文件中。下面我们逐步介绍如何用代码实现SEO的功能。

1.选择合适的插件触发事件。
Joomla对Plugin有完整的文档支持,在php的注释文件有标注文档地址:51684.com/plgevents,在这个页面可以找到Joomla plugin的各种类型的事件。因为我们的需求是需要从文章中抽取首段文字放进description标签中,所以要在文章准备的过程中实现该功能,所以我们选择用content->onContentPrepare事件来做,选择好事件后,在php文件中写上对应的函数:

public function onContentPrepare($context, &$article, &$params, $page = 0){
    ...
}

2.提取首段文字
在编辑Joomla文章时,在编辑器有一个按钮“插入文章摘要分隔符”,在编辑器中点击该按钮就可以把文章分割出文章的首段文字,加入之后,编辑器中会在分割位置加入一条红线,如图:

3. 实现功能:

在代码中,onContentPrepare的第二个参数$article包含了文章的数据,$article->introtext则是在编辑器中使用“插入文章摘要分隔符”分割出来的首段文字,我们现在就要把这段文字作为description的数据,写起来很简单,把introtext放入$article->metadesc即可,代码如下:

$article->metadesc = $article->introtext;

4. 优化功能

通过查看网页源代码可以看到,introtext的内容已经显示在meta description中,观察description内容,有包含html标签,并且被转定义,如图:

解决办法如下,清除html标签并且删除内容前后的空格内容:

$article->metadesc = trim(strip_tags($article->introtext));

onContentPrepare事件可以适用于content的多个view,包括分类也会调用该事件,上面的功能只需要在文章详情生效,即article的view才能用,因此在代码中,要对view进行判断,加入判断之后代码如下:

$view = JRequest::getVar("view");
if ($view == 'article'){
   $article->metadesc = trim(strip_tags($article->introtext));
}

到此为止,用plugin实现seo的功能就已经实现了,在这里还留一些缺陷给大家自己动手实现,如:
1. 如果某些文章,在后台已经定义了description,如何做到避免已经定义好的description被覆盖掉。
2. 如果编辑器没有用“插入文章摘要分隔符”按钮定义首段文字,那么该如何从内容中抽取description的数据,比如指定字数或者第一个<p>标签的内容?
3. ...

 

关注PHPDB.NET