Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Autocomplete, catcomplete

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (3): [1] 2 3 »   

> Описание: item неопределен
puncake
Отправлено: 20 Июня, 2016 - 15:53:48
Post Id



Новичок


Покинул форум
Сообщений всего: 28
Дата рег-ции: Июнь 2015  


Помог: 0 раз(а)




Всем доброго здоровья! Сделала "живой поиск" с использованием виджета catcomplete, как описано вот здесь: https://jqueryui.com/autocomplete/#categories. Все почти получилось, только вместо названий категорий пишет undefined и все выбранные из БД тайтлы из двух таблиц вперемешку. Подскажите, кто знает, как это исправить. Спасибо заранее.
Сайт на CakePHP, если это важно.

(Отредактировано автором: 20 Июня, 2016 - 15:55:50)

 
 Top
Viper
Отправлено: 20 Июня, 2016 - 17:44:26
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Код где?


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
puncake
Отправлено: 20 Июня, 2016 - 20:07:16
Post Id



Новичок


Покинул форум
Сообщений всего: 28
Дата рег-ции: Июнь 2015  


Помог: 0 раз(а)




Viper пишет:
Код где?

CODE (javascript):
скопировать код в буфер обмена
  1. <script>
  2.   $.widget( "custom.catcomplete", $.ui.autocomplete, {
  3.     _create: function() {
  4.       this._super();
  5.       this.widget().menu( "option", "items", "> :not(.ui-autocomplete-category)" );
  6.     },
  7.     _renderMenu: function( ul, items ) {
  8.       var that = this,
  9.         currentCategory = "";
  10.       $.each( items, function( index, item ) {
  11.         var li;
  12.         if ( item.category != currentCategory ) {
  13.           ul.append( "<li class='ui-autocomplete-category'>" + item.category + "</li>" );
  14.           currentCategory = item.category;
  15.         }
  16.         li = that._renderItemData( ul, item );
  17.         if ( item.category ) {
  18.           li.attr( "aria-label", item.category + " : " + item.label );
  19.         }
  20.       });
  21.     }
  22.   });
  23.   </script>
  24. $( "#search" ).catcomplete({
  25.       source: path + '/article/search/',
  26.       minLength: 1,
  27.         select: function(event, ui){
  28.             window.location = path + item.category + ui.item.value;
  29.         }
  30.     });

PHP:
скопировать код в буфер обмена
  1. class ArticlesController extends AppController{
  2.    
  3.     public $uses = array('Category', 'Article', 'Recipe');
  4.  
  5. public function search(){
  6.         if(isset($_GET['term'])){
  7.            $result_search = $this->search_autocomplete();
  8.            exit(json_encode($result_search));
  9.         }elseif(isset($_GET['search']) && $_GET['search']){
  10.             $search = !empty($_GET['search']) ? $_GET['search'] : null;
  11.             $this->search_simple($search);
  12.         }
  13.     }
  14.    
  15.     public function search_autocomplete(){
  16.         $search = $_GET['term'];
  17.         $search_res = $this->Article->find('list', array(
  18.                 'conditions' => array("Article.title LIKE" => '%' . $search . '%', "Article.is_visible" => '1'),
  19.                 'fields' => array('title'),
  20.                 'limit' => 20
  21.             ));
  22.        
  23.         foreach($search_res as $k => $v){
  24.             $data[$k] = array('label' => $v, 'value' => $k);
  25.         }
  26.             return $data;
  27.     }
  28.  
  29. }


Я не совсем понимаю логику скрипта. Несмотря на то, что в search_autocomplete() прописана выборка только через модель Article, а значит из таблицы articles, выбираются также названия из таблицы recipes. Это хорошо, как раз то, что нужно. Ноя не понимаю, как так получается.

(Отредактировано автором: 20 Июня, 2016 - 20:10:48)

 
 Top
Viper
Отправлено: 20 Июня, 2016 - 22:01:36
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Дебаг...
puncake пишет:
из БД тайтлы из двух таблиц вперемешку.
что выводит прямой GET-запрос? Данные в перемешку? Если да то проблема с логикой метода search, если нет, то нужно смотреть что приезжает в JS. Конкретно в renderMenu что говорит и показывает console.log(items); ? Консоль по F12

И да что за метод search_simple()?


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
puncake
Отправлено: 27 Июня, 2016 - 11:09:25
Post Id



Новичок


Покинул форум
Сообщений всего: 28
Дата рег-ции: Июнь 2015  


Помог: 0 раз(а)




При прямом GET-запросе как-раз отрабатывает метод search_simple() и выводит результаты поиска.
PHP:
скопировать код в буфер обмена
  1. public function search_simple($search){        
  2.         if(is_null($search)){
  3.             return $this->set('search_res', 'Введите поисковый запрос...');
  4.         }        
  5.          $this->Paginator->settings = array(
  6.                 'conditions' => array("Article.title LIKE" => '%' . $search . '%', "Article.is_visible" => '1'),
  7.                 'fields' => array('id', 'title', 'img', 'announce', 'Category.id', 'Category.title'),
  8.                 'limit' => 12
  9.             );
  10.             $search_res = $this->Paginator->paginate('Article');
  11.             return $this->set(compact('search_res'));
  12.             $this->render(false);
  13.     }

Данные вперемешку - это имелись в виду тайтлы в выпадающем списке в catcomplete(); Там по идее должно идти название категории заголовком, потом тайтлы товара, затем название второй категории и после тайтлы из этой категории. Но у меня выходят тайтлы вперемешку из обеих категорий, а вместо названия категории (причем только одной) - undefined.
В консоли приходит JSON: список всех тайтлов + их айди, причем все это отсортировано по айди. Поэтому они вперемешку, я так понимаю.
И еще не знаю, как делать выборку из двух таблиц. Есть 2 таблицы: articles и recipes. В зависимости от категории выбранного из выпадающего списка тайтла нужно выбирать данные из одной из этих таблиц. Пока получается только из articles. Нужно, чтобы в скрипт вот сюда:
PHP:
скопировать код в буфер обмена
  1. $( "#search" ).catcomplete({
  2.       source: path + '/articles/search/',
  3.       minLength: 1,
  4.         select: function(event, ui){
  5.             window.location = path + item.category + ui.item.value;
  6.         }
  7.     });

вместо articles подставлялась категория выбранного тайтла. Это item.category. Но не получается. Если вставлю так:
PHP:
скопировать код в буфер обмена
  1. source: path + '/' + item.category + '/search/',

catcomplete не работает. Помогите, пожалуйста.

(Отредактировано автором: 27 Июня, 2016 - 11:54:13)

 
 Top
Viper
Отправлено: 27 Июня, 2016 - 15:16:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




В search_simple() не имеет смысла $this->render(false); после return.

JSON-ответ в студию!


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
puncake
Отправлено: 27 Июня, 2016 - 22:46:34
Post Id



Новичок


Покинул форум
Сообщений всего: 28
Дата рег-ции: Июнь 2015  


Помог: 0 раз(а)




Viper пишет:
В search_simple() не имеет смысла $this->render(false); после return.

JSON-ответ в студию!

Вот это то, что в консоли
Прикреплено изображение (Нажмите для увеличения)
json.jpg
 
 Top
Viper
Отправлено: 27 Июня, 2016 - 23:31:26
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




У вас нет в ответе 'category', а вы его пытаетесь получить через item.category. Исправляйте search_autocomplete()

PHP:
скопировать код в буфер обмена
  1. ...
  2. $data[$k] = array('label' => $v, 'value' => $k, 'category' => $category);
  3. ...

вам осталось каким-то образом заполнить данными переменную $category. Кода вашего я не вижу полностью, поэтому не могу сказать как это сделать.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
puncake
Отправлено: 12 Июля, 2016 - 14:09:37
Post Id



Новичок


Покинул форум
Сообщений всего: 28
Дата рег-ции: Июнь 2015  


Помог: 0 раз(а)




Viper пишет:
У вас нет в ответе 'category', а вы его пытаетесь получить через item.category. Исправляйте search_autocomplete()

PHP:
скопировать код в буфер обмена
  1. ...
  2. $data[$k] = array('label' => $v, 'value' => $k, 'category' => $category);
  3. ...

вам осталось каким-то образом заполнить данными переменную $category.


Так не работает. Не придумывается, как вытащить категорию. Я изменила цикл:
PHP:
скопировать код в буфер обмена
  1. foreach($search_res as $item){
  2.             $data[$item['Article']['id']] = array('label' => $item['Article']['id'], 'value' => $item['Article']['title'], 'category' => $item['Article']['category_id']);
  3.         }
  4.         return $data;

А к запросе вытаскиваю айди категории. Но тоже не работает.
Viper пишет:
Кода вашего я не вижу полностью, поэтому не могу сказать как это сделать.

Я вроде весь нужный код в самом начале выложила. Что еще нужно, скажите - я выложу.
 
 Top
Viper
Отправлено: 12 Июля, 2016 - 15:03:24
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




http://jqueryui[dot]com/autocomplete/#categories жмакаете view source и смотрите формат
CODE (javascript):
скопировать код в буфер обмена
  1.     data = [
  2.       { label: "anders", category: "" },
  3.       { label: "andreas", category: "" },
  4.       { label: "antal", category: "" },
  5.       { label: "annhhx10", category: "Products" },
  6.       { label: "annk K12", category: "Products" },
  7.       { label: "annttop C13", category: "Products" },
  8.       { label: "anders andersson", category: "People" },
  9.       { label: "andreas andersson", category: "People" },
  10.       { label: "andreas johnson", category: "People" }
  11.     ];


У вас же вывод совсем другой получается.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
puncake
Отправлено: 12 Июля, 2016 - 17:39:09
Post Id



Новичок


Покинул форум
Сообщений всего: 28
Дата рег-ции: Июнь 2015  


Помог: 0 раз(а)




Viper пишет:
http://jqueryui[dot]com/autocomplete/#categories жмакаете view source и смотрите формат
CODE (javascript):
скопировать код в буфер обмена
  1.     data = [
  2.       { label: "anders", category: "" },
  3.       { label: "andreas", category: "" },
  4.       { label: "antal", category: "" },
  5.       { label: "annhhx10", category: "Products" },
  6.       { label: "annk K12", category: "Products" },
  7.       { label: "annttop C13", category: "Products" },
  8.       { label: "anders andersson", category: "People" },
  9.       { label: "andreas andersson", category: "People" },
  10.       { label: "andreas johnson", category: "People" }
  11.     ];


У вас же вывод совсем другой получается.

Я туда жмакала - я ведь оттуда код брала. Ясное дело, что у меня другой вывод. У меня ведь данные берутся из БД. Вот как из них построить такой вывод? Я data заполняю в цикле foreach. Но как-то у меня иначе получается.
 
 Top
Viper
Отправлено: 12 Июля, 2016 - 18:24:05
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Только без категории.
PHP:
скопировать код в буфер обмена
  1. $data = array();
  2.  
  3. foreach ($search_res as $item) {
  4.         $data[] = (object) array(
  5.                 'label' => $item['Article']['id'],
  6.                 'value' => $item['Article']['title'],
  7.                 'category' => $item['Article']['category_id']
  8.         );
  9. }


Как получить название категории решайте сами.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
puncake
Отправлено: 12 Июля, 2016 - 20:23:06
Post Id



Новичок


Покинул форум
Сообщений всего: 28
Дата рег-ции: Июнь 2015  


Помог: 0 раз(а)




Viper пишет:
Только без категории.
PHP:
скопировать код в буфер обмена
  1. $data = array();
  2.  
  3. foreach ($search_res as $item) {
  4.         $data[] = (object) array(
  5.                 'label' => $item['Article']['id'],
  6.                 'value' => $item['Article']['title'],
  7.                 'category' => $item['Article']['category_id']
  8.         );
  9. }


Как получить название категории решайте сами.


К сожалению, теперь автокомплит не работает вообще, т.е. выпадающего списка тайтлов нет.
 
 Top
Viper
Отправлено: 12 Июля, 2016 - 21:24:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




puncake пишет:
К сожалению, теперь автокомплит не работает вообще, т.е. выпадающего списка тайтлов нет.
даже не знаю что и сказать. Массив теперь точно как из примера.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
puncake
Отправлено: 08 Августа, 2016 - 10:29:38
Post Id



Новичок


Покинул форум
Сообщений всего: 28
Дата рег-ции: Июнь 2015  


Помог: 0 раз(а)




Вопрос остается открытым. Пожалуйста, подскажите, кто знает, как решить проблему.
 
 Top
Страниц (3): [1] 2 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB