#PHPプログラミング

PHPプログラミングこと初め

 PHPなので、拡張子は、.htmlではなく、.phpになります。
 「ホームページ作りを始めましょう」でダウンロードしたindex.htmlindex.phpにします。拡張子を書き換えるだけですね。

 そのままアップロードするわけにはいきません。
 まず、ControllersWelcome.phpを見てみましょう。

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Welcome extends CI_Controller {
    /**
     * Index Page for this controller.
     *
     * Maps to the following URL
     * http://example.com/index.php/welcome
     * - or -
     * http://example.com/index.php/welcome/index
     * - or -
     * Since this controller is set as the default controller in
     * config/routes.php, it's displayed at http://example.com/
     *
     * So any other public methods not prefixed with an underscore will
     * map to /index.php/welcome/<method_name>
     * @see https://codeigniter.com/user_guide/general/urls.html
     */
    public function index()
    {
        $this->load->view('welcome_message');
    }
}

 PHPは、ファイルの拡張子が.phpでも、そのままでは機能しません。
 一番最初に、<?php と書いてある必要があります。締めの ?> は特に必要とはしません。かつては必要でしたが。

 さて、コメント欄の言いたいことは、

http://example.com/index.php/welcome

http://example.com/index.php/welcome/index

で本来アクセスするところですよ、ってこと。
 実際には、

http://example.com/

で、当Welcome.phpindexに届きます。
 今回の例では、

http://ima.daa.jp/clinic/

となります。ディレクトリが分かれているので、clinicが付きます。
clinicの中のWelcome.phpindexに届くことになります。

 で、届いたindexは、pubic functionという公開関数にて動作します。
 同じファイル内で動作させるときは、private functionという非公開関数にします。プログラムは関数として動作します。

 次の

 $this->load->view('welcome_message');

が、HTMLに相当する画面出力ファイルの指定になります。
 デフォルトでは、welcome_message.phpを開くようになっています。「ホームページ作りを始めましょう」の「フレームワークの利用」に最後にある画面を表示しているのは、このwelcome_message.phpです。
 なので、これをindex.phpにします。

 まず、index.phpを、FTPツールで、applicationの中のviewsの下にアップロードしましょう。
 次に、welcome_messageindexに書き換えます。
 ちなみに、囲みはシングルクォーテーションでもダブルクォーテーションでも問題ありません。使い分けが必要になる場合もありますが、それもそのうち触れます。

 そしてhttp://ima.daa.jp/clinic/をリロードすると、下図のような画面になります。

画像1

フルスクリーンショットの取り方
GoogleChromeの例で言えば、ブラウザ右上の「GoogleChromeの設定」メニューから「その他のツール」「デベロッパーツール」を開きます。
このツールは今後よく使いますので、慣れておきましょう。
画面をまずスマホサイズにします(ツール画面左上の親子アイコンで切り替える)。画面の両側を左右に広げてPC画面サイズにします。それから、画面の右上の縦…をクリックすると、Capture screenshotとCapture full size screenshotというメニューがあります。前者が見えている範囲のスクリーンショット、後者が画面全体をスクリーンショットします。
他のブラウザでもおおよそ同様に使えます。

 「まずは環境を用意しましょう」の「デザインフレームはテンプレートで」の【レスポンシブの例】の画面と違いますね。なぜでしょう?
 そうですね、画像が全部表示されていません。
 なぜでしょう?
 たとえば、画像が壊れている「ロゴ」という個所を探してみましょう。
 application/viewsindex.phpの31行目に、こんな記述があります。

<img src="img/template-logo01.png" alt="ロゴ" class="w-100">

 この場合、ある位置と同じ位置にあるimgディレクトリのtemplate-logo01.pngという画像を使う指定になっています。
 ある位置とはどこでしょう。
 ある位置とは、clinic直下のindex.phpになります。すべては、ここが起点になります。
 imgディレクトリは、assetsディレクトリの下でした。
 clinic/index.phpassetsディレクトリは同じ位置にいます。
 なので、この場合、以下の通りにします。

<img src="assets/img/template-logo01.png" alt="ロゴ" class="w-100">

 同様に、assetsの下にあるcssディレクトリ、Javascriptの入っているjsディレクトリについても、位置を合わせましょう。
 そして動作させてみます。
 出て欲しい画像が出るようになったと思います。
 いや、ちょっと待ってください。肝心のトップの大画像が出てませんね。
 なぜでしょう?
 画像を表示するには、HTMLに書く場合と、もう一つ、ある要素の背景として、CSSに書く場合があります。
 この場合も、探してみると、ありました。style.cssの10行目に。

.jumbotron {
    background-image: url('../img/top-image.jpg');

 jumbotronという要素の背景として、ある位置の一つ上に戻って(../)、そこにあるimgディレクトリのtop-image.jpgという画像を使っています。
 ちなにみ、CSSでは、jumbotronの前の は、HTMLではタグのclassを意味しています。
 ついでに言うと、はタグのidのことになります。

<div class="test-calss" id="test-id">~</div>

 さて、ここで言うある位置とはどこか。
 先ほどの起点のclinic/index.phpではありません。このCSSファイルを呼び出しているファイルが起点になります。この場合、style.cssを呼び出しているのは、viewsに入れたindex.phpです。index.phpの25行目にあります。
 つまり、index.phpの上のviews、その上のapplicationに戻ると、やっとassetsに行き当たります。ということで、こうなります。

background-image: url('../../assets/img/top-image.jpg');

 こういう書き方を相対パスと言います。絶対パスはhttp(s)から始まるパスです。絶対パスの方が確実ですが、相対パスでないとだめな場合もあります。

 これで、ちゃんとメインの画像が表示されるようになります。

デザインパターン、MVC

 定義では、プログラムというコードを管理するのにテンプレート化したものをMVC概念という言い方をします。
M:Model
V:View
C:Controller
 基本的にフレームワークはそういう体裁になっています。コードの管理というより機能の管理といった方がわかりやすそう。

 さて、views/index.phpは、index.htmlの拡張子を変えただけなので、徹頭徹尾HTMLのままということになります。
 これをMVC化するというのは、このviews/index.phpを分割します。
 なぜかというと、たいていの場合、頭と尻はページ内容が変わっても変わることはありません。つまり、最低、ヘッダー、ボディ、フッターの3つに分割できるものです。時としてサイドメニューもほとんどページごとに変わることがないので、分割できます。
 どこで分割するかという決めはありません。個々人でいいと思われるところで切り分けましょう。
 今回の例では、

この記事が気に入ったらサポートをしてみませんか?