freo公式検索プラグイン改良版

公式検索プラグインで一部機能を追加したプラグインです。

freo公式検索プラグインを元にしているので二次配布となります。

二次配布許可は作者であるないとさんにいただきました。

追加機能

プラグインメニューによる検索対象の追加

└※複数階層対応

ラジオボタンによるワード検索とタグ検索の切り替え

└※オンオフが可能

※共にoptionの使用は考慮されていませんので動作保証対象外です。

ダウンロード

DL:search_kai_1.3.0

※追加機能に関しては公式やないとさんへ問い合わせがないようお願いします。

設置方法

公式の方法と同様です。

サイドバーへの設置

<div class="utility">
  <h3>キーワード検索</h3>
  <div class="content">
    <form action="{$freo.core.http_file}/search" method="get" name="search">
      <fieldset>
          <legend>キーワード検索フォーム</legend>
          <dl>
            <dt>キーワード</dt>
            <dd>
              <!--{if $freo.config.plugin.search.search_radio}-->
              <input type="text" name="{if $document.search.name =='word'}word{/if}{if $document.search.name =='tag'}tag{/if}" size="50" value="{if !$smarty.get.tag}{if ($smarty.get.word == '')}サイト内検索{else}{$smarty.get.word}{/if}{/if}{if $smarty.get.tag}{if ($smarty.get.tag == '')}サイト内検索{else}{$smarty.get.tag}{/if}{/if}" />
              <!--{else if}-->
              <input type="text" name="word" size="50" value="{$smarty.get.word}" />
              <!--{/if}-->
            </dd>
            <!--{if !$smarty.get.page_name}-->
            <dt>検索対象</dt>
            <dd>
              <!--{if $freo.config.plugin.search.search_radio}-->
              <label for="search_word"><input type="radio" name="tgt" value="" {if !$smarty.get.tag}checked{/if} onclick="document.search.elements[1].name ='word'" id="search_word">キーワード検索</label>
              <label for="search_tag"><input type="radio" name="tgt" value="" {if $smarty.get.tag}checked{/if} onclick="document.search.elements[1].name ='tag'" id="search_tag">タグ検索</label>
              {literal}
              <script type="application/javascript">
       <!--
       window.onload = $(function setValue_on(){
         var url_get = document.URL;
         if (url_get.search(new RegExp("search.*tag=")) != -1){
           document.search.elements[1].name ='tag';
         }
         else if (url_get.search(new RegExp("")) != -1){
           document.search.elements[1].name ='word';
         }
       });
       function setValue(){
         var url_get = document.URL;
         if (document.search.elements[1].name == 'tag'){
           var element = document.getElementById("search_tag");
           element.removeAttribute('name')
         }
         else if (document.search.elements[1].name == 'word'){
           var element = document.getElementById("search_word");
           element.removeAttribute('name')
         }
       };
       // -->
              </script>
              {/literal}
              <!--{/if}-->
              <select name="target">
                <option value="">すべて</option>
                <option value="entry"{if $smarty.get.target == 'entry'} selected="selected"{/if}>エントリー</option>
                <option value="page"{if $smarty.get.target == 'page'} selected="selected"{/if}>ページ</option>
                <!--{if $freo.config.plugin.search.p_id}-->
                <option value="{$freo.config.plugin.search.p_id}"{if $smarty.get.target == $freo.config.plugin.search.p_id} selected="selected"{/if}>{$freo.config.plugin.search.p_name}</option>
                <!--{/if}-->
              </select>
            </dd>
            <!--{/if}-->
          </dl>
        <p><input type="submit" value="検索する" onclick="setValue()" /></p>
      </fieldset>
    </form>
  </div>
</div>

謝辞

freo及び公式検索プラグインの作者さん(ないとさん)

素敵なプラグラムを作っていただきありがとうございます。 この場を借りて改めて感謝します。

改造経緯

このブログでは創作に使えそうな事柄を辞書機能として登録しているおり、それの検索用に公式の検索プラグインを使用しています。

しかし少し不便で既存ではプルダウンメニューから新規に対象を追加できません。

特定の階層以下のみを検索対象にしたい場合の方法は公開されていますが、プルダウンメニュー非対応としてです(公式参照

なのでプルダウンメニュー対応化させました。

次回の更新では複数追加できるようにしたいと思います(いつになるのかな……)

Notes

2013/01/03
ver.1.3.0元プラグインver.1.4.0に合わせて調整
2012/12/02
ver.1.2.1 ミスっていた部分を修正
2012/12/02
ver.1.2.0ラジオボタンによる検索種類の切り替え機能の追加
対象を"すべて"にした場合、ヒット数がおかしくなるのを修正
2012/10/25
ver.1.1.0 設定管理で追加対応。階層対応
2012/10/23
ver.1.0.1 複数階層に対応
2012/10/22
ver.1.0.0 二次配布開始

freoの特定ユーザーのプロフィールを参照する文字列

名前

{$freo.refer.users.ユーザーID.name}

エンティティ化してメールアドレス

{$freo.refer.users.ユーザーID.mail|escape:hexentity}

URL

{$freo.refer.users.ユーザーID.url}

紹介文

{$freo.refer.users.ユーザーID.text|nl2p}

UAによって適用されるテンプレートフォルダ(ある場合)

iPad

/templates/ipads

iPod

/templates/ipods

iPhone & iPod touch

/templates/iphones

Android

/templates/androids

ガラケー

/templates/mobiles

また、iPhoneとAndroid等共に同じtemplateを読みこませる場合は

/freo/lib/freo/common.php

内の153行目付近にある

//接続環境取得

部分の

} elseif (preg_match('/Android/', $_SERVER['HTTP_USER_AGENT'])) {
$freo->agent['type'] = 'android';

} elseif (preg_match('/Android/', $_SERVER['HTTP_USER_AGENT'])) {
$freo->agent['type'] = 'iphone';

のように変更すれば

iphonesフォルダの中身がandroidでもおそらく適用されます(android実機では未確認です)

巷ではtwitterのアイコンにGIFアニメーション(以下AGIF)が反映されたりされなかったりするようですね。

とりあえず今までの経緯はともかく(一部条件付きでされたり、それが対策されたり等)現状での反映方法や軽い検証結果でも載せておきます。

※間違っている可能性もあります。

結論

先にいうと、現在(タイトルの日付)では新ついっぷる経由で変更することでtwitterのアイコンをAGIFにすることが可能です。

ただし全てが可能かというとどうやらそうでもないようです(動かないよ―という報告もありますし……)

検証

Q.サイズによって違いはあるのか?(単位:px)

A.150x150と1500x1500、また150x100で試しましたがすべて機能しました。

Q.容量によって違いはあるのか?

A.未確認ですが140KBくらいは動作確認しています(上記の1500の時に)

Q.透過処理の有無は?

A.透過処理が入っていても問題ないようです。

Q.制作ソフトによって違いはあるのか?

A.Photoshop:なぜか2枚目以降は正常に縮小表示されないがAGIFは動く。GIMP:正常に動く。共にメタデータはなし。他のパラメータもいじってみたが動作に支障はなし。他ソフト未確認……というか作れるソフト知らない(´・ω・`)

Q.投稿(変更)するサイトによって違いはあるのか?

A.公式では不可能。すでに情報が出ている新ついっぷる(PC版のみ確認)では可能。他未確認

自分の所では今のところAGIFが機能しない……ということがありませんでした。

しかしついっぷるで変更してもAGIFが動かないという方もいらっしゃるようで……

原因等判明したらまた加筆修正しようかと思います。

よく忘れるので自分用に備忘録。

SRWare Ironでstylishの中身のファイル(ユーザースタイルの部分)が記述されているファイル。

C:\Users\ユーザー名\AppData\Local\Chromium\User Data\Default\databases/chrome-extension_【stylishのID】

以下の数字のファイルが該当ファイルです。

他のPCに移したり、リストアしたい場合は該当ファイルを保存した後に、リストア先の数字に変更して保存すればできます。

数字の意味は知りません(ぇ

たぶんChromium系共通だと思うのでChromeとかでもやりかたは一緒だと思います。

タイトルなげぇ……

やっていることはsmartyの機能を使って現在のURLを取得して一致したらclassを与えているだけです。

ちなみに当サイトの上部にあるメニューで同様のことを行なっています。

実装方法

対象が単一ページのみ場合

http://host/hoge1を表示していたらliにclass="current"を加える。

<li<!--{if ($smarty.server.REQUEST_URI == '/hoge1')}--> class="current"<!--{/if}-->><a href="/hoge1">メニュー1</a></li>
対象が多階層の場合

http://host/hoge1もしくはhttp://host/hoge1/hogehogeを表示していたら以下略。

<li <!--{if ($smarty.server.REQUEST_URI|regex_replace:'/^\/hoge1.*/i':'reg' eq 'reg')}--> class="current"<!--{/if}-->><a href="/hoge1">メニュー1</a></li>
複数のURLを対象にしたい場合

該当部分をこんな感じにする。

($smarty.server.REQUEST_URI == '/hoge1' || $smarty.server.REQUEST_URI == '/hoge2')

あとはcssで.currentに対してなにか記述すればいいと思います。

文字の色を変えるとかそこら辺好きなように。

余談

これはfreoの機能と言うよりも上記にも書きましたがsmartyの機能ですので他のCMSでもsmartyを採用していれば使えると思います。

以下ちょっとした解説もどき(ほぼ初心者向け?)

regex_replaceを指定することで正規表現での検索・検索が可能となります。

^は文字列の先頭を意味します。今回は使用していませんが逆の意味で末尾を意味する$もあります。

\/は/を文字列にしたい場合です。ちなみに/単体では文字列として認識しません。iや^などの前に置いてこれらを機能させるものですので。

iは大文字小文字を区別なくマッチさせますので、認識URLが大文字でも小文字でも認識します。

.*は.と*で別々の意味合いですがこの組み合わせにすることで0ないし1以上の文字列となります。

eqとは正規表現の==と同様の意味合いですので==で記述しても問題ありません。

むしろ==で統一したほうがわかりやすいかも知れませんね。

regは最初のに読み取ったURLを代入し、2個目のに正規表現の文字列を代入しています。(文字列は確かなんでも良かったような気がします)

あとはその2つを先ほどのeqで一致するか確かめればifの判定が出せます。

なぜ多階層のほうでREQUEST_URI == '/hoge1.*'とせずに、わざわざこんな面倒な記述をしているのかというと。

ひとえに正規表現がその状態では機能しないからです(´・ω・`)

機能する方法があれば誰か教えてください(´;ω;`)

archive


×

ログイン