Sponsored Link

2008年5月アーカイブ

インストール備忘録です~。再度インストールするときに便利ですよね。

OS  CentOS5(フルインストール)


Symfonyのインストール

pear channel-discover pear.symfony-project.com
pear install symfony/symfony

まずはMySQLのインストール

yum -y install mysql-server

必要なものをもろもろインストール

yum install php-mysql php-xml php-pear

Mysql起動

/etc/rc.d/init.d/mysqld start

自動起動設定
chkconfig mysqld on

一応確認
chkconfig --list mysqld

公開ディレクトリ内(/var/www/html/)に新たにプロジェクトディレクトリを作成(セキュリティ無視)

mkdir symfonytest

そのディレクトリに移動

cd symfonytest

プロジェクト作成

symfony init-project symfonytest

アプリケーション作成

symfony init-app test


サイトにアクセスして画像が表示されないときはシンボリックリンクをはる

ln -s /usr/share/pear/data/symfony/web/sf /プロジェクトディレクトリ/web/sf

これでひと段落ですね。

OpenPNEのセッション情報はデフォルトでは公開フォルダ内のみで有効です(当然ですね)

でも上位のディレクトリとかでもこのセッション情報を利用したいことってありますよね。例えばヤフーのトップページみたいに通常サイトの右側にログイン情報(○通のメッセージがあります~とかね)の枠とかを作るとか。

こういうときは以下を変更すれば可能です。


/webapp/init.inc の105行目あたり

ini_set('session.cookie_path', $url['path']);

  を
ini_set('session.cookie_path', "/"');

に変更。

次に/webapp/init.inc の

//144行目あたりの
setcookie(session_name(), session_id(), $expire, $this->cookie_path);

//182行目あたりの
setcookie(session_name(), session_id(), $expire, $this->cookie_path);

  を

//144行目あたり
setcookie(session_name(), session_id(), $expire, "/");

//182行目あたり
setcookie(session_name(), session_id(), $expire, "/");

に変更すればサイト全体でセッション情報を活用できるようになります。

しかし!!

この場合はクッキーの有効範囲がサイト全体で有効になるため、そのサイト内で別にクッキーを使っている場合は競合する恐れがあります。もしも同じサイト内でOpenPNEを2つ以上構築している場合でもセッション情報が失われてログイン画面に戻ってしまいます。

セッションとクッキーの知識を装備して、うまく使い分けてください。

OpenPNEではポイント機能があって、日記やコミュに書き込みするなどのアクションごとにポイントが加算される機能があります。
この機能はすごく便利なのですが、「日記を書く」→「日記を削除」の繰り返しでどんどんポイントが増えていってしまいます。そのため日記を削除するなどのマイナスアクションをする度にポイントを減算するコードを書いてみました。

/webapp/lib/db/point.phpの最後に以下を追加します。

function db_point_dec_point($c_member_id, $point)
{
    if (!OPENPNE_USE_POINT_RANK) {
        return false;
    }
    
    // 管理者は減算しない
    if (!OPENPNE_IS_POINT_ADMIN && $c_member_id == 1) {
        return false;
    }

$sql = 'SELECT c_profile_id, public_flag_default FROM c_profile WHERE name = \'PNE_POINT\'';
if (!$c_profile = db_get_row($sql, array(), 'main')) {
return false;
}
$c_profile_id = $c_profile['c_profile_id'];
$public_flag = $c_profile['public_flag_default'];

$sql = 'SELECT value FROM c_member_profile WHERE c_member_id = ? AND c_profile_id = ?';
$params = array(intval($c_member_id), intval($c_profile_id));
$p = db_get_one($sql, $params, 'main');

// プロフィールにポイントがなければ追加
if (is_null($p)) {
$data = array(
'c_member_id' => intval($c_member_id),
'c_profile_id' => intval($c_profile_id),
'c_profile_option_id' => 0,
'value' => '0',
'public_flag' => $public_flag,
);
db_insert('c_member_profile', $data);
}

// ポイント減算
$p = intval($p) - intval($point);

$data = array('value' => $p);
$where = array('c_member_id' => intval($c_member_id), 'c_profile_id' => intval($c_profile_id));
db_update('c_member_profile', $data, $where);

return $p;
}


ポイントを減算したいアクションごとのファイルの最後かがある場合はその一行前に以下を追加
例 日記を削除したした時にポイントを減算する場合は以下の2ファイルの最後尾の「openpne_redirect・・・・」の前の行に下のコードを追加します。
/webapp/modules/pc/do/fh_diary_delete_c_diary.php (PC用)
/webapp/modules/ktai/do/fh_diary_delete_c_diary.php (携帯用)

        if (OPENPNE_USE_POINT_RANK) {
            //ポイント減算
            $point = db_action_get_point4c_action_id(4);
            db_point_dec_point($u, $point);
        }


日記を削除したときにこれでポイントが減算されるようになります。


他のアクションの減算方法は後日説明します。(眠い・・・)アクションごとに若干ソースが変わります。