Avatar
katrincsak
Člen
Avatar
katrincsak:

Zdravím,

předem bych rád upozornil že js/jq nijak neovládám a zatím se tomu snažím vyhýbat pakliže to není zcela nutné. Důvod je, že se hlavně zaměřuji na php a js/jq budu brát jakmile budu mít prostor.

Zdroj: https://jqueryui.com/autocomplete/

Vše funguje jak má, ale rád bych aby vyhledávané slovo bez diakritiky bylo hledané i jako s diakritikou.. To znamená např. že když napíšu písmeno "u" tak mi vyjedou slova i s pímenem dlouhým "ú".
Jedná se o psč/města a tak když zadám např usti nad labem, tak aby bylo to samé jako Ústí nad Labem..

<?php
        foreach($psc as $adresa)
        {
                $pole = "'".$adresa['obec']." - ".$adresa['psc']."',".$pole;
        }
?>

<script type="text/javascript">
$(function() {
        var availableTags = [<?= $pole ?>];
        $("#naseptavac").autocomplete({
            source: availableTags,
            delay: 0
        });
    });
</script>

Bonusová otázka: Jak bych mohl lépe ten foreach do toho vložit? Nezkoušel jsem vkládat přímo pole (i když se to tak jmenuje) předpokládám, že by skočila chyba něco jako array.

Děkuji za rady ;-)

Editováno 23.9.2015 22:35
 
Odpovědět 23.9.2015 22:34
Avatar
katrincsak
Člen
Avatar
katrincsak:

Tak zde jsem našel řešení ... ach ta moje angličtina :)

-> http://jqueryui.com/autocomplete/#…

část, která to řeší... doplnil jsem jen pár písmenek.

<?php
        foreach($psc as $adresa)
        {
                $pole = "'".$adresa['obec']." - ".$adresa['psc']."',".$pole;
        }
?>
<script type="text/javascript">
  $(function() {
    var names = [<?= $pole ?>];

    var accentMap = {
      "á": "a",
          "ö": "o",
          "ú": "u",
          "í":"i",
          "Í":"I",
          "Ú":"U"
    };
    var normalize = function( term ) {
      var ret = "";
      for ( var i = 0; i < term.length; i++ ) {
        ret += accentMap[ term.charAt(i) ] || term.charAt(i);
      }
      return ret;
    };

    $( "#naseptavac" ).autocomplete({
      source: function( request, response ) {
        var matcher = new RegExp( $.ui.autocomplete.escapeRegex( request.term ), "i" );
        response( $.grep( names, function( value ) {
          value = value.label || value.value || value;
          return matcher.test( value ) || matcher.test( normalize( value ) );
        }) );
      }
    });
  });
  </script>
 
Nahoru Odpovědět 23.9.2015 23:01
Avatar
katrincsak
Člen
Avatar
katrincsak:

Dokázal by mi někdo udělat z výše toho posledního udělaného příkladu i cachování ?

Aktuálně ukládám data do session (zjišťuji jestli uživatel session má, nebo nemá a případně data nahraju). Zjišťuji ale, že 1 uložení = 128KB což je docela dost na každého uživatele. Obzvlášť když wedos umožňuje 32MB session limit. Ještě nevím co se stane po přečerpání limitu a již čekám na odpověď emailem..

Jedná se o 3500 dat, které nechci pravidelně načítat z MySQL.

Děkuji ;-)

 
Nahoru Odpovědět 24.9.2015 19:23
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.