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
Форумы портала PHP.SU :: Версия для печати :: Autocomplete, catcomplete [2]
Форумы портала PHP.SU » PHP » Программирование на PHP » Autocomplete, catcomplete

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

16. andrewkard - 09 Августа, 2016 - 00:33:03 - перейти к сообщению
Вроде не совсем такой как в примере.
А так:
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.  
17. puncake - 09 Августа, 2016 - 13:10:17 - перейти к сообщению
andrewkard пишет:
Вроде не совсем такой как в примере.
А так:.....


Наверное, тут и возвращать нужно json-строку, а не просто массив, да? В скрипте эти данные используются так: item.category и item.value.
18. andrewkard - 09 Августа, 2016 - 18:07:35 - перейти к сообщению
Как то так, но я не пробовал, вроде структура идентичная:
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.  
19. puncake - 09 Августа, 2016 - 20:55:41 - перейти к сообщению
Спасибо, но что-то все-равно не работает, а в консоли такая ошибка:

SyntaxError: missing } after property list

var data = <pre class="cake-error"><a href="javascript:void(
20. andrewkard - 11 Августа, 2016 - 13:50:30 - перейти к сообщению
puncake пишет:
а в консоли такая ошибка:

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

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


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

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

Перехожу по ссылке и не знаю, где править.... ((
22. andrewkard - 11 Августа, 2016 - 14:04:28 - перейти к сообщению
Похоже на ошибку на сервере, что в логах?
23. puncake - 11 Августа, 2016 - 14:11:11 - перейти к сообщению
Сервер локальный - 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!?

Это ОНО?
24. andrewkard - 11 Августа, 2016 - 14:42:51 - перейти к сообщению
Не похоже, еще посмотрите на кладке Network - Response
25. puncake - 11 Августа, 2016 - 15:00:40 - перейти к сообщению
Если я все правильно делаю, (у меня консоль не англоязычная), Network - это сеть, а Response - ответ. Нажимаю на ссылку ошибки и оказываюсь во вкладке Script. Затем перехожу в Network - Response и вижу код совершенно другого скрипта, относящегося к форме подписки, которую я только что добавила. Раньше ее не было, значит и ошибка не из-за нее.
26. andrewkard - 11 Августа, 2016 - 15:08:29 - перейти к сообщению
puncake пишет:
var data = <pre class="cake-error"><a href="javascript:void(0);" onclic

Вот тут, вместо выражения, получаем "<...", что и приводит к ошибке, что там дальше то? Ссылка какая-то?
(Добавление)
И это означает, что данные на сервере сформированы с ошибкой, попробуйте сначала отдать просто набор правильных данных без их генерации. А потом уже подгоняйте их.
27. puncake - 11 Августа, 2016 - 16:21:42 - перейти к сообщению
andrewkard пишет:
puncake пишет:
var data = <pre class="cake-error"><a href="javascript:void(0);" onclic

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


Сама ошибка и есть ссылка. Больше ничего.
Если передавать в скрипт набор данных из демо-примера (откуда я брала код), то все работает. Но ведь мне нужно выбирать названия статей из БД. И вот тут никак не получается построить правильный массив, а после распарсить строку-json и получить $data как в демо. "Подгоняю" уже бог знает сколько дней.
28. esterio - 12 Августа, 2016 - 12:13:46 - перейти к сообщению
puncake
Приведите код PHP
29. puncake - 12 Августа, 2016 - 12:46:50 - перейти к сообщению
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>
30. andrewkard - 12 Августа, 2016 - 13:07:04 - перейти к сообщению
выведите тут:
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.  

 

Powered by ExBB FM 1.0 RC1