Read it later.

Web製作に関するサーバ構成やコーディングネタの備忘録として使ってます。

*

[Smarty]確認画面などで使う、Hidden項目を全力で自動生成

      2011/08/03

入力確認画面や完了通知画面で、前画面(入力画面)のリクエストを元に一気にHiddenを作成する時にはこれ。

  • phpタグを使わないといけないことや、
  • Smartyのプラグイン形式でやればよかった、

など思うところはあるのだけど、
また落ち着いたらということで。

↑と書いていましたが、プラグイン化してみました(11/08/01追記)。

Smartyのデリミタは、

<!--{ Smartyのタグ }-->

にしてます。

#-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
# hiddenタグの自動生成[ver.110801]
# $_REQUEST変数を元に、hiddenタグを自動生成します。
# 生成対象から外したい場合は、$hiddenTagタグに、そのリクエストキーを入力して下さい。
# ※値に含まれる特殊文字は、HTML エンティティに自動変換されます。
# [使用例]
# <!--{ generate_hiddentags_for_requests ignore_keys="ignore_key_word01,ignore_key_word02,ignore_key_word03" }-->
#-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
function smarty_function_generate_hiddentags_for_requests($params, &$smarty){
  $returnValue = "";
  # HTMLコメントにて開始を告げる
  $returnValue .= "<!-- generate_hiddentags_for_requests -->\r\n";
  # 自動生成の対象から外れるリクエスト項目のキー名を定義
  $ignoreKeywords = array();
  if( isset($params["ignore_keys"]) > 0 && mb_strlen($params["ignore_keys"]) > 0 ){
    $ignoreKeywords = @explode( ",", $params["ignore_keys"] );
  }
  # リクエストをフェッチして、hiddenタグを自動生成
  $hiddenTag = "";
  foreach( $_REQUEST as $itemKey=>$itemValue ){
    # 自動生成の対象となるリクエスト項目のキー名か
    $existsKeyword = FALSE;
    for( $i = 0; $i < count($ignoreKeywords); $i++ ){
      if( mb_eregi( $ignoreKeywords[$i], $itemKey ) !== FALSE ){
        $existsKeyword = TRUE;
        break;
      }
    }
    # 自動生成の対象となった場合は、hiddenタグを生成しアサインします。
    if( $existsKeyword != TRUE ){
      $hiddenTag .= _generateHiddenTagByRecursive( $itemKey, $itemValue );
    }
  }
  $returnValue .= $hiddenTag;
  # HTMLコメントにて終了を告げる
  $returnValue .= "<!-- /generate_hiddentags_for_requests -->\r\n";

  return $returnValue;
}
# 再帰的にHiddenタグを自動生成
function _generateHiddenTagByRecursive( $pItemKey, $pItemValue ){
  $returnValue = "";
  if( is_array($pItemValue) ){
    foreach( $pItemValue as $subItemKey => $subItemValue ){
      if( strlen($pItemKey) > 0 ){
        $subItemKey = sprintf("%s[%s]",$pItemKey, $subItemKey);
      }
      $returnValue .= _generateHiddenTagByRecursive( $subItemKey, $subItemValue );
    }
  }
  else{
    $returnValue .= "<input type=\"hidden\" name=\"".$pItemKey."\" value=\"".htmlspecialchars($pItemValue, ENT_QUOTES)."\" />\r\n";
  }
  return $returnValue;
}

 - PHP, Smarty

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

  関連記事

php
$_SERVER[“REQUEST_TIME_FLOAT”]

$_SERVER[“REQUEST_TIME”]には置き …

php
Smarty2からSmarty3へのアップグレードガイド

Smarty2を以前から愛用していたのだけど、Smarty3にそろそろ移行しよう …

php
$_REQUEST($_POST)に全てのアイテムが格納されない – max_input_vars

フォームに大量のINPUTタグを配置している場合に、 部分的には取れるけど、PO …

centos
GeoIPのインストール

IPアドレスから国や都市を取得するためのライブラリが、MaxMind社のGeoI …

php
マルチバイト文字列を1文字づつ分解して配列化する – preg_split

便利な標準関数があったので、サンプルを。 マルチバイト文字列を1文字づつ分解し配 …

mysql
[MySQL][phpMyAdmin]Allowed memory size of XXXXXX bytes exhausted (tried to allocate XXXXXX bytes)

こんな現象がおきました phpMyAdminでデータベース全体をエクスポートした …

php
headers_list

リダイレクトやNot Found処理をする時に、header()を使用しHTTP …