コンテンツデータでMTEntriesWithSubCategoriesの代替テンプレートタグ

January 17,2022 11:55 PM
Category:[テンプレートタグ]
Tag:[MovableType]
Permalink

コンテンツデータでMTEntriesWithSubCategoriesの代替テンプレートタグを紹介します。

1.問題点

コンテンツデータでMTEntriesWithSubCategoriesと同等のタグ(MTContentsWithSubCategories)はありません。

ということで、コンテンツデータでMTEntriesWithSubCategoriesの代替テンプレートタグを紹介します。

2.前提条件

  • コンテンツタイプ名:products
  • コンテンツタイプに設定しているコンテンツフィールドのカテゴリセット名:field_category
  • カテゴリセット名:category
  • カテゴリセットの構造:下記(2階層まで)
cat1
  cat1-1
  cat1-2
  cat1-3

3.代替テンプレートタグ(親カテゴリが1つの場合)

赤字の部分は自由に書き換えてください。

<mt:CategorySets name="category">
  <mt:TopLevelCategories>
    <mt:HasParentCategory>
      <mt:setvarblock name="all"><mt:var name="all"> OR <mt:var name="top">/<mt:CategoryLabel></mt:setvarblock>
    </mt:HasParentCategory>
    <mt:HasNoParentCategory>
      <mt:CategoryLabel setvar="top">
      <mt:setvarblock name="all"><mt:var name="top"></mt:setvarblock>
    </mt:HasNoParentCategory>
    <mt:SubCatsRecurse>
  </mt:TopLevelCategories>
</mt:CategorySets>
 
<mt:Contents content_type="products" field:field_category="$all">
    <mt:ContentLabel><br />
</mt:Contents>

4.3の解説

テンプレートタグの前半で次のようなカテゴリ名の一覧を取得します。

cat1 OR cat1/cat1-1 OR cat1/cat1-2 OR cat1/cat1-3

この文字列を、後半のmt:Contentsタグの"field:field_category"オプションの値に設定します。

5.代替テンプレートタグ(親カテゴリが2つの場合)

赤字の部分は自由に書き換えてください。

<mt:setvar name="counter" value="0">
 
<mt:CategorySets name="category">
  <mt:TopLevelCategories>
    <mt:HasParentCategory>
      <mt:setvarblock name="all[$counter]"><mt:var name="all[$counter]"> OR <mt:var name="top">/<mt:CategoryLabel></mt:setvarblock>
    </mt:HasParentCategory>
    <mt:HasNoParentCategory>
      <mt:setvar name="counter" op="++">
      <mt:CategoryLabel setvar="top">
      <mt:setvarblock name="all[$counter]"><mt:var name="top"></mt:setvarblock>
    </mt:HasNoParentCategory>
    <mt:SubCatsRecurse>
  </mt:TopLevelCategories>
</mt:CategorySets>
 
<mt:setvarblock name="filter"><mt:Var name="all" index="1"> OR <mt:Var name="all" index="2"></mt:setvarblock>
 
<mt:Contents content_type="products" field:field_category="$filter">
  <mt:ContentField content_field="BookTitle"><mt:ContentFieldValue></mt:ContentField>
</mt:Contents>

6.5の解説

CategorySetsタグの中で、次のようなカテゴリ名の一覧を、親カテゴリ単位に配列の変数に取得します。

cat1 OR cat1/cat1-1 OR cat1/cat1-2 OR cat1/cat1-3

取得した配列変数をORで連結して、さきほどと同様、後半のmt:Contentsタグの"field:field_category"オプションの値に設定します。

親カテゴリが3つ以上の場合は、

<mt:setvarblock name="filter"><mt:Var name="all" index="1"> OR <mt:Var name="all" index="2"></mt:setvarblock>

の部分について、赤字で示す、

<mt:setvarblock name="filter"><mt:Var name="all" index="1"> OR <mt:Var name="all" index="2"> OR <mt:Var name="all" index="3"></mt:setvarblock>

のように増やしてください(もうちょっとエレガントな方法はあると思いますが)。

Comments [0] | Trackbacks [0]

XML::Simpleのインストールでエラーになる場合の対処

January 11,2022 11:55 PM
Category:[Perl]
Tag:[Perl]
Permalink

PerlのXML::Simpleのインストールでエラーになる場合の対処方法を紹介します。

モジュールはyum等ではなく、makeでインストールしています。

1.問題点

XML::Simpleをインストールしましたが、エラーになります。

下記のスクリプトを実行します。

#!/usr/bin/perl
 
use XML::Simple;
 
$file = './test.xml';
my $data = XMLin($file);

実行結果

# ./test.pl
XMLin() requires either XML::SAX or XML::Parser at ./test.pl line 6
XML::Simple called at ./test.pl line 6

ということで、PerlのXML::Simpleのインストールでエラーになる場合の対処方法を紹介します。

2.対処

エラーの内容より、XML::SAXまたはXML::Parserが必要みたいなのでインストールします。

なおXML::Parserはexpat-develのインストールが必要なようです。ここではXML::SAXをインストールします。

https://metacpan.org/pod/XML::Parser

からtar.gzファイルをダウンロードして展開し、

# perl Makefile.PL

でMakefileを生成します。

# make
cp lib/XML/SAX/PurePerl/EncodingDetect.pm blib/lib/XML/SAX/PurePerl/EncodingDetect.pm
cp lib/XML/SAX/PurePerl/Reader/UnicodeExt.pm blib/lib/XML/SAX/PurePerl/Reader/UnicodeExt.pm
cp lib/XML/SAX/PurePerl/Reader/Stream.pm blib/lib/XML/SAX/PurePerl/Reader/Stream.pm
  :
Manifying blib/man3/XML::SAX::PurePerl.3pm
Manifying blib/man3/XML::SAX::DocumentLocator.3pm
# make install
Installing /usr/local/share/perl5/XML/SAX.pm
Installing /usr/local/share/perl5/XML/SAX/Intro.pod
Installing /usr/local/share/perl5/XML/SAX/ParserFactory.pm
  :
Can't locate XML/SAX/Exception.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/local/share/perl5/XML/SAX/ParserFactory.pm line 12.
BEGIN failed--compilation aborted at /usr/local/share/perl5/XML/SAX/ParserFactory.pm line 12.
Compilation failed in require at /usr/local/share/perl5/XML/SAX.pm line 18.
BEGIN failed--compilation aborted at /usr/local/share/perl5/XML/SAX.pm line 18.
Compilation failed in require.
BEGIN failed--compilation aborted.
make: *** [install_sax_pureperl] エラー 2

エラーが発生したので、さらにXML/SAX/Exception.pm(XML-SAX-Base-1.09)をインストールします。

https://metacpan.org/pod/XML::SAX::Exception

からtar.gzファイルをダウンロードして展開し、

# perl Makefile.PL

でMakefileを生成します。

# perl Makefile.PL
Checking if your kit is complete...
Looks good
Writing Makefile for XML::SAX::Base
# make
cp BuildSAXBase.pl blib/lib/XML/SAX/BuildSAXBase.pl
cp lib/XML/SAX/Base.pm blib/lib/XML/SAX/Base.pm
cp lib/XML/SAX/Exception.pm blib/lib/XML/SAX/Exception.pm
Manifying blib/man3/XML::SAX::Base.3pm
Manifying blib/man3/XML::SAX::BuildSAXBase.3pm
Manifying blib/man3/XML::SAX::Exception.3pm
# make test
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/00basic.t ............. ok
t/01exception.t ......... ok
t/01simpledriver.t ...... ok
  :
t/16gethandlers.t ....... ok
t/release-pod-syntax.t .. skipped: these tests are for release candidate testing
All tests successful.
Files=19, Tests=137,  1 wallclock secs ( 0.09 usr  0.03 sys +  0.50 cusr  0.09 csys =  0.71 CPU)
Result: PASS
# make install
Installing /usr/local/share/perl5/XML/SAX/Exception.pm
Installing /usr/local/share/perl5/XML/SAX/Base.pm
Installing /usr/local/share/perl5/XML/SAX/BuildSAXBase.pl
Installing /usr/local/share/man/man3/XML::SAX::BuildSAXBase.3pm
Installing /usr/local/share/man/man3/XML::SAX::Base.3pm
Installing /usr/local/share/man/man3/XML::SAX::Exception.3pm
Appending installation info to /usr/lib64/perl5/perllocal.pod

XML-SAX-Baseインストール後に再度XML-SAXのmake testを実施します。

# make test
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/00basic.t ....... Can't locate XML/NamespaceSupport.pm in @INC (@INC contains: /root/hoge/XML-SAX-1.02/blib/lib /root/hoge/XML-SAX-1.02/blib/arch /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /root/hoge/XML-SAX-1.02/blib/lib/XML/SAX/PurePerl.pm line 20.

エラーが発生したので、さらにXML/NamespaceSupport.pmをインストールします。

https://metacpan.org/pod/XML::NamespaceSupport

からtar.gzファイルをダウンロードして展開し、

# perl Makefile.PL

でMakefileを生成します。

# perl Makefile.PL
Checking if your kit is complete...
Looks good
Writing Makefile for XML::NamespaceSupport
# make
cp lib/XML/NamespaceSupport.pm blib/lib/XML/NamespaceSupport.pm
Manifying blib/man3/XML::NamespaceSupport.3pm
# make test
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/00base.t .. ok
All tests successful.
Files=1, Tests=49,  0 wallclock secs ( 0.03 usr  0.01 sys +  0.02 cusr  0.00 csys =  0.06 CPU)
Result: PASS
# make install
Installing /usr/local/share/perl5/XML/NamespaceSupport.pm
Installing /usr/local/share/man/man3/XML::NamespaceSupport.3pm
Appending installation info to /usr/lib64/perl5/perllocal.pod

XML-NamespaceSupportインストール後に再度XML-SAXのmake testを実施します。

# make test
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/00basic.t ....... ok
t/01known.t ....... ok
t/10xmldecl1.t .... ok
  :
t/42entities.t .... ok
t/99cleanup.t ..... ok
All tests successful.
Files=16, Tests=113,  2 wallclock secs ( 0.08 usr  0.03 sys +  1.60 cusr  0.18 csys =  1.89 CPU)
Result: PASS
# make install
Appending installation info to /usr/lib64/perl5/perllocal.pod
could not find ParserDetails.ini in /usr/local/share/perl5/XML/SAX

これでインストールでき、冒頭のスクリプトも正常に動作しました。

Comments [0] | Trackbacks [0]

Workflowプラグイン(コンテンツタイプ別の権限設定対応・その他)

December 27,2021 11:55 PM
Category:[ワークフロー]
Tag:[MovableType, Plugin, Workflow]
Permalink

現在販売中のWorkflowプラグイン(MT7版すべてのグレード)について、コンテンツタイプ別の権限設定に対応しました。

1.追加機能

ロール編集画面に「コンテンツデータの作成(承認つき)」および「コンテンツデータの承認」権限を追加しました。

ロール編集画面

この権限を選択した場合、すべてのサイトに適用されます(注:他のユーザーのコンテンツデータも一覧に表示)

また、ロール編集画面のコンテンツタイプ別の権限設定欄にも、「コンテンツデータの作成(承認つき)」および「コンテンツデータの承認」権限を追加しました。

ロール編集画面のコンテンツタイプ別の権限設定欄

この権限を利用した場合、適用したコンテンツタイプのみがユーザーの左メニューに表示されます。

また、「コンテンツデータの作成(承認つき)」を適用したロールのユーザーは、コンテンツデータ一覧には自分のコンテンツデータしか表示されなくなります。

今回の変更により、コンテンツタイプ処理の権限チェックを大幅に見直しました。

たとえば、コンテンツタイプAとコンテンツタイプBがあり、

  1. 承認者ロールX:コンテンツタイプAの承認権限
  2. 承認者ロールY:コンテンツタイプBの承認権限
  3. 承認者ロールZ:コンテンツタイプA・Bの承認権限

という紐づけを行っている場合、ライターがコンテンツデータAの作成を行い、承認依頼を行えるのは、承認者ロールX・Zのユーザーのみに制限されます。

もう少し複雑な設定で、多段階承認で同順位の承認者に上記のように異なる権限の承認者が混在していても、該当のコンテンツタイプに権限のない承認者に承認依頼メールは送信しないようにすることも可能です(=承認依頼時のチェックボックスが非表示になります)。ただし承認・差し戻し時のCcメールは送信されます。

2.その他の追加機能

ライターの編集画面で削除ボタン表示・非表示をプラグイン設定画面で選択可能にしました(お客様によって要望が異なるため)。

ロール作成で、ライター・承認者のロール名を自由に設定できるようにしました。

「多段階+グループ複数承認版」で、承認者が他グループの記事・コンテンツデータを開いた場合、「グループの承認者に属していません。」という警告を表示します。

承認者を設定する前に「ライター(承認つき)」のユーザーが記事を作成しようとした場合、「承認者が設定されていません。」という警告を表示します。

今回の機能追加に伴い、マニュアルも一部見直しました。

3.評価版ダウンロード・購入

評価版ダウンロード・ご購入はWorkflowプラグインのページにアクセスしてください。

Comments [0] | Trackbacks [0]
 1  |  2  |  3  |  4  |  5  | All pages