1 : ImpressCMSの全体的な考え方について

ImpressCMSは、CMSと呼ばれるものですが、以下のような構造で出来ています。

プログラムはPHP
テンプレートはSMARTY
データベースはMariadb(MySQL)

全体的な機能についてはImpressCMSが受け持ちますが、その他の小さなプログラムについては
モジュールという個別のプログラムで動作するように作られています。

 2 : モジュールについて

モジュールは

  1. PHPで動く小さなプログラムの塊
  2. 初期設定については icms_version.phpにて定義する(詳細はファイルにてコメントで説明)
  3. プログラム(PHP)では基本的にテンプレートを設定して利用する
  4. テンプレートへデータを渡す場合はassign関数を利用する
  5. テンプレートはtemplatsフォルダの中で保存する
    ※新しくテンプレートを作った際にはicms_version.phpに利用する宣言をする必要がありモジュール自体もアップデートする必要がある
  6. ⑥データについてはそれぞれでSQLを実施しデータべースの中から必要なデータを抽出する
  7. ⑦実際にどのテンプレートを利用しているのかを確認すると$xoopsoption[‘template_main’]で確認できる

 2 - 1 : icms_version.php

 3 : Smartyテンプレート

Smarty は ImpressCMSにおける見栄えを設定するためのテンプレートエンジンです。
具体的に言うと、impressCMSのうち、データの加工や抽出など表示のために必要なデータについては、phpプログラムが行います。そして、見栄えの部分についてSmartyテンプレートが担うということになります。
こうすることで、プログラムのロジックとコンテンツの見栄えを分離して管理する事を容易にします。
これは、プログラマーとテンプレートデザイナーの役割が異なり、 これらの役割を違う人間が受け持っている場合に最適だと言えます。

 3 - 1 : Smartyの基本構文

Smartyは、テンプレートタグを使用します。

全てのテンプレートタグはデリミタによって囲まれます。 デフォルトではデリミタは <{ と }> となります。

Smarty では、デリミタ外の内容は静的コンテンツ(通常のHTML構文)として表示されます。 Smarty がテンプレ ートタグを見つけると、その解釈を試みて適切な出力に置換します。

 3 - 1 - 1 : コメント

テンプレートのコメントはまずアスタリスクで囲まれ、次にそれを デリミタ タグで囲みます。このような形式になります。

<{* これはコメントです *}>
Smarty のコメントは、テンプレートの最終的な出力には表示されません。
この点は <!-- HTML のコメント --> とは異なります。 
これは、テンプレート内での内部的なメモとして使用するのに便利です。 テンプレートファイルを見られない限り、誰にもバレません。




 3 - 2 : 変数

テンプレート変数は、先頭にドル記号 $ を付けます。
変数名には 同様に英数字およびアンダースコア(アンダーバー)が使用できます。
配列の参照には、インデックスの数値もしくはそれ以外の文字を使用できます。 オブジェクトのプロパティとメソッドの参照も同様です。
変数の殆どは、テンプレートを参照するPHPのプログラムで設定を行いますが、ImpressCMSでは標準で設定されている様々な変数があります。

通常変数は、PHPプログラムから与えられます。モジュールのPHPファイルですね。

PHPファイルの中で、
$xoopsTpl->assign('seminar_id', 125);
と書いてあれば、Smarty側では、 <{$seminar_id}>と書くと125が表示されることになります。

連想配列をassignした場合は、PHPとは書き方が異なります。
例えば
$myseminar['ID'] = 1;
$myseminar['name'] = "名前";
$xoopsTpl->assign('seminar', $myseminar);
となっていた場合は、
$myseminar['ID'] -> <{$myseminar.ID}>
$myseminar['name'] -> <{$myseminar.name}>
という形で、'.'ピリオド記号を使って表記します。

単なる配列(数字で管理)する場合は、同じような形で表記をします。
$mynum[0] = 125;
$mynum[1] = 225;
$mynum[2] = 300;
$xoopsTpl->assign('num', $num);
となっていた場合は、<{$num[1]}> という形で書きます。$num.1とは書きません。

オブジェクトの場合は、PHPと同じように "->"を使って表記します。
 

<{$foo}> 単純な変数 (配列やオブジェクト以外) を表示します。
<{$foo[4]}> 0から始まるインデックスを持った配列の5番目の要素を表示します。
<{$foo.bar}> "bar"というキーに対応する配列の値を表示します。PHP の $foo['bar'] と同じです。
<{$foo->bar}> オブジェクトのプロパティ "bar"を表示します。
<{$foo->bar()}> オブジェクトのメソッド"bar"の返り値を表示します。


すでに、Smartyにて定義済みの変数はこのようなものがあります。

(1) フォームやクッキーなどのデータ
 
<{$smarty.get.myid}> ($_GET) http://www.example.com/index.php?myid=5 から myid の内容を表示
<{$smarty.post.page}> ($_POST) フォームからpostで送信された変数"page"の値を表示
<{$smarty.const.名前}> PHPで、define関数で定義された定数を表示します。
<{$smarty.cookies.username}> ($_COOKIE['username']) クッキーに登録された"username"の値を表示
<{$smarty.server.SERVER_NAME}> サーバ変数のうちの"SERVER_NAME"の値を表示
<{$smarty.session.id}> ($_SESSION['id']) phpのセッション変数のうちの"id"の値を表示

(2)impressCMS本体で定義されている変数でよく使うもの
<{$todaymonth}> 今日の月
<{$todayday}> 今日の日
<{$todayyou}> 今日の曜日
<{$uname}>
<{$icms_uname}>
ログインしている人の名前
<{$xoops_meta_keywords}> metaキーワード
<{$xoops_meta_description}> metaデスクリプション
<{$icms_pagetitle}> ページタイトル
<{$icms_imageurl}> テーマ画像
<{$icms_sitename}> サイト名
<{$icms_isuser}> ログインユーザかどうか
<{$icms_isadmin}> 管理者かどうか
 

 3 - 3 : 変数の修飾子

変数の修飾子とは、変数にキメられた修飾を行って見やすくするために作られています。
例えば、2300という数字を2,300というコンマ付きの数字に変えると見やすくなりますよね。
そういうときに修飾子を使います。修飾子は以下のような形で使います。
<{$変数名|修飾子}>
上のサンプルで、例えば<{$gokei}>に2300という数字が入っていて、これをコンマ表示にさせたい場合は
<{$gokei | number_format }>
と表記するとコンマ付きの数字が出力されます。
修飾子の例は以下のとおりです。
 

capitalize

変数内の全ての単語の先頭を大文字で開始します。
cat 与えられた変数に値を連結します。
<{$kokyaku | cat:' 様'}>とすると、「様」が$kokyakuという変数に追加されます。
count_characters 変数の文字数をカウントします。
count_characters:trueとすると、スペースも文字数にカウントします。
lower 変数をすべて小文字に書き換えます
upper 変数をすべて大文字に書き換えます
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   

 3 - 4 : 組み込み関数

Smartyの組み込み関数はいくつもありますが、実際にimpressCMSを運用する上で使いそうなものをいくつか紹介します。

1  if 関数

if関数は、いわゆる分岐関数になります。

(1) 条件を満たすときだけ何かを行わせたい場合
<{if 条件}>
 条件が満たされたときに表示させるもの
<{/if}>

(2)条件を満たすときと満たさないときにそれぞれ何かを行わせる場合
<{if 条件}>
 条件が満たされたときに表示させるもの
<{else}>
条件が満たされなかったときに表示させるもの
<{/if}>

条件については、下の演算子を使います。
例えば、$num という変数が3のときだけ処理を行うという場合は
<{if $num == 3 }>
という書き方を行います。

 
条件演算子 代替 構文例 意味 PHP 相当
== eq $a == $b
$a eq $b
等しい ==
!= ne, neq $a != $b
$a neq $b
等しくない !=
> gt $a > $b
$a gt $b
より大きい >
< lt $a < $b
$a lt $b
より小さい <
>= gte, ge $a >= $b
$a ge $b
以上 >=
<= lte, le $a <= $b
$a le $b
以下 <=
===   $a === 0 同一性のチェック ===
! not ! $a
not $a
否定 (単項) !
% mod $a mod $b 剰余 %
is [not] div by   $a is (not) div by 4 割り切れる $a % $b == 0
is [not] even   $a is (not) even 偶数である [ない] (単項) $a % 2 == 0
is [not] even by   $a is (not) even by $b 偶数番目のグループである [ない] ($a / $b) % 2 == 0
is [not] odd   $a is (not) odd 奇数である [ない] (単項) $a % 2 != 0
is [not] odd by   $a is (not) odd by $b 奇数番目のグループである [ない] ($a / $b) % 2 != 0
 

2 foreach関数

これは複数のデータがある場合に繰り返し処理を行うという点で、非常によく使う関数になります。
いくつかのデータがある配列変数を一つずつ取り出して処理を行うときにこれを使います。

(1)単純な配列の場合
   php側で
      $data[0] = 135;
      $data[1] = 140;
      $data[2] = 145;
      $data[3] = 150;
      $data[4] = 155;
      $xoopsTpl -> assign('data', $data);
だったときは、
<{foreach from=$data  item=edata}>
    data = <{$edata}>

<{/foreach}>
という書き方をします。($dataが連想配列を含んでいても構いません)
<{foreach from (assignされた変数名) item=(各行のデータを表す仮変数名) }>
 それぞれの処理
<{/foreach}> という書き方ですね。

(2)連想配列で、配列の名称名も使う場合
   php側で
      $data['first'] = 135;
      $data['second'] = 140;
      $data['third'] = 145;
      $data['fourth'] = 150;
      $data['fifth'] = 155;
      $xoopsTpl -> assign('data', $data);
だったときに、Smarty側で
 <{foreach from=$data key=keyname item=edata}>
   <{$keyname}>データは<{$edata}>です

<{/foreach}>
というような書き方をすると 「firstデータは135です」みたいに表記されます。


なお、foreachはネスト(複数次元)することが出来ます。
<{foreach from=$data  item=edata}>
 <{foreach from=$edata item=eacheach}>
        <{$eacheach.aa}>を表示
     <{/foreach}>
<{/foreach}>
みたいな感じですね。

3 php関数

これは、phpタグ内で、phpのデータを処理したり、参照したりすることができる関数です。
ちょっと難しい関数なので、できれば使わないことを勧めます

<{php}>
   echo "sssssssss";
<{/php}>
のような感じです。



 

 3 - 5 : カスタム関数

組み込み関数の他に、いくつかカスタム関数がありますので、それを紹介します。

1 assign 関数

Smartyテンプレート上で、変数を設定する関数です。
すでに設定済みの関数の値を変更するときにも使います。
<{assign var="name" value="hisaoka">
この場合は、変数名が$nameで値が「hisaoka」であるということになります。

2 cycle関数

cycle関数は、foreachなどで複数のデータを表示させるときに、行のクラス(背景色など)を変えていくときに使います。
例えば、このような形でforeach内を書いたとすると

   {$data[rows]}

1行目は、tr につくclassはodd
2行目は、trにつくclassはeven
という形になります。

3 strip関数

htmlの見た目を良くするためには、テンプレート上で、タブやスペースを使います。
ただ、タブやスペースを多用すると、通信量が上がることになります。
少しでも通信量を下げるためには、不必要なタブやスペースは削除するといいです。
そこで使うのがstrip関数です。始まりと終わりの間のタブやスペースを削除して送ります。

<{strip}>
HTMLの内容
<{/strip}>

という形で書きます。

 

 4 : ニフクラでプッシュ通知

 4 - 1 : 手順

0 MacでCSRをつくる
  キーチェーンアクセス
   タブのキーチェーンアクセス → 証明書アシスタント
   → 認証局に証明書を要求
   → メールアドレスを入力 → ディスクに保存
  CSRファイルが出来上がる

1 Identifier
  NewApp → App IDs 設定
  Descriptionに名称を入れる
  Bundle名に有効なBundleIDを入れる
  Push Notificationにチェック
  開発用と本番用と2つ必要

2 Certificateに移動
  Apple Push Service
   開発のときは開発用
   本番のときは本番用
   →1で決定したAppを選ぶ
   →0で作ったCSRファイルを選ぶ
   →できた
   →出来たやつを証明書として保存
   aps.cerみたいな感じ

3 Macで2で出来たcerファイルをダブルクリック
  ・・・を書き出すをクリック
  p12ファイルを作りたいがそれが出来ない場合は自分の証明書タブをクリックしてから
  右クリックで作成
  パスワードを求められるが「入力しない」

4 ニフクラでアカウントを作成 gmailで作成
  アプリを作成する
   右のアプリ設定をクリック
  プッシュ通知を許可する
  で3で作ったiOS用のp12ファイルを登録

5 AndroidでAppをつくる
  Firebaseでアプリをつくる
  プロジェクトの設定 → 新しい秘密鍵の作成
  → 保存する jsonファイルができる
  → ニフクラの4のところのAndroid用のjsonファイルを保存する


 

 1 ImpressCMSの全体的な考え方について Draft 460 bytes 2022-05-30 by 管理人
 2 モジュールについて Draft 976 bytes 2022-05-30 by 管理人
 2 - 1 icms_version.php Blank 0 bytes 2022-08-18 by 管理人
 3 Smartyテンプレート Draft 728 bytes 2022-05-30 by 管理人
 3 - 1 Smartyの基本構文 Draft 518 bytes 2022-05-30 by 管理人
 3 - 1 - 1 コメント Draft 770 bytes 2022-05-30 by 管理人
 3 - 2 変数 Draft 5286 bytes 2022-05-30 by 管理人
 3 - 3 変数の修飾子 Draft 2422 bytes 2022-05-30 by 管理人
 3 - 4 組み込み関数 Draft 6493 bytes 2022-12-26 by 管理人
 3 - 5 カスタム関数 Draft 1549 bytes 2022-05-30 by 管理人
 4 ニフクラでプッシュ通知 Blank 0 bytes 2022-12-09 by 管理人
 4 - 1 手順 Draft 2072 bytes 2022-12-09 by 管理人