做一个WordPress的Picasa插件

一直想为我的博客加上相册功能(这样我照的相片才有人看),但始终没有实现。首先我不会在自己的博客上开发一个完整的相册功能,一来费时费力,二来 我的空间容量有限(才100M呢),放不了多少照片。那么我就需要选择一个第三方相册服务,不但容量要大,而且最好能提供开发API,这样我就比较容易把 相册功能嵌入到我的博客中。毫无悬念地,我选择了Google Picasa。

WordPress博客支持插件开发,到其官网上搜一搜,就能找到许多Picasa插件。但光从名字和描述上看很难区别那个好,我就下了一个貌似不 错的下载了,安装后发现与我的需求大相庭径。事实上人的需求总是千差万别的,别人做的插件很难刚好满足我的需要,既然我是一个受人尊敬的 Programmer,为何不自己开发一个?

主意就这样定下来了。查看了一些WordPress插件开发和Picasa API方面的文档资料,基本上知道要怎样做。 创建一个php文件,然后打开编辑,在其中加入插件头部信息:

<?php
/* Plugin Name: zzmfish’s picasa */

头部虽然只是一段注释,但是必不可少,这样WordPress才能识别你的插件。在这个头部中,我只定义了插件名字“zzmfish’s picasa”,这将显示在管理后台的插件面板中。 WordPress的插件开发是用钩子函数(Hook)实现 ,其中又分为Actions和Filters两类。在我做的这个插件中只用到Filter钩子。 Filters是用来对从数据库取出或将要存储到数据库中的数据进行处理的一类钩子函数。以这个Picasa插件为例,WordPress可以允许用户自 定义页面,这些页面信息(主要包括链接与内容)就存储在数据库中,而我现在想添加一个相册页面,就需要用到定义两个Filter来处理从数据库取出的数 据,分别添加相册链接与相册内容到相应的数据结构中。

注册第一个Filter钩子:

define(’ZZMPICASA_PAGE_ID’, 9999);

function add_to_pages($pages){
   $style = ($_GET['page_id'] == ZZMPICASA_PAGE_ID) ? ‘current_page_item’ : ‘page_item page-item-2′;
   $pages = “<li class=’$style’><a href=’/wp/?page_id=” . ZZMPICASA_PAGE_ID . “‘>相册</a></li>” . $pages;
   return $pages;

}
add_filter(’wp_list_pages’, ‘add_to_pages’, 10, 1);

最后一句的意思是注册一个Filter钩子,使在生成页面链接列表之后(wp_list_pages)调用add_to_pages函数,优先级为10,参数为1个。add_to_pages函数很简单,就是把相册链接添加到页面列表中,然后返回。每个页面都需要有一个ID,我定义相册页面的ID为 “9999”,根据这个ID不可能从数据库中页面内容。没关系,我们可以再注册一个Filter钩子来处理这个问题:

class MyPost {
  var $post_content;
  var $post_title;
}
function add_to_posts($posts) {
  if ($_GET['page_id'] == ZZMPICASA_PAGE_ID) {
    $mypost = new MyPost();
    $mypost->post_title = ‘我的照片’;
    $mypost->post_content = get_albumlist_html();
    $posts = array($mypost);
  }
  return $posts;
}
add_filter(’the_posts’, ‘add_to_posts’, 10, 1);

注册一个钩子,使在生成页面内容的时候(the_posts)的时候调用add_to_posts函数,如果是相册页面,就对数据进行处理。返回结果必须 是对象数组,因此我定义了一个MyPost类,然后返回一个MyPost对象。这样写做显然很不好,但除此之外我不知道怎样创建一个具有 post_title和post_content属性的对象。页面标题为“我的照片”,内容由get_albumlist_html函数生成:

function get_albumlist_html() {
  $feedurl = ‘http://picasaweb.google.com/data/feed/api/user/zzmguitar’;
  $xml = file_get_contents($feedurl);
  $doc = new DOMDocument();
  $doc->loadXML($xml);
  $entrylist = $doc->getElementsByTagName(’entry’);
  $html = ‘<center>’;
  foreach ($entrylist as $entry) {
    $id = $entry->getElementsByTagNameNS(’http://schemas.google.com/photos/2007′, ‘id’)->item(0)->nodeValue;
    $name = $entry->getElementsByTagNameNS(’http://schemas.google.com/photos/2007′, ‘name’)->item(0)->nodeValue;
    $html .= “<div style=’width:400px;font-family:arial,sans-serif;font-size:13px;’><div><embed type=’application/x-shockwave-flash’ src=’http://picasaweb.google.com/s/c/bin/slideshow.swf’ width=’400′ height=’267′ flashvars=’host=picasaweb.google.com&captions=1&hl=zh_CN&feat=flashalbum&noautoplay=1&RGB=0×000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fzzmguitar%2Falbumid%2F$id%3Falt%3Drss%26kind%3Dphoto%26hl%3Dzh_CN’ pluginspage=’http://www.macromedia.com/go/getflashplayer’></embed></div><span style=’float:left;’><a href=’http://picasaweb.google.com/zzmguitar/$name?feat=flashalbum’ style=’color:#3964c2′>查看全部</a></span></div>”;
  }
  $html .= “</center>”;
  return $html;
}

我在picasa注册的用户名叫zzmguitar,那么从http://picasaweb.google.com/data/feed/api /user/zzmguitar可以拿到XML格式的相册目录数据,解析XML中的数据,然后你就会得到你想要的。最后以Flash的形式展示每个相册, 点击开始播放,点击链接进入相册。

加上最后一行

?>

值得注意的是,“<?php”之前和“?>”之后不可有任何字符(包括空白字符),因为这会导致在WordPress发送HTTP头部之前发出内容,使后面发送头部失败!

根据自己的皮肤需要修改的pwa.css文件代码:.pj_picasa {         width:550px;         text-align:right; table {         width:100%; } td {         width:140px; } tr {         width:140px; } a:link .pwimages, a:visited .pwimages {         padding:2px;         border:2px solid #CCCCCC; } a:hover .pwimages {         padding:2px;         border:2px solid #5AA723; } .picasa_title {         font-size:14px;         color:#666666;         font-weight:bold; }这个部分代码:        width:550px;         text-align:right;根据自己的皮肤修改下上面的是我演示那个的,只要不错位就OK了 插件不用多说了吧 解压 上传  安装 然后设置GOOGLE帐号 就这么简单。呵呵 哦 我知道哪里还要说了 就是在google哪里注册相册 然后 就有相册帐号 就是一个Email地址来到 激活  了相册 就可以传了  然后 在管理已经安装的相册哪里 的基本设置 把帐号弄进去就OK了 然后 用PICASE软件 直接上传相片 方便快捷 应该是 最好的 相册里。 Google的相册空间是海量的不能显示的问题解决了 。就是一个定义路径的 找到这个文件pwa.asp 找到这里代码:[removed][removed]是那个JS的路径 图片就是那个东西弄出来的 比如你的博客不在根目录 而是在blog的 就改成这样代码:[removed][removed]其他的就自己举一反三了。 现在那个插件文件夹名字也可以改了。呵呵 还有 忘记了 就是 页面上面 老是有小生相册字样的 可以去改那个PWA.JS文件 看到小生相册就 把它改成你自己喜欢的就OK了
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值