■ユーザーズフォーラム リニューアルのお知らせ
新規投稿は新ユーザーズフォーラムにお願いします。

Re: 特定の親カテゴリーIDに属する子カテゴリーのリストで、[カテゴリ検索]は出来ないでしょうか?

well > Re: 特定の親カテゴリーIDに属する子カテゴリーのリストで、[カテゴリ検索]は出来ないでしょうか? @ 2014/5/1 22:24
n1215様
初めまして、wellと申します。
この度は、私の不確定要素の多い質問に対して、
ご丁寧に、分析過程とヘルパーの作り方、使い方まで教えていただき、誠にありがとうございました。
オブジェクト指向プログラミングは、私は初心者で目で追ってなんとか理解する程度ですので
n1215様がご自身で書かれたプロセスはとても勉強になりました。ありがとうございます。

引用:

追記:下記でなんとかなると思って試してみたらそんなことありませんでした。申し訳ないです。
検索用のインデックスが入っているcontentsテーブルに、最上位カテゴリのデータだけしか登録されていないようので、
ほかの部分もごっそりいじる、ないしプラグインとして作成しないと辛そうです。

結論として以上の点を、n1215様に明確に示していただけましたので、私もなんとか気持ち的に一区切り出来そうです。
contentsテーブルが検索用のインデックスの出どころなんですね。

私もこの2日ぐらいxdebugで変数を追ったりして悪足掻きしていましたが、行き来するファイルの数が尋常じゃないのでw、
コアプログラムを根本から理解するのは無理だと悟り、とりあえず当初に考えた妥協案
引用:
親カテゴリーを全部削除して、カテゴリ1の子カテゴリーリストのみで
親カテゴリーを構成すれば、表示は可能ですが、
カテゴリー機能は非常に便利ですので、確実に複数回使いそうですし、
また、親カテゴリーとして、/category/を作成すると、
のちのち全体の条件分岐処理で、非常に重宝すると考えております。

カテゴリ1の子カテゴリのみを親カテゴリとして登録して、それらのリストをセレクトボックスに表示することができました。

また検索のセレクトボックスの件から少し離れる話題ですが、付随する話として、
分類に便利な/category/フォルダはなくなりましたが、
代わりに各カテゴリページ名に_(アンダースコア)をつけて条件分岐を働かせ、
ウィジェットに、各カテゴリページ専用のリストをPHPテンプレートを使って出すこととしました。
<?php
$thisUrl = $this->BcBaser->getUrl('', false);
echo $thisUrl;

if($thisUrl) {
    if(preg_match('{^/_}', $thisUrl)) {    
        switch(true){
            //カテゴリ1
            case preg_match('{^/_news}', $thisUrl):
                $pages = $this->BcBaser->getPageList(5);
            break;

            //カテゴリ2
            case preg_match('{^/_sports}', $thisUrl):
                $pages = $this->BcBaser->getPageList(6);
            break;

            //カテゴリ3
            case preg_match('{^/_economy}', $thisUrl):
                $pages = $this->BcBaser->getPageList(7);
            break;
                
            //カテゴリ4
            case preg_match('{^/_show_biz}', $thisUrl):
                $pages = $this->BcBaser->getPageList(8);
            break;

            //それ以外
            default:     
            break;
        }
    } else {
        $all_pages = $this->BcBaser->getPageList();
        $pages = array_slice($all_pages, 17, 4);
        //var_dump($pages);
    }
    if(isset($pages)) {
       foreach($pages as $page){
           echo '<li><a href="'.$page['url'].'">'.$page['title'].'</a></li>';
       }
    }
}
?>

以上のコードを修正しているうちに思い出しました。
そもそもなぜ、わざわざ親カテゴリとしてカテゴリ(/category/)を設定して、表示したいカテゴリリストを子カテゴリにしたのか?

n1215様も触れられていましたが、
blogヘルパーには、[getCategoryList] カテゴリーの一覧をリストタグで取得する、という関数がありますが、
固定ページには同様なものが見つからず、
少し似た関数で、BcBaserヘルパーに、
[getPageList] ページ機能で作成したページの一覧データを取得する、という関数があり、
引数を指定しなければ全ての固定ページの一覧データを取得し、
引数にページカテゴリに割り振られたNOを指定すれば、そのページカテゴリに属するすべての固定ページの一覧データを取得してくれます。

このことから例えばトップページには、親カテゴリのNOを指定するだけですべての子カテゴリページリストを出せました。
しかし、親カテゴリとしてカテゴリ(/category/)をなくしたことで、それが出来なくなりました。
その代用として、用いたのが、上のコードの下の部分です。
引用:

} else {
$all_pages = $this->BcBaser->getPageList();
$pages = array_slice($all_pages, 17, 4);
//var_dump($pages);
}

配列の一部を取得して配列で返す関数 array_slice()
引数の17は要素番号、4はそこから要素4つの意味です。
ちょっと苦しいですが、一応対応させることは出来ました。

以上で、なんとか当初に希望していた動作はしてくれるだろうとほっとしましたが、
また問題が一つ見つかってしまいました。

セレクトボックスに表示されるリストが、想定していた「配列順」ではなく、
どうやら「文字のコード番号の昇順」に表示されていることです。
これは、ウィジェットに乗せたリストの順序と異なりますので困ってしまいました。
これも解決は難しそうですね。

以上より、今回は、検索のセレクトボックスのリストについて、当初の質問と合わせて2点、困難な問題がわかりましたので、
フィードバック・改善要望 の方に投稿してみたいと思っております。

n1215様、誠にありがとうございました。











■ BaserCMS:3.0.6.1
■ サーバー名:CentOS 6.5 on VirtualBox(PHP 5.4.x / MySQL 5.5.x)
■ スマートURL:ON
■ 設置フォルダ: [ドキュメントルート]
■ PHPスキル:C
■ IDE:NetBeans7.4

ログイン
ユーザー名:
パスワード:


  新規登録 / パスワード紛失

検索

facebook
フォーラムで悩みが解決した場合など、よかったら「いいね!」をポチっとクリックしてください!質問の回答者や開発者の励みになります

フォーラムガイド


関連リンク

オンライン状況
4 人のユーザが現在オンラインです。 (4 人のユーザが フォーラム を参照しています。)

登録ユーザ: 0
ゲスト: 4