Re: ソーシャルボタン

2012年3月20日 at 1:30

補足。

この concrete5 Japan のサイトでは、ブロックではなく、テーマに直接、プログラムコードや Javascript を入れています。

このサイトは、以下のことをしています。

□ Twitter ツイートボタンと Facebook いいねボタン設置方法
http://concrete5-japan.org/community/forums/development/post-908/

□ はてブ ボタン 設置方法
http://concrete5-japan.org/community/forums/development/post-979/

□ Mixi チェックイン ボタン 設置方法
http://concrete5-japan.org/community/forums/development/post-971/

□ Google Plus
http://concrete5-japan.org/community/forums/development/post-2518/

これらを、Main エリアの上、テーマファイルに直接記述しています。
concrete5 のテーマファイル自体も PHP で作られているので、ブロック以外にも直接プログラミングができます。

ブロックを作るのは面倒くさく、ソーシャルボタンの配置の場所も固定する予定だったので、テーマにしました。

tomoac さん、テーマに直接記述するときの記述をまとめて Gist にしてみました。

http://gist.github.com/2116372

どうじょ

タグ:

Re: ソーシャルボタン

2012年3月20日 at 7:04
補足の補足。OGPタグはこのアドオンで自動で挿入できます wink
http://github.com/hissy/c5-open-graph-tags-lite/tree/master/packages

OGPを設定できたらあとは各ボタンのコードを各サイトから取得してテーマに貼っつけるだけでいけますよん。

http://twitter.com/about/resources/buttons
http://developers.facebook.com/docs/reference/plugins/like/
http://developer.mixi.co.jp/connect/mixi_plugin/favorite_button/get_html_code/
http://b.hatena.ne.jp/help/bbutton
http://www.google.com/intl/ja/webmasters/+1/button/index.html

…と思ったけど、貼っつけるだけなのはTwitterとG+1だけだった。+1もfooter_requiredにJavascriptを出力しないと行けないので面倒だな。
はてブボタンはURL必須なのでちょっとめんどくさい。Katzさんのリンク先を参照。
FacebookはAdmin ID、MixiもIDを発行しないとそもそも動かないという面倒仕様。使って欲しいのか欲しくないのか…。

うわー、アドオン作るかな〜
 

Re: ソーシャルボタン

2012年3月20日 at 9:53
結構面倒そうですね。。。

まずはTwitterが簡単な印象なので、そのへんを中心に勉強してみます。
 

Re: ソーシャルボタン

2012年3月20日 at 11:27
Tweetボタンのブロックを作ってみました。

使ったことがないので、挙動もよくわかりませんが、こんな感じでいいのでしょうか?

ボタンを押したら一応ツイートできました。

OKでしたら申し機能を付けて、Facebookに取り掛かります。
 

Re: ソーシャルボタン

2012年3月20日 at 12:39
Tomoac さん。
おお。動作に問題は無いですが、これだと

URL が「index.php?cID=xxx」な時だと、その URL がシェアされてしまうので、


<?php
$SocBtnWidth=200; // width of comment area
$SocBtnHeight=50; // height of comment area
$req = Request::get();
if ($req->getRequestCollectionID() > 1 && $req->getRequestPath() == ''
&& $_SERVER['REQUEST_METHOD'] != 'POST') {
// This is a request that is directly for the cID, rather than the path
$u = new User();
// Get the page object for the current cID
if (!$c->isError()) {
?>

<div class="ccm-edit-mode-disabled-item" style="width:<?php echo $SocBtnWidth; ?>px; height:<?php echo $SocBtnHeight; ?>px;">
<div style="padding:8px 0px; padding-top: <?php echo round($SocBtnHeight/2)-10; ?>px;"><?php echo t('Content disabled in edit mode.'); ?></div>
</div>

<?php } else { ?>

// ここに、URL がきちんと表示された時に表示する

<?php } ?>



みたいな細工を加えるといいかもしれません。 $SocBtnWidth $SocBtnHeight など適宜に変えておいてください。

この細工は、編集モードなどで正規の URL で表示されていない時に、間違ってユーザーがシェアしてしまわないようにするためのセーフティーガードです。
 

Re: Re: ソーシャルボタン

2012年3月20日 at 14:01
すんません。
基本的なことを。

if ($req->getRequestCollection .... で、$req が生成されていないのでエラーが出ます。

getRequestCollection()の仕様は、APIの仕様をみればいいのでしょうか。
 

Re: ソーシャルボタン

2012年3月20日 at 14:32
おっと

コピペした時に

$req = Request::get();


忘れてました。
 

Re: ソーシャルボタン

2012年3月20日 at 16:30
お手数かけます。

if (!$c->isError()) {

の、$c は、なんのオブジェクトでしょうか。

現在、未定義なので判定が無効になっています。
 

Re: ソーシャルボタン

2012年3月20日 at 16:58
それと、ひとつ相談が。

これらのボタンは、まとめて横に並べる使い方が多いように思います。

1つのボタン、1ブロックだと横に並べにくいですよね。レイアウトを使えばいいのかもしれませんが。

となると、1ブロックで、複数のボタンが作れて並べられる方がいいですよね。

すると、並べ替えの機能が要ったりして、結構大変になりそう。
 

Re: ソーシャルボタン

2012年3月20日 at 19:38
$c はコレクションの情報が格納されている関数です。
global $c 宣言する必要あったっけな。

あと、デザインですが、簡単に、横並びで

Twitter Facebook はてブ Mixi Google+ の横並びでいいんじゃないですか。

細かいことできるのは有償アドオンにして、ひとまず、無償アドオンは簡略に行きませう〜。
 

Re: ソーシャルボタン

2012年3月21日 at 7:59
聞き方が悪かったようです。

宣言もですが、$c の初期値が入っていないので、どうすればいいかと。
 

Re: ソーシャルボタン

2012年3月23日 at 19:52
index.php?cID=xxx になった時に表示しないと言うよりは、ボタンから正しいURLを指定すればOKだと思いますが…。

あと、グローバル変数の$cはあんまし使わないでね、ってことになったと思います。ソース紛失。
ぼくのアドオンではこう言うふうに書いています。

$page = Page::getCurrentPage();
$url = BASE_URL . DIR_REL . $page->getCollectionPath();
 

Re: ソーシャルボタン

2012年3月24日 at 1:17
ついつい簡単そうだったので、作りましたが、それなりに難しそうなので、私が理解しながらぼちぼち作ってみます。

ところで、そもそも欲しいと言われた方の要望は、どうなんでしょうか?
使ってみて感想をいただければと思います。
 

Re: ソーシャルボタン

2012年3月21日 at 9:42
Facebookの場合、

HTMLタグに、以下を追加せよ、とありますが、ブロックの場合どうしたらいんでしょう。
xmlns:fb="http://www.facebook.com/2008/fbml"
 

Re: ソーシャルボタン

2012年3月23日 at 19:59
XMLの名前空間が必要なのは、XHTMLのLikeボタンの場合のみです。HTML5では必要無いです。ただ、HTML5版でも、<body>タグの直後にJavaScript SDKを埋め込む必要があり、ブロックから行うのは無理です。仕方が無いので<body>タグの直後は諦めて、ブロックの先頭に入れるしか無いですね。そうすると、ブロックが複数になった時に、2個目以降はJavaScript SDKが入らないようにしないといけません。そんなことできるのかな…。

一番簡単なのは、「送る」ボタンを諦めればiframe版を使うことですね。でもページの読み込みが遅くなります。

Mixi関係は、WordPressプラグインを過去に作ったので参考になるかも?です。
http://notnil-creative.com/blog/archives/470
 

Re: ソーシャルボタン

2012年3月24日 at 1:19
xmlns:fb="http://www.facebook.com/2008/fbml"

ってのは必須なんですか?
 

Re: ソーシャルボタン

2012年3月24日 at 8:34
無くても動くと思いますが、XHTMLは仕様が厳格なので、名前空間で定義していない要素は入れられないんでしょう。というかなぜFacebookがこんな仕様にしたのかよく分かりません…。
 

Re: ソーシャルボタン

2012年3月25日 at 2:53
テーマのheader.phpの位置はどのテーマでも同じなんでしょうか?

であれば、インストール時に無理やり書き換えますかね。
 

Re: ソーシャルボタン

2012年3月25日 at 7:20
header.phpを書き換えるのはマズイと思いますよ…。アップグレードで書き換わる可能性がありますし、header.phpに<body>タグがあるとは限らないですし。
 

Re: ソーシャルボタン

2012年3月25日 at 14:19
xmlns:fb="XXXXXX"

という記述は、Facebook が独自に規格した FBML (HTML にFacebook のタグを加えたもの) を使用するという宣言です。

<fb:like> というタグを使用することができるようにするために必要です。
以前、そのフォーラム記事を書いた当時、「いいね!」ボタンの実装にも必要でしたが、今は必要ありません。

FBML 規格以外のフォーマットは何だったっけなー
 

Re: ソーシャルボタン

2012年3月25日 at 16:03
Fackbookのサイトを見て、コード入れ替えました。

twitter, google+1, hatena, mixi, facebook に対応できたと思います。

こんなんでどうでしょう。

添付でも、以下からでもダウンロードできます。
http://concrete5.tomo.ac/osusumeblock/socilabutton/
 

Re: ソーシャルボタン

2012年3月21日 at 10:12
Google+1とFacebookを追加してみました。Twitterを含めて3つです。

先にKatzさんからいただいたコードは、わけがわからないまま中途半端に入れてます。
そのへんは、次回調整しますが、

要は、表向きの仕様等について、こんな感じでいいかどうか確認くださり、ご意見ください。

データベース項目が増えているので、前回のはアンインストール&削除してお試しください。

#今日はこれから別のことをするので、本日はこれで終了です。
 

Re: Re: ソーシャルボタン

2012年3月25日 at 11:00
ソーシャルボタンに、HATENAを追加しました。

「こんなブロックを作ってみませんか?」ということで作ってみました。
そんなことから自分でどうしたい!ってのがないので、どういう仕様がいいのか機能がいいのかよくわかりません。
ここは違う!とかここはこうすべき!とかご意見いただければ改良します。

index.php?cID=xxx には、未対応です。

以下からダウンロードできます。
http://concrete5.tomo.ac/osusumeblock/socilabutton/