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 [2]

 PHP.SU

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


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

> Описание: item неопределен
andrewkard
Отправлено: 09 Августа, 2016 - 00:33:03
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


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




Вроде не совсем такой как в примере.
А так:
PHP:
скопировать код в буфер обмена
  1.  
  2. $data = array();
  3.  
  4. foreach ($search_res as $item) {
  5.         $data[$item['Article']['id']] = (object) array(
  6.                 'label' => $item['Article']['title'],
  7.                 'category' => $item['Category']['title']
  8.         );
  9. }
  10.  
 
 Top
puncake
Отправлено: 09 Августа, 2016 - 13:10:17
Post Id



Новичок


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


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




andrewkard пишет:
Вроде не совсем такой как в примере.
А так:.....


Наверное, тут и возвращать нужно json-строку, а не просто массив, да? В скрипте эти данные используются так: item.category и item.value.
 
 Top
andrewkard
Отправлено: 09 Августа, 2016 - 18:07:35
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


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




Как то так, но я не пробовал, вроде структура идентичная:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.     $data = array();
  4.     $data[] = array(
  5.         'label' => 'Label0',
  6.         'category' => 'Category0'
  7.     );
  8.     $data[] = array(
  9.         'label' => 'Label1',
  10.         'category' => 'Category1'
  11.     );
  12.     $data = json_encode($data);
  13. ?>
  14. <!DOCTYPE html>
  15. <html>
  16. <head>
  17.     <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  18.     <script>
  19.         var data = <?=$data?>;
  20.         console.log(data);
  21.     </script>
  22. </head>
  23. <body>
  24. </body>
  25. </html>
  26.  
 
 Top
puncake
Отправлено: 09 Августа, 2016 - 20:55:41
Post Id



Новичок


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


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




Спасибо, но что-то все-равно не работает, а в консоли такая ошибка:

SyntaxError: missing } after property list

var data = <pre class="cake-error"><a href="javascript:void(

(Отредактировано автором: 09 Августа, 2016 - 21:00:17)

 
 Top
andrewkard
Отправлено: 11 Августа, 2016 - 13:50:30
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


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




puncake пишет:
а в консоли такая ошибка:

Переходим по ссылке в консоли и смотрим где ошибка, исправляем (если она не в библиотеке типа jQuery, а если все же в ней, значит не такие данные поступают в обработку)
 
 Top
puncake
Отправлено: 11 Августа, 2016 - 14:01:39
Post Id



Новичок


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


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




andrewkard пишет:
puncake пишет:
а в консоли такая ошибка:

Переходим по ссылке в консоли и смотрим где ошибка, исправляем (если она не в библиотеке типа jQuery, а если все же в ней, значит не такие данные поступают в обработку)


Да разве ж я писала бы сюда вопросы, если б знала ЧТО там исправлять... Ну перешла я по ссылке, смотрю на код и понятия не имею, где там фигурной скобки не хватает. Методом тыка ставила в наиболее "подозрительные" места. Вроде угадала, теперь такая ошибка в консоли:
SyntaxError: expected expression, got '<'

var data = <pre class="cake-error"><a href="javascript:void(0);" onclic

Перехожу по ссылке и не знаю, где править.... ((
 
 Top
andrewkard
Отправлено: 11 Августа, 2016 - 14:04:28
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


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




Похоже на ошибку на сервере, что в логах?
 
 Top
puncake
Отправлено: 11 Августа, 2016 - 14:11:11
Post Id



Новичок


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


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




Сервер локальный - OpenServer. А что именно там смотреть? Там 2 файла - MySQL-5.5_error и Apache-2.2_errora. Во втором вот таких строк больше 20-ти:

[Thu Aug 11 10:37:34 2016] [warn] RSA server certificate CommonName (CN) `openserver' does NOT match server name!?

Это ОНО?
 
 Top
andrewkard
Отправлено: 11 Августа, 2016 - 14:42:51
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


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




Не похоже, еще посмотрите на кладке Network - Response
 
 Top
puncake
Отправлено: 11 Августа, 2016 - 15:00:40
Post Id



Новичок


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


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




Если я все правильно делаю, (у меня консоль не англоязычная), Network - это сеть, а Response - ответ. Нажимаю на ссылку ошибки и оказываюсь во вкладке Script. Затем перехожу в Network - Response и вижу код совершенно другого скрипта, относящегося к форме подписки, которую я только что добавила. Раньше ее не было, значит и ошибка не из-за нее.
 
 Top
andrewkard
Отправлено: 11 Августа, 2016 - 15:08:29
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


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




puncake пишет:
var data = <pre class="cake-error"><a href="javascript:void(0);" onclic

Вот тут, вместо выражения, получаем "<...", что и приводит к ошибке, что там дальше то? Ссылка какая-то?
(Добавление)
И это означает, что данные на сервере сформированы с ошибкой, попробуйте сначала отдать просто набор правильных данных без их генерации. А потом уже подгоняйте их.
 
 Top
puncake
Отправлено: 11 Августа, 2016 - 16:21:42
Post Id



Новичок


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


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




andrewkard пишет:
puncake пишет:
var data = <pre class="cake-error"><a href="javascript:void(0);" onclic

Вот тут, вместо выражения, получаем "<...", что и приводит к ошибке, что там дальше то? Ссылка какая-то?
(Добавление)
И это означает, что данные на сервере сформированы с ошибкой, попробуйте сначала отдать просто набор правильных данных без их генерации. А потом уже подгоняйте их.


Сама ошибка и есть ссылка. Больше ничего.
Если передавать в скрипт набор данных из демо-примера (откуда я брала код), то все работает. Но ведь мне нужно выбирать названия статей из БД. И вот тут никак не получается построить правильный массив, а после распарсить строку-json и получить $data как в демо. "Подгоняю" уже бог знает сколько дней.
 
 Top
esterio
Отправлено: 12 Августа, 2016 - 12:13:46
Post Id



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


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




puncake
Приведите код PHP
 
 Top
puncake
Отправлено: 12 Августа, 2016 - 12:46:50
Post Id



Новичок


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


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




PHP:
PHP:
скопировать код в буфер обмена
  1. class ArticlesController extends AppController{
  2.    
  3.     public $uses = array('Category', 'Article', 'Recipe', 'ArticleComment');
  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.    
  16.     public function search_autocomplete(){
  17.         $search = $_GET['term'];
  18.         $search_res = $this->Article->find('list', array(
  19.                 'conditions' => array("Article.title LIKE" => '%' . $search . '%', "Article.is_visible" => '1'),
  20.                 'fields' => array('title', 'id', 'category_id'),
  21.                 'limit' => 20
  22.             ));
  23.  
  24.         $data = array();
  25.      
  26.         foreach ($search_res as $item) {
  27.             $data[$item['Article']['id']] = array(
  28.                     'label' => $item['Article']['title'],
  29.                     'category' => $item['Category']['title']
  30.             );
  31.         }
  32.         return $data = json_encode($data);
  33.     }  
  34. }


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

(Отредактировано автором: 12 Августа, 2016 - 12:48:17)

 
 Top
andrewkard
Отправлено: 12 Августа, 2016 - 13:07:04
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


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




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


PHP:
скопировать код в буфер обмена
  1.  
  2.  foreach ($search_res as $item) {
  3.  
  4. var_dump($item); die;
  5.             $data[$item['Article']['id']] = array(
  6.                     'label' => $item['Article']['title'],
  7.                     'category' => $item['Category']['title']
  8.             );
  9.         }
  10.  
  11. Сдается мне что нет у Вас в массиве $item ключа 'Category'
  12.  
  13.  
 
 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