Posts tagged conf

OpenPNE 管理画面を別ディレクトリにする

1

OpenPNE の管理画面の URL は

http://www.example.com/?m=admin

という URL になります。
これは SNS の URL

http://www.example.com/?m=pc

などと同じ index.php を使用しています。

このため、管理画面だけ IP アドレス制限をしたいなどという場合に、.htaccess などで制限ができません。

OpenPNE のセットアップマニュアルには 「6-3. 管理画面を別ドメインで運用する (オプション)」という内容で別ドメインで運用する方法が紹介されています。

しかし、レンタルサーバなどでバーチャルドメインなどが使用できない場合に管理画面を別ディレクトリにして .htaccess などでIPアドレス制限や Basic 認証をかけられるようにする方法です。

- OPENPNE_DIR
  ├ bin
  ├ lib
  ├ var
  ├ webapp
  ├ webapp_ext
  ├ webapp_biz
  └ config.php
- public_html
  ├ config.inc.php
  ├ index.php

の public_html 以下のファイルを public_html/admin ディレクトリ以下にコピーする

-public_html
  ├  admin  (管理画面のディレクトリ名)
    ├ config.inc.php
    ├ index.php
   ・
   ・
   ・

コピーした public_html/admin/config.inc.php を書き換える

< ?php
/**
 * @copyright 2005-2007 OpenPNE Project
 * @license   http://www.php.net/license/3_01.txt PHP License 3.01
 */

define('OPENPNE_DIR', realpath('../../'));        // ディレクトリ階層が違うので合わせるために変更する
require_once OPENPNE_DIR . '/config.php';

// 管理画面のベースURL設定
define('OPENPNE_ADMIN_URL', 'http://www.exmaple.com/admin/');

// 無効にするモジュール
$GLOBALS['_OPENPNE_DISABLE_MODULES'] = array('pc', 'ktai');

?>

これで、htt://www.exmple.com/admin/?m=admin でアクセスできるようになります。

注意点は ?m=admin をつけないとアクセスできません。
また、元の http://www.example.com/?m=admin でアクセスできないように

// 無効にするモジュール
$GLOBALS['_OPENPNE_DISABLE_MODULES'] = array('admin', 'setup');

を public_html/config.inc.php に追加してください。

また、前回のエントリで紹介した 「特定ページを SSL で接続する」 で管理画面を SSL で接続する設定をしている場合は

// 管理画面のベースURL設定
define('OPENPNE_ADMIN_URL', 'https://www.exmaple.com/admin/');

のように URL も忘れずに https にしておかないとアクセスできなくなります。

OpenPNE 特定ページを SSL で接続する

3

OpenPNE で個人情報などを送信するようなフォームや管理画面を SSL で接続する方法です。

SSL を使用するように設定を変更する

openpne/config.phpの以下の行を変更
特定ページを SSL で接続するように設定
define('OPENPNE_USE_SSL_PARAM', false);define('OPENPNE_USE_SSL_PARAM', true);に変更
これだけで特定ページが SSL で接続されるようになります。

SSL を使用したいアクションを追加する

デフォルトで SSL 接続されるようになっているページ以外も SSL 接続にしたい場合は

$GLOBALS['_OPENPNE_SSL_REQUIRED'] = array(
'pc' => array(
    'page_o_regist_prof',  'page_o_regist_prof_confirm', 'do_o_regist_prof',
    'page_o_regist_intro', 'page_o_ri', 'page_o_regist_end',
    'page_h_config_prof', 'page_h_config_prof_confirm', 'do_h_config_prof',
    'page_h_config_ktai', 'do_h_config_ktai_send',
),
'ktai' => array(
    'page_o_login', 'do_o_login', 'do_o_easy_login',
    'page_o_login2', 'do_o_update_ktai_address',
    'page_o_regist_pre', 'page_o_regist_input', 'do_o_insert_c_member',
    'page_o_regist_end',
    'page_o_password_query', 'do_o_password_query',
    'page_h_config_prof', 'do_h_config_prof_update_c_member',
    'page_h_config_easy_login', 'do_h_config_easy_login',
    'page_h_config_mail', 'do_h_config_mail_insert_c_ktai_address_pre',
    'page_h_pc_send', 'page_h_pc_send_confirm', 'do_h_pc_send_insert_c_pc_address_pre',
    'page_h_config_password_query', 'do_h_config_password_query_update_password_query',
    'page_h_config_password', 'do_h_config_password_update_password',
));

となっているところに SSL 接続したいアクションを追加していく。
例えば、携帯ではリマインダーは SSL 接続になりますが PC では SSL 接続ではありません。
そこで PC でも SSL にしたい場合は上の pc の配列にリマインダーのアクションの “page_o_password_query” を追加します。
これで http://www.example.com/?m=pc&a=page_o_password_query という URL は自動的に
https://www.example.com/?m=pc&a=page_o_password_query へリダイレクトされます。

注意点は上記の URL からフォームが送信される ?m=pc&a=do_o_password_query というURL も SSL にする必要があります。
これをしないとフォームの画面は SSL でも送信先が SSL ではなくなってしまいます。

PC 用のリマインダーを SSL にする場合は “page_o_password_query” と “do_o_password_query” の2つを追加する必要があるということです。

確認画面が入るフォームなどではフォーム画面表示アクション、確認画面表示アクション、実行アクションと3つ追加する必要があります。

ユーザに SSL を使用するか選択させるアクションの追加

ユーザが SSL を使用するか選択できるリストというのもあります。

$GLOBALS['_OPENPNE_SSL_SELECTABLE'] = array(
'pc' => array(
    'page_h_config', 'do_h_config_1', 'do_h_config_2', 'do_h_config_3',
    'page_o_login', 'page_o_tologin', 'do_o_login',
),
'ktai' => array(
    'page_h_config',
));

このリストに追加するとフォームの右上やリンクの下に SSL 用のリンクが表示されユーザが SSL の使用をするか選択することができます。

OpenPNE コンテンツをセンター寄せにする

0

OpenPNE のデザインは左寄せなのですが、これをセンター寄せに変更したいという要望がありました。
最初は CSS に
.ext_sub_container { width: 720px;margin: 0px auto; }を追加してみたのですが、やはり IE ではうまく表示できません。
そこでテンプレートを見直すと
inc_header.tpl 339行目
<div align="left">というを
<div align="center">に変更したらうまく行きました。

ちなみに OpenPNE テンプレートのカスタマイズ でも書きましたが
/openpne/webapp/modules/pc/templates/inc_header.tpl
/opnepne/webapp_ext/modules/pc/templates/inc_header.tpl
コピーしてからカスタマイズすると元のファイルを残したままカスタマイズできるのでお勧めです。
その場合は /openpne/config.php
define('USE_EXT_DIR', false);
define('USE_EXT_DIR', true)に変更するのをお忘れなく。

OpenPNE 画像を色々なサイズで表示する

1

以前書いたエントリ「OpenPNE 画像の保存、表示方法 」で、OpenPNE にアップロードした画像の表示方法を紹介しました。

表示方法は下記のとおりです。
<img src=&qt;({t_img_url filename=$pet.image1 w=180 h=180})&qt;>

しかし、この方法では 240×240 のような画像が表示できませんでした。
ソースを追ってみると設定ファイルで許可するサイズを設定するところがありました。

openpne/config.php
$GLOBALS['_OPENPNE_IMG_ALLOWED_SIZE'] = array('76x76', '120x120', '180x180');

この配列に ’240×240′ を追加すれば 縦か横の長い方が 240px の写真が表示できます。
また、
$GLOBALS['_OPENPNE_IMG_ALLOWED_SIZE'] = array();
のように空の配列にすれば制限がなくなり、自由に大きさを指定できます。
ただ、制限はかけておいた方がいいでしょう。

OpenPNE テンプレートのカスタマイズ

2

OpenPNE は Smarty を使用していますが、そのテンプレートを修正したい場合、直接オリジナルのテンプレートを編集するのではなくカスタマイズ用のテンプレートを作成して修正することができます。

ディレクトリは下記になります。
オリジナルのテンプレート
/openpne/webapp/modules/pc/templates/
カスタマイズ用のテンプレート
/openpne/webapp_ext/modules/pc/templates/

/openpne/webapp_ext/modules/pc/templates/ ディレクトリは最初からはないので作成します。
次にカスタマイズしたいテンプレートをオリジナルのテンプレートディレクトリからカスタマイズ用のディレクトリにコピーします。

次に /openpne/config.php の
define('USE_EXT_DIR', false);

define('USE_EXT_DIR', true)
に変更すれば、カスタマイズ用ディレクトリにテンプレートが存在すればそちらを優先して使用されます。

カスタマイズ失敗してもカスタマイズ用のテンプレートを削除すればオリジナルのテンプレートが使用されますので、便利ですね。
この /openpne/webapp_ext/ ディレクトリはテンプレート以外でも webapp ディレクトリのファイルを上書きできます。

Smarty のマルチバイト対応

0

マルチバイトの文字列を指定行数で強制改行する仕様があって、wordwrap 関数をマルチバイト化してさらに Smarty のプラグインを作ろうと思っていたらありました。

Smarty のマルチバイト対応
Artisan Version管理システム

マルチバイト処理に弱いとされる、Smartyをマルチバイト対応とし、よりアプリケーション内で役立てることができるよう、オリジナルの関数や、関数に改造を行っています。

CakePHP ヘルパーの出力を echo を使わずに出力する方法

2

※この投稿の方法はバージョン1.1 までしか使用できないようです。1.2 のソースを確認したところ、$html->input の$return パラメータはなくなっていました。/app/config/core.php に AUTO_OUTPUT という定数もなくなっていました。ご注意ください。

Cakephp のヘルパーを使用していて
<?php echo $html->input('Model/filed', array()); ?>と書くところを
<?php $html->input('Model/field', array()); ?>と echo を使用せずに出力するには
/app/config/core.php
AUTO_OUTPUT = true;にすれば、自動的に出力するようになります。

私はつい echo を書き忘れてしまうので助かります。

ヘルパーのメソッドの $return パラメータを true にするとこの AUTO_OUTPUT を無効にすることもできます。
ただ、各メソッドによって、$return パラメータの位置がバラバラなので、書くときにはヘルパーのソースを確認する必要があるかと思います。

ちなにみに input の場合は
<?php $html->input('Model/field', array(), true); ?>とすると自動出力を抑止できますので、上記は何も表示されなくなります。

CakePHP 日本語マニュアル
10章 ヘルパー

CakePHP コントローラのflash メソッド

2

データを更新した後などに「更新しました」などのメッセージを簡単に出せるのがコントローラのflash メソッド。
コントローラで、
$this->flash('更新しました', '/users');
などとすることにより、メッセージを簡単に出せる。
2つ目の引数は飛び先URL を指定できる。

ちなみにこの flash メソッドは下記のようになっています。
/cake/libs/controller/controller.php

function flash($message, $url, $pause = 1) {
    $this->autoRender = false;
    $this->autoLayout = false;
    $this->set('url', $this->base . $url);
    $this->set('message', $message);
    $this->set('pause', $pause);
    $this->set('page_title', $message);

    if (file_exists(VIEWS . 'layouts' . DS . 'flash.thtml')) {
        $flash = VIEWS . 'layouts' . DS . 'flash.thtml';
    } elseif ($flash = fileExistsInPath(LIBS . 'view' . DS . 'templates' . DS . "layouts" . DS . 'flash.thtml')) {
    }
    $this->render(null, false, $flash);
}

上のソースを見ると分かるように、この flash メソッドのレイアウトは
$layout = "hoge";
とか指定しても指定したレイアウトでは表示されません。

flash メソッドでは flash.thtml というレイアウトを使用することしかできません。
/app/views/layouts/flash.thtml
を探してなければ、
/cake/libs/view/templates/layouts/flash.thtml
のデフォルトのレイアウトを使用します。

また、デフォルトの flash.thtml は

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><?php echo $page_title?></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<?php if(Configure::read() == 0) { ?>
<meta http-equiv="Refresh" content="<?php echo $pause?>;url=<?php echo $url?>"/>
<?php } ?>
<style><!--
P { text-align:center; font:bold 1.1em sans-serif }
A { color:#444; text-decoration:none }
A:HOVER { text-decoration: underline; color:#44E }
--></style>
</head>
<body>
<p><a href="<?php echo $url?>"><?php echo $message?></a></p>
</body>
</html>

のようになっていて、
DEBUG モードで DEBUG = 0 を指定していると meta タグを利用して勝手に画面遷移します。DEBUG モードが 0 以外の場合はメッセージをクリックすると指定したURLに画面遷移します。

非常にシンプルなレイアウトですので、使用するときは、
/app/views/layouts/flash.thtml
にコピーしてカスタマイズした方がよいでしょう。

CakePHP デバッグモード

1

デバッグモードのメモ

/app/config/core.php の52行目に
define('DEBUG', 0);と定義されているのがデバッグモード

この値を変更することにより、本番環境、開発環境と切り替えることができる。

DEBUG の値は
0: プロダクションモード。エラーは出力されず、デバッグメッセージも表示されません。
1: 開発モード。 Warnings とエラー、デバッグメッセージを表示します。
2: 開発モード。実行されたSQL 文が表示されます。
3: 開発モード。2に加えて、現在のオブジェクト(通常はコントローラ)のフルダンプも表示されます。

DEBUG=1 で開発を行い、データ取得などの挙動が考えているのと違うときに、
DEBUG=2 にするという感じでやっています。
あまり、 DEBUG=3 を使用していないなあ。コントローラのダンプなので量が多すぎてかえって見づらいので、
debug($hoge);などで必要なときに個別にダンプを出してしまいます。

もちろん本番環境では DEBUG=0 です。

CakePHP 実行したSQL を表示する方法

1

開発中に実行されたSQLを表示したいことは多いと思います。

/app/config/core.php
の52行目あたりにある
define('DEBUG', 1);

define('DEBUG', 2);
と、デバッグレベルを2以上にするとブラウザの一番下にSQLが表示されます。
デバッグレベル3にすると「Controller dump」と表示され
そのときのコントローラの print_r と実行されたSQLが表示されます。

デバッグレベル2だと実行されたSQLのみ表示されます。

開発時には重宝しそうです。

Go to Top