symfony askeet Day 11
feedを配信する。
- headにfeedへのリンクを入れる。
headにfeedへのリンクを入れる。
<?php echo auto_discovery_link_tag('rss','feed/popular') ?>
これだけでいいのか。
HTMLでも1行だけど、auto_discovery_link_tagを使った方がすごい楽。
プラグインをインストールする。
symfony plugin-install http://plugins.symfony-project.com/sfFeedPlugin
で、実行されるはずが
Warning: require_once(PEAR/Remote.php): failed to open stream: No such file or directory in /opt/local/lib/php/data/symfony/tasks/sfPakePlugins.php on line 155
Fatal error: require_once(): Failed opening required 'PEAR/Remote.php' (include_path='/Users/shota/education/enomoto/askeet2/lib:/Users/shota/education/enomoto/askeet2/apps//lib::/opt/local/lib/php/symfony/vendor:.:/opt/local/lib/php') in /opt/local/lib/php/data/symfony/tasks/sfPakePlugins.php on line 155
PEAR/Remote.phpが読み込めないというエラーが出た。
でも、sfFeedPluginは必要なのでどうにかダウンロードできないかと
直接http://plugins.symfony-project.com/sfFeedPluginにブラウザ上でアクセスしてみたら
ファイルが落ちてきた。ファイルを解凍すると中にsfFeedPlugin-1.X.Xとかいうフォルダがあるので
名称をsfFeedPluginに変えてaskeet2/plugins/に設置する。
そして、設置したら
symfony cc
キャッシュをクリアします。
アクションを作る
symfony init-module frontend feed
あとはアクションを書くと。
場所: askeet2/apps/frontend/modules/feed/actions/actions.class.php
public function executePopular() { // 質問 $c = new Criteria(); $c->addDescendingOrderByColumn(QuestionPeer::INTERESTED_USERS); $c->setLimit(sfConfig::get('app_feed_max')); $questions = QuestionPeer::doSelectJoinUser($c); $feed = sfFeed::newInstance('rss201rev2'); // チャンネル $feed->setTitle('askeet!で人気の質問'); $feed->setLink('@homepage'); $feed->setDescription('質問するなら答えるなら投票するなら askeet!'); // 項目 $feed->setFeedItemsRouteName('@question'); $feed->setItems($questions); $this->feed = $feed; }
rss201rev2というのはRSS 2.01というフォーマットをしているらしい。
資料:http://develop.ddo.jp/symfony/book/jp/1.0/syndication.html
表示件数を指定する。
場所: askeet2/apps/frontend/config/app.yml
# default values all: pager: homepage_max: 2 feed: max: 10
feed表示は10件までという指定ができた。
layout.phpを読み込まないようにする。
このまま表示するとlayout.phpが読み込まれてしまう。
そうするとRSS feedにならない。
なので、layout.phpを読み込まないようにする。
場所: askeet2/apps/frontend/modules/feed/config/view.yml
all: has_layout: off template: feed
テンプレートを書く。
場所: askeet2/apps/frontend/modules/feed/templates/feedSuccess.php
<?php echo $feed->getFeed() ?>
ルーティングに追加
場所: askeet2/apps/frontend/config/routing.yml
feed_popular_questions: url: /feed/popular param: { module: feed, action: popular }
RSSをリンクする
場所: askeet2/apps/frontend/modules/sidebar/templates/_default.php
<?php use_helper('Global') ?> <?php echo link_to('新しい質問をする。','question/add') ?> <ul> <li><?php echo link_to('人気の質問。','question/list') ?><?php echo link_to_feed('人気の質問。','feed/popular') ?></li> <li><?php echo link_to('最新の質問。','question/recent') ?></li> <li><?php echo link_to('最新の回答。','answer/recent') ?></li> </ul>