Перейти к содержанию

Рекомендуемые сообщения

Название: Tutorials 1.4.1

Добавил: Respected

Добавлен: 05 May 2012

Категория: Premium файлы

Tutorials 1.4.1 - полноценная система статей для IP.Board 3.3.x!

Некоторые возможности компонента Tutorials 1.4.1:

- Неограниченное число категорий для статей

- Неограниченная вложенность категорий

- Встроенная система комментариев

- Тема поддержки статьи

- Установка прав для групп на различные действия (комментирование, добавление, обход модерирования и тд.)

- Модераторские действия на статьи и комментарии

- Создание канала RSS как для всех статей, так и для отдельных категорий

- Возможность прикреплять файлы к статьям

- Возможность создавать многостраничный статьи

- Добавляется вкладка Tutorials в профили пользователей для отображения собственных статей

- Блок в боковой панельке отображает список последних статей

- Кнопка в сообщении для конвертирования его в статью

- Возможность копирования статьи из одной категории в другую

- Возможность изменения репутации в статьях

- Оценка статей

- Возможность подписываться на обновления статей

- И многое многое другое..

Ссылка на комментарий
Поделиться на другие сайты

  • 5 месяцев спустя...

После установки данного девайса форум падает со словами:

[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. Как это можно вылечить? На данный момент, я просто отключил ботам возможность поиска по форуму, но это не панацея. Надоть решить грамотно...

Ссылка на комментарий
Поделиться на другие сайты

Каково содержание данной строки?

Ссылка на комментарий
Поделиться на другие сайты

/* 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 )

Ссылка на комментарий
Поделиться на другие сайты

Может быть хуки поотключать все?

Ссылка на комментарий
Поделиться на другие сайты

Пробовал в режиме производительности, ноль эмоций. Загрузка памяти 300%. Надо посмотреть что там с тегами которые он ищет... Кстати, в порядке бреда. А как убить все в этой функции, ну чтобы при запросе к ней ничего не выполнялось (включилась, выключилась) По идее получится, что при поисковом запросе к функции обращение есть, ответ нулевой и соответственно как результат ничего не найдено...

Ссылка на комментарий
Поделиться на другие сайты

А там бред какой-то кстати, в этом коде.

Вот отрывок из функции:


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 тут не при делах.

Способ исправления не знаю, понятия не имею, что там хотел автор сделать, но он вообще ничего не сделал.

Ссылка на комментарий
Поделиться на другие сайты

Сейчас сделал так:

Вместо

/* 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? */

{

}

Посмотрим что получится из такого изврата...

Ссылка на комментарий
Поделиться на другие сайты

Лучше так тогда:


private function _buildWhereStatement( $search_term, $type='articles', $search_tags=null )
{
return '';
}
[/CODE]

Ссылка на комментарий
Поделиться на другие сайты

Пасип. Отправил. Посмотрим что за на...

Неа...:

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 '';

}

Ссылка на комментарий
Поделиться на другие сайты

Нет, нужно полностью заменить всю эту функцию на код выше, не внутри ф-ии написать это, а заменить ее.

Т.е. что бы просто было


private function _buildWhereStatement( $search_term, $type='articles', $search_tags=null)
{
return '';
}
[/CODE]

вместо всей функции.

Ссылка на комментарий
Поделиться на другие сайты

/* 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) <--

Ссылка на комментарий
Поделиться на другие сайты

:D

Вместо всего этого:


private function _buildWhereStatement( $search_term, $type='articles', $search_tags=null )
{
/* INIT */
$where_clause = array();

if ( $search_term )
{
$search_term = str_replace( '&quot;', '"', $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]

Ссылка на комментарий
Поделиться на другие сайты

Ты не мню экспериментироваешь штоле? :3:

При моем варианте { } Все работает и поиск в том числе. Не думаю, что есть смысл менять шило на другое шило. Пока да и вообще не надо стирать то что мы понаписали, если мой вариант глюканет, то буду дальше экспериментировать

Ссылка на комментарий
Поделиться на другие сайты

Я написал как лучше, а там не мое дело.

Ссылка на комментарий
Поделиться на другие сайты

Не ругайся, и не обижайся. Я не хотел тебя обидеть. Просто на данный момент, работает. А есть правило, не трогай работающий механизм, он и не сломается.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...