TopMovable Typeテンプレートタグ > regex_replace モディファイアをダイナミックパブリッシングで利用する場合の注意
2009年11月20日

regex_replace モディファイアをダイナミックパブリッシングで利用する場合の注意

Posted at November 20,2009 1:55 AM
Category:[テンプレートタグ]
Tag:[, , ]

Movable Type の小ネタです。

regex_replace モディファイアでグループ化と後方参照($1など)を利用する場合、次のように記述します。

<mt:GetVar name="foo" regex_replace="/(.*)/","No.$1" />

上の例では、変数 foo の値が「1」であれば、出力は「No.1」となります。

テンプレートをダイナミックパブリッシングにすると、このままの記述では regex_replace モディファイアは正常に動作せず、出力は「No.」となってしまいます。

期待通りに動作させるためには、後方参照の「$」をエスケープします。

<mt:GetVar name="foo" regex_replace="/(.*)/","No.\$1" />

ちなみに、上記の展開されたダイナミックパブリッシングのソースコードを掲載しておきます。

エスケープなし(NGになるケース)

<?php /* Smarty version 2.6.13, created on 2009-11-21 23:25:15
         compiled from mt:1872 */ ?>
<?php require_once(SMARTY_CORE_DIR . 'core.load_plugins.php');
smarty_core_load_plugins(array('plugins' => array(array('function', 'mtgetvar', 'mt:1872', 4, false),array('modifier', 'regex_replace', 'mt:1872', 4, false),)), $this); ?>
<?php $this->_tag_stack[] = array("mtgetvar", array (
  'name' => 'foo',
  'regex_replace' => '/(.*)/',
));  echo ((is_array($_tmp=smarty_function_mtgetvar(array('name' => 'foo'), $this))) ? $this->_run_mod_handler('regex_replace', true, $_tmp, "/(.*)/", "No.".($this->_tpl_vars['1'])) : $this->_plugins['modifier']['regex_replace'][0][0]->regex_replace($_tmp, "/(.*)/", "No.".($this->_tpl_vars['1']))); array_pop($this->_tag_stack); ?>

エスケープあり(OKになるケース)

<?php /* Smarty version 2.6.13, created on 2009-11-21 23:25:53
         compiled from mt:1872 */ ?>
<?php require_once(SMARTY_CORE_DIR . 'core.load_plugins.php');
smarty_core_load_plugins(array('plugins' => array(array('function', 'mtgetvar', 'mt:1872', 4, false),array('modifier', 'regex_replace', 'mt:1872', 4, false),)), $this); ?>
<?php $this->_tag_stack[] = array("mtgetvar", array (
  'name' => 'foo',
  'regex_replace' => '/(.*)/',
));  echo ((is_array($_tmp=smarty_function_mtgetvar(array('name' => 'foo'), $this))) ? $this->_run_mod_handler('regex_replace', true, $_tmp, "/(.*)/", "No.\$1") : $this->_plugins['modifier']['regex_replace'][0][0]->regex_replace($_tmp, "/(.*)/", "No.\$1")); array_pop($this->_tag_stack); ?>

ということでお試しください。

Posted by yujiro   このページの先頭に戻る
関連記事
この記事を読んだ人はこんな記事も読んでいます
人気エントリー
Hatena Hot Entries
Hatena Entries
トラックバックURL


コメント

こんばんわ^^

うちでもダイナミック・パブリッシングを利用してますが、特にエスケープしなくっても期待通りの置換がされてます(*^_^*)
具体的には以下のようなかんじです。

<$mt:ArchiveTitle regex_replace="/^.*<(.*)>$/","\$1" setvar="page_title"$>

上記はカテゴリ名称から特定の名称を抜き出すことをやってます。
MT のバージョンによるものなのか、MTPerDynamic プラグインを利用してるからなのかは不明ですけど(; ̄ー ̄A

以上ご報告まで。

[1] Posted by bzbell logo : November 21, 2009 12:10 AM

>bzbellさん
こんばんは。
情報ありがとうございました。
デフォルトのダイナミックパブリッシングはPHP(Smarty)で動作するので後方参照が動作しなくなるようです。
ではでは!

[2] Posted by yujiro logo : November 21, 2009 11:32 PM
コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字 イタリック アンダーライン ハイパーリンク 引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)

Now loading...
Introduction
Entries of this Category
Recent Entries
Recent Comments
Recent Trackbacks
QRcode

現在停止中です
携帯電話からこのQRcodeを撮影することで携帯用URLを取得することができます

URI for cellular phones
ギターに入った猫
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site

このブログをメールで購読する by:FeedBurner

loading ...
Categories
Monthly Archives
BlogPeople
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
クリエイティブ・コモンズ・ライセンス
Powered by
Movable Type 5.12