オートコンプリート

AutoCompleteを紹介します。

自動補完機能は、一般的なWebサイトでも実現されていますが、CurlでもAutocompleteTextFieldクラスを利用することで、簡単に実現することができます。

sample-autocomplete.jpg

使い方

サーバサイドに簡単なスクリプト等を用意する必要があります。詳細は、 サンプルに記載しております。ここでは、Curl側の使い方を紹介します。

{AutocompleteTextField
   {RandomCompletionProvider}
}

AutocompleteTextFieldは、TextFieldを継承して作成されたクラスです。

引数:provider:AutocompleteProviderには、オンデマンドでデータを提供するためのクラスを指定します。例えば以下のようにAutocompleteProviderを継承して、refreshメソッドをオーバーライドします。

{define-class public open RandomCompletionProvider
  {inherits AutocompleteProvider}

  field public rng:LinearRandom
  field public digits:int

  {constructor public {default
                          max-results:int = 10,
                          digits:int = 6
                      }

    {construct-super max-results}
    set self.digits = digits
    set self.rng =
        {LinearRandom seed = ({DateTime}.info.fraction * 10000) asa int}
  }

  {method public open {refresh acf:AutocompleteMixin}:void
    def tf = acf.text-field
    def s = tf.value
    let items:StringArray = {StringArray}
    def result-count = {max 10, self.max-results}
    {if s.size < self.digits then
        def n = self.digits – s.size
        let a:int = 1
        let b:int = {pow 10.0, n} asa int
        let f:String = {format “%%s%%0%dd”, n}
        {for i = 0 below result-count do
            {items.append {format f, s, {self.rng.next-in-range a, b – 1}}}
        }
    }
    {acf.populate-from-strings items}
  }
}

この例では、「http://developers.curlap.com/curl/curl-ext/hp/php/words-containing.php?value=%s&max=%s」にリクエストを送り、結果をドロップダウンで表示します。

サンプル

以下のリンクにて、サンプルプを確認することができます。

http://developers.curlap.com/curl/curl-ext/hp/curlext-overview_autocomplete_textfields.curl

このサンプルでは、サーバサイドには、以下のようなphpソースと、TXTファイルを配置しています。

    ————【phpソース】——————————————————
        $req_value = $_GET[‘value’];
    $vals = file(“words.txt”);
    $count = count($vals);
    $output = “”;
    for ($i = 0; $i < $count; $i++) {
                                        $pos = stripos($vals[$i], $req_value);
                                        if ($pos === FALSE) {
                                                                // Skip it.
                                                            } else {
                                                                       if ($pos >= 0) {
                                                                                          $output .= “$vals[$i]”;
                                                                                      }
                                                                   }
                                    }
    echo “$output”;
    ?>
    ————【TXTファイル】——————————————————
      http://developers.curlap.com/curl/curl-ext/hp/php/words.txt

 

また、Google Suggestion APIとの連携はこちらを参照ください。