Jump to content

Featured Replies

Posted
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 в профили пользователей для отображения собственных статей

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

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

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

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

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

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

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

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

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 )

comment_12850

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

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

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

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

{

}

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

comment_12873

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


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

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

}

comment_12876

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

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


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

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

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

comment_12880

: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]

comment_12882

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

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

comment_12883

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

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.


Guest
Ответить в этой теме...

Последние посетители 0

  • No registered users viewing this page.