11月 29
Google AJAX Search API を使用ã—ã¦ã‚ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã‚„ä½æ‰€ã‹ã‚‰è‡ªåˆ†ã®ã‚µã‚¤ãƒˆã« Google Map を表示ã•ã›ã‚‹ãƒ¡ãƒ¢
Google AJAX Search API KEY 㨠Google Map API KEY を指定ã—㦠JavaScript ã‚’èªã¿è¾¼ã‚€
<script src="http://www.google.com/uds/api?file=uds.js&v=1.0&key=Google AJAX Search API KEY" type="text/javascript"></script>
<script src="http://maps.google.com/maps?file=api&v=2.x&key=Google Map API KEY" type="text/javascript"></script>
実際ã®è¡¨ç¤ºéƒ¨åˆ†ã€‚ q=ã‚ーワードã§è¡¨ç¤ºã•ã›ã‚‹åœ°å›³ã®ã‚ーワード(ã¾ãŸã¯ä½æ‰€ï¼‰ã‚’指定ã™ã‚‹ã€‚
<script type="text/javascript">
<!--
var gls;
var gMap;
function OnLocalSearch() {
if (!gls.results) return;
var first = gls.results[0];
var point = new GLatLng(parseFloat(first.lat), parseFloat(first.lng));
var zoom = 15;
gMap.addControl(new GSmallMapControl());
gMap.addControl(new GMapTypeControl());
gMap.setMapType(G_MAP_TYPE);
gMap.setCenter(point, zoom);
var marker = new GMarker(point);
gMap.addOverlay(marker);
GEvent.addListener(marker, "click", function() {
marker.openInfoWindowHtml(html);
});
}
function load() {
gMap = new GMap2(document.getElementById("map"));
gMap.addControl(new GSmallMapControl());
gMap.addControl(new GMapTypeControl());
gMap.setCenter(new GLatLng(0, 0));
gls = new GlocalSearch();
gls.setCenterPoint(gMap);
gls.setSearchCompleteCallback(null, OnLocalSearch);
var q = "横浜ランドマークタワー";
gls.execute(q);
}
//-->
</script>
<body onLoad="load()">
<div id="map" style="width: 410px; height: 320px"></div>
</body>
å„ API KEY ã®å–å¾—ã¯ä¸‹è¨˜ãƒšãƒ¼ã‚¸ã‹ã‚‰
Sign-up for an AJAX Search API Key – Google AJAX Search API – Google Code
Sign Up for the Google Maps API – Google Maps API – Google Code
11月 28
テストデータを入れるãªã©ãƒ†ã‚¹ãƒˆã¨ç’°å¢ƒã§ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’切り替ãˆãŸã„ã¨ããŒã‚りã¾ã™ã€‚
CakePHP ã§ãれをやる方法ã§ã™ã€‚
モデル㮠$useDbConfig ã« app/config/database.php ã§å®šç¾©ã•れã¦ã„ã‚‹ $default ãŒãƒ‡ãƒ•ォルトã§ä½¿ç”¨ã•れã¾ã™ã€‚
database.php ã« $test ãªã©ä½¿ç”¨ã—ãŸã„データベースã®åˆ†ã ã‘定義を増やã—ã€
ãれをモデルã§
$this->useDbConfig = 'test';
ã®ã‚ˆã†ã«æŒ‡å®šã™ã‚Œã°ã„ã„ã ã‘ã§ã™ã€‚
app/app_model.php ã®ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ã§è¨å®šã™ã‚‹ã®ãŒä¸€ç•ªç°¡å˜ã‹ã‚‚ã—れã¾ã›ã‚“。
CakePHP 環境ã«å¿œã˜ã¦DBã®è¨å®šã‚’変ãˆã‚‹ | Shin x blog
ã§è‰²ã€…ãªæ–¹æ³•ãŒç´¹ä»‹ã•れã¦ã„ã¾ã™ã€‚
“CakePHPã§è¶…ç°¡å˜ã‚¹ã‚±ãƒ¼ãƒ©ãƒ“リティ” フォーラム– CakePHP Users in Japan
ã¾ãŸã€ã“ã® $useDbConfig を使用ã—ã¦
「マスターã¨ã‚¹ãƒ¬ãƒ¼ãƒ–ã®MYSQLサーãƒãŒã‚りã¾ã™ã€‚レプリケーション機能ã§ã€ãƒžã‚¹ã‚¿ãƒ¼ã‹ã‚‰ã‚¹ãƒ¬ãƒ¼ãƒ–ã«ãƒ‡ãƒ¼ã‚¿ãŒå¸¸ã«ã‚³ãƒ”ーã•れã¦ã„ã¾ã™ã€‚ãƒ‡ãƒ¼ã‚¿ã®æ›´æ–°ãƒ»è¿½åŠ ã¯ãƒžã‚¹ã‚¿ãƒ¼ã«å¯¾ã—ã¦è¡Œã„ã€ãƒ‡ãƒ¼ã‚¿ã®æ¤œç´¢ã¯ã‚¹ãƒ¬ãƒ¼ãƒ–ã§ã€ã¨ã„ã†å ´åˆã«ã¯ã©ã†ã™ã‚Œã°ã‚ˆã„ã§ã—ょã†ã‹ï¼Ÿã€
ã¨ã„ã†ã‚ˆã†ãªå ´åˆã®ã™ã”ãç°¡å˜ãªæ–¹æ³•ãŒç´¹ä»‹ã•れã¦ã„ã¾ã™ã€‚
モデル㮠beforeSave,afterSave,beforeDelete,afterDelete を使用ã—ã¦ãƒžã‚¹ã‚¿ãƒ¼ã¨ã‚¹ãƒ¬ãƒ¼ãƒ–を切り替ãˆã¦ã„ã¾ã™ã€‚
11月 28
MySQL ã§æ–‡å—化ã‘を防ããŸã‚ã«ã¯
SET NAMES utf8
ã®ã‚ˆã†ã« SET NAMES を実行ã™ã‚‹ã®ãŒæœ‰åйãªã®ã§ã™ãŒã€ã“れを app/config/database.php ã§è¨å®šã™ã‚‹æ–¹æ³•ã§ã™ã€‚
'encoding'=>'æ–‡å—コード'
をデータベースã®è¨å®šé …ç›®ã«è¿½åŠ ã—ã¦ã‚„ã‚‹ã ã‘ã§ã™ã€‚
具体的ã«ã¯ app/config/database.php ãŒä¸‹è¨˜ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚
var $default = array(
'driver' => 'mysql',
'connect' => 'mysql_connect',
'host' => 'localhost',
'login' => 'user',
'password' => 'password',
'database' => 'dbname',
'prefix' => '',
'encoding' => 'utf8'
);
cake/libs/model/dbo/dbo_mysql.php ã§ä¸‹è¨˜ã®ã‚ˆã†ã«å®Ÿè¡Œã•れã¦ã„ã¾ã™ã€‚
function connect() {
(ç•¥)
if (isset($config['encoding']) && !empty($config['encoding'])) {
$this->setEncoding($config['encoding']);
}
return $this->connected;
}
function setEncoding($enc) {
return $this->_execute('SET NAMES ' . $enc) != false;
}
11月 27
CakePHP ã®ãƒ¢ãƒ‡ãƒ«ã® validation ã®æ‹¡å¼µã®ãƒ¡ãƒ¢ã®ç¶šãã§ã™ã€‚
åŒã˜ãƒ•ォームã®é …ç›®ã§é•ã†ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’出ã—ãŸã„ã¨ããŒã‚りã¾ã™ã€‚
例ãˆã°ãƒ¦ãƒ¼ã‚¶ç™»éŒ²ãƒ•ォームã§ãƒ¦ãƒ¼ã‚¶ID ãŒãƒ•ォーマットエラーãªã®ã‹ã€æ—¢ã«ä½¿ç”¨ã•れã¦ã„ã‚‹ã®ã‹ãªã©ã§ã™ã€‚
models/users.php
var $validate = array(
'loginid' => '/^[0-9a-zA-Z]{8}$/',
);
function validates($data=array()) {
if(empty($data)) {
$data = $this->data;
}
parent::validates($data);
// loginid ã®ãƒ¦ãƒ‹ãƒ¼ã‚¯ãƒã‚§ãƒƒã‚¯
if ($this->findByLoginid($data["User"]["loginid"])) {
$this->invalidate("loginid_unique");
}
if (count($this->validationErrors)>0) {
return false;
} else {
return true;
}
}
æ—¢ã«loginid ãŒç™»éŒ²æ¸ˆã¿ã®å ´åˆã¯
$this->invalidate('loginid_unique');
ã¨ã—ã¦ã„ã¾ã™ã€‚
invalidate ã«æŒ‡å®šã™ã‚‹ã®ã¯å®Ÿéš›ã«å˜åœ¨ã—ãªã„ã‚‚ã®ã§ã‚‚大丈夫ãªã®ã§ãれを使用ã—㦠view ã§ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’分ã‘ã¦è¡¨ç¤ºã—ã¾ã™ã€‚
views/users/regist.thtml
ID:< ?php echo $html->password('User/loginid'); ?>
< ?php echo $html->tagErrorMsg("User/loginid", "IDã¯è‹±æ•°å—8æ–‡å—ã§å…¥åŠ›ã—ã¦ãã ã•ã„"); ?>
< ?php echo $html->tagErrorMsg("User/loginid_unique", "IDã¯æ—¢ã«ä½¿ç”¨ã•れã¦ã„ã¾ã™ã€‚ä»–ã®ID を指定ã—ã¦ãã ã•ã„"); ?>
11月 27
CakePHP ã®ãƒ¢ãƒ‡ãƒ«ã® validation ã®æ‹¡å¼µã®ãƒ¡ãƒ¢ã§ã™ã€‚
ユーザ登録フォームãªã©ã§ãƒ‘スワードã®å†ç¢ºèªã®ãƒãƒªãƒ‡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’行ã†ã¨ãã®æ–¹æ³•ã§ã™ã€‚
views/users/regist.thtml
パスワード:< ?php echo $html->password('User/password'); ?>
確èªç”¨ãƒ‘スワード:< ?php echo $html->password('User/password2'); ?>
< ?php echo $html->tagErrorMsg('User/password2', 'パスワードãŒä¸€è‡´ã—ã¾ã›ã‚“');
※users テーブルã«password2 ã®ã‚«ãƒ©ãƒ ã¯ãªãã¦ã‹ã¾ã„ã¾ã›ã‚“。
models/users.php
function validates($data=array()) {
if(empty($data)) {
$data = $this->data;
}
parent::validates($data);
if ($data["User"]["password"]!==$data["User"]["password2"]) {
$this->invalidate("password2");
}
if (count($this->validationErrors)>0) {
return false;
} else {
return true;
}
}
AppModel クラス㮠validation メソッドも実行ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã®ã§ã€å¿…ãš
parent::validates($data);
を書ã‹ãªã„ã¨ã„ã‘ã¾ã›ã‚“。
11月 16
æµæ¯”å¯¿ã§æ‰“ã¡åˆã‚ã›ã®å¾Œã€ä»¥å‰ã‹ã‚‰é£Ÿã¹ã¦ã¿ãŸã‹ã£ãŸã‚ムカツã§ãƒ©ãƒ³ãƒã—ã¾ã—ãŸã€‚カツãŒãŠã„ã—ã„ã®ã¯ã‚‚ã¡ã‚ã‚“ã§ã™ãŒã€ã”ã¯ã‚“ã‚„ã‚ャベツもã™ã”ããŠã„ã—ã‹ã£ãŸã§ã™ã€‚
11月 11
CakePHP ã§ãƒã‚°å‡ºåŠ›ã•ã›ã‚‹ãƒ¡ãƒ¢ã§ã™ã€‚
$this->log(ãƒã‚°ã«å‡ºåŠ›ã™ã‚‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸, ãƒã‚°ç¨®åˆ¥);
出力ã™ã‚‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯æ–‡å—列ã§ã‚‚é…列ã§ã‚‚ã‹ã¾ã„ã¾ã›ã‚“。é…列ã®å ´åˆã¯ print_r ã•れãŸã‚‚ã®ãŒå‡ºåŠ›ã•れã¾ã™ã€‚
ãƒã‚°ã®ç¨®åˆ¥ã¯ LOG_DEBUG ã§ debug.log 〠LOG_ERROR ã§ error.log ã«å‡ºåŠ›ã•れã¾ã™ã€‚デフォルト㯠LOG_ERROR ã§ã™ã€‚
ãƒã‚°ãƒ•ァイル㯠LOGS ã§æŒ‡å®šã•れãŸãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã¸å‡ºåŠ›ã•れã¾ã™ã€‚
デフォルト㯠/app/tmp/logs ã§ã™ã€‚
ãŸã ã“ã®å®šæ•° LOGS 㯠cake/config/paths.php ã§æŒ‡å®šã•れã¦ã„ã‚‹ã®ã§ã€app/config/core.php ã§å®šç¾©ã•れã¦ã„る定数ã®ã‚ˆã†ã«æ°—軽ã«å¤‰æ›´ã—ãªã„æ–¹ãŒã„ã„ã‹ã‚‚ã—れã¾ã›ã‚“。
ãƒã‚°ãƒ•ァイルãŒå˜åœ¨ã—ãªã„å ´åˆã¯ãƒ•ァイルを作æˆã—ã¦ãれã¾ã™ã€‚
出力ã•れるãƒã‚°ã¯ä¸‹è¨˜ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚
2007-11-11 06:54:54 Error: メッセージ
LOG_DEBUG を指定ã™ã‚‹ã¨ãƒã‚°ã® “Error” ã®éƒ¨åˆ†ãŒ “Debug” ã«ãªã‚Šã¾ã™ã€‚
ã“ã® log メソッド㯠Object クラスã«ã‚りã¾ã™ã€‚Object クラス㯠CakePHP ã®å…¨ã¦ã®ã‚¯ãƒ©ã‚¹ã§ç¶™æ‰¿ã•れるクラスãªã®ã§ã€ã‚³ãƒ³ãƒˆãƒãƒ¼ãƒ©ã€ãƒ¢ãƒ‡ãƒ«ã€ãƒ“ューã©ã“ã‹ã‚‰ã§ã‚‚ $this->log() ã§ãƒã‚°ã«å‡ºåŠ›ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
11月 10
å…ˆã®ã‚¨ãƒ³ãƒˆãƒªã§æ›¸ã„ãŸã€ŒCakePHP findBy ã§è¤‡æ•°æ¡ä»¶ã®æŒ‡å®šã§ OR も指定å¯èƒ½ã€ã§ã™ãŒã€findByHogeAndFoo ãªã©ã®å‡¦ç†ãŒã©ã†ãªã£ã¦ã„ã‚‹ã‹æ°—ã«ãªã£ãŸã®ã§èª¿ã¹ãŸã¨ãã®ãƒ¡ãƒ¢ã§ã™ã€‚
- findByHogeAndFoo メソッドãŒå®Ÿè¡Œã•れる㨠model_php5.php ( Model クラス ) ã® __call メソッドãŒå®Ÿè¡Œã•れる
- __call メソッドã§ã¯ DboSource クラス㮠query メソッド㫠findByHogeAndFoo ã®ãƒ¡ã‚½ãƒƒãƒ‰åã¨æ¡ä»¶ã®å€¤ã‚’渡ã™
- DboSource クラス㮠query メソッドã§ã¯ã€findBy ã¾ãŸã¯ã€findAllBy ã®å¾Œã‚ã®æ–‡å—列をå–り出ã™
- å–り出ã—ãŸæ–‡å—åˆ—ã‚’å°æ–‡å—ã«å¤‰æ›ã—ã¦ã•ら㫠AND ã‚’ _and_ã€OR ã‚’ _or_ ã«å¤‰æ›ã™ã‚‹
- _or_ ã¾ãŸã¯ _and_ ã§åˆ†å‰²ã—ã¦ãƒ•ィールドをå–り出ã™
- AND ã¾ãŸã¯ OR ã«ã—ãŸãŒã£ã¦ SQL ã®æ¡ä»¶ã‚’組ã¿ç«‹ã¦ã‚‹
ã¨ã„ã†ã‚ˆã†ãªã“ã¨å‡¦ç†ãŒã•れã¦ã„ã¾ã—ãŸã€‚
ã¾ã¨ã‚ã‚‹ã¨
- 複数指定ã¯ã„ãã¤ã§ã‚‚å¯èƒ½
- AND ã¾ãŸã¯ OR ã¯æ··åœ¨ã—ã¦æŒ‡å®šã¯ã§ããªã„
ã„ãã¤ã§ã‚‚指定ã¯ã§ãるよã†ã§ã™ãŒã€ãŸãã•ã‚“ã®æ¡ä»¶ã‚’ã“ã‚Œã§æŒ‡å®šã™ã‚‹ã¨ã‚½ãƒ¼ã‚¹ã®å¯èªæ€§ãŒä¸‹ãŒã‚Šãã†ã§ã™ã—ã€AND 㨠OR ãŒæ··åœ¨ã§ããªã„ã®ã§æ™®é€šã¯ãã‚“ãªæŒ‡å®šã¯ã—ãªã„ã§ã—ょã†ã€‚
指定ã™ã‚‹å ´åˆã¯2ã¤ãらã„ã«ã¨ã©ã‚ã¦ãŠã„ã¦ã€ãれより多ããªã‚‹å ´åˆã¯ find ã® $conditions ã§æŒ‡å®šã—ãŸæ–¹ãŒç„¡é›£ã ã¨æ€ã„ã¾ã™ã€‚
11月 10
[cakephp]findByã§è¤‡æ•°æ¡ä»¶ã®æŒ‡å®š | blog.hereticsintheworld
ã§ç´¹ä»‹ã•れã¦ã„ãŸ
$this->Model->findByIdAndName( $id, $name )
ãŒæ°—ã«ãªã‚Šã‚½ãƒ¼ã‚¹ã‚’調ã¹ã¦ã¿ãŸã¨ã“ã‚ OR も指定å¯èƒ½ã§ã—ãŸã€‚
$this->Model->findByIdOrName( $id, $name )
ã¡ãªã¿ã« findAll ã§ã‚‚åŒæ§˜ã«æŒ‡å®šå¯èƒ½ã§ã™ã€‚
11月 06
CakePHP ã§ç®¡ç†ç”»é¢ã‚’作æˆã™ã‚‹æ–¹æ³•ã§ã™ã€‚
管ç†ç”»é¢ã‚‚ CakePHP ã§ã¯ç°¡å˜ã«ä½œæˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
è¨å®š
/app/config/core.php ã®ä¸‹è¨˜ã®ã‚³ãƒ¡ãƒ³ãƒˆã‚¢ã‚¦ãƒˆã‚’ã¯ãšã—ã¾ã™ã€‚
define('CAKE_ADMIN', 'admin');
ã“れ㧠http://www.example.com/admin/controller/action ã¨ã„ㆠURL ã§ã‚¢ã‚¯ã‚»ã‚¹ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚
CAKE_ADMIN ã®å€¤ã‚’変更ã™ã‚Œã° URL ã® /admin/ ã®å€¤ãŒå¤‰ã‚りã¾ã™ã€‚
コントãƒãƒ¼ãƒ©
管ç†ç”»é¢ã§ä½¿ç”¨ã™ã‚‹ã‚³ãƒ³ãƒˆãƒãƒ¼ãƒ©ã«ç®¡ç†ç”»é¢ç”¨ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’è¿½åŠ ã—ã¾ã™ã€‚
管ç†ç”»é¢ç”¨ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³å㯠admin_index ã®ã‚ˆã†ã« admin_ ãŒä»˜ãã¾ã™ã€‚
ã“ã® ‘admin’ ã®éƒ¨åˆ†ã‚‚ CAKE_ADMIN ã«ã‚ˆã£ã¦å¤‰ã‚りã¾ã™ã€‚
ビュー
管ç†ç”»é¢ç”¨ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã§è¡¨ç¤ºã™ã‚‹ãƒ‡ãƒ•ォルトã®ãƒ“ューã¯ã‚¢ã‚¯ã‚·ãƒ§ãƒ³åã¨åŒã˜ã§ã™ã€‚admin_index.thtml ã®ã‚ˆã†ã« admin_ を付ã‘ã¾ã™ã€‚
レイアウト
ユーザサイドã®ç”»é¢ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã¨ç®¡ç†ç”»é¢ã¯ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆãŒé•ã†ã“ã¨ãŒå¤šã„ã‹ã¨æ€ã„ã¾ã™ã€‚管ç†ç”»é¢ç”¨ã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚’ admin.thtml ã®ã‚ˆã†ã« views/layouts/ ã«ä½œæˆã—ã¾ã™ã€‚
管ç†ç”»é¢ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹æ™‚ã®å…±é€šå‡¦ç†
管ç†ç”»é¢ã®ã‚¢ã‚¯ã‚»ã‚¹æ™‚ã®å…±é€šå‡¦ç†ã¨ã—ã¦ã€ã‚¢ã‚¯ã‚»ã‚¹åˆ¶é™ã‚’ã—ãŸã‚Šã€ç”»é¢ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã®å¤‰æ›´ãªã©ãŒã‚りã¾ã™ã€‚
個別ã«ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã«è¿½åŠ ã—ã¦ã‚‚ã„ã„ã®ã§ã™ãŒæ¼ã‚Œãªã©ãŒã‚ã‚‹ã¨ã¾ãšã„ã®ã§ã‚³ãƒ³ãƒˆãƒãƒ¼ãƒ©ã® beforeFilter メソッドを使用ã™ã‚‹ã¨ã„ã„ã‹ã¨æ€ã„ã¾ã™ã€‚
管ç†ç”»é¢ã§ä½¿ç”¨ã™ã‚‹ã‚³ãƒ³ãƒˆãƒãƒ¼ãƒ©å…¨ã¦ã«å…±é€šã—ã¦å‡¦ç†ã•ã›ã‚‹ãŸã‚ã«ã€ /app/app_controller.php ã® beforeFilter ã«å‡¦ç†ã‚’è¿½åŠ ã—ã¾ã™ã€‚
http://www.example.com/admin/contoller/action ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã¨
$this->params['admin'] = 'admin'
ãŒã‚»ãƒƒãƒˆã•れã¾ã™ã€‚管ç†è€…用URL ã‹ã©ã†ã‹ã«ã¯ã“れを使用ã—ã¾ã™ã€‚ã¾ãŸã€’admin’ ã®å€¤ã¯ CAKE_ADMIN ã§æŒ‡å®šã—ãŸå€¤ã«ãªã‚Šã¾ã™ã€‚ãŸã¨ãˆã° CAKE_ADMIN ã‚’ hoge ã«ã™ã‚‹ã¨
$this->params['hoge'] = 'hoge'
ã«ãªã‚Šã¾ã™ã€‚
if (defined('CAKE_ADMIN') && !empty($this->params[CAKE_ADMIN])) {
// 管ç†è€…用ã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚’指定
$this->layout = "admin";
// 管ç†è€…用ãƒã‚°ã‚¤ãƒ³ãƒã‚§ãƒƒã‚¯ãªã©ã‚’行ã†
}
Recent Comments