サイトを携帯対応に

Google携帯プロキシ(Google Mobile Proxy)を利用して手軽にサイトを携帯対応にする。

RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^DoCoMo.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^KDDI.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^Vodafone.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^SoftBank.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^J-PHONE.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^Mozilla.+DDIPOCKET.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^Mozilla.+WILLCOM.*
RewriteRule ^$ http://www.google.com/gwt/n?u=http://www.-----.com [R,L]

.htaccessをテキストエディタで開いて「www.—–.com」の部分を自分のサイトのURLに書き換え、アップロード。Nucleus限定ではなく、どんなサイトでも使えるようだ。
Google携帯プロキシ用.htaccess

画像のポップアップでスクロールバー表示

今まではモニターより大きいサイズの画像は、スクロール出来なくて全部見ることはできなかった。F11でフルスクリーンにすると見れるが、わざわざフルスクリーンにしなくても、モニターより小さい画像はスクロールバーは出さない、モニターより大きい画像はスクロールバーを出すという風にして、大きいサイズでもスクロールして見ることが出来るように変更。
テスト画像1 (2400✕1600)
20130119-_dsc2904
テスト画像2 (1200✕800)
20130119-_dsc3565
/nucleus/libs/BODYACTIONS.php を変更

■スクロールバーを出すように変更(scrollbars=noをyesに変更)
136行目を変更	$vars['popupcode'] 		= "window.open(this.href,'imagepopup','status=no,toolbar=no,scrollbars=no,resizable=yes,width=$windowwidth,height=$windowheight');return false;";
                   ↓
$vars['popupcode'] 		= "window.open(this.href,'imagepopup','status=no,toolbar=no,scrollbars=yes,resizable=yes,width=$windowwidth,height=$windowheight');return false;";
■scrollbars=yesに変更すると常にスクロールバーが出るので、画像が小さい場合はスクロールバーを出さないようにする。
132行目を変更	$windowwidth = $width;
                   ↓
$windowwidth = $width+5;
133行目を変更	$windowheight = $height;
                   ↓
 		$windowheight = $height+5;

Nucleus v3.65 不具合

Nucleus v3.65 にバージョンアップしたところ、Multiple Categories [Custom Edition]で、「サブカテゴリの新規作成」で「新しいサブカテゴリを作成」ボタンを押しても、空白画面になり新しいサブカテゴリが作成されないという不具合が発生。
そこで、nucleus/plugins/multiplecategories/index.php の487行目からの6行を

$manager->notify(
'PostAddSubcat',
array(
'subcatid' => $newid
)
);

以下のように修正。

$data = array( 'subcatid' => $newid );
$manager->notify(
'PostAddSubcat',
$data
);

あと、576行からの6行も同じように修正。

$data = array( 'subcatid' => $id );
$manager->notify(
'PostDeleteSubcat',
$data
);

これでサブカテゴリーを追加できるようになるが、アイテム編集画面でサブカテゴリーの追加及び削除ができないという問題が発生。どうも、Nucleus Ver3.65 のバグらしい。
そこで、nucleus/libs/ITEM.php の216行目を以下のように修正。

'	itemid'		=>  $itemid,
                    ↓        ↓        ↓ 
'itemid'	=>  $itemid,

NucleusCMS_3.64_Upgrade

NucleusCMS_3.62からNucleusCMS_3.64にバージョンアップしてたので早速アップグレードしてみた。NucleusCMS_3.62の時もそうだったが、やはりいくつかのNucleusが文字化けしてしまう。最近インストールしたNucleusは文字化けしないが、以前から使ってるものがアップグレードすると全て文字化けしてしまう。
前回の時もそうだったが、globalfunctions.php のMySQLの「CHARSET」が怪しい。NucleusCMS_3.62の globalfunctions.phpとNucleusCMS_3.64の globalfunctions.phpでは記述が少し変わってるので、今回は(405行目)をコメントアウトして文字化けを回避することにした。
/var/www/html/centos/nucleus/libs/globalfunctions.phpの405行目をコメントアウト

sql_set_charset_jp(_CHARSET);
↓
# sql_set_charset_jp(_CHARSET);

ちなみにサーバーの文字セットを確認するには次のコマンドで確認できる。

[root@server1 ~]# echo $LANG
ja_JP.UTF-8

Nucleus 3.62 検索で引っかからない

新規にNucleus 3.62をインストールすると検索に引っかからない語句が結構あった。原因を調べてみると、Nucleus 3.62をインストールするときに、使用する言語を「EUC-JP」にしてインストールした場合、検索に引っかからない語句が結構ある。今まではこの設定でいくつものブログを作ってきたが、特に問題は発生してなかった。使用する語句を「UTF-8」でインストールすると、検索に引っかからない語句があるという問題は発生しない。サーバー(CentOS5)側の文字セットがEUCなので、なんの疑いもなしに「EUC-JP」でインストールしてたが、これからは、Nucleus 3.62もUTF-8を推奨してるように、UTF-8が標準になっていくのだろう。やがてはサーバーもUTF-8にして統一をはかろうと思うが、それはそれで色々と問題が発生しそうだ。

Nucleus 3.62 文字化け

1月にNucleus 3.51にバージョンアップしたばかりだったが、先日、バージョン3.62 日本語版のリリースがあった。日本語などのマルチバイト文字をなるべく正しく処理出来るような追加がされたようだが、今までは文字化けしてなかったのに、バージョンアップしたら文字化けするようになった。
こんな感じに文字化けした。
20110212-ws000003.jpg
色々調べたらどうも globalfunctions.php のMySQLの「CHARSET」に関するところが怪しい。とりあえず、その部分(403行目~438行目)をコメントアウトして文字化けを回避することにした。

/*
* for preventing I/O strings from auto-detecting the charactor encodings by MySQL
* since 3.62_beta-jp
* Jan.20, 2011 by kotorisan and cacher
* refering to their conversation below,
* http://japan.nucleuscms.org/bb/viewtopic.php?p=26581
*
* NOTE: 	shift_jis is only supported for output. Using shift_jis in DB is prohibited.
* NOTE:	iso-8859-x,windows-125x if _CHARSET is unset.
*/
/*  ← コメントアウト(ここから)
if (in_array('mysql',$MYSQL_HANDLER)) {
switch(strtolower(_CHARSET)){
case 'utf-8':
$charset = 'utf8';
break;
case 'euc-jp':
$charset = 'ujis';
break;
case 'gb2312':
$charset = 'gb2312';
break;
case 'shift_jis':
$charset = 'sjis';
break;
default:
$resource = sql_query("show variables LIKE 'character_set_database'");
$fetchDat = sql_fetch_assoc($resource);
$charset  = $fetchDat['Value'];
break;
}
$mySqlVer = implode('.', array_map('intval', explode('.', sql_get_server_info($MYSQL_CONN))));
if ($mySqlVer >= '5.0.7' && function_exists('mysql_set_charset')) {
mysql_set_charset($charset);
} elseif ($mySqlVer >= '4.1.0') {
sql_query("SET CHARACTER SET " . $charset);
}
}
*/ ← コメントアウト(ここまで)

Nucleus 3.51 にバージョンアップ

Nucleus バージョン3.51 日本語版が1年半ぶりにリリースされたので、自宅サーバにインストールされてるいくつかのサイトもバージョンアップすることにした。
作業手順
■ Nucleus バージョン3.51 日本語版をダウンロード

■ 既存データベースのバックアップ

  • 管理画面にログイン、「サイト管理」から「DB保存/復元」を選択
  • 「圧縮する」を選択、「バックアップを作成する」を選択して、保存

■ アップグレードスクリプトを実行

  • ダウンロードしたファイルの中の「upgrades」というフォルダをフォルダごとサーバにアップ
    アップする場所は、「・・・・/nucleus」というディレクトリの中
  • ブラウザから「・・・・/nucleus/upgrades/index.php」へアクセスして、ログイン
    表示されるウェブページに従い、アップグレード操作を実行(一瞬で終わる)
  • アップグレード後にアップした「upgrades」をフォルダごと削除

■ バージョン3.51に合わせてデータベースの内容を変更

  • ダウンロードしたファイルの「overwrites」の中にあるフォルダとかファイルをそっくりサーバにアップ
  • アップする場所は Nucleus の階層構造を変更してなければ、階層構造のとおりに上書きアップ

※元々のコアファイルを変更してたら、最新のコアファイルを変更して終了
今まではカテゴリーの名前の前に<01>という風に番号をつけて、<01>が表示されないようにコアファイルを書き換えて並び替えしてたが、コアファイルを新たに書き換えるのが面倒なので、スキンの「sidemenu.php」に直にカテゴリー名を書いて表示するようにした。最初からこの方法でやってたら楽だったのに、nucleus使い始めた頃は思いつかなかった。(^_^;)

エディタに機能ボタンを追加

Nucleusのエディタに機能ボタンを追加する方法については、nakahara21.comweb関連tips備忘録でいろいろ紹介されているのでこのブログにもちょっとアレンジしてボタンを追加してみる。
Nucleusのエディタに以下の5つの機能ボタンを追加。
・選択範囲を<pre><%nobr%>~<%/nobr%></pre>’で囲むボタン
・特殊文字を変換(<、>、& を &lt;、&gt;、&amp; に変換)するボタン
・リスト形式、番号付きリスト形式、見出しリスト形式のボタン
編集するのは下の3つ (Nucleus CMS v3.41)
 ・nucleus/javascript/edit.js
 ・nucleus/libs/PAGEFACTORY.php
 ・nucleus/language/japanese-euc.php (utf8の場合はjapanese-utf8.php)
 
まずはnucleus/javascript/edit.jsから

function italicThis() { insertAroundCaret('<i>','</i>'); }
の下に、以下の2行を挿入する。
function preThis() { insertAroundCaret('<pre><%nobr%>','<%/nobr%></pre>'); }
function entitiesThis() { entitiesCaret(); }

次に

/* some methods to get things working in Mozilla as well */
の上に以下の関数を挿入する。
function entitiesCaret () {
var textEl = lastSelected;
if (textEl && textEl.createTextRange && lastCaretPos) {
var caretPos = lastCaretPos;
caretPos.text = caretPos.text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;').replace(/'/g, '&#039;');
} else if (!document.all && document.getElementById) {
newText = mozSelectedText().replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;').replace(/'/g, '&#039;');
mozReplace(document.getElementById('input' + nonie_FormType), newText);
}
updAllPreviews();
}

次に、下記のコードを最後尾に追加。

function ullistThis() { insertAroundCaret('<ul><li></li>\n<li></li>\n<li></li>\n<li></li>','</ul>\n'); }
function nolistThis() { insertAroundCaret('<ol><li></li>\n<li></li>\n<li></li>\n<li></li>','</ol>\n'); }
function dllistThis() { insertAroundCaret('<dl><dt></dt>\n<dd></dd>\n<dt></dt>\n<dd></dd>','</dl>\n'); }

今度はnucleus/libs/PAGEFACTORY.php

 case "0":の
$this->_jsbutton('bold',"boldThis()",_ADD_BOLD_TT ." (Ctrl + Shift + B)");
の上に、以下の5行を挿入する。
$this->_jsbutton('pre',"preThis()",_ADD_PRE_TT);
$this->_jsbutton('entities',"entitiesThis()",_ADD_ENTITIES_TT);
$this->_jsbutton('ullist',"ullistThis()",_ADD_ULLIST_TT);
$this->_jsbutton('nolist',"nolistThis()",_ADD_NOLIST_TT);
$this->_jsbutton('dtlist',"dllistThis()",_ADD_DLLIST_TT);

次に

 case "2":の
$this->_jsbutton('alignleft',"alignleftThis()",_ADD_ALIGNLEFT_TT);
の上に、以下の5行を挿入する。
$this->_jsbutton('pre',"preThis()",_ADD_PRE_TT);
$this->_jsbutton('entities',"entitiesThis()",_ADD_ENTITIES_TT);
$this->_jsbutton('ullist',"ullistThis()",_ADD_ULLIST_TT);
$this->_jsbutton('nolist',"nolistThis()",_ADD_NOLIST_TT);
$this->_jsbutton('dtlist',"dllistThis()",_ADD_DLLIST_TT);

次にnucleus/language/japanese-euc.phpの編集

 // tooltips on toolbar
define('_ADD_ALIGNLEFT_TT',		       '左寄せ');
define('_ADD_ALIGNRIGHT_TT',		'右寄せ');
define('_ADD_ALIGNCENTER_TT',		'中央寄せ');
この下に以下を追加
define('_ADD_PRE_TT',		'<PRE>');
define('_ADD_ENTITIES_TT',		'特殊文字変換');
define('_ADD_ULLIST_TT',		'リスト形式');
define('_ADD_NOLIST_TT',		'番号付きリスト形式');
define('_ADD_DLLIST_TT',		'見出しリスト形式');

最後に画像の追加
以下の5つの画像をnucleus/imagesに追加
20061105-button-pre.gif 20061105-button-entities.gif 20061106-button-ullist.gif 20061106-button-nolist.gif 20061106-button-dtlist.gif
こんな感じになる。
20080426-WS000003.JPG

atom v1.0のRSS表示、文字化け及びエラー対策

nucleusのatom v1.0を使ってRSS表示しようとすると、Firefoxだと文字化け、IEだとエラーになってたので、atom.phpを以下のように修正。FirefoxでもIEでもちゃんと表示できるようになった。

} else {
header("Content-Type: application/xml");
// dump feed
echo $feed;
}
   ↓ ↓
} else {
if ($CONF['Language'] == 'japanese-euc') { $feed = mb_convert_encoding($feed, "UTF-8", "EUC-JP");}
header("Content-Type: application/xml");
// dump feed
echo $feed;
}

■追記
サイト内にはいくつかの Nucleus が有るが、atomの表示が文字化けしているサイトと文字化けしてないサイトが有ったので、文字化けしてないサイトのatomのスキンをコピーして貼りつけたら上手く表示されるようになった。見た目にはまったく同じなんだが・・・

RSSが表示されない

データベースを予備サーバーからリストアしたらRSSリーダーが表示されなくなった。どうもMysqlのキャラクタセットがおかしくなったみたいで、うまくRSSを読み込めてないようだ。ブログのRSSをクリックしても空白のページになる。対処方法を調べてみた。検索ではいろいろヒットするがどれもあにょのトラブルに当てはまらない。そんななかで「phpMyAdmin」で照合順序を「ujis_japanese_ci」に変更すれば良さそうだという情報が引っかかった。さっそく試してみることに!!
ビンゴだった。(^o^)
おかしくなってるデータベースを選択、「操作」の照合順序を「ujis_japanese_ci」にして「実行する」を押すだけ。RSSリーダーが表示されるようになった。
20101005-phpmyadmin