hirasawa

CSVListの様なプラグイン

0

スカイアークさんのCSVList
http://www.skyarc.co.jp/engineerblog/entry/3859.html
を昔から愛用しているのですが、10項目以上有るとうまく動作しなかったり、カンマを含むデータを実体参照とかせずに、扱えるようにしたかったりと、
修正や機能追加できたら良いなと思っています。

現状の機能でもかなり素敵なんですが、カンマじゃなくてタブとかで出来たりするとすごく良いのですが、そう言ったプラグインを作って頂ける方は居ないでしょうか。

スカイアークさんのサイトの方では、コメント欄が閉じられてたり、
あんまりバージョンアップに明るい感じじゃないのかなと思い、
こちらに、プラグインの要望として上げさせてもらいました。

このプラグインにすごーく助けられてるんですが、
あんまり需要無いんでしょうか。。。

返信(7)

| 返信する
  • >hirasawaさん
    Splitプラグインを使えば、ご要望の機能はある程度可能です。
    たとえば、ブログ記事の本文に改行文字とタブ文字で分割した、次のリストを設定していると仮定します。「(tab)」はタブ文字です。

    test1(tab)test2(tab)test3
    test4(tab)test5(tab)test6
    test7(tab)test8(tab)test9

    このリストは次のテンプレートで分割出力できます。

    <mt:Entries>
      <mt:EntryBody split="\n" setvar="foo">
     
      <mt:loop name="foo"> 
        <mt:getVar name="__value__" split="\t" setvar="bar" />
        <mt:loop name="bar"> 
          <mt:getVar name="__value__" /><mt:if name="__last__"><br /></mt:if>
        </mt:loop>
      </mt:loop>
     
    </mt:Entries>

    外側のMTLoopタグで改行文字(\n)で分割した内容を出力し、内側のMTLoopタグでタブ文字(\t)で分割した内容を出力しています。

    Splitプラグイン
    http://www.koikikukan.com/archives/2009/01/20-015555.php

  • > yujiro さん
    こんにちは。
    ご返信ありがとうございます!

    この場合、例えば本文でカンマなりタブなりで区切ってテーブルを生成したい場合に CSVList だと以下のような感じで出来るのですが、同様のことをするには結構頑張らないと(手軽に使うには)厳しいですよね?

    <table>
    <thead>
    <tr>
    <th>開催日</th>
    <th>時間</th>
    </tr>
    </thead>
    <tbody><mt:CSVList data="&lt;MTEntryBody&gt;">
    <tr>
    <td><mt:CSV1 /></td>
    <td><mt:CSV2 /></td>
    </tr></mt:CSVList>
    </tbody>
    </table>

    項目が少なければカスタムフィールドで専用のフィールドを用意すれば問題無いんですが、項目が増えてもカンマで区切るだけでテーブルを生成したりと使いどころがかなり多いので、CSVListと同等に使えるとすごく助かる次第です。

    場合によっては有償でも作って頂けるもしくは作って頂ける方が居ればお願いしたいくらいです。

  • >hirasawaさん
    参考までにコードを掲載しておきます。

    <table>
    <thead>
    <tr>
    <th>開催日</th>
    <th>時間</th>
    </tr>
    </thead>
    <tbody><mt:EntryBody split="\n" setvar="foo">
    <mt:loop name="foo">
      <mt:getVar name="__value__" split="\t" setvar="bar" />
      <mt:loop name="bar">
        <mt:if name="__first__">
    <tr>
        </mt:if>
    <td><mt:getVar name="__value__" /></td>
        <mt:if name="__last__">
    </tr>
        </mt:if>
      </mt:loop>
    </mt:loop>
    </tbody>
    </table>

    CSVListでは項目の増減にあわせて<mt:CSV1 />や<mt:CSV2 />を書き換える必要がありそうですが、上記のコードであれば、項目の増減にあわせてth要素のみ書き換えればOKです(「手軽さ」の観点が違うかもしれませんが)。

  • > yojiro さん
    ご返信ありがとうございます。

    ちょこちょこテストしてみました!

    普段、loopとか全然使いこなせてないので、
    やっぱりとっつきにくさ(ボクの言う手軽さ)とかは有りますが、
    慣れてくれば、この方が拡張性なども高くて良いですね。

    ボク自身は、こういうのがスラスラと書ける訳じゃないので、
    色んなパターンを予め作っておかないと苦労しそうですが><

    もう少し、splitプラグインをいじってみたいと思います。

  • > yojiro さん
    少しいじって居るのですが、特定の項目を引っ張る場合、どの様に書いたら良いか分からずハマっているのでもし宜しければ教えて頂けないでしょうか。

    実際にCSVListでやっているのは下記です。

    <mt:If tag="EntryBody">
    <mt:CSVList data="&lt;mt:EntryBody&gt;">
     
    <div class="item">
    	<mt:If tag="CSV10"><p><img src="<mt:BlogRelativeURL>img/<mt:CSV10>" alt="写真:<mt:CSV1>さん" /></mt:If>
    	<h5><mt:CSV1>さん<mt:If tag="CSV2"><br />(<mt:CSV2>)</mt:If></h5>
    	<mt:If tag="CSV3"><p><mt:CSV3></p></mt:If>
    	<mt:If tag="CSV4"><p class="introducer">紹介者:<mt:CSV4> さん</p></mt:If>
    	<mt:If tag="CSV5"><p><span>1)</span> <mt:CSV5></p></mt:If>
    	<mt:If tag="CSV6"><p><span>2)</span> <mt:CSV6></p></mt:If>
    	<mt:If tag="CSV7"><p><span>3)</span> <mt:CSV7></p></mt:If>
    	<mt:If tag="CSV8"><p><span>4)</span> <mt:CSV8></p></mt:If>
    	<mt:If tag="CSV9"><p><span>5)</span> <mt:CSV9></p></mt:If>
    <!-- / .item --></div>
     
    </mt:CSVList>
    </mt:If>

    こういう感じで、5番目はこっちに表示して、3番目はこっちに~の様な方法がよく分からない状態です・・・

  • >hirasawaさん
    値を判定する場合は、内側のMTLoopタグで一度全部(=1行分)の値を変数CSV1~CSV10に保持して、内側のMTLoopタグを抜けた後でCSVListの書き方と同じように変数CSV1~CSV10を判定・出力すればいけると思います。

    <mt:if tag="EntryBody">
      <mt:EntryBody split="\n" setvar="foo">
      <mt:loop name="foo">
        <mt:getVar name="__value__" split="\t" setvar="bar" />
        <mt:loop name="bar">
          <mt:if name="__counter__" eq="1"><$mt:GetVar name="__value__" setvar="CSV1"$></mt:if>
          <mt:if name="__counter__" eq="2"><$mt:GetVar name="__value__" setvar="CSV2"$></mt:if>
          <mt:if name="__counter__" eq="3"><$mt:GetVar name="__value__" setvar="CSV3"$></mt:if>
          <mt:if name="__counter__" eq="4"><$mt:GetVar name="__value__" setvar="CSV4"$></mt:if>
          <mt:if name="__counter__" eq="5"><$mt:GetVar name="__value__" setvar="CSV5"$></mt:if>
          <mt:if name="__counter__" eq="6"><$mt:GetVar name="__value__" setvar="CSV6"$></mt:if>
          <mt:if name="__counter__" eq="7"><$mt:GetVar name="__value__" setvar="CSV7"$></mt:if>
          <mt:if name="__counter__" eq="8"><$mt:GetVar name="__value__" setvar="CSV8"$></mt:if>
          <mt:if name="__counter__" eq="9"><$mt:GetVar name="__value__" setvar="CSV9"$></mt:if>
          <mt:if name="__counter__" eq="10"><$mt:GetVar name="__value__" setvar="CSV10"$></mt:if>
        </mt:loop>
     
    <div class="item">
        <mt:if name="CSV10"><p><img src="<$mt:BlogRelativeURL$>img/<$mt:GetVar name="CSV10"$>"
         alt="写真:<$mt:GetVar name="CSV1"$>さん" /></mt:if>
          <h5><$mt:GetVar name="CSV1"$>さん<mt:if name="CSV2"><br />(<$mt:GetVar name="CSV2"$>)</mt:if></h5>
          <mt:if name="CSV3"><p><$mt:GetVar name="CSV3"$></p></mt:if>
          <mt:if name="CSV4"><p class="introducer">紹介者:<$mt:GetVar name="CSV4"$> さん</p></mt:if>
          <mt:if name="CSV5"><p><span>1)</span> <$mt:GetVar name="CSV5"$></p></mt:if>
          <mt:if name="CSV6"><p><span>2)</span> <$mt:GetVar name="CSV6"$></p></mt:if>
          <mt:if name="CSV7"><p><span>3)</span> <$mt:GetVar name="CSV7"$></p></mt:if>
          <mt:if name="CSV8"><p><span>4)</span> <$mt:GetVar name="CSV8"$></p></mt:if>
          <mt:if name="CSV9"><p><span>5)</span> <$mt:GetVar name="CSV9"$></p></mt:if>
    <!-- / .item --></div>
      </mt:loop>
    </mt:if>
    
  • > yojiro さん
    ご返信ありがとうございます。
    なるほど、最初にLoopでやる必要があったんですね。

    提示してもらったソースで、試したら無事に出来ました!
    ありがとうございます。

返信する