您的位置:首页 > 编程语言 > PHP开发

PHP问题汇总(一)

2014-05-02 20:13 381 查看

1 typecho插件Digg

搭建typecho时,在官网下载了一个插件Digg是一个顶踩插件,安装好后在后台可以激活并配置,但是前台没变化。这是怎么回事?

开始以为时自己配置不对,反反复复了插件使用教程没搞明白怎么回事,于是怀疑代码有问题,去看了插件编写教程,HelloWord。详细在这里。

1. 插件分析
插件功能,是为了实现用户登录后,在后台菜单导航栏输出欢迎话语,所以我们要做的,就是找找后台菜单文件,是否有提供到此类功能的插件接口。一般来说,用哪个接口来实现功能,是要看我们要写的插件,用到哪一方面的功能,或者实现哪些效果来判断,再到对应的文件去寻找。很幸运,我们在 /admin/menu.php 中找到了以下接口,大概在第7行左右:

<?php Typecho_Plugin::factory('admin/menu.php')->navBar(); ?>
这就是我们要在激活插件里要写入的接口代码。插件接口,常以下面的两种方式出现:

Typecho_Plugin::factory()->function();
$this->pluginHandle()->function();
我们找好接口代码后,下面便开始编写我们的插件代码。

2. 编写代码
平常编写代码的顺序,基本按照默认办法出现的顺序来编写。所以,我们先开始写激活接口代码:

public static function activate()
{
Typecho_Plugin::factory('admin/menu.php')->navBar = array('HelloWorld_Plugin', 'render');
}
在插件得activate函数里会让程序得一个插件函数调用自己插件里得函数render。

但是Digg插件里得activate函数除了操作数据库外没有其他得代码,这怎么影响到前台的显示了。继续看代码。Digg里有一个output函数

/**
* 输出方法
*
* @access public
* @return void or array
*/
public static function output($return = false, $dump = false)
{
//防止未激活插件输出错误信息,可注释掉
$all = Typecho_Plugin::export();
if (!array_key_exists('Digg', $all['activated'])) {
return;
}
//获取相关设置
$setting = Helper::options()->plugin('Digg');

$items = explode('|', $setting->items);
$items_echo = explode('|', $setting->items_echo);
if (count($items) != count($items_echo) || empty($items[0])) {
echo "插件项目配置错误";
return;
}
//digg 提交地址
$post_url = Typecho_Common::url('action/Digg', Helper::options()->index);
//digg 表情地址
$img_url = Helper::options()->pluginUrl . '/Digg/img/';

//获取日志digg数据
$db = Typecho_Db::get();
$cid = Typecho_Widget::widget('Widget_Archive')->cid;
$rows = $db->fetchAll($db->select('item', 'count')->from('table.digg')->where('cid = ?', $cid));

$result = array();
$result['items'] = @array_combine($items, $items_echo);
$result['imgurl'] = $img_url;
$result['cid'] = $cid;
$result['count'] = 0;
foreach ($rows as $k => $v) {
if (isset($result['items'][$v['item']])) {
$result['count'] += $v['count'];
$result[0][$v['item']] = $v;
}
}
//print_r($result);
unset($rows);

//输出js及css
echo $setting->src;

/* 用法1 <?php Digg_Plugin::output(); ?> 按插件自定义格式输出 也可自己修改输出格式*/
if (!$return) {
echo "<div id=\"digg\" class=\"clearfix\">";
foreach ($items as $k => $v) {
echo '<a href="javascript:digg(\'' . $v . '\',\'' . $cid . '\');" id="digg-' .$v. '">';
echo $result['items'][$v];
echo '(<span id="' . 'digg-' . $v . '-num">' . (isset($result[0][$v]) ? $result[0][$v]['count'] : 0 ) . '</span>)</a>';
}
echo '</div>';
return;
}

/* 用法2 <?php Digg_Plugin::output(true); ?> 将digg数据以数组形式返回,自定义html结构 可外加参数true查看返回数据*/
if ($dump) var_dump($result); //var_dump
return $result;
}
里面注释了用法1和用法2。这才明白过来,使用用法1
<?php Digg_Plugin::output(); ?>
放到前台得模板页面里,如下图



这样前台首页的每个文章就有顶踩功能了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php typecho