2014年11月3日月曜日

Welcartにおけるredirect処理 2/3

前回では「新規入会フォームで送信するボタンを押したとき」を例にWelcartにおけるredirect処理を解析しました。今回はその解析で分かったことを利用して、独自の固定ページからWelcartのredirect処理を通じて、別のページへ遷移する一連の流れを作ってみようと思います。

まず用意するもの

まず、固定ページで使用するテンプレートを作成し、固定ページを作成します。
<?php
/**
  * Template Name: Welcartリダイレクトテスト
  */
?>

<form action="<?php the_permalink(); ?>" method="post">
    <input name="jibanyan" type="submit" value="送信">
</form>
ここでのポイントは、formのaction属性には <?php the_permalink(); ?>
を指定しており、自分自身に戻るURLを指定してあるだけである点とinputのname属性には'jibanyan'が指定してあり、 $_POST['jibanyan']がセットされ送信されるという点です。

regist_actionに登録する

    function regist_action(){
        ・・・中略・・・
        usces_register_action('front_ajax', 'post', 'usces_ajax_action', NULL, 'front_ajax');
// add yokomee 2014.11.03 blogger
        usces_register_action('whisper', 'post', 'jibanyan', NULL, 'komasan');
// /add yokomee 2014.11.03 blogger
    }
regist_actionメソッドに、今回登録する遷移を登録します。
function usces_register_action($handle, $type, $key, $value, $function){
usces_register_actionメソッドの関数定義を思い出してください。今回の例では与える引数は、$handle='whisper'としました。これは何でもかまいません。$typeは、先ほど作った固定ページのformはpostをHTTPメソッドとして選んだので$type='post'と指定します。$keyはそのときセットされる$_POSTのキーを指定するので$key='jibanyan'とします。$valueの値を指定することで$_POST['jibanyan']の値によっても処理を振り分けられますが、今回はそれは使用しないので、$value=NULLとしてあります。最後に$functionに指定した'komasan'が呼び出される関数です。

usces_register_actionメソッドで指定したコールバック関数を作る

次に先ほどの登録によりコールバックされる関数を作成します。名前は先ほどの登録のとおり'komasan'とし、functions.phpに定義します。もしグローバル領域でなく、usc_e_shopクラスに定義する場合はad_controllerメソッドの上の方にusc_e_shopクラス内に定義が存在することを示すリスト、$action_arrayという変数がありますので、そこに'komasan'を追加します。今回は行いません。
    function komasan() {
        global $usces;
        $usces->page = 'ke-ta';
        add_action('template_redirect', array($usces, 'template_redirect'));
    }
今回、この関数は特に何も処理を行っていません。$usces->pageに表示するページは'ke-ta'であると設定だけ行い。'template_redirect'アクションに'template_redirect'メソッドを登録しているだけです。実際には、この段階でコールされる関数によって、ページからページに飛ぶ間に、フォームのバリデーションチェックを行ったり、入力された内容に従ってMySQL内のデータを追加・更新など行うことができます。

template_redirectメソッドに登録

template_redirectメソッドに先ほどのkomasanメソッドにより$usces->pageが'ke-ta'にされたときの処理を登録します。
    function template_redirect () {
        global $post, $usces_entries, $usces_carts, $usces_members, $usces_gp, $member_regmode;
        if( apply_filters('usces_action_template_redirect', false) ) return;//Deprecated
        if( apply_filters('usces_filter_template_redirect', false) ) return;
        if( is_single() && 'item' == $post->post_mime_type ) {
            ・・・中略・・・
        }else{
// add yokomee 2014.11.03 blogger
        switch($this->page) {
            case 'ke-ta':
                if(file_exists(get_stylesheet_directory() . '/youkai_watchichi.php')) {
                    include(get_stylesheet_directory() . '/youkai_watchichi.php');
                    exit;
                }
        }
// /add yokomee 2014.11.03 blogger
//            remove_action('the_post', array(&$this, 'goDefaultPage'));
        }
    }
ここで読み込み指定しているファイルはThemes\個別のテーマフォルダ直下のyoukai_watchichi.phpとしています。これにより、このファイルの内容が表示されます。
<h1>妖怪ウォッチ</h1>
<p>『妖怪ウォッチ』(ようかいウォッチ)は、レベルファイブから2013年7月11日に発売されたニンテンドー3DS専用ゲームソフト。</p>
今回はyoukai_watchichi.phpでは特に何も行わず、タイトルと本文を表示しているだけです。

まとめ

以上で、独自の固定ページから、Welcartのリダイレクト処理を通じて、特定の処理を行った後に、別のページにredirectする流れを作ることができました。
今回の行った処理を応用すれば、Welcartの用意したページ遷移に割り込んで独自の処理を追加したり、また、Welcartがページ遷移間で何を行っているかの理解の助けになるのではないかと思います。

0 件のコメント:

コメントを投稿