Неизвестный столбец 'c.ico' в 'field list'

ЕСТЬ РЕШЕНИЕ InstantCMS 2.X
#1 23 января 2025 в 09:13

Здравствуйте. 

Столкнулся с проблемой, со вчерашнего дня не могу найти её.

Заметил, что при переходе на страницу domen.ru/moderation или же domen.ru/favorites/content-13 (компонент Избранное ), при добавлении в фильтр поля категории контента выводит ошибку:

Изображение

Изображение

 i.slug, i.zp, i.zp_cache относятся к компоненту Вакансии и Резюме, да и сам сайт в основном держится на этом компоненте, т.к. сайт вакансий и резюме. Незнаю связана ли ошибка с компонентом или нет, обращался к разработчику дополнения в телеграме по поводу другой ошибки и писал в блоге автора в комментариях, пока молчит.

С чем может быть связана данная ошибка и как можно её решить? Пишет, что Неизвестный столбец 'c.ico' в 'field list' , но этот столбец никак не могу найти.

#2 23 января 2025 в 09:36

Самое простое, это отключить событие content_before_list у компонента job. Не у всех есть данный компонент и поэтому не многие могут знать, что есть в файле этого хука. 

#3 23 января 2025 в 09:37

Самое простое, это отключить событие content_before_list у компонента job. Не у всех есть данный компонент и поэтому не многие могут знать, что есть в файле этого хука. 

Loadырь
  1. <?php
  2.  
  3. class onJobContentBeforeList extends cmsAction {
  4.  
  5. public function run($data){
  6.  
  7. list($ctype, $items) = $data;
  8.  
  9. if ($ctype['name'] != 'job' && $ctype['name'] != 'cv'){ return $data; }
  10.  
  11. if ($ctype['name'] == 'cv'){
  12.  
  13. if ($items){
  14.  
  15. $companies = $this->cms_user->id ? $this->model->
  16. selectOnly('i.id')->
  17. filterEqual('i.user_id', $this->cms_user->id)->
  18. getData('con_job_org') : false;
  19. $companies = $companies ? array_collection_to_list($companies, 'id', 'id') : false;
  20.  
  21. $keys = array_keys($items);
  22. $events = $this->cms_user->id ? $this->model->
  23. selectOnly('i.id, i.cv_id')->
  24. filterEqual('i.user_id', $this->cms_user->id)->
  25. filterEqual('i.target', 'job')->
  26. filterIn('i.cv_id', $keys)->
  27. filterIsNull('i.closed')->
  28. getData('con_job_events', false, false, function($item, $model){ return $item['cv_id']; }) : false;
  29.  
  30. // сначала смотрим есть ли записи групп
  31. foreach($items as $id => $item){
  32.  
  33. $items[$id]['is_private_item'] = false;
  34. if (in_array($item['is_private'], array(100, 101)) && !$this->cms_user->is_admin){
  35.  
  36. // для гостей показываем общее сообщение
  37. if (!$this->cms_user->is_logged){
  38. $items[$id]['is_private_item'] = true;
  39. $items[$id]['private_item_hint'] = LANG_JOB_PRIVATE_AUTH;
  40. continue;
  41. } else {
  42. $items[$id]['private_item_hint'] = LANG_JOB_PRIVATE_USERS_HINT;
  43. }
  44.  
  45. // авторам всё показываем
  46. if($this->cms_user->id == $item['user_id']){
  47. $items[$id]['is_private_item'] = false;
  48. continue;
  49. }
  50.  
  51. // отдельно складываем id если ограничен по компаниям
  52. if($item['is_private'] == 100 && !$companies && !$this->cms_user->is_logged){
  53. $items[$id]['is_private_item'] = true;
  54. $items[$id]['private_item_hint'] = LANG_JOB_PRIVATE_USERS_HINT;
  55. continue;
  56. }
  57.  
  58. // отдельно складываем id если ограничен по компаниям
  59. if($item['is_private'] == 101){
  60. if($companies){
  61. $items[$id]['is_private_item'] = false;
  62. $items[$id]['private_item_hint'] = LANG_JOB_PRIVATE_ORGS_HINT;
  63. $allow_companies_id = cmsModel::yamlToArray($item['allow_companies_id']);
  64. $is_can_view = $this->cms_user->isUserInGroups($companies, $allow_companies_id);
  65. if (!$is_can_view){
  66. $items[$id]['is_private_item'] = true;
  67. $items[$id]['private_item_hint'] = LANG_JOB_PRIVATE_ORGS_HINT;
  68. }
  69. } else {
  70. $items[$id]['is_private_item'] = true;
  71. $items[$id]['private_item_hint'] = LANG_JOB_PRIVATE_ORGS_HINT;
  72. }
  73. }
  74.  
  75. }
  76.  
  77. if ($this->cms_user->id == $item['user_id'] && $events && in_array($id, $events)){
  78. $items[$id]['is_event_exists'] = true;
  79. }
  80.  
  81. }
  82.  
  83. }
  84.  
  85. } else {
  86. if (!empty($ctype['dataJobModel'])){
  87. foreach ($ctype['dataJobModel'] as $key => $val){
  88. $this->model->{$key} = $val;
  89. }
  90. if (empty($ctype['dataJobModel']['join'])){
  91. $this->model->joinLeft('con_job_cats', 'c', 'c.id=i.category_id');
  92. }
  93. $ctype['dataJobMap'] = $this->model->
  94. selectOnly('i.id, i.title, i.slug, i.zp, i.zp_cache, i.address_cache, c.ico as cat_icon')->
  95. get('con_job');
  96. }
  97. if ($items){
  98. $keys = array_keys($items);
  99. $events = $this->cms_user->id ? $this->model->
  100. selectOnly('i.id, i.job_id')->
  101. filterEqual('i.user_id', $this->cms_user->id)->
  102. filterEqual('i.target', 'cv')->
  103. filterIn('i.job_id', $keys)->
  104. filterIsNull('i.closed')->
  105. getData('con_job_events', false, false, function($item, $model){ return $item['job_id']; }) : false;
  106. if ($events){
  107. foreach($items as $id => $item){
  108. if ($this->cms_user->id == $item['user_id'] && in_array($id, $events)){
  109. $items[$id]['is_event_exists'] = true;
  110. }
  111. }
  112. }
  113. }
  114. }
  115.  
  116. return [$ctype, $items];
  117.  
  118. }
  119.  
  120. }
  121.  
#4 23 января 2025 в 09:43

Судя по коду, столбец должен быть. Как столбец должен быть устроен можно посмотреть в архиве установки. В файле install.sql или install.php

#5 23 января 2025 в 09:46

Замените строку

  1. selectOnly('i.id, i.title, i.slug, i.zp, i.zp_cache, i.address_cache, c.ico as cat_icon')->

на строку

  1. selectOnly('i.id, i.title, i.slug, i.zp, i.zp_cache, i.address_cache' . (empty($ctype['dataJobModel']['join']) ? ', c.ico as cat_icon' : ''))->

Вполне возможно, что в категории иконка имеет название не ico, а icon. Тогда надо будет поменять c.ico на c.icon

Судя по коду, столбец должен быть

Zau4man

Он есть, но он в таблице с категорией, а эта таблица по неведомым причинам к запросу не приджойнилась.

#6 23 января 2025 в 09:49

Судя по коду, столбец должен быть. Как столбец должен быть устроен можно посмотреть в архиве установки. В файле install.sql или install.php

Zau4man

Есть tables.sql и install.php, дал поиск в них по c.ico ничего не вышло, даю поиск поico, только в install.php выходит это и всё:

  1. if (!$model->db->isFieldExists('con_job_cats', 'ico')){
  2. $model->db->query("ALTER TABLE `cms_con_job_cats` ADD `ico` VARCHAR(55) NULL DEFAULT 'default.png';");
#7 23 января 2025 в 09:51

дал поиск в них

F_a_R_i_D

Всё правльно, меняйте строки и будет вам счастье.

#8 23 января 2025 в 09:54

Замените строку

  1.  
Loadырь

Заработало, благодарю!

Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.