Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony] Podpowiadanie wyrażenia
Forum PHP.pl > Forum > PHP > Frameworki
kusiu
Witam,

Na podstawie http://www.developpez.net/forums/d908396/p...ete-formfilter/ próbuję/walczę zrobić podpowiadanie wyrażenia w polu input na podstawie tabeli CITY.

I tak:

Na podstronie http://localhost:8080/index.php/register mam formularz gdzie w jednym polu wpisuje się nazwę miasta

UserFormFilter.class.php

  1. class UsersFormFilter extends BaseUsersFormFilter
  2. {
  3. public function configure()
  4. {
  5. $this->widgetSchema['miasto']->setOption('renderer_class', 'sfWidgetFormDoctrineJQueryAutocompleter');
  6. $this->widgetSchema['miasto']->setOption('renderer_options', array(
  7. "model" => "City",
  8. "url" => url_for("@ajax"),
  9. ));
  10. }
  11. }
  12.  


routing.yml

  1. ajax:
  2. url: /ajax
  3. param: {module: ajax, action: getCity}


actions.class.php w module ajax

  1. public function executeGetCity(sfWebRequest $request)
  2. {
  3.  
  4. $this->getResponse()->setContentType('application/json');
  5. $datas = Doctrine::getTable('City')->getCityAutocompletion($request->getParameter('q'), $request->getParameter('limit'))->getData();
  6. $etudes = array();
  7.  
  8. foreach($datas as $etude)
  9. {
  10. $etudes[$etude->id] = (string) $etude;
  11. }
  12. if($etudes!=array()) return $this->renderText(json_encode($etudes));
  13.  
  14. }


lib/model/doctrine/CityTable.class.php

  1. class CityTable extends Doctrine_Table
  2. {
  3.  
  4. public static function getInstance()
  5. {
  6. return Doctrine_Core::getTable('City');
  7. }
  8.  
  9. public function getCityAutocompletion($q, $limit){
  10. return Doctrine::getTable("City")->createQuery()
  11. ->where("city LIKE ?","%".$q."%")
  12. ->limit($limit)
  13. ->execute();
  14. }
  15.  
  16. }


i niestety ani rusz... Dodam, że są podpięte style oraz js

  1. <link rel="stylesheet" type="text/css" media="screen" href="/sfFormExtraPlugin/css/jquery.autocompleter.css" />
  2. <script type="text/javascript" src="/js/jquery-1.3.2.min.js"></script>
  3. <script type="text/javascript" src="/sfFormExtraPlugin/js/jquery.autocompleter.js"></script>


Na pewno ktoś z Was robił autocomplite w polu tekstowym. Prosze o pomoc. Jeśli nie sfWidgetFormDoctrineJQueryAutocompleter to jakieś inne rozwiązanie. Męczę się z tym .. za długo już smile.gif
destroyerr
Ciężko będzie nam coś wywróżyć. Logi oglądałeś? Firebug zainstalowany?

Mała podpowiedź, zamiast pętli w kontrolerze użyj tej funkcji.
kusiu
Niestety w logach nic nadzwyczajnego się nie znajduje. Po prostu ten autocomplete nie działa, nie wiem co mu brakuje.
destroyerr na pewno robiłeś jakiś autocomplete w polu tekstowym, chce to wreszcie zrobić nieważne jakim sposobem.
destroyerr
Mam rozumieć, że z logów wynika, że akcja getCity się wykonuje? Jeśli tak, to sprawdź firebugiem bo nie wiadomo czy to nie problem z js.

Powodów może być wiele, jeśli będziesz podawał tak mało informacji to możemy tylko strzelać rozwiązania.
kusiu
Problem tak jak myślałem był w błędnym przykładzie, oto rozwiązanie:

UserForm.class.php

  1. $this->widgetSchema['miasto'] = new sfWidgetFormDoctrineJQueryAutocompleter(array(
  2. 'model' => 'City',
  3. 'url' => 'ajax/getCity',
  4. 'label' => 'City: ' ,
  5. 'config' => '{ width: 220,max: 100,highlight:false, scrollHeight: 300}'
  6. ));


ajax/actions/actions.class.php

  1. public function executeGetCity(sfWebRequest $request)
  2. {
  3.  
  4. $this->getResponse()->setContentType('application/json');
  5.  
  6. $q = $request->getParameter('q');
  7. $limit = $request->getParameter('limit');
  8.  
  9. $req = Doctrine::getTable('City')->getDataWhere($q, $limit);
  10.  
  11. $results = array();
  12. foreach ( $req as $result )
  13. {
  14. $results[$result->id] = $result->city;
  15. }
  16.  
  17. return $this->renderText(json_encode($results));
  18.  
  19. }


lib/model/doctrine/CityTable.class.php

  1. public function getDataWhere($q, $limit=10)
  2. {
  3. $query= Doctrine_Query::Create()
  4. ->select('city')
  5. ->from('City a')
  6. ->where('city LIKE ?','%'.$q.'%')
  7. ->limit($limit)
  8. ->orderBy('city ASC')
  9. ->execute()
  10. ->getData();
  11.  
  12. return $query;
  13. }
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.