min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

PHP 「直近5件の検索履歴ボタン」をbootstrapの button-outline-info で実装する

自作youtubeというか、動画再生アプリというかサイト。PHP製。

min117.hatenablog.com

とても便利。

min117.hatenablog.com

毎日使っている。

 

これに検索履歴表示機能を実装した。

f:id:min117:20201226130128p:plain

検索窓は前から実装していたけど、その下に直近5件の検索履歴を表示するようにした。

 

検索単語は「ボヘミアン」でも「Queen」でも「楽天」でも何でもいいけど、とにかく検索した単語は全てサーバ上のファイル(my_recent_search.txt)に落ちて、PHPではそのファイルを読んで直近履歴として表示する。

 

iPadでも使える。こんな感じ。右下に検索履歴が出る。

f:id:min117:20201226131102p:plain

 

ソース(関連部分)はこれ。

f:id:min117:20201226131446p:plain

検索単語(GREPWORD)を変数 $myGRE に格納して

 

サーバ内部のファイルをforeachするときに

f:id:min117:20201226131411p:plain

ファイル名が $myGRE にマッチしなかったら読み飛ばす(continue)。

 

残ったファイル(検索されたファイル)を一覧で表示する画面の上に、検索窓と直近5件の履歴を出す。

f:id:min117:20201226130602p:plain

ファイル(my_recent_search.txt)に落とすところもそれを読み込むところも全部シェル(bash)にやらせて、PHPはその結果を受け取ってるだけ。

 

ファイル書き込みや読み込みはPHPにも(関数として)用意されているけど、結局bashのほうが使い勝手がいい。でもまあ、そのうちWindowsサーバのPHPに移植することも考えれば、PHP謹製の読み書き関数で実装したほうがいいのかもしれないけど。

 

検索結果のボタンはbootstrap4(btn-outline-linfo)で装飾した(1650行目)。手軽にカッコいいボタンを作れるからbootstrapは便利。

 

保存・コピペ用

<!-- パネル部分 -->

<div class="tab-content mt-3" id="myTabContent">

    <!--

    リンクのコンテンツが入ります

    -->

 

    <!-- z-index検索GREPWORD実装 直近5件 20201226 -->

    <div style="z-index: 9000; position: fixed; bottom: 30px; right: 3px;">

        <form class="form-inline">

        <div class="input-group mb-3">

 

            <?php

                if(!empty($_GET['GREPWORD'])) {

                    // PlaceHolderにセットする文字列strPH

                    $strPH=$_GET['GREPWORD'];

 

                    // 直近5件の検索履歴の表示実装

                    $commandRECENT = 'echo "' . "$myGRE" . '" >> my_recent_search.txt 2>&1';

                    // print '<b><font color="orange">' . "$commandRECENT" . 'が生成されました</font></b><br>';

                    // print 'exec($commandRECENT, $outputRECENT, $retRECENT);<br>';

                    // shell_exec("$commandRECENT");

                    // print '<br>';

                    exec($commandRECENT, $outputRECENT, $retRECENT);

                } else {

                    $strPH='PDF検索ぅ';

                }

            ?>

 

            <input type="text" name="GREPWORD" class="form-control" placeholder="<?php print "$strPH"; ?>" aria-label="PDF検索ワード" aria-describedby="basic-addon1">

            <div class="input-group-append">

                <button class="btn btn-secondary" type="submit" id="btn-mysearch2">検索</button>

            </div>

        </div>

        </form>

        <?php // ここからforeachまでを↑のformに入れると動きおかしくなる

            /// 直近5件表示

            // $commandCATT =  'ls -rt /media/WD30EZRX/PT3 | grep ' . "$myGRE" . ' &';

            // $commandCATT =  'cat my_recent_search.txt | tail -n 5 &';

            $commandCATT =  'cat my_recent_search.txt | tail -n 5 | sort -r &';

            exec($commandCATT, $outputCATT, $retCATT);

            foreach($outputCATT as $CATT){

                // print '<b><font color="orange">' . "$CATT" . '</font></b>';

                print '<br>';

                // print '<font size="3px"><a href="doLSglob.php?CHDIR=PT3&GREPWORD=' . "$CATT" . '&MKSORT=goMKSORT">' . "$CATT" . '</a></font>';

                // print '<font size="3px"><a href="doLSglob.php?CHDIR=PT3&GREPWORD=' . "$CATT" . '&MKSORT=goMKSORT">' . "$CATT" . '</a></font>';

                // print '<a href="#" class="btn btn-info" role="button">Link Button</a>';

                print '<a href="doLSglob.php?CHDIR=PT3&GREPWORD=' . "$CATT" . '&MKSORT=goMKSORT" class="btn tline-info" role="button">' . "$CATT" . '</a>';

 

                // print '<font size="3px"><a href="doLSglob.php?CHDIR=PT3&GREPWORD="' . "$CATT" . '"&MKSORT=goMKSORT"><img src="./icon_mp3.jpg" width="80px" height="auto"></a></font>';

            }

        ?>

    </div>