OSDN Git Service

キャラクターシート表示Helper追加
authorCake <cake_67@users.sourceforge.jp>
Sat, 24 Apr 2010 13:03:05 +0000 (22:03 +0900)
committerCake <cake_67@users.sourceforge.jp>
Sun, 25 Apr 2010 02:45:13 +0000 (11:45 +0900)
app/controllers/characters_controller.php
app/views/helpers/character_sheet.php [new file with mode: 0644]

index 7f7f033..6690c5c 100644 (file)
@@ -547,7 +547,9 @@ class CharactersController extends AppController {
        }
 
        function _view($id, $conditions = array(), $isAdmin = false) {
-               // スキン設定
+               $this->helpers[] = 'CharacterSheet';
+
+               // キャラクターシート設定
                if (isset($this->params['named']['mode']) && !empty($this->params['named']['mode'])) {
                         $this->view = 'Theme';
                         $this->theme = $this->params['named']['mode'];
diff --git a/app/views/helpers/character_sheet.php b/app/views/helpers/character_sheet.php
new file mode 100644 (file)
index 0000000..c20a103
--- /dev/null
@@ -0,0 +1,104 @@
+<?php
+/* 
+ * キャラクターシート表示用Helper
+ */
+class CharacterSheetHelper extends Helper {
+       var $helpers = array(
+               'Html',
+               'Form',
+//             'Profiledisp',
+       );
+
+       /* 単純表示 */
+       function profileName4key_name($profile, $key_name)
+       {
+               $this->output4key_name($profile, $key_name, '', 'name');
+       }
+       function profileValue4key_name($profile, $key_name)
+       {
+               $this->output4key_name($profile, $key_name);
+       }
+       function output4key_name($profile, $key_name, $model = 'CharactersHasProfile', $target = 'value', $key = 0)
+       {
+               if (empty($profile) || empty($key_name)) {
+                       echo null;
+               }
+               if (isset($profile[$key_name][$model][$key][$target])) {
+                       echo $profile[$key_name]['CharactersHasProfile'][$key][$target];
+               } elseif (empty($model) && isset($profile[$key_name][$target])) {
+                       echo $profile[$key_name][$target];
+               } else {
+                       echo "&nbsp;";
+               }
+       }
+
+       /* 繰り返し表示 */
+       /* m-input表示 */
+       // key_nameを指定して全データ表示
+       function multiInput4key_name($profile, $key_name, $pattern)
+       {
+               if (empty($profile) || empty($key_name) || empty($pattern)) {
+                       echo null;
+               }
+
+               if (!isset($profile[$key_name]['CharactersHasProfile'])) {
+                       echo null;
+               }
+
+               foreach($profile[$key_name]['CharactersHasProfile'] as $hasProfile) {
+                       $this->formatValues($pattern, $hasProfile['value']);
+               }
+       }
+
+       /* Table表示 */
+       // key_nameとtable_keynameを指定して全データ表示
+       function table4tablekey_name($profile, $key_name, $tablekey_names, $pattern)
+       {
+               if (empty($profile) || empty($key_name) || empty($pattern) || empty($tablekey_names)) {
+                       echo null;
+               }
+
+               if (!isset($profile['ProfileTable']) || !isset($profile['ProfileTable'])) {
+                       echo null;
+               }
+
+               // $tablekey_namesに対応するデータ抽出
+               $CharactersHasProfiles = array();
+               foreach($tablekey_names as $k => $v) {
+                       $table = Set::extract('/'.$key_name.'/ProfileTable[tablekey_name='.$v.']', $profile);
+                       unset($table[0]['ProfileTable']['ProfileTableStatic']);
+                       if (isset($table[0]['ProfileTable'])) {
+                               $hasProfile = Set::extract('/'.$key_name.'/CharactersHasProfile[profile_table_id='.$table[0]['ProfileTable']['id'].']', $profile);
+                               if (!empty($hasProfile)) {
+                                       foreach($hasProfile as $v2) {
+                                               $CharactersHasProfiles[$table[0]['ProfileTable']['id']][] = $v2['CharactersHasProfile'];
+                                       }
+                               }
+                       }
+               }
+
+               // $patternにあてはめて出力
+               $row_num = count(reset($CharactersHasProfiles));
+               for ($i=0;$i<$row_num;$i++) {
+                       $data = array();
+                       while(list($profile_table_id, $hasProfile) = each($CharactersHasProfiles)) {
+                               $data[] = $hasProfile[$i]['value'];
+                       }
+
+                       $this->formatValues($pattern, $data);
+                       reset($CharactersHasProfiles);
+               }
+       }
+
+       /* フォーマットして出力 */
+       function formatValues($pattern, $replacement)
+       {
+               if (empty($pattern) || empty($replacement)) {
+                       echo null;
+               }
+
+               echo call_user_func_array('sprintf', array_merge((array)$pattern, (array)$replacement));
+       }
+
+}
+