勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

Codeigniter3で外部ファイル(CSS / JS)の読み込みと共通パーツ化する方法

   2024/01/30  PHP CodeIgniter

CodeigniterでCSSやJSファイル等の外部ファイル読み込みたかった。また、それをヘッダーやフッターとして別ファイル化し、共通のパーツとして使いたかった。設置場所や読み込み方法が分からなかったので調べた結果をメモ。尚、Codeigniter4系の場合はこちらの記事を参照。

 

設置場所

Codeigniterディレクトリの直下でapplicationとかsystemとかある階層にcssなりjsなりディレクトリを作成する。

また、同階層に以下htaccessファイルを置いてルーティングされないようにする。

RewriteEngine on
RewriteCond $1 !^(index\.php|images|.+\.css$|.+\.js$|.+\.png$|.+\.jpg$|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

尚、フォントファイルや動画ファイルを呼び出したい場合はRewriteCondのところに拡張子とかを追記していく。

 

読み込み方法

viewディレクトリ直下のファイルで以下のように呼び出す。

<link href="css/style.css" rel="stylesheet" type="text/css">
<script src="js/function.js"></script>

 

共通のパーツとして使う

例えばviewディレクトリ直下にheader.phpを作って、以下のように記述する。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title><?php echo $title;?></title>
    <link href="css/style.css" rel="stylesheet" type="text/css">
    <script src="js/function.js"></script>
</head>
<body>

そして実際に使う場合はcontrollersディレクトリ直下のファイルで、以下のように記述するとheader.phpとコンテンツであるindex.phpが呼び出される。また、header.phpには$header['title']が$titleという形で渡される。

public function index()
{
    $header['title'] = 'タイトル';
    $this->load->view('header', $header);
    $this->load->view('index');
}

 

その他

ヘッダー、フッター、メニューあたりはパーツ化しておいてヘッダーはSEO関連の内容を呼び出し時に渡す形で良さそう。

あとCSSを呼び出すときは以下の形でも良いみたい。

#コントローラーの方で$this->load->helper('html');でヘルパーを読み込みしておく。
<?php echo link_tag('css/style.css'); ?>

 - PHP CodeIgniter

  関連記事

CodeIgniter4.4.4のインストールからHello Worldページ表示まで行う方法

以前CodeIgniter3を勉強したことがあったが新バージョンの4系がリリース ...

CodeIgniter4 & reCAPTCHA でお問い合わせフォームを作成する方法

以前CodeIgniter4.4.4で簡易的なお問い合わせページを作成したが、今 ...

Codeigniter3で異なるデータベースを使用する

Codeigniterで2つのコンテンツがあって、それぞれ別のデータベースを使用 ...

CodeIgniter4&Bootstrap&jQueryで簡易版お問い合わせページの作成

CodeIgniter4.4.4&Bootstrap&jQuer ...

CodeIgniter4 & jQueryを用いて同一サイト内でajax通信する方法

CodeIgniter4.4.4 & jQueryを用いて同一サイト内で ...