TopMovable Typeテンプレートタグ > 2009年11月
2009年11月20日

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

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); ?>

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

Comments [2] | Trackbacks [0]
2009年11月12日

複数ブログのブログ記事を時間順に1件ずつ表示する

November 12,2009 1:55 AM
Tag:[]
Permalink

MultiBlog タグに mode="context" を付与した場合や、Entries タグに blog_ids="children" を付与すれば、複数ブログのタグを時間順に表示することができますが、それぞれのブログの件数を制限することはできません(「blog_ids="children"」はMovable Type 5以降で利用可能)。

例えば、ウェブサイト配下に 3 つのブログがあり、ウェブサイトに各ブログの最新記事1件を時間順に並べる場合などです。

このエントリーでは、3つのブログのブログ記事が次のように(新着順に)並んでいても、
一括編集画面

このように、それぞれのブログの最新記事1件を表示するカスタマイズを紹介します。
それぞれのブログの最新記事1件を表示

上記の表示は以下のサブテンプレートで実現できると思いますので、試してみてください。

1.MultiBlog タグの場合

<mt:MultiBlog mode="context">
  <mt:Entries lastn="0">
    <mt:EntriesHeader>
<ul>
    </mt:EntriesHeader>
    <mt:BlogName setvar="blog_name" />
    <mt:var name="flag" value="0" />
    <mt:loop name="list">
      <mt:if name="__value__" eq="$blog_name">
        <mt:var name="flag" value="1" />
      </mt:if>
    </mt:loop>
    <mt:unless name="flag">
  <li><mt:BlogName />:<mt:EntryTitle /></li>
      <mt:setVar name="push(list)" value="$blog_name" />
    </mt:unless>
    <mt:EntriesFooter>
</ul>
    </mt:EntriesFooter>
  </mt:Entries>
</mt:MultiBlog>

2.MTEntries タグの場合

<mt:Entries blog_ids="children" lastn="0">
  <mt:EntriesHeader>
<ul>
  </mt:EntriesHeader>
  <mt:BlogName setvar="blog_name" />
  <mt:var name="flag" value="0" />
  <mt:loop name="list">
    <mt:if name="__value__" eq="$blog_name">
      <mt:var name="flag" value="1" />
    </mt:if>
  </mt:loop>
  <mt:unless name="flag">
  <li><mt:BlogName />:<mt:EntryTitle /></li>
    <mt:setVar name="push(list)" value="$blog_name" />
  </mt:unless>
  <mt:EntriesFooter>
</ul>
  </mt:EntriesFooter>
<mt:var name="__counter__" />
</mt:Entries>

2010.04.14
「blog_ids="site"」を「blog_ids="children"」に変更しました("site"は、Movable Type 5.0ベータ版で設定可能となっていた値)。また、「blog_ids="children"」の利用可能バージョンを追記しました。

Comments [2] | Trackbacks [0]
Now loading...
ギターに入った猫
掲載広告募集
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site

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

AMN
Categories
Monthly Archives
2019年
2018年
2017年
2016年
2015年
2014年
2013年
2012年
2011年
2010年
2009年
2008年
2007年
2006年
2005年
2004年
2003年
BlogPeople
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
Powered by
Movable Type 6.0.3