いつもお世話になっています。
子サイトBブログでプラグイン「MTAppjQuery」を利用しまして、子サイトAブログからMTAppListingでAPIを取得して「関連記事」というカスタムフィールドを設置しました。
APIでの記事IDの取得までは問題なく出来ているのですが、書き出しがまったくできません。
MTAppjQueryのマニュアル通りに作成したのですが、マニュアル上(動画上)にあった参考MTコードに「split」というモディファイアに気付きました。
このモディファイアはMTオリジナルのものではなくプラグインでの追加になるのか、運用しているMT7では正常に動作しないようです。
環境: MT7(クラウド版)
やりたいこと: Bブログの記事詳細にAブログの記事を関連記事として数件表示したい。(MTAppjQueryでData apiを利用)
やったこと:
・Bブログにカスタムフィールド「kanren」(タイプ:text)を作成→OK
・MTAppjQueryでAブログの記事一覧(ID)を取得→OK
・マニュアルに記載されていたソース(動画内にあったソース)を参考にentry_archiveに出力内容を記載→ NG:出力されない
出力ソース: entry_archive
<mt:Entries>
<mt:kanren setvar="kanren_id">
</mt:Entries>
<mt:Var name="kanren_id" regex_replace="/^,|,$/g","" split="," setvar="id_array">
<mt:Loop name="id_array">
<mt:If name="__first__"><ul></mt:If>
<mt:Entries include_blogs="all" id="$__value__">
<li><mt:EntryTitle></li>
</mt:Entries>
<mt:If name="__last__"></ul></mt:If>
</mt:Loop>
マニュアルではMT6での紹介でした。
MT7での運用方法が違うのでしょうか?
ご教授のほどよろしくお願いいたします。
MTAppjQuery をご利用いただきありがとうございます。
split についてはサポートサイトにも記載してありますが MTAppjQuery で拡張しているグローバルモディファイアになります。
●サポートサイト要ログイン
MTAppjQuery で拡張されるグローバルモディファイア | ユーザーマニュアル | MTAppjQuery サポートサイト
https://support.bit-part.net/mtappjquery/v2/usage/171
MTAppListing については旧メソッドを有効にする必要もありますが対応されていますでしょうか?
●サポートサイト要ログイン
$(foo).MTAppListing() | ユーザーマニュアル | MTAppjQuery サポートサイト
https://support.bit-part.net/mtappjquery/v2/usage/87
よろしくお願いいたします。
こちらも参考になれば幸いです。
サイトに埋め込むパーツを「MTAppjQuery 2 +コンテンツデータ」で管理して「コンテンツデータグループ」を作ってみよう | MTAppjQuery | かたつむりくんのWWW
https://tinybeans.net/blog/2019/02/08-150758
まーしー@bit part様
ご返信ありがとうございます。
> split についてはサポートサイトにも記載してありますが MTAppjQuery で拡張しているグローバルモディファイアになります。
失礼しました。
split について、MTAppjQuery の拡張モディファイアであることと、ユーザーマニュアルに記載されているサンプルコードを利用しまいして動作を確認いたしました。
こちらについては正常に動作していることが確認できました。
> MTAppListing については旧メソッドを有効にする必要もありますが対応されていますでしょうか?
はい。
システム>設定>プラグイン>MTAppjQuery 2.4.0>設定 から「利用データの設定」内で「旧バージョンのメソッド」を「有効」に設定しています。
※この設定を有効にした状態で、MTAppjQuery のuser.jsに「$('foo').MTAppListing」を書くと入力画面のデザインが崩れます。
・関連記事を設定したカスタムフィールドのベースネーム:kanren
・user.js
blogID = mtappVars.blog_id;
pageID = mtappVars.page_id;
if (blogID == 1) {
・
・
・
} else if (blogID == 4) {
$('#customfield_kanren-field').MTAppListing({
url: '/mt7/mt-data-api.cgi/v1/sites/3/entries',
data: {
fields: 'id,title',
limit: 9999999
},
jsontable: {
header: {
id: 'ID',
title: 'タイトル'
},
headerOrder: ['id', 'title'],
itemsRootKey: 'items',
listingCheckboxType: 'checkbox',
listingTargetKey: 'id',
listingTargetEscape: false
}
});
}
})(jQuery);
何か設定の間違いなどありましたらご指摘ください。
どうぞよろしくお願いいたします。
すいません、入力画面が崩れる件に関しまして
$('#customfield_kanren-field').MTAppListing のセレクタの指定を間違っていたためでした。
$('#customfield_kanren').MTAppListing が正しいです。
管理画面上は特に間違いはないと思うのですが、記事の出力が出来ません。
まずは保存されている値を確認されるのがよいかと思います。
エントリ詳細ページとのことなので
ではなくて
<mt:kanren setvar="kanren_id">
だけで取り出せると思いますが、 mt:kanren の中身を確認してみるのがよいかと思います。
まーしー@bit part様
ご返信ありがとうございます。
自己解決いたしました。
ご助言の通り、mt:kanrenの中身(Aブログの記事ID)を取得出来ているか確認しまして
・mt:kanrenの中身の取得 →OK (中身の例: ,10,11,12,)
・正規置換で中身の前後の , を削除 →OK (10,11,12)
・splitモディファイアで , を区切ってIDを配列化 →OK
・★(問題があった部分)mt:Loop 内で Aブログのentries を取得
問題があったのはLoop内での mt:Entries の「include_blogs="all"」モディファイの指定でした。
これを「blog_ids」でAブログ単体を指定したところ、無事に mt:kanren の指定記事が出力出来ました。
今回のサイトでは複数の子サイトを持っているため、「include_blogs="all"」ですべてのブログを対象にしてしまっていたため、記事ID同士がぶつかっていたのでしょうか。
明確な原因は分からないのですが勉強になりました。
また、参考でいただきましたコンテンツブロックでのコンテンツのリスト化についてですが、経験のために実際に作ってみました。
今回のサイトでは実用する機会がないのですが、固定のコンテンツをまとめて記事ごとに個別に引っ張り出したりと用途によっては利便性が高いコンテンツが作れるので別の機会がありましたら実装してみたいと思います。
ご教授のほど、ありがとうございました。