a-blog cmsで別カテゴリーのカスタムフィールドを利用する
a-blog cmsでAカテゴリーのエントリーにカスタムフィールドを使ってアップしたPDFのファイル一覧の中から、別のBカテゴリーのエントリーで必要なPDFだけ選択して利用する、という機能が必要だったので少し考えてみた。a-blog cmsの通常の方法でやるとselectedが上手く効かなかったので、とりあえずjQueryで対処してみる。
もっと他の方法や公式な方法があるのかもしれないけど、「ablog cms+管理画面に自作jQuery」に興味があったので、やってみた感じが強いです。発展させれば、ぷちリレーションな感じにも使えるのかな???一応動いているけど、簡単なチェックしかしていないので、もし不具合があったらごめんなさい。
例)カテゴリーを下記の2つとして
・Aカテゴリー(商品用PDFの一覧ページ/カスタムフィールド名:{pdffile})
・Bカテゴリー(商品の一覧ページ/カスタムフィールド:{productsCatalog})
Aカテゴリーのカスタムフィールドはinput、Bカテゴリーのカスタムフィールドはselectで実装します。AカテゴリーにアップされたPDFを、Bカテゴリーのエントリー編集画面でリストからエントリー名で選択出来る様にする為に、Aカテゴリー用のEntry_ListのモジュールID(adminProducts_catalogList)を作成。
ちなみにAカテゴリー用のモジュールID内では、Bカテゴリーのカスタムフィールド{productsCatalog}が読み込めなかったので、今回はあらかじめモジュールIDの外にpタグでコピーして対処しました。(これはjQueryで読めればなんでも良い)
詳細は下記で。jsとBカテゴリーのエントリー編集画面(admin/entry/edit.html)の一部です。
※AカテゴリーのPDFアップ用のカスタムフィールドはここを参照してください。
/*jsの記述*/
$(function(){
$('#catalogPdfList option').each(function(){
//入力済みの値
setPdf = $('#setPdf').text();
//選択した値
catalogSelected = $(this).val();
//入力済みの値と同じoptionをselectedに変更
if(catalogSelected == setPdf){
$('#catalogPdfList').val(catalogSelected);
}
});
});
/*htmlの記述*/
<tr>
<th>カタログPDF</th>
<td>
<!-- Bカテゴリーで入力済みの値を仮にセット -->
<p id="setPdf" style="display:none;">{productsCatalog}</p>
<!-- AカテゴリーのPDF一覧用モジュールID -->
<!-- BEGIN_MODULE Entry_List id="adminProducts_catalogList" -->
<select name="productsCatalog" id="catalogPdfList">
<!-- AカテゴリーのエントリータイトルとPDFのパスをセット -->
<!-- BEGIN entry:loop -->
<option value="%{HTTP_ARCHIVES_DIR}{pdffile@path}{productsCatalog}">{title}</option>
<!-- END entry:loop -->
</select>
<input type="hidden" name="field[]" value="productsCatalog" />
<!-- END_MODULE Entry_List -->
</td>
</tr>