Joomla! サイトのローカルコピーを作成
サイトを運営していると新しいエクステンションをテストしたり、表示を確かめることってありますよね。Joomla!の場合オンライン上で記事を書き、また編集できちゃうので以前のローカルでテストしてということをされていない方もおられるのではないでしょうか。
サイトのローカルコピーを先日再作成したときの手順を書いてみます。
必要なもの
- FileZilla FTP Client
これは、いつも使っているFTPクライアントでOKです。なぜFileZillaかは、以前の記事 に書いたように多重接続ができるからです。また、サーバー側でバーチャルシェル機能(サーバー側で圧縮展開できる)などがある場合は、また別です。 - phpMyAdmin
データベースをバックアップできればなんでも良い。 - テキストエディタ
- ローカルWebサーバ環境
XAMPPなどで環境を作成してください。
ファイルのコピー
まずは、サーバー上のファイルをすべてローカルWebサーバー上のXAMPPならhtdocs以下の任意のフォルダにコピーします。
XAMPPをインストールしたフォルダ D:\xampp
サーバー上のファイルを入れるフォルダ D:\xampp\htdocs\example
この中にすべてのファイルを入れる。(htdocs直下を使っても良いが、XAMPPのファイルと重複したりするので注意。)
configuration.phpを編集
- $mosConfig_absolute_path = 'D:/xampp/htdocs/example';
\マークがスラッシュになっていることに注意してください。 - $mosConfig_cachepath = 'D:/xampp/htdocs/example/cache';
\マークがスラッシュになっていることに注意してください。 - $mosConfig_db = 'あなたのこれから作るローカルデータベース名';
- $mosConfig_user = 'あなたのローカルDBユーザ名';
- $mosConfig_password = 'あなたのローカルDBパスワード';
データベースをコピー
サーバー上のphpMyAdminを使いエクスポートを選択。
サーバーによって異なりますがデータベースを表示している場合は、テーブルすべてを選択。データベース名を選択できる場合は、該当のデータベース名を選択します。(イメージ参照)
そして以下にチェックをいれます。
(これは、チェックしなくても問題ないですが、失敗したときや個別にテーブルをインポートするときなどに便利です。)
- DROP TABLE / DROP VIEWを追加
- IF NOT EXISTS を追加
最後にファイルに保存するにチェックを入れそのまま実行するボタンを押し、ローカルPCのどこかにファイルを保存します。
localhost.sql (ファイル名は、環境により異なりデータベース名だったりします。)
これで、ローカルPCにデータベースのデータがコピーできました。
XAMPPのphpMyAdminを開く
- http://localhost/phpmyadmin
サーバー上と同じデータベース名(異なっても構いません。上の「これから作るローカルデータベース名」のこと)でデータベースを作成する。
このとき、照合順序に注意してください。
※そして必ずチェックしてください。上記で作成したローカルPCにコピーしたsqlファイルを開き、下記のような部分が無いかチェックしてください。
(ファイルのはじめに一カ所しかありません。)
-
DROP DATABASE `あなたのデータベース名`;
「あなたのデータベース名」というデータベースがあれば削除します。 -
CREATE DATABASE `あなたのデータベース名`;
「あなたのデータベース名」というデータベースを作成します。 -
USE あなたのデータベース名;
「あなたのデータベース名」というデータベースを使用するよう指示します。
DROP DATABASEの行とCREATE DATABASEの行は、削除してください。そしてUSE~の行があれば上で作成したデータベース名を書けば良いのですが、今回は削除しましょう。
※sqlファイルを開くとき文字コードに注意してください。Joomla!の場合大抵UTF-8です。保存するとき異なる文字コードで保存してしまうと壊れます。
作成した空のデータベースをphpMyAdminで表示します。
空なのでテーブルがありませんと表示されています。
上のメニューから「インポート」をクリック。先ほどのsqlファイルを指定し、実行するボタンを押下。
しばらく待ってインポート完了。
http://localhost/exampleを開く
※MySQLのサーバーとローカルでのバージョン違いなどでエラーが出る場合があります。その時は、そのエラーを見て該当する部分を修正しないといけないこともありますのでご注意ください。
さらに多くのコンポーネント・・・を表示させない方法
Joomla!1.0.xの管理画面でたくさんのコンポーネントをインストールしてあると「さらに多くのコンポーネント...」と表示されてしまい編集したいコンポーネントにアクセスするのに二度クリックしないといけないことってありますよね。
コアを編集してみましょう。
ROOT/administrator/modules/mod_fullmenu.php Line:188
を
に変更するなどして数を増やせばOKです。
もうひとつ
コンテンツが多すぎて管理画面のコンテンツ一覧の表示数の限度50をもっと多くしたい。
コアを編集。
Root/administrator/includes/pageNavigation.php Line:48
を
などとちょっと極端ですが、行をコピーして数を増やせばOKです。
エクステンションについて
あらためて公開しているエクステンションについて少し。
Javascriptを利用しているエクステンション(mod Google, GreyBox Show...)では、すでに使用されているJavascriptとの衝突が予想されます。動かなければ、それはJavascriptが原因かもしれません。設定を確認した後、他のすべてのJavascriptをオフの状態で試してみてください。
日本語エクステンションについては、実は理解していない英語で作るのは非常に面倒なのですが、両方作る方がもっと面倒なので英語になっています。当初は、日本語で作成したものを英語に変えてという作業を行っていたのですが、全角文字を半角に変更し忘れたりということがあったので今ではすべて英語です。また、日本人の方ならサイトを見ていただければ(と言うほど詳しく説明していませんが。)わかると思いますし、今はまだそれほど難しい設定のあるエクステンションでもないのでと思っています。
次は、Joomler! Pinger component for 1.0.xを予定しています。もうすでにこのサイトで使っています。簡単に概略を
-
Joomler! Pinger for 1.0.x
このコンポーネントは、Pingサーバーの管理、ログ管理、とピンギングリンクを出力します。そのリンクには他人がアクセスできないようにタスク制限、Basic認証、IPアドレス制限をかけることができます。また、AjaxPingSwitchマンボットをいれることで、サイトに訪れたJavascriptが有効なブラウザから自動でピングリンクにアクセスします。もちろんそのAjaxでアクセスするリンクは、他人がアクセスしてもサイトの更新がすでにされていれば、アクセス者のログを残すのみでピングはしません。更新Pingがまだ、されていなければ自分でPingをしなくても訪問者がしてくれるというわけです。また、更新がされた時のみJavascriptは出力されます。
と、公開前にPingerコンポーネントをテストしてくださる方を募集します。条件は、下記の通り。
- 公開サイトを管理・運用されている方。
- Joomla! 1.0.xで運用している。
- そのサイトがぶっ壊れてもイイ。冗談です。
- 速レスの方。w
OKの方は、連絡してください。
Joomla! 1.0.13JP バグ(検索の文字化け)
クライアントから苦情がっ!Joomla!のデフォルトの検索窓から日本語を7文字以上いれて検索すると文字化けすると言われ、確認すると確かに文字化けしますね。ちょっとJoomla!のファイルを変更してみました。
フロントエンド/components/com_search/search.phpの77~~87行目あたり。
// limit searchword to 20 characters
if ( strlen( $searchword ) > 20 ) {
$searchword = substr( $searchword, 0, 19 );
$restriction = 1;
}
// searchword must contain a minimum of 3 characters
if ( $searchword && strlen( $searchword ) < 3 ) {
$searchword = '';
$restriction = 1;
}
を
// limit searchword to 20 characters
if ( mb_strlen( $searchword ) > 20 ) {
$searchword = mb_substr( $searchword, 0, 19 );
$restriction = 1;
}
// searchword must contain a minimum of 3 characters
if ( $searchword && mb_strlen( $searchword ) < 3 ) {
$searchword = '';
$restriction = 1;
}
に変更しました。






























