钩子是贯穿X1的血管 他连通了X1全部脉络 插件和钩子组合就可以做出模块一样的东东了 一般我们做插件就把钩子一起做到一起了 但是有时候功能很小 插件有需要写很多文件怎么办 没事 钩子来帮忙 他是单文件 仅仅一个文件就可以实现你想要的小功能
下面我说个场景 我后台加了一个keyword 字段 作为内容关键字 关键字1,关键字2,关键词3 这样存储的 我想把他放到内容页底部当TAG用可以吗 答案是可以的 一个文件就足够 下面跟着我一步一步来实现这个小功能
application\common\hook 这个是钩子的目录 在这里我们创建一个 Keyword.php
<?php namespace app\common\hook; class Keyword{ //钩子类名也就是文件名 public $info=[ //归属接口,必填 此钩子可以查看后台获得 'hook_key'=>'cms_content_show', //归属插件,可为空 'plugin_key'=>'', //开发者 'author'=>'suifeng', //开发者网站 'author_url'=>'http://www.qibo168.com';, //功能描述 'about'=>'TAG搜索 手工创建一个keyword字段 以,或者空格 分割词 需安装搜索模块 内容页面 {$info.keyword} 调用' ]; public function run(&$data){ // 这个钩子是内容页面内容字段还没显示之前的调用 $data 返给我们全部的数据了 // 我们已经在模型中创建了 keyword 字段 是以,号或者空格风格分割这个字段的内容 $detail = strpos($data['keyword'], ',') !== false ? explode(',', $data['keyword']) : explode(' ', $data['keyword']); //分割后给他加上搜索的连接 foreach($detail AS $key=>$value){ $url=url('search/index/lists',['keyword'=>$value]); $array[]="<a class=\"button3 white\" href=\"$url\" target=\"_blank\">$value</a>"; } //加完连接我们把他转为字符串重新输出 $data['keyword']=implode(" ",$array); return; } }
模板中我们就可以用 {$info.keyword} 默认模板不需要加会自动加载 你会发现他已经有连接了
小文件实现大功能
备注:如果是自己手工写的文件需要自己手工挂载一下 步骤如下:
提交就可以了 钩子市场安装的会自动挂载
6e6d34c024359d13ae992636014dfce3.rar
不想自己码字的 可以下载附件 解压后放到
application\common\hook
有段时间 没弄x1 忙点别的
回过头来 学的东西忘得差不多了
从头捋一遍
关键词加链接是已经成功了,但是为什么是多个关键词合并为一个链接了呢?
另外用站长工具查询文章页的关键词的时候,原来是有多个关键词,但工具查询是多个关键词合并为一个关键词了。
他已经加了连接 当个简单的tag还是可以的 复杂的tag敬请期待
感谢分享
很强大
这个是调用了keyword字段的数据并分为搜索连接功能吧。但这个需要用到钩子吗?不是在模板里直接用代码实现吗?用构子是表示可以任意模板都可以实现吗?