最近经常和symfony插件打交道, 发现插件真是提高开发效率和重用性的一个非常棒的解决方案, 真是居家旅行之必备良药.
废话到此为止, 今天研究了一下fabien potencier写的sfFeedPlugin, 官方出的插件品质没的说, 只是有一个问题比较头痛, 就是插件很久没有更新了在symfony1.2下无法使用命令进行安装. 这个问题比较普遍, 因为symfony1.0, 1.1, 1.2的差异还是比较大的, 插件package的结构也稍有不同, 但由于symfony基本结构和方法并没有发生太多变化, 所以很多插件其实都可以在其他版本上正常运行, 插件作者都没有精力也没有兴趣对这些问题进行修改, 这都在情理之中. 这样本文第一个要解决的问题就出现了, 如何安装不同版本的插件.
在1.2上安装sfFeedPlugin
其实我们要作的很简单, 只需要在旧版本上进行安装然后将插件目录copy到1.2的项目下就可以了.
首先检出或者安装旧版本的symfony源代码
$ svn co http://svn.symfony-project.com/branches/1.0 symfony1.0然后创建一个旧版本的项目
$ mkdir test$ cd test$ ../symfony1.0/data/bin/symfony init-proj test下一步,安装插件
$ ./symfony plugin-install http://plugins.symfony-project.org/sfFeedPlugin最后一步, 将插件目录复制到1.2项目中的plugins目录下.
$ cp -rf plugins/sfFeedPlugin pathto1.2project/plugins有些插件下还有web目录, 这样你还需要将web下以该插件名命名的文件夹复制到1.2项目的web目录下以确保插件完整.
这样其实就已经安装好了, 查看sfFeedPlugin的源代码会发现其实是一个类库, 参考网上其他的文章简单写了一个例子.
使用过程中发现了一个可能是兼容性问题, sfFeed.class.php中的context对象不正确, 将所有使用context的地方换成sfContext::getInstance()就可以了.
apps/frontend/modules/feed/actions/actions.class.php
public function executeIndex(sfWebRequest $request)apps/frontend/modules/feed/config/view.yml
{
// get shops
$c = new Criteria();
$shops = ShopPeer::doSelect($c);
$feed = new sfRss201rev2Feed();
// channel
$feed->setTitle('New Shops');
$feed->setLink('@homepage');
$feed->setFeedUrl('feed/index');
$feed->setDescription('All the new shops.');
$feed->setAuthorEmail('***@gmail.com');
$feed->setAuthorName('maker');
// items
foreach($shops as $shop)
{
$item = new sfFeedItem();
$item->setTitle($shop->getName());
$item->setLink('shop/index');
$item->setAuthorName('maker');
$item->setAuthorEmail('***@gmail.com');
$item->setPubdate($shop->getCreatedAt('U'));
$item->setUniqueId($shop->getName());
$item->setDescription($shop->getDescription());
$feed->addItem($item);
}
$this->feed = $feed;
}
all:
has_layout: off
template: feed
http_metas:
content-type: text/xml
apps/frontend/modules/feed/templates/indexSuccess.php
<?php decorate_with(false); ?>访问http://project/feed/index, 源代码如下
<?php echo $feed->getFeed(); ?>
<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title>New Shops</title>
<link>http://project/feed/index</link>
<description>All the new shops.</description>
<language>en</language>
<item>
<title>shop name</title>
<description>shop description</description>
<link>http://first-symfony-project/pc_dev.php/</link>
<guid isPermalink="false">shop name</guid>
<author>***@gmail.com (maker)</author>
<pubDate>Thu, 15 Jan 2009 16:12:11 +0800</pubDate>
</item>
<item>
<title>shop name</title>
<description>shop description</description>
<link>http://first-symfony-project/pc_dev.php/</link>
<guid isPermalink="false">shop name</guid>
<author>***@gmail.com (maker)</author>
<pubDate>Thu, 15 Jan 2009 16:12:11 +0800</pubDate>
</item>
</channel>
</rss>

Create a new plugin 进入插件创建页面(
在创建页面我们需要填写


