OSDN Git Service

スキンで画像を複数変換対応
authorCake <cake_67@users.sourceforge.jp>
Wed, 11 Aug 2010 12:12:12 +0000 (21:12 +0900)
committerCake <cake_67@users.sourceforge.jp>
Wed, 11 Aug 2010 12:12:12 +0000 (21:12 +0900)
app/controllers/character_sheets_controller.php

index cc0cf21..947b899 100644 (file)
@@ -283,7 +283,7 @@ class CharacterSheetsController extends AppController {
        }
 
        /* スキン変換 */
-       function __changeSkin($data, $replacement, $pattern)
+       function __changeSkin($data, $replacement, $pattern, $limit = -1)
        {
                if (empty($data) || empty($pattern)) {
                        return $data;
@@ -293,7 +293,7 @@ class CharacterSheetsController extends AppController {
                        $replacement = '<?php '.$replacement. '; ?>';
                }
 
-               return preg_replace($pattern, $replacement, $data);
+               return preg_replace($pattern, $replacement, $data, $limit);
        }
 
        // Character
@@ -349,41 +349,48 @@ class CharacterSheetsController extends AppController {
                        case 'fullPicture':
                                if ($key_name == 'mainPicture') {
                                        $element = 'character_picture_image';
-                                       $pattern = '/{C:mainPicture:?(.*)}/';
+//                                     $pattern = '/{C:mainPicture:?(.*)?}/';
+                                       $pattern = '/{C:mainPicture([_a-zA-Z0-9:]+)}/';
                                        $filename = 'main_picture';
                                } elseif ($key_name == 'fullPicture') {
                                        $element = 'character_picture_full';
-                                       $pattern = '/{C:fullPicture:?(.*)}/';
+                                       $pattern = '/{C:fullPicture([_a-zA-Z0-9:]+)}/';
+//                                     $pattern = '/{C:fullPicture:?(.*)}/';
                                        $filename = 'full_length';
                                } else {
                                        return $data;
                                        break;
                                }
 
-                               if (preg_match($pattern, $data, $matches)) {
-                                       if (empty($matches[1])) {
+                               $count = preg_match_all($pattern, $data, $matches);
+                               if (isset($matches[1]) && !empty($matches[1])) {
+                                       foreach ($matches[1] as $v) {
+                                               $arr = explode(":", $v);
+
                                                if ($key_name == 'fullPicture') {
                                                        $size = 'fullPicture';
                                                } else {
                                                        $size = 'l';
                                                }
+                                               $classname = '';
                                                $class = '';
-                                       } else {
-                                               $arr = explode(":", $matches[1]);
+
                                                if (isset($arr[1])) {
-                                                       $size = $arr[0];
-                                                       $class = $arr[1];
-                                               } else {
-                                                       $size = $matches[1];
-                                                       $class = '';
+                                                       $classname = $arr[1];
                                                }
+                                               if (isset($arr[2])) {
+                                                       $size = $arr[2];
+                                               }
+                                               if (isset($arr[3])) {
+                                                       $class = $arr[3];
+                                               }
+
+                                               $replacement = '\$this->renderElement(\''. $element. '\', array(\'basename\' => \$character[\'Character\'][\''. $filename. '\'], \'classname\' => \''.$classname.'\', \'options\' => array(\'previewVersion\' => \''. $size. '\', \'class\' => \''. $class. '\', \'nodata\' => \'image\')));';
+
+                                       $data = $this->__changeSkin($data, "echo ".$replacement, $pattern, 1);
                                        }
-                               } else {
-                                       return $data;
-                                       break;
                                }
-
-                               $replacement = '\$this->renderElement(\''. $element. '\', array(\'basename\' => \$character[\'Character\'][\''. $filename. '\'], \'options\' => array(\'previewVersion\' => \''. $size. '\', \'class\' => \''. $class. '\', \'nodata\' => \'image\')));';
+                               return $data;
                                break;
                        default:
                                return $data;