Smarty

  • iPhone対応SNS『iPhoneStyle』の登録者数がまもなく1000人を迎えることもあり、SNS内で1000人までのカウントダウンの表示をスタート。

    今回は、事前に1000人達成日の予測を呼びかけたことから、数字の見えない総数ではなく、誰でも確認することのできる初期登録コミュ『iStyle』の登録者数をカウント数値として採用している。

    こういった場合、特定のコミュの登録者数を得るには、OpenPNEで用意している、db_commu_count_c_commu_member_list4c_commu_idという関数を利用するのが簡単でいい。
    引数にコミュのID番号を渡してやると、登録者数が返ってくる。
    実際にはその値をテンプレートに使うので、以下のようにしている。

    $this->set(‘target_commu_member_num’, db_commu_count_c_commu_member_list4c_commu_id($target_commu_id));

    あとはsmartyの書式に従いテンプレートファイルで利用すればいい。

  • OpenPNEでのSNS運用していて、日記等のフォームに新しい項目を追加したいこともあるだろう。
    しかし、OpenPNEの場合、単純にテンプレートに追加するだけでは処理されない。
    その場合は、以下のファイルを修正していくことで変更することが可能となる。

    ———————————————————————-

    まずは、表示のためのテンプレートファイル
    フォームの希望する場所(テーブル処理されている部分)に

    <tr>
    <th>項目</th>
    <td>内容</td>
    </tr>

    と追加する。

    ■変更ファイル
    templates/
    h_diary_add.tpl
    h_diary_add_confirm.tpl

    ※項目内容をデータベースから取得する場合や、フォーム内に登録者毎のデータが必要な場合は、以下のPHPファイル内で取得する

    ———————————————————————-

    テンプレート用にデータ取得等の処理が必要であれば、以下のPHPファイル内で処理し
    $this->set(‘hoge’, $hoge);
    といった形でtplに渡せばいい

    ■変更ファイル
    page/
    h_diary_add.php
    h_diary_add_confirm.php

    ———————————————————————-

    項目内での変更や選択肢の追加等の場合は上記page内とtemplates内のファイルのみで良いが、新たに項目を追加しリクエスト変数が増えた場合は、validate内で定義してやる必要がある

    ■変更ファイル
    validate/do
    h_diary_add_insert_c_diary.ini

    validate/page
    h_diary_add.ini
    h_diary_add_confirm.ini

    上記ファイル内で、欲しいデータ形式に合わせ、新たなリクエスト変数を定義する

    type
    int→整数
    string→文字列

    ———————————————————————-

    これでデータの項目表示、フォームデータの受け渡しが可能となる。
    あとは、渡されたデータをデータベースに登録するロジックを追加すればいい。

  • OpenPNEでは、ページのデザインと,ロジックのコーディングを分離する目的で、SmartyというPHPプログラムのテンプレートエンジンを使用しています。
    Smartyを使用していることにより、アプリケーションのロジックが分からない人でも、ある程度のHTMLの知識があれば、OpenPNEのレイアウトを変更(カスタマイズ)することができます。

    具体例を示しながら、実際に進めていく手順を説明

    レイアウトを修正したいページを表示させるURLが以下の場合
    http://iphone-sns.com/?m=pc&a=page_fh_diary&target_c_diary_id=2

    レイアウトテンプレートの場所は
    (config.phpがあるディレクトリ名)/webapp/modules/pc/templates/
    ディレクトリ内にある、
    fh_diary.tpl
    となる。
    これに習えば、修正・レイアウト変更・カスタマイズしたいページの引数の文字を見れば、他のテンプレート名が分かる。

    さて、一番簡単なのは、このテンプレートファイルをFTP等でダウンロードし、エディターで修正し、再びアップロードすれば良いのだが、修正に失敗したりした場合や、元に戻したい時に問題がある。

    OpenPNEは、その点も良く考えられており、
    ・webapp
    ・webapp_ext
    という二つのディレクトリが用意されている。

    先ほどダウンロードしたテンプレートファイルはwebappにあったものだが、修正したテンプレートファイルをアップする場所を元の場所では無く、webapp_ext内にあるtemplatesの中にアップする。
    OpenPNEは、webapp_extに同ディレクトリ同名のファイルが存在した場合、webapp_ext内にあるファイルの方が処理される。

    このことにより、元のテンプレートファイルをそのままにして、レイアウトの修正・カスタマイズが可能となる。
    修正に失敗したり、レイアウトが崩れてしまったりしたら、webapp_ext内のテンプレートファイルを削除してしまえば、デフォルトのテンプレートファイルを読み込み表示される。

    なお、このwebapp_extの機能を使いたい場合は、config.phpを開き

    ///
    // webapp_ext ディレクトリ使用設定
    ///

    define(‘USE_EXT_DIR’, false);

    define(‘USE_EXT_DIR’, true);

    falseをtrueにする。

    これをしないと、webapp_extを使用しないので注意。

  • SmartyでHTMLタグを有効にする方法

    ·

    OpenPNEで使われているSmartyは、通常HTMLタグが無効になるようにエスケープされる。
    文字データを取得し表示する場合等はこのままで構わないが、アフィリエイト用タグやGoogleアドセンス、Google Analytics、RSSデータ等、タグをエスケープして欲しくない場合もある。
    そんな場合は以下のようにnodefaultsを使うことでHTMLタグを有効にすることができる。

    ■SmartyでHTMLタグを有効にするサンプル

    ({$hoge:nodefaults})

    ※通常のSmartyでは、{$hoge}が置き換わるようになっているが、OpenPNEの場合、({$hoge})と表記する。

    有効にしたい部分にnodefaultsを使うだけで、読み込むデータがそのまま表示されるようになる。