ページ登録の際に親IDを自動入力する

page_oya.png

freoで「ページ」を作る際、親ページIDを設定し、作成するページ自身のIDを「親ページID/子ページID」とすることによってページの分類・階層を作ることができるのですがこれが案外見落としがちなので(親ページの設定をし忘れたり子ページのつもりがページIDに親ページIDを含めるのを忘れたり)それをなくすようにしたい人向けのカスタマイズです。

方法1:Smartyでの記述

以前自サイトで採用していた方法です。

templates/internals/admin/page_form.html  の100行目あたり

<!--{if !$freo.query.id}-->
<dt>ページID <abbr class="attention" title="入力必須">*</abbr></dt>
	<dd><input type="text" name="page[id]" size="30" value="{$input.page.id}" /></dd>
<!--{/if}-->

<!--{if !$freo.query.id}-->
<dt>ページID <abbr class="attention" title="入力必須">*</abbr></dt>
	<dd><input type="text" name="page[id]" size="30" value="{if $input.page.pid}{$input.page.pid}/{/if}{$input.page.id}" class="input_pid" /></dd>
<!--{/if}-->

に書き換えます。

こうすることでサイドバーの管理メニューリンク「ページ管理」→「親にしたいページ」→「この階層にページを登録する」と進んでページ作成画面を開いたときにページID入力欄に自動で「親ページID」+「/」が入力されている状態になります。ただし、サイドバーの管理メニューリンク「ページ登録」からページ作成画面に行き、親ページのプルダウンから親ページを設定したときは自分で親ページを入力する必要があります。

方法2:JQueryを使う

freoはデフォルトでJQueryを使っているのでそっちを使う方法です。ちなみにこの方法は昔「MerolicRoly.」さんというサイトで公開されていましたが現在はリンク切れ(http://fiz.chips.jp/m-z/view/49)のためこちらに転載いたします。問題があればお知らせください。

templates/internals/admin/page_form.html  の100行目あたり

<!--{if !$freo.query.id}-->
<dt>ページID <abbr class="attention" title="入力必須">*</abbr></dt>
    <dd><input type="text" name="page[id]" size="30" value="{$input.page.id}" /></dd>
<!--{/if}-->
<dt>親ID</dt>
    <dd>
        <select name="page[pid]">

<!--{if !$freo.query.id}-->
<dt>ページID <abbr class="attention" title="入力必須">*</abbr></dt>
    <dd><input type="text" name="page[id]" size="30" value="{$input.page.id}" class="input_pid" /></dd>
<!--{/if}-->
<dt>親ID</dt>
    <dd>
        <select name="page[pid]"{if !$freo.query.id} class="pull_pid"{/if}>

に書き換えます。JQueryに読み込ませるclass「 class="pull_pid"」を追加しています。

次に、js/admin.js  の

$(document).ready(function() {

の直後あたりに

//親ID選択で子ID欄に親IDを追加
$(".pull_pid").change(function() {
    var str1 = $('.input_pid').val();
    str1 = str1.replace(/.*\//g,'');
    var str2 = $('.pull_pid option:selected').text();
    if(str2 =='なし') {
        str2='';
    }else{
        str2 += '/';
    }
    $('.input_pid').val(str2+str1);
});

を追加します。親IDのプルダウンメニューで選択したときの動作を追加しています。

こうすることでサイドバーの管理メニューリンク「ページ管理」→「親にしたいページ」→「この階層にページを登録する」と進んでからのページ作成画面でも、サイドバーの管理メニューリンク「ページ登録」からのページ作成画面でも親ページのプルダウンから親ページを選択するとページID入力欄に自動で「親ページID」+「/」が入力されるようになります。

方法1・方法2の併用ももちろんできます。便利。ただし、このカスタマイズをしている状態で子ページIDを入力しないままページ登録ボタンを押してしまうと「親ID」+「/」という新IDと見做されて登録されてしまう(だったはず…)ので私のような慌て者は要注意です。