a-blog cmsで、Yes/Noチャートを簡単に実装できるツールを作成しました。
表題の通り、a-blog cmsでYes/Noチャートを簡単に実装できるツールを作成しました。
バージョン2.10.26以上で動作検証しています。
サンプルはこちらです。
使い方
Yes/Noチャートを簡単に表示するまでの手順を説明します。
まず、以下から拡張アプリをダウンロードしてください。
https://github.com/maki-t2nd/acms-ync-app
1. 拡張アプリをインストール
ダウンロードしたsrc以下のアプリ本体(src/extension/plugins/YesnoChart)とサンプルのテーマファイル(src/themes/yncSample@blog2019)を適宜サーバー内に配置し、
管理画面左下の「拡張アプリ」メニューからアプリをインストールします。
テーマは配置した「yncSample@blog2019」へ変更してください。
2. 任意のカテゴリを作成
次に、チャートコンテンツ登録用のカテゴリを作成します。
ひとつのカテゴリ毎に1チャート管理となります。
ここでは「sample」とします。
作成時に、カスタム設定に「Yes/Noチャート設定」という項目が増えていますので、こちらをチェックします。
3. コンテンツを登録する
最後に、作成したsampleカテゴリ内でエントリーを登録していきます。
ここでもYes/Noチャート用のフィールドが増えているので、こちらへ登録していきます。
タイトルには設問内容を入力してください。
タイプには、最初のページ or 結果ページの場合は該当の方にチェックを入れます。
内容にはhtmlを自由に入れられます。
設問のカスタムフィールドグループには、答えのラベルと次の設問(エントリー)を設定します。
次の設問は最初にエントリーを作る場合には存在しないので、ある程度エントリーを作成した後に設定します。
エントリーの設定が終われば、/sample/ へのアクセスでYes/Noチャートが作成されていると思います。
まとめ
以上の設定でYes/Noチャートの表示はできたと思います。
htmlやcss,jsの動きが変えたい方は、該当のファイルを適宜希望の動きに修正いただければと思います。
やり方がわからない・動きを変えたい・カテゴリ外に設置したい・複数設置したい、若しくはぜんぜん他の依頼をしたい という方はぜひ牧田にご依頼ください。
現場からは以上です。
※補足
バージョン2.10.8未満はverbatim校正オプションが存在しないのでエラーがでます。
/themes/yncSample@blog2019/include/ync_sample.html を以下のように書き換えてお試しください。
<div class="yesno-content" v-cloak>
<transition>
<div class="chart" :key="front.id">
<h2 class="chart_title">[[ front.title ]]</h2>
<div v-if="front.body" v-html="body"></div>
<ul class="chart_answers" v-if="front.answers">
<li v-for="answer in front.answers">
<a href="#" class="acms-btn acms-btn-large acms-btn-primary" @click.prevent="doAnswer(answer.link)">[[ answer.label ]]</a>
</li>
</ul>
</div>
</transition>
</div>
<style>
[v-cloak] {
display: none;
}
.v-enter-active, .v-enter-to {
transition: opacity .5s;
}
.v-enter, .v-leave-to, .v-leave {
opacity: 0;
}
.chart {
border: 4px solid #333;
border-radius: 5px;
padding: 1.5em;
}
.chart_answers {
list-style: none;
margin: 0 -1em;
padding: 0;
display: flex;
justify-content: space-between;
}
.chart_answers li {
flex-grow: 1;
padding: 0 1em;
}
.chart_answers a {
width: 100%;
}
</style>
<script src="/js/vue.js"></script>
<script>
$(function(){
var vm = new Vue({
'el': '.yesno-content',
delimiters: ['[[', ']]'],
data: {
contents: {},
front: {}
},
mounted: function(){
var _this = this;
$.getJSON('%{CATEGORY_URL}json/chart.json').done(function(json){
_this.setFront(json);
});
},
computed: {
body: function() {
return decodeURIComponent(this.front.body);
}
},
methods: {
setFront: function(json){
this.contents = json;
this.front = json.front;
},
doAnswer: function(id) {
this.front = this.contents[id];
}
}
});
});
</script>