OpenPNE 拡張モジュール All in ONE Package

*天気予報(livedoor) + 今日の運勢(jugemKey)

天気予報+今日の運勢
「天気予報」と十二星座占いを使った「今日の運勢」モジュール。
元々別々のモジュールですが、一箇所のテンプレーへ挿入しペアで利用されているサイトが多いようです。

*テレビ番組表(goo)

TVガイド
現在放送中の番組を含め3時間先までの番組表を表示するモジュールです。

*ショートメッセンジャー

Short Messenger
mixi エコーを見て試験的に作ったモジュールですが使ってみたいと言うリクエストが多いので一般公開致します。
サーバーから定期的に非同期でデータを取得しているのでページ変移なしで更新されます、あまり大人数のサイトではサーバーに負荷が掛かりますので様子をみながら取得するタイミングを調整して下さい、まだまだ試験段階ですのでその辺りをご理解の上で御利用下さい、またアドバイス等ありましたらご指導頂けると有り難いです。
※Javascriptの関数呼び出しでエラーが出る場合はディレクトリの実行権をチェックして下さい。

ダウンロードはこちらから explate1.1.zip

※変更点
 ・MyNETSのテーブル名プレフィクスに対応しました。
 ・DBの設定をOpenPNEのConfig.phpから自動取得するように変更。
※注意
 今回のリリースは皆様から寄せられた要望やアドバイスを元に config.php に大幅に変更が加えられています、以前にダウンロードされたモジュールとは互換性がありませんので注意して扱ってください。

関連ページ : Twitter for OpenPNE

「足あと」カスタムテンプレート(グラフ対応版)

*GoogleAnalyticsを真似てグラフモジュールをFlashで作成してみました

足あと
※上図のイメージは会員画像の表示にFlickrサムネイルの様な正方形処理を施しています。
ダウンロードはこちらから ashiatoTemplate1.zip(画像処理のプログラムは含まれません)

*Flickrのサムネイルような正方形画像処理の追加方法

イメージ処理のソースコードの改造と新しいファンクションの追加が必要になります。OpenPNE標準のコードを見ると、画像のサイズ変更はOpenPNE/webapp/lib/OpenPNE/Img.php のfunction resize_img が行っていますが、これは縦横比を維持したままスケーリングを行うファンクション(長方形画像は長方形のまま縮小されます)なので、これを改造して正方形にトリミング+スケーリングを行うファンクション resize_img_square を作ってみました。
正方形処理

resize_img_square のソースコード

/*
 * @copyright 2005-2008 OpenPNE Project
 * @license   http://www.php.net/license/3_01.txt PHP License 3.01
 * $source_gdimg : 変換元GDイメージ
 * $w : 一辺の長さ(初期値:36pixel)
 * $ew : エッジの幅(初期値:ナシ)
 * $ec : エッジの色(初期値:白)
 */
function resize_img_square($source_gdimg, $w=36, $ew=0, $ec=0xffffff)
{
    $s_width  = imagesx($source_gdimg);
    $s_height = imagesy($source_gdimg);

    $s_ox = 0;
    $s_oy = 0;

    if ( $s_height < $s_width ) {
        $s_ox = ($s_width-$s_height)/2;
        $s_width = $s_height;
    } else {
        $s_oy = ($s_height-$s_width)/2;
        $s_height = $s_width;
    }

    $o_width  = $w;
    $o_height = $w;

    $output_gdimg = imagecreatetruecolor($o_width, $o_height);
    imagefill($output_gdimg, 0, 0, $ec );	//淵の色

    if (($this->output_format == 'gif') || ($this->output_format == 'png')) {
        $trnprt_idx_s = imagecolortransparent($source_gdimg);
        if ($trnprt_idx_s >= 0) { // 透過色が設定されている
            // truecolor イメージを (256色)パレットイメージに変換
            imagetruecolortopalette($output_gdimg, true, 256);

            // 入力画像から透明色に指定してある色(RGBの配列)を取得する
            $trnprt_color = imagecolorsforindex($source_gdimg, $trnprt_idx_s);

            // 色の設定
            $trnprt_idx_s = imagecolorallocate($output_gdimg, $trnprt_color['red'], $trnprt_color['green'], $trnprt_color['blue']);

            // 透明色(にする色)で塗りつぶす
            imagefill($output_gdimg, 0, 0, $trnprt_idx_s);

            // 透明色設定
            imagecolortransparent($output_gdimg, $trnprt_idx_s);
        } elseif ($this->output_format == 'png') {  // PNG-24
            // アルファチャンネル情報を保存するには、アルファブレンディングを解除する必要がある
            imagealphablending($output_gdimg, false);
            imagesavealpha($output_gdimg, true);

            // 透過色設定
            $color = imagecolorallocatealpha($output_gdimg, 0, 0, 0, 127);
            imagefill($output_gdimg, 0, 0, $color);
        }
    }

    imagecopyresampled($output_gdimg, $source_gdimg,
            $ew, $ew, $s_ox, $s_oy, $o_width-$ew*2, $o_height-$ew*2, $s_width, $s_height);
    return $output_gdimg;
}

上記のソースを OpenPNE/webapp/lib/OpenPNE/Img.php の中へ貼り付けます(function resize_imgの次辺りかな)、それだけでは使われませんので、呼び出し側も若干変更します、同じソースに「// リサイズ」という項目(OpenPNE2.12.7:145行目、MyNETS1.2:165行目)があるのでそこで、幅に36が指定された場合のみ、新しいファンクションが呼ばれるように修正。

        //リサイズ
        if ( $w==36 ) {
            // 正方形処理
            $output_img = $this->resize_img_square($source_gdimg, $w );
        } else {
            $output_img = $this->resize_img($source_gdimg, $w, $h);
        }

次にOpenPNEの設定ファイルconfig.php で以下のように ’36×36’ が使えるようになっていることを確認して下さい。

// 画像変換時に許可する解像度のリスト (幅x高さ)
// (空の配列を指定すると無制限になります)
$GLOBALS['_OPENPNE_IMG_ALLOWED_SIZE'] = array('36x36', '76x76', '120x120', '180x180', '240x320', '600x600');

注意:
画像キャッシュが利いている場合は、すぐには反映されないと思いますので、画像キャッシュディレクトリ var/img_cache/XXX/w36_h36/ の内容を全て削除して試して下さい。 (XXXはjpgかpngかgif)

65 Responses to “OpenPNE”

  1. Hiroya@admin より:

    >ちえこ さん

    直書き駄目ですか?
    正しく書けば少なくとも「Fatal error: require_once」は消えると思うのですが。。。
    ロリポップの場合は確かドメイン直下がこんな感じですよね?
    /home/users/?/?????/web/

    直下にopenpneディレクトリを作って入れているなら
    ↓こんな感じかな?
    /home/users/?/?????/web/openpne/config.php

    ※ ? はサーバによって変わります

  2. ちえこ より:

    回答ありがとうございます。
    ロリポップの絶対パスで
    /home/sites/lolipop.jp/users/ドメイン/web/openpne/config.php
    /home/sites/lolipop.jp/users/ドメイン/web/openpne/
    の二つを試してみましたが、やはり同じエラーが出てしまいます。。。

    上記に書き忘れましたがopenpne2.14.4です。

    エラー内容は

    Warning: require_once(/config.php) [function.require-once]: failed to open stream: No such file or directory in /home/sites/lolipop.jp/users/ドメイン/web/sns/explate/config.php on line 33

    Fatal error: require_once() [function.require]: Failed opening required ‘/config.php’ (include_path=’.:/usr/local/php5/php’) in /home/sites/lolipop.jp/users/ドメイン/web/sns/explate/config.php on line 33

    となっています。

    ご迷惑おかけします。
    いろいろ探し回ってやっと欲しい機能が見つかったのでどうにかして使用したいと思っています。

  3. Hiroya@admin より:

    ああそうか。
    [sns]は[openpne]とは同じ階層へ移動してるんですね。

    ↓こんなイメージ

    +[ドメイン]
     +[web]
      +[openpne]
       +config.php
      +[sns]
       +config.inc.php
       +index.php
       +[explate]
        +config.php

    ってことは

    define(‘OPENPNE_DIR’, ‘/home/sites/lolipop.jp/users/ドメイン/web/openpne/’);

    ちえこさんの2行目に書いてるので行けそうな気がしますがなんでだろう。。
    もう一度確認してもしダメなら下のスクリプトをopenpneフォルダ(PNEのconfig.phpがある場所)に保存してブラウザから起動してみて下さい。

    <?php
    echo dirname(__FILE__);
    ?>

    例えばa.phpで保存したら

    http://ドメイン名/openpne/a.php

    これで正しいパスが表示されるハズなので

    define(‘OPENPNE_DIR’, ‘そのパスをここに入れて’);

    これで試してみて下さい

  4. ちえこ より:

    丁寧にありがとうございます。
    仰るようにopenpneフォルダにa.phpを保存して実行したところ
    /home/sites/lolipop.jp/users/ドメイン/web/openpne
    と表示されましたので
    そのまま入力してみました。

    やはり同じエラーが出てしまいます。
    /home/sites/lolipop.jp/users/ドメイン/web/openpne/
    と最後にスラッシュをつけたものと
    /home/sites/lolipop.jp/users/ドメイン/web/openpne/config.php
    としたものを試しましたが同じくです。

    私のデータベースの入力が間違っているという可能性はありますでしょうか?

    define(‘HOSTSPEC’, $GLOBALS['_OPENPNE_DSN_LIST']['main']['dsn']['mysql○○○.phy.lolipop.jp']);

    define(‘USERNAME’, $GLOBALS['_OPENPNE_DSN_LIST']['main']['dsn']['ユーザ名']);

    define(‘PASSWORD’, $GLOBALS['_OPENPNE_DSN_LIST']['main']['dsn']['パスワード']);

    define(‘DATABASE’, $GLOBALS['_OPENPNE_DSN_LIST']['main']['dsn']['データベース名']);

  5. Hiroya@admin より:

    OpenPNE自体が正常に動いているのであればDBは大丈夫なハズですよ。

    >やはり同じエラーが出てしまいます。
    >/home/sites/lolipop.jp/users/ドメイン/web/openpne/
    >と最後にスラッシュをつけたものと
    >/home/sites/lolipop.jp/users/ドメイン/web/openpne/config.php
    >としたものを試しましたが同じくです。

    ※config.phpの32行目のdefine文に指定する場合は/config.phpは不要なので前者が正しいです。

    あ!。
    さっき私が書いたの違ってますね最後のスラッシュは要らないです。

    誤:define(‘OPENPNE_DIR’, ‘/home/sites/lolipop.jp/users/ドメイン/web/openpne/’);

    正:define(‘OPENPNE_DIR’, ‘/home/sites/lolipop.jp/users/ドメイン/web/openpne’);

    これでどうです?

  6. ちえこ より:

    何度もありがとうございます。
    /を省いてみましたがやはり同じエラーでした。

    試しにドメイン直下にtestと言うフォルダを作成し、その中にtest.jpgとa.htmlを作成し、a.htmlの中にimgタグでtest.jpgのフルパスを入れ実行してみたのですが画像は表示されませんでした。

    ロリポップではフルパスが使用できないとか言うことはありますか?

  7. Hiroya@admin より:

    フルパスは駄目は有り得ないと思うけど。
    それとは関係なくimgタグはURL指定なのでフルパスはダメですよ。

    ◯:<img src=”./test.jp” />
    ◯:<img src=”http://ドメイン/test/test.jp” />
    ×:<img src=”/home/sites/lolipop.jp/users/ドメイン/web/test/test.jpg” />

  8. ちえこ より:

    そうだったんですか(汗)
    いろいろ変えてみたんですが、やはりエラーが出てしまいます。。

    書き込まれている皆様が出来て私だけが出来ないと言うことは私が何か変なことをしているのだと思いますが、32行目とデータベース情報以外は変更していないので見当もつきません。。。

  9. Hiroya@admin より:

    これで試してみて。
    define(‘OPENPNE_DIR’, realpath(dirname(__FILE__).’/../../openpne’));

  10. ちえこ より:

    ありがとうございます。
    上記をコピーして貼り付けしたところ
    Parse error: syntax error, unexpected ‘.’ in /home/sites/lolipop.jp/users/ドメイン/web/sns/explate/config.php on line 32
    このようなエラーが出ました。

  11. ちえこ より:

    連投すみません
    define(‘OPENPNE_DIR’, realpath(dirname(__FILE__).’/../../openpne’));
    の「’」が全角になっていましたので半角の「’」に変更したところ

    Warning: mysql_connect() [function.mysql-connect]: Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2) in /home/sites/lolipop.jp/users/ドメイン/web/sns/explate/config.php on line 61

    Warning: Cannot modify header information – headers already sent by (output started at /home/sites/lolipop.jp/users/whitesnow.jp-tenkomori/web/sns/explate/config.php:61) in /home/sites/lolipop.jp/users/ドメイン/web/sns/explate/smsger/reg_msg.php on line 39

    このようなエラーになりました。。

  12. Hiroya@admin より:

    あれ?DBに接続できないようですね。。。
    ところで日記やコミュはちゃんと書き込みできますよね?
    それとDB内に「smsger」というテーブルができていて1レコードデータが入ってますよね?

  13. Hiroya@admin より:

    構わなければこちらに空メール送っておいて下さい
    hiroyaxxx@gmail.com
    こちらで同じ構造でインストールしたアカウントを送りまので比較してみる方が早いかも。

  14. ちえこ より:

    メールを送らせて頂きました。
    すみませんがよろしくお願いいたします。

  15. ちえこ より:

    すみません、書き込みをひとつ読み飛ばしていました(汗)
    日記やコミュへの書き込みは正常に稼動しています。
    データベース内にもsmsgerとあり、レコード数1と表示されています。

    先ほどメールをお送りしましたのでお時間あるときで結構ですのでご確認お願いいたします。

Leave a Reply

preload preload preload