hlmod.hu
https://hlmod.hu/

Autocomplete
https://hlmod.hu/viewtopic.php?f=114&t=28497
Oldal: 1 / 1

Szerző:  JohanCorn [ 2017.11.30. 14:48 ]
Hozzászólás témája:  Autocomplete

Üdv!

Az oldalamon vannak input bemenetek és ezeket többnyire magától ki szeretné tölteni a chrome. Ugye bejelentkezéskor, ha mentetem vele az adatokat, akkor nem is lenne logikátlan, de valamiért teljesen oda nem illő helyekre akarja beírni. Ezt szeretném kivenni teljesen, de az autocomplete="off", vagy "false" sem működik. Erre valakinek valami ötlete?

Aki nem értené problémát, annak itt egy kép róla.
Kép

Szerző:  duvilax [ 2017.12.30. 11:06 ]
Hozzászólás témája:  Re: Autocomplete

Szia.
Habár több leírást is találtam arról, hogy hogyan lehet cake-kel autocomplete input mezőt létrehozni, egyik sem volt teljes. Annak ellenére, hogy egyszer kétszer pár hónappal ezelőtt már csináltam is ilyet, most újra ráment több mint egy órám mire összeraktam. Mivel pár hónap múlva semmiképpen nem akarok majd vele ennyit eltölteni, hát most jól leírom.
Azt hiszem ezt a funkciót már mindenki használta valahol. Az a lényege, hogy amikor egy input keresési mezőbe kezdjük bepötyögni, hogy “man”, akkor a háttérben végigfut egy keresés és a lehetséges eredményekből valamilyen algoritmus segítségével már meg is kapunk pár eredményt, mint pl “manual”, “manci”, stb. ezek az eredmények jobb esetben a keresési input alatt jelennek meg és választhatunk közülük. Így működik a goggle toolbar és a google suggest.
Mivel ez egy általánosan használt funkció a cake is beépítette az ajax helpereébe. Használatához a következőket kell tennünk:

JS elérhetővé tétele: Az app/views/layouts/default.thtml file-ba a </head> rész előtt be kell linkelnünk a szükséges JavaScript fileokat.
  1. <?php
  2.    print $javascript->link('prototype');
  3.    print $javascript->link('scriptaculous.js?load=effects');
  4.    print $javascript->link('controls');
  5. ?>

Persze ezek csak akkor fognak működni, ha a app/webroot/js könyvtárba letöltjük a szükséges librarykat. Kicsomagolás után a magam részéről az src és a lib könyvtárban található js fileokat másoltam be.

Az ajax helper meghívása: Az app_controller.php fileba a $helper tömböt ki kell egészíteni az ajaxxal is. Nálam így var $helpers = array('html','javascript','form','ajax'); lett. Ha nem akarjuk minden controllerben használni, akkor persze elég csak abba a controller fileba megtenni ezt, ahol használni akarjuk.
Ha ez megvan, akkor újfent a default.thtml filehoz kell nyúlnunk, és betennünk 4 sort ami.
  1. <form action="/tasks/index" method="post">
  2.       <?php
  3.          print $ajax->autoComplete('Task/task', '/tasks/search');
  4.          print $html->submit('Keres');
  5.       ?>
  6.    </form>

Az autoComplete függvénynek elég két paramétert átadnunk. Az első a létrehozandó input mezőnket azonosítja, a második pedig a meghívandó controller függvényt. Adatbázis lekérés: Ezek után nyilvánvaló, hogy létre kell hoznunk a controllerünkben az előbb meghívott függvényt.
  1. function search(){
  2.    //ajaxos keresés a taskokban
  3.    $this->Task->recursive = 1;
  4.    $this->set('searchResults', $this->Task->findAll("task LIKE '{$this->data['Task']['task']}%'",null,null,null,1,1));
  5.    $this->render('searchResults','ajax');
  6.    }

Magyarul a findAll metódus segítségével keressük azokat a rekordokat ahol “task” mező a begépelt szótöredékkel kezdődik. Az eredmények a $searchResults tömbbe kerülnek.

Az eredmények megjelenítése: Ezek után már csak a viewt kell létrehoznunk az eredmények megjelenítéséhez. Ehhez (nálam) az app/views/tasks/search_results.thtml fileba az alábbi került:
  1. <ul>
  2. <?php
  3.    foreach($searchResults as $s){
  4.       print '<li><a href="/tasks/view/'.$s['Task']['id'].'">'.$s['Task']['task'].'</a></li>';
  5.    }
  6. ?>
  7. </ul>

Amit sehol sem találtam leírva, az az volt, hogy mindenféleképpen ul – li listaként kell kezelnünk az eredményeket, máskülönben nem fognak megjelnni.

CSS: már csak annyi maradt hátra, hogy kicsit pofozzunk az eredmények kinézetén:
  1. div.auto_complete {
  2.    position         :absolute;
  3.    width            :200px;
  4.    background-color :white;
  5.    border           :1px solid #888;
  6.   margin           :0;
  7.    padding          :0;
  8.    }
  9.  
  10. li.selected { background-color: #ffb; }

Szerző:  Silent [ 2018.05.25. 12:49 ]
Hozzászólás témája:  Re: Autocomplete

Nem ez volt a kérdés, valamint ha ez lett volna, akkor sem releváns a válasz, mert nem használ CakePHP-t az úr.

A chrome-ot nem nagyon fogod átverni, mivel ha egyszer elmentesz valamit, utána azon a domainen lévő ugyanolyan típusú fieldeket ő ki fogja tölteni, mert neki ez így jó (az természetesen le van szarva, hogy neked mi jó). Nem nagyon van erre megoldás, esetleg ilyen NASA szintű hackek, hogy nem inputot használsz, hanem valami custom motyót, viszont akkor azt se fogja menteni amit kéne. Ne törődj ezzel, valóban ront a user experience-en, de még az Amazon sem oldotta meg, szóval neked abszolút nem kell megoldanod. :)

Oldal: 1 / 1 Minden időpont UTC+02:00 időzóna szerinti
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/