- Timestamp:
- 2012/01/23 04:49:37 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/version-2_12-dev/data/class/plugin/SC_Plugin_Template_Transformer.php
r21416 r21420 61 61 $html = file_get_contents(SMARTY_TEMPLATES_REALDIR . $tmpl); 62 62 $err_msg = null; 63 63 64 64 // 対象のパスが存在するかを検証する, 65 65 if ($html === false) { … … 68 68 $err_msg = $tmpl. "の文字コードがUTF-8ではありません"; 69 69 } 70 70 71 71 if (!is_null($err_msg)) { 72 72 // TODO エラー処理 … … 74 74 75 75 // JavaScript内にSmartyのタグが存在するものを、コメント形式に置換 76 77 78 79 80 76 $html = preg_replace_callback( 77 '/<script.+?\/script>/s', 78 array($this, 'captureSmartyTags2Comment'), 79 $html 80 ); 81 81 82 82 // HTMLタグ内にSmartyのタグが存在するものを、いったんダミーのタグに置換する … … 93 93 $html 94 94 ); 95 95 96 96 $html = '<meta http-equiv="content-type" content="text/html; charset=UTF-8" /><html><body><!--TemplateTransformer start-->'.$html.'<!--TemplateTransformer end--></body></html>'; 97 97 // TODO エラー処理 … … 213 213 function scanChild(DOMNode $objDOMElement, $parent_selector = '') { 214 214 $objNodeList = $objDOMElement->childNodes; 215 215 216 216 if (is_null($objNodeList)) return; 217 217 foreach ($objNodeList as $element) { 218 218 219 219 $arrAttr = array(); 220 220 // エレメントの場合、tag名を配列に入れる. … … 222 222 $arrAttr[] = $element->tagName; 223 223 } 224 224 225 225 // getAttributeメソッドを持つかを検証 226 226 if (method_exists($element, 'getAttribute')) { … … 266 266 267 267 if (is_null($objSelector)) $objSelector = new SC_Plugin_Template_Selector($this, $this->current_plugin); 268 268 269 269 // jQueryライクなセレクタを正規表現に 270 270 $selector = preg_replace('/ *> */', ' >', $selector); … … 274 274 // セレクターを配列にします. 275 275 $arrSelectors = explode(' ', $selector); 276 276 277 277 // セレクタから正規表現を生成. 278 278 foreach ($arrSelectors as $sub_selector) { … … 296 296 // エレメントツリーのセレクタを先ほど作成した正規表現で順に検索. 297 297 for($iLoop=$startIndex; $iLoop < count($this->arrElementTree); $iLoop++){ 298 298 299 299 if (preg_match($regex, $this->arrElementTree[$iLoop][0])) { 300 300 if (is_null($index) || $cur_idx == $index) { … … 314 314 ); 315 315 } 316 316 317 317 return $objSelector; 318 318 } 319 319 320 320 /** 321 321 * DOMを用いた変形を実行する … … 327 327 */ 328 328 function setTransform($mode, $target_key, $html_snip) { 329 329 330 330 $substitute_tag = sprintf('<!--###%08d###-->', $this->smarty_tags_idx); 331 331 … … 333 333 $this->arrSmartyTagsSub[$this->smarty_tags_idx] = $substitute_tag; 334 334 $this->smarty_tags_idx++; 335 335 336 336 $objSnip = $this->objDOM->createDocumentFragment(); 337 337 $objSnip->appendXML($substitute_tag); 338 338 339 339 $objElement = false; 340 340 if(isset($this->arrElementTree[$target_key]) && $this->arrElementTree[$target_key][0]){ … … 343 343 344 344 if (!$objElement) return false; 345 345 346 346 try { 347 347 if ($mode == 'appendChild') { … … 351 351 $objElement->parentNode->insertBefore($objSnip, $objElement); 352 352 } elseif ($mode == 'insertAfter') { 353 354 355 356 357 353 if ($objElement->nextSibling) { 354 $objElement->parentNode->insertBefore($objSnip, $objElement->nextSibling); 355 } else { 356 $objElement->parentNode->appendChild($objSnip); 357 } 358 358 } elseif ($mode == 'replaceChild') { 359 359 if (!is_object($objElement->parentNode)) return false; … … 366 366 return true; 367 367 } 368 368 369 369 /** 370 370 * セレクタエラーを記録する … … 384 384 ); 385 385 } 386 386 387 387 /** 388 388 * HTMLに戻して、Transform用に付けたマーカーを削除し、Smartyのタグを復元する … … 407 407 // TODO エラー処理 408 408 // ECC_Plugin_Engine::dispError(FREE_ERROR_MSG, "テンプレートの操作に失敗しました。".$err_msg); 409 409 410 410 } elseif ($this->snip_count) { 411 411 $html = $this->objDOM->saveHTML(); … … 415 415 $html = preg_replace('/<\!--TemplateTransformer end-->.*$/s', '', $html); 416 416 return $html; 417 417 418 418 } else { 419 419 return false; … … 434 434 $filepath = PLUGIN_TMPL_CACHE_REALDIR . $filename; 435 435 $dir = dirname($filepath); 436 436 437 437 if (!file_exists($dir)) mkdir($dir, PLUGIN_DIR_PERMISSION, true); 438 438 if (!file_put_contents($filepath, $html)) return false; … … 444 444 445 445 } 446 447 448 ?>
Note: See TracChangeset
for help on using the changeset viewer.