Aplikoでは記事・ウェブページのアーカイブパスをWebView用アーカイブテンプレートのアーカイブパスに変換するために「MTAppConvertUrlForWebView
タグ」を提供しています。
もう少しかみ砕いて説明すると、例えばPC・スマートフォンのブラウザで閲覧するためのHTMLを生成するための「記事」テンプレート(こちらが優先するアーカイブマッピング)、そしてAplikoで生成したアプリで表示するための「アプリ用記事(WebView)」テンプレートがある時、MTEntryPermalink
で出力されるURLは常に「記事」テンプレートで設定したアーカイブパスを元にしたURLとなります。このままでは「アプリ用記事(WebView)」テンプレートで出力したHTMLのURLが自動で出力できません。そのためにMTAppConvertUrlForWebView
タグが用意されているのです。
テンプレート例と出力例
テンプレート例
<!-- ブラウザ向けURL --> <a href="<$mt:EntryPermalink>"> <!-- アプリ向けURL --> <mt:AppConvertUrlForWebView><a href="<$mt:EntryPermalink$>"></mt:AppConvertUrlForWebView>
出力例
<!-- ブラウザ用URL --> <a href="/2018/02/powercms5_beta.html"> <!-- アプリ用URL --> <a href="/__app__/entries/[記事ID].html">
補足
MTAppConvertUrlForWebView
タグは、出力されるソースの中のa要素に対して変換操作を行います。そのため、a要素の前後をMTAppConvertUrlForWebView
タグで囲みます。以下のテンプレートは正しく動作しません。
<mt:AppConvertUrlForWebView><$mt:EntryPermalink$></mt:AppConvertUrlForWebView>
アプリ用URLが出力されない場合
現在新たなAplikoのテーマを作成しているのですが、MTAppConvertUrlForWebView
タグを使用したにもかかわらずアプリ用URLが出力されない場合がありました。原因を探ったところ、ほぼ確実にmt_entry
テーブルのentry_ma_permalink
フィールド(Aplikoが追加したフィールド)に起因することが分かりました。
具体的なケースと対策を示します。
記事をインポートした時
記事をインポートした直後はentry_ma_permalink
フィールドがNULL
になっています。そのため、MTAppConvertUrlForWebView
タグを使ってもブラウザ用の記事URLが出力されます。
対策としてはスケジュールタスクが動作するまで待ちます。標準では実行間隔が6時間に設定されているため、最大6時間かかります。(cronの実行間隔が1日1回の場合は1日かかります。)
6時間も待てない方は、MobileApps.packのconfig.yaml
にあるmobile_apps_scheduled_tasks
のfrequency
を1
等に変更してスケジュールタスクを動かしてみて下さい。(タスクを動かした後は元に戻して下さい。)
tasks: mobile_apps_scheduled_tasks: label: Tasks for Mobile Apps frequency: 21600 # ←ここを変更します code: $mobileapps::MobileApps::Tasks::_mobile_apps_scheduled_tasks priority: 5
途中でブラウザ用記事テンプレートのアーカイブマッピングを変更した時
レアなケースかもしれませんが、運用中・試用中にブラウザ用記事テンプレートのアーカイブマッピングを変更してしまうと、mt_entry
テーブルのentry_ma_permalink
フィールドに記録されたブラウザ用記事URLと実際の記事URLに差異が発生してしまい、MTAppConvertUrlForWebView
タグがアプリ用の記事URLを出力できなくなってしまいます。
現在の所、phpMyAdminなどでクエリを実行し、mt_entry
テーブルのentry_ma_permalink
フィールドの値を一旦NULL
にする必要があります。ブログIDが1のウェブサイトについて対応する場合のクエリの例を示します。なお、クエリを実行する前は必ずバックアップを取得してください。
UPDATE `mt_entry` SET `entry_ma_permalink` = NULL, `entry_ma_permalink_wv` = NULL WHERE `entry_blog_id` = 1;
まとめ
MTAppConvertUrlForWebView
タグは、mt_entry
テーブルやmt_template
テーブル等を元に動作しているため、少し動作が複雑です。私が遭遇した状況全てをご紹介いたしましたが、もしそれでも上手くいかないという方はお知らせ下さい。その際、テンプレートとデータベースのダンプがあるとスムーズに調査が行えます。