Posted 5 мая, 201212 yr comment_3765 Название: Tutorials 1.4.1 Добавил: Respected Добавлен: 05 May 2012 Категория: Premium файлы Tutorials 1.4.1 - полноценная система статей для IP.Board 3.3.x! Некоторые возможности компонента Tutorials 1.4.1: - Неограниченное число категорий для статей - Неограниченная вложенность категорий - Встроенная система комментариев - Тема поддержки статьи - Установка прав для групп на различные действия (комментирование, добавление, обход модерирования и тд.) - Модераторские действия на статьи и комментарии - Создание канала RSS как для всех статей, так и для отдельных категорий - Возможность прикреплять файлы к статьям - Возможность создавать многостраничный статьи - Добавляется вкладка Tutorials в профили пользователей для отображения собственных статей - Блок в боковой панельке отображает список последних статей - Кнопка в сообщении для конвертирования его в статью - Возможность копирования статьи из одной категории в другую - Возможность изменения репутации в статьях - Оценка статей - Возможность подписываться на обновления статей - И многое многое другое..
25 октября, 201212 yr comment_12844 После установки данного девайса форум падает со словами: [Thu Oct 25 17:16:20 2012] [error] [client 173.199.115.91] PHP Warning: Invalid argument supplied for foreach() in /home/ХХХХХХХ/data/www/ХХХХХХХХ/admin/applications_addon/other/tutorials/extensions/search/engines/sql.php on line 374 Началось три дня назад. Судя по IP роботы типа google. Как это можно вылечить? На данный момент, я просто отключил ботам возможность поиска по форуму, но это не панацея. Надоть решить грамотно...
25 октября, 201212 yr comment_12847 /* Searching tags? */ if ( $search_tags ) { $_tagIds = array(); foreach ( $tags as $id => $data ) { $_tagIds[] = $data['tag_meta_id']; } if ( count( $_tagIds ) ) { $where_clause[] = 'a.a_id IN(' . implode( ',', $_tagIds ) . ')'; } else { $where_clause[] = 'a.a_id=0'; } } foreach ( $tags as $id => $data )
25 октября, 201212 yr comment_12850 Пробовал в режиме производительности, ноль эмоций. Загрузка памяти 300%. Надо посмотреть что там с тегами которые он ищет... Кстати, в порядке бреда. А как убить все в этой функции, ну чтобы при запросе к ней ничего не выполнялось (включилась, выключилась) По идее получится, что при поисковом запросе к функции обращение есть, ответ нулевой и соответственно как результат ничего не найдено...
25 октября, 201212 yr comment_12858 А там бред какой-то кстати, в этом коде. Вот отрывок из функции: private function _buildWhereStatement( $search_term, $type='articles', $search_tags=null ) { /* INIT */ $where_clause = array(); if ( $search_term ) { $search_term = str_replace( '"', '"', $search_term ); if ( $type == 'articles' ) { switch ( IPSSearchRegistry::get('opt.searchType') ) { case 'both': default: $where_clause[] = '(' . $this->DB->buildSearchStatement( 'a.a_name', $search_term, true, false, ipsRegistry::$settings['use_fulltext'] ) . ' OR ' . $this->DB->buildSearchStatement( 'a.a_content', $search_term, true, false, ipsRegistry::$settings['use_fulltext'] ) . ')'; break; case 'titles': $where_clause[] = $this->DB->buildSearchStatement( 'a.a_name', $search_term, true, false, ipsRegistry::$settings['use_fulltext'] ); break; case 'content': $where_clause[] = $this->DB->buildSearchStatement( 'a.a_content', $search_term, true, false, ipsRegistry::$settings['use_fulltext'] ); break; } } else { $where_clause[] = $this->DB->buildSearchStatement( 'c.comment', $search_term, true, false, ipsRegistry::$settings['use_fulltext'] ); } } /* Searching tags? */ if ( $search_tags ) { $_tagIds = array(); foreach ( $tags as $id => $data ) { $_tagIds[] = $data['tag_meta_id']; } if ( count( $_tagIds ) ) { $where_clause[] = 'a.a_id IN(' . implode( ',', $_tagIds ) . ')'; } else { $where_clause[] = 'a.a_id=0'; } } Там переменная $tags вообще не определена, проблема на уровне кода, IP.Board тут не при делах. Способ исправления не знаю, понятия не имею, что там хотел автор сделать, но он вообще ничего не сделал.
25 октября, 201212 yr comment_12871 Сейчас сделал так: Вместо /* Searching tags? */ if ( $search_tags ) { $_tagIds = array(); foreach ( $tags as $id => $data ) { $_tagIds[] = $data['tag_meta_id']; } if ( count( $_tagIds ) ) { $where_clause[] = 'a.a_id IN(' . implode( ',', $_tagIds ) . ')'; } else { $where_clause[] = 'a.a_id=0'; } } Залил файл в котором эта функция заканчивается не начавшись: /* Searching tags? */ { } Посмотрим что получится из такого изврата...
25 октября, 201212 yr comment_12873 Лучше так тогда: private function _buildWhereStatement( $search_term, $type='articles', $search_tags=null ) { return ''; } [/CODE]
25 октября, 201212 yr comment_12874 Пасип. Отправил. Посмотрим что за на... Неа...: Parse error: syntax error, unexpected T_PRIVATE in /home/ххххххх/data/www/хххххххх/admin/applications_addon/other/tutorials/extensions/search/engines/sql.php on line 370 Писал: /* Searching tags? */ private function _buildWhereStatement( $search_term, $type='articles', $search_tags=null) { return ''; }
25 октября, 201212 yr comment_12876 Нет, нужно полностью заменить всю эту функцию на код выше, не внутри ф-ии написать это, а заменить ее. Т.е. что бы просто было private function _buildWhereStatement( $search_term, $type='articles', $search_tags=null) { return ''; } [/CODE] вместо всей функции.
25 октября, 201212 yr comment_12879 /* INIT */ $where_clause = array(); if ( $search_term ) { $search_term = str_replace( '"', '"', $search_term ); if ( $type == 'articles' ) { switch ( IPSSearchRegistry::get('opt.searchType') ) { case 'both': default: $where_clause[] = '(' . $this->DB->buildSearchStatement( 'a.a_name', $search_term, true, false, ipsRegistry::$settings['use_fulltext'] ) . ' OR ' . $this->DB->buildSearchStatement( 'a.a_content', $search_term, true, false, ipsRegistry::$settings['use_fulltext'] ) . ')'; break; case 'titles': $where_clause[] = $this->DB->buildSearchStatement( 'a.a_name', $search_term, true, false, ipsRegistry::$settings['use_fulltext'] ); break; case 'content': $where_clause[] = $this->DB->buildSearchStatement( 'a.a_content', $search_term, true, false, ipsRegistry::$settings['use_fulltext'] ); break; } } else { $where_clause[] = $this->DB->buildSearchStatement( 'c.comment', $search_term, true, false, ipsRegistry::$settings['use_fulltext'] ); } } private function _buildWhereStatement( $search_term, $type='articles', $search_tags=null) { return ''; } /* Date Restrict */ Parse error: syntax error, unexpected T_PRIVATE in /home/ххххххх/data/www/ххххххх/admin/applications_addon/other/tutorials/extensions/search/engines/sql.php on line 369 --> private function _buildWhereStatement( $search_term, $type='articles', $search_tags=null) <--
25 октября, 201212 yr comment_12880 :D Вместо всего этого: private function _buildWhereStatement( $search_term, $type='articles', $search_tags=null ) { /* INIT */ $where_clause = array(); if ( $search_term ) { $search_term = str_replace( '"', '"', $search_term ); if ( $type == 'articles' ) { switch ( IPSSearchRegistry::get('opt.searchType') ) { case 'both': default: $where_clause[] = '(' . $this->DB->buildSearchStatement( 'a.a_name', $search_term, true, false, ipsRegistry::$settings['use_fulltext'] ) . ' OR ' . $this->DB->buildSearchStatement( 'a.a_content', $search_term, true, false, ipsRegistry::$settings['use_fulltext'] ) . ')'; break; case 'titles': $where_clause[] = $this->DB->buildSearchStatement( 'a.a_name', $search_term, true, false, ipsRegistry::$settings['use_fulltext'] ); break; case 'content': $where_clause[] = $this->DB->buildSearchStatement( 'a.a_content', $search_term, true, false, ipsRegistry::$settings['use_fulltext'] ); break; } } else { $where_clause[] = $this->DB->buildSearchStatement( 'c.comment', $search_term, true, false, ipsRegistry::$settings['use_fulltext'] ); } } /* Searching tags? */ if ( $search_tags ) { $_tagIds = array(); foreach ( $tags as $id => $data ) { $_tagIds[] = $data['tag_meta_id']; } if ( count( $_tagIds ) ) { $where_clause[] = 'a.a_id IN(' . implode( ',', $_tagIds ) . ')'; } else { $where_clause[] = 'a.a_id=0'; } } /* Date Restrict */ if ( $this->search_begin_timestamp && $this->search_end_timestamp ) { if ( $type == 'articles' ) { $where_clause[] = $this->DB->buildBetween( "a.a_updated", $this->search_begin_timestamp, $this->search_end_timestamp ); } else { $where_clause[] = $this->DB->buildBetween( "c.date", $this->search_begin_timestamp, $this->search_end_timestamp ); } } else { if ( $type == 'articles' ) { if ( $this->search_begin_timestamp ) { $where_clause[] = "a.a_updated > {$this->search_begin_timestamp}"; } if ( $this->search_end_timestamp ) { $where_clause[] = "a.a_updated < {$this->search_end_timestamp}"; } } else { if ( $this->search_begin_timestamp ) { $where_clause[] = "c.date > {$this->search_begin_timestamp}"; } if ( $this->search_end_timestamp ) { $where_clause[] = "c.date < {$this->search_end_timestamp}"; } } } /* What categories do we have access to? */ if ( count( $this->cats ) ) { $categories = array(); foreach ( $this->cats as $category ) { $categories[ $category ] = $category; } } else { $categories = array( 0 ); } /* We have categories? We aren't checking permissions here because the i.perm_view filter covers that already */ if ( !empty( ipsRegistry::$request['search_app_filters']['tutorials']['cats'] ) && count( ipsRegistry::$request['search_app_filters']['tutorials']['cats'] ) ) { foreach ( $categories as $cat ) { if ( !in_array( $cat, ipsRegistry::$request['search_app_filters']['tutorials']['cats'] ) ) { unset( $categories[ $cat ] ); } } } if ( count( $categories ) ) { $where_clause[] = "a.a_cat IN(" . implode( ',', $categories ) . ")"; } else { $where_clause[] = "a.a_cat=0"; } /* Add in AND where conditions */ if ( isset( $this->whereConditions['AND'] ) && count( $this->whereConditions['AND'] ) ) { $where_clause = array_merge( $where_clause, $this->whereConditions['AND'] ); } /* ADD in OR where conditions */ if ( isset( $this->whereConditions['OR'] ) && count( $this->whereConditions['OR'] ) ) { $where_clause[] = '( ' . implode( ' OR ', $this->whereConditions['OR'] ) . ' )'; } /* Permissions */ if ( !$this->memberData['g_is_supmod'] ) { /* Approved files */ $where_clause[] = "a.a_approved=1"; } /* Never deleted articles */ $where_clause[] = "a.a_deleted=0"; /* Build and return the string */ return implode( " AND ", $where_clause ); } (с 336 строчки по 489 в оригинальном файле), вот это: private function _buildWhereStatement( $search_term, $type='articles', $search_tags=null ) { return ''; } [/code]
25 октября, 201212 yr comment_12882 Ты не мню экспериментироваешь штоле? :3: При моем варианте { } Все работает и поиск в том числе. Не думаю, что есть смысл менять шило на другое шило. Пока да и вообще не надо стирать то что мы понаписали, если мой вариант глюканет, то буду дальше экспериментировать
25 октября, 201212 yr comment_12888 Не ругайся, и не обижайся. Я не хотел тебя обидеть. Просто на данный момент, работает. А есть правило, не трогай работающий механизм, он и не сломается.
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.