MAMP 起動設定 〜WordPressのテスト環境を作る〜

MAMP(HttpServer)を使用して自分のPC上にWordPressのテスト環境を作成します。
つまり、レンタルサーバーでなく、ローカル(自分のPC)で好きなだけ、バグを出しても自分のレンタルサーバーに影響なし!

というわけです。

余計な音が入っていますが、MAMPを起動して見ました。
すでにインストールしてあるので、ダウンロードできるサーバーまで移動、インストールしたMAMPを起動といった感じで動かしました。

WordPressのダウンロード

こちらのサイトからダウンロードできます。(WPのサイト、英語です)

MAMPのインストール

これに関しては前回やったのでその記事を参照してください。
そして、ダウンロードやドキュメント関連はこちらのサイトにありました。

セットアップに関してはこちらのサイトを和訳して見ました。

MAMP起動

インストールした後に、MAMPを起動します。MACなのでAppフォルダにあるMAMPを起動するためには、そのアプリのフォルダを開くと下のようになっていますので。

MAMPを起動します。他のサイトにあるように起動した画面に「設定」があれば良いのですが、今回ダウンロードしたアプリにはありませんでした。
なのでちょいと探しましたら、下のような場所にありました。

ドキュメントルート

HTTPサーバーを起動した後に、HTMLを配置したりしてアクセスがあったときに表示できるようにしますが。。。

どこに配置するのか?

この答えは「ドキュメントルートに配置」です。
具体的には「ドメイン」と呼ばれる部分を抜かした「/」に当たるディレクトリがドキュメントルートになります。
例:ここのサイト場合
ドメイン:zenryokuservice.com
ドキュメントルート:zenryokuservice.com/
初期表示画面(未実装です。。。)zenryokuservice.com/index.html

こんな感じです。そして、アプリの設定は

真ん中にある「Document Root」の「Select」部分をクリックします。

そして、初めにダウンロードしたWordPressを解凍しておきそのフォルダをドキュメントルートに指定します。

サーバーを起動して見た結果下のように表示されました。

これは、ドキュメントルートにwordpressのフォルダ「wp」を配置しているためです。引き続きwpフォルダを開くと下のような画面が見れるのでそのままWordPressの設定を行なっていきます。

設定の途中で下のような画面がありますが。これはphpInfoを見ると細かい部分が見れます。

phpInfo

特にDB名の確認にはphpAdminを見ます。(参考サイトより)
読んで見たところ、自分で決めて良いみたいです。
とりあえず、DBの名前は上にあるように「mysql」で設定します。
そして、ユーザー名はphpAdminにあるrootを指定しました。実行結果

引き続き入力を行い、インストール完了

今回はここまでにしておきます。

ちなみに、投稿記事のインポート時につまづいたので、その時の対処に関して記載しました

でわでわ。。。



関連ページ

  1. WordPress プラグイン作成〜DBを使用する〜
  2. PHP PDO 〜MySQLにアクセスする〜
  3. PHP Ajax 〜DBに登録したデータを受信する〜
  4. Google Maps API PHP連携 〜マップ情報をDBに登録する〜
  5. PHP Image File 〜iPhoneやAndroidでの画像送受信の問題〜
  6. AngularJS Routing 〜PHPをWeb APIにする〜
  7. WordPress PHPカスタム〜根本的に見た目を変える〜
  8. WordPress PHPカスタム〜根本的に見た目を変える2〜
  9. Eclipse PHPプラグイン 〜ElipseでWordPress環境を構築〜
  10. WordPress テスト実装 〜heade-test.phpを表示〜
  11. AngularJS + PHP 〜WordPressと連携する〜
  12. AngularJS + PHP 〜AngularJSの実装〜
  13. AngularJS + PHP 〜AngularJSの実装2〜
  14. WordPress 処理解析 ~index.phpを眺める~
  15. WordPress Plugin NewStatPress ~アクセス解析プラグインAPIを使う~
  16. WordPress 処理解析 ~ログイン処理を調べる~
  17. WordPressカスタム〜アンケートボタンを追加する(設計)〜
  18. WordPressカスタム〜プラグインの作成〜
  19. WordPressカスタム〜ダッシュボードのプラグイン画面作成〜
  20. WordPressカスタム〜ダッシュボードのプラグイン画面作成2〜
  21. WordPressカスタム〜ダッシュボードのプラグイン画面作成3〜
  22. WordPress プラグイン作成〜アンケート作成プラグインを作る〜

Eclipse PHPプラグイン 〜ElipseでWordPress環境を構築〜

現在使用しているWordPressの改修を行いたく。。。表示する画面にAngularJS(+BootStrap)を組み込みたく思い。。。
他の方法も考えましたが、結局はテスト環境を作成して実行した方が安全だという所に至りました。

下にPDTのインストールに関して記載しました、しかし自分はうまくいかなかったのでMAMPを使用して地道に開発することにします。
他の人はうまくいくようなのですが。。。

とりあえずは、HTTPサーバーとDBサーバー、WordPressが動かせればローカル開発は可能なのでそちらで実装します(笑)

PDTのインストール(できませんでした)

Eclipseの上部にあるHelp->newSoftwereで下のような画面を開きます。

そして、上部のテキストボックスに「pdt」と入力すると適当なリポジトリが選択されるので下のようにチェックを入れます。

そして、PHP をインストールします。

そして、再起動したらパースペクティブにPHPが存在することを確かめます。。。

しかし、PHPのパースペティクブが表示されず。。。おかしいと思い調べて見た所下のようにインストールされているのはPDTのみでSDKなどがインストールされていませんでした。

これで、パースペティクブが表示できると思ったが、下のようなエラーが出て上のものがインストールできませんでした。

リポジトリが見つからない

結論は、下のように「」のチェックを外してインストールすると良いということでした。「Check it!」というのはCheckを外してくださいという意味です。。。文言を間違えていました。。。

足りないパッケージをインストール

しかし、またも同じエラーが。。。
仕方ないので、下のMAMPをインストールしてテキスト
エディターでの開発を行います。。。
自分はCDT(C++開発用プラグイン)などインストールしているのでそれが原因なのか?うーむ残念。。。

MAMP(HttpServer)

そして、HTTPサーバーを使用しますのでこれをダウンロードします。MySQLにアクセスするためのphpadminなどもインストールするのが面倒なのでこれを使用します。
細かい設定などはこちらのサイトを参考にしました。

そして、MySQLとHttpサーバーがセットになっているのでHttpサーバーとDBサーバーの設定なども行います。
主に、サーバーが使用するポート番号と起動、停止の設定をやっているようでした。(参考サイト)

そして、ダウンロードしたもの「MAMP_MAMP_PRO_5.5.pkg」をインストールします。MACなのでクリックするだけですが。。。

まとめ

環境構築に必要なアプリケーションのインストールを行いました。今後は以下の手順を踏みます。

  1. レンタルサーバー上にあるワードプレスのテーマフォルダーをダウンロード
  2. ワードプレスのインストール(ダウンロードと解凍)
  3. MySQLの設定(ポート番号など)
  4. HTTPサーバーの設定

そして、ワードプレスでの自作ページの開発。。。

こんな感じで進めていきます。

でわでわ。。。



WordPress PHPカスタム〜根本的に見た目を変える2〜

WordPressの見た目を根本的に帰るのはindex.phpやheader.phpなどを編集してやる必要があります。

しかし、現在実行中のWordPressをテストのためにテスト中の画面を表示するのは。。。アウト!

でわ、どーするか?

index.phpをカスタム

結論から言うと、以下の通りです。

管理者がログインした時に「テストファイル」を参照するように修正すれば問題がない

実はこちらのサイトを参考にしました。

早い話が、管理者がログインした時にはtest_index.phpを参照するように修正してやればオK!

と言うことで。。。

管理者がログインした時

この時の実装としては、参考サイトで使用している関数get currentuserinfo()は非推奨メソッドになっているようなので別のis user logged in()を使用します。
なので、「管理ユーザー」ではなく「ログインユーザー」が開いた時は・・・のような条件をつけてやることになります。

具体的には

<?php if ( is_user_logged_in() ) { 
// もしログインしているならば。。。の処理
} ?>

上のような形で実装します。

使用しているテンプレートの「test-index.php」を開く

include('指定のパス’);
具体的には、テンプレートの「」を使用するのでテンプレートのindex.phpと同じ階層に作成したinlude(./test_index.phpを参照するようにします。。。

と実行してみたものの。。。どっかしらにエラーがあって表示されませんでした。。。と言うか対象のテストファイルが表示されていません。。。

何がダメなんだろうか?

ちょいと調査いたします。

でわでわ。。。



WordPress PHPカスタム〜根本的に見た目を変える〜

最近、残業が続きJavaの調査が間に合わず。。。着手しやすいPHP(WordPress)に関して記載します。

PHPと言ってもWordPressですが。。。

根本的に見た目を変える

根本的に言うのは、CSSとかでレイアウトを変更。とかではなく直接表示しているPHPファイルをカスタムしようと言うものです。

具体的に

自分の使用している、テンプレートが「twentyseventeen」なのでWordPressのルートから下のようなパス(ディレクトリ)にあるindex.phpを編集します。
/wp-content/themes/twentyseventeen

実際のコードです。

<?php
/**
 * The main template file
 *
 * This is the most generic template file in a WordPress theme
 * and one of the two required files for a theme (the other being style.css).
 * It is used to display a page when nothing more specific matches a query.
 * E.g., it puts together the home page when no home.php file exists.
 *
 * @link https://codex.wordpress.org/Template_Hierarchy
 *
 * @package WordPress
 * @subpackage Twenty_Seventeen
 * @since 1.0
 * @version 1.0
 */

get_header(); ?>

<div class="wrap">
    <?php if ( is_home() && ! is_front_page() ) : ?>
        <header class="page-header">
            <h1 class="page-title"><?php single_post_title(); ?></h1>
        </header>
    <?php else : ?>
    <header class="page-header">
        <h2 class="page-title"><?php _e( 'Posts', 'twentyseventeen' ); ?></h2>
    </header>
    <?php endif; ?>

    <div id="primary" class="content-area">
        <main id="main" class="site-main" role="main">

            <?php
            if ( have_posts() ) :

                /* Start the Loop */
                while ( have_posts() ) : the_post();

                    /*
                     * Include the Post-Format-specific template for the content.
                     * If you want to override this in a child theme, then include a file
                     * called content-___.php (where ___ is the Post Format name) and that will be used instead.
                     */
                    get_template_part( 'template-parts/post/content', get_post_format() );

                endwhile;

                the_posts_pagination( array(
                    'prev_text' => twentyseventeen_get_svg( array( 'icon' => 'arrow-left' ) ) . '<span class="screen-reader-text">' . __( 'Previous page', 'twentyseventeen' ) . '</span>',
                    'next_text' => '<span class="screen-reader-text">' . __( 'Next page', 'twentyseventeen' ) . '</span>' . twentyseventeen_get_svg( array( 'icon' => 'arrow-right' ) ),
                    'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Page', 'twentyseventeen' ) . ' </span>',
                ) );

            else :

                get_template_part( 'template-parts/post/content', 'none' );

            endif;
            ?>
        </main><!-- #main -->
    </div><!-- #primary -->
    <?php get_sidebar(); ?>
</div><!-- .wrap -->

<?php get_footer(); ?>

ポイントは以下のメソッドです。

  1. get_header()
  2. the_post()
  3. get_sidebar()
  4. get_footer()

これらのメソッドで行なっている部分に触らないようにカスタムします。

実践その1

まずは現在使用しているファイル(index.php, footer.php, header.php, sidebar.php)が上の1〜4のメソッドに紐づいているところに注意します。

そして、動いているPHPファイルに影響がないように、各ファイルの名前をコピーして、名前を変更します自分はわかりやすいように以下のように変更しました。

index.php -> index-test.php
footer.php -> footer-test.php
header.php -> header-test.php
sidebar.php -> sidebar-test.php

そして、変更後の見た目をイメージします。
具体的に自分はヘッダーをスライド式にしたいのでbootstrapを使用した形に変えようと思います。具体的な実行コードと見た目はここのページにありました。

これを自分のブログページに実装するにはどうしたら良いか?

Headerを見る

見た目通りに横スクロールのメニューなのでheader.phpをいじります。

上述しましたが、テスト用のファイルがあるのでそれぞれの修正を行います。

header-test.phpを参照するようにするには?

ここのページによると
get_header( $name );の「$name」にheader-「name」.phpに対応するファイルをインクルードしてくれるようです。
[例]
get_header( 'test' );であればheader-test.phpを読み込むようです。

同様に他もメソッドも名前を変更して指定できるようです。

  1. get_header()
  2. the_post()
  3. get_sidebar()
  4. get_footer()

これで準備完了

これまでの作業でとりあえずは準備完了です。
これからゆっくりとデザインを考えるもよし、早速実装に入るもよし。

自分は仕事があるのでもう寝ます(笑)

でわでわ。。。



JS GoogleMap 〜セレクトボックスの中身をDBから持ってくる〜

Ajaxを使用して、DB(カテゴリマスタ)からデータを取得します。使用する技術はPHPJavaScriptです。

ファイル構成

・画面表示部分(Sample.html)プレーンのHTMLファイルです。
・GetCategoryMst.php HTMLを出力しないプレーンのPHPファイルです。

アプリ全体像

小さなアプリケーションなので、簡単です。
<クライアントサイド(ブラウザ表示側)>
Sample.html: GoogleMapを表示するHTML
Sample.js : GoogleMapやAjax通信を行う処理を実装しています。

<サーバーサイド(DBからデータを取得するなどPHP)>
GetMapInfo.php: 初期表示時にオーバーレイの情報を取得します。
InsertMapInfo.php: HTMLから送信された情報をDBに登録します。
GetCategoryMst.php: これから作成するPHPです、

実装内容

処理の流れとしては、以下のようになります。

  1. HTML画面側でセレクトボックスをクリックする
  2. DBからカテゴリ情報を取得する
  3. 取得したデータをセレクトボックスにセットする

上記のような形で実装します。
まぁちょちょっといじるくらいなので、簡単に行けるであろう。。。というところです。
「〜であろう」というのは、もしかしたら想定外の問題が出てくるかもしれないので、そのように記載しました。

実装開始

既存のソースを眺めます。全部だとえらいことになってしまうので、一部抜粋して記載します。

/** 画面の初期化 */
function loadView() {
    // GeoLocation API
    getCurrentPos();
    // XMLHttpRequestの生成
    xhr = createXmlHttpRequest();

    sideWin = document.getElementById('sideWin');
    sideWin.hidden = true;

    // Load Overlay
    var areaData = dstMapData();
}

/** 画面の開閉 */
function sideWinHandle() {
    console.log("change");
    if (sideWin.style.display === 'block') {
        sideWin.style.display = "none";
    } else {
        sideWin.style.display = "block";
    }
    sideWin.hidden = !sideWin.hidden;
}

/** カテゴリの変更 */
function changeCategory(selectBox) {
    markerList.forEach(marker => {
        if (selectBox.value === marker.category) {
            marker.setVisible(true);
        } else {
            marker.setVisible(false);
        }
    });
}

抜き出したコードは初期表示時に、画面の設定を行う部分の処理になります。

実装にあたり

今回の改修ポイントは、セレクトボックスを追加したので、以下の処理を行うように修正するというところです。

セレクトボックスをクリック(変更)したときにセレクトボックスに値が入っていなければ、DBからカテゴリ情報を取得する

というわけで、修正ポイントは「セレクトボックスをクリック(値が変わったとき)」になりますので、イベントハンドラの「OnChange」を使用します。

HTML修正

下のコードをselectタグに追加します。
&ltoption value="-" selected="selecred">--未選択--</option>

そしてJSの修正は、以前やったのでそちらを参照してください。

PHP

サーバーサイドのPHPを作成します。
やることは以下の通りです。

  1. DBからカテゴリマスタデータを取得する
  2. データをJSON形式で返却する

実装部分は以下の通り

  1. もともとあったPHPをコピー
  2. SQLの山椒テーブルを変更
  3. 取得する項目名を変更

シンプルなものです。

$driver_options = [
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_EMULATE_PREPARES => false,
];

$selectQuery = "SELECT * FROM CATEGORY_MST";
$tags = "";

$cnt = 0;
try {
    $pdo = new PDO($dns, $username, $password, $driver_options);
    foreach ($pdo->query($selectQuery) as $row) {
        $data .= '{"categoryId" :"' . $row['CATEGORY_NAME   '] . '",';
        $data .= '"name": "' . $row['INFO_CATEGORY'] . '",';
        $json .= $data;
$cnt +=1;
    }
    if ($cnt != 0) {
        // 最後の","を削除する
        $json = substr($json, 0, -1);
        $json .= ']';
    } else {
        $json = "";
   }
    // コネクションの解放
    $pdo = null;
} catch(Exception $e) {
    print($e->getTraceAsString());
}
// レスポンスに出力
//print($cnt);
header("Content-Type: application/json; charset=UTF-8");
echo json_encode($json);

?>

目星はついています。下のコード部分を修正して、Ajax通信により上記のPHPを読んでやれば、おっけ!

修正対象メソッド

** カテゴリの変更 */
function changeCategory(selectBox) {
    markerList.forEach(marker => {
        if (selectBox.value === marker.category) {
            marker.setVisible(true);
        } else {
            marker.setVisible(false);
        }
    });
}

でわでわ。。。