Перейти к содержимому


Ускоряем работу клиентской части ShopCMS при большом количестве товаров и категорий


  • Вы не можете ответить в тему
Сообщений в теме: 42

#41 Salp

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 216 сообщений
Репутация: 54
Продвинутый

Отправлено 23 June 2017 - 10:19 AM

Никак :). Эта функция не работает с SQL-таблицей, она путем global использует заранее созданные массивы $fc и $mc. Они создаются в index.php и в admin.php Вот в $fc и надо добавить нужное поле из таблицы.

Откуда еще могут браться данные для catcache.txt и categories.txt?
Я спрашиваю, потому что периодически(не могу поймать когда) происходит их формирование без учета вывода моих добавленных полей и у меня в списке категорий оказываются ссылки без ЧПУ, а также отключенные категории. А этого, судя по данному запросу, никак не может случится:
# END кэшируем в файл клиентский список категорий
$q = db_query("select categoryID, name, products_count, products_count_admin, parent, picture, subcount, category_enabled, cpu FROM ".CATEGORIES_TABLE." where category_enabled=1 ORDER BY sort_order, name");


Дошло )))
  • 0

#42 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 27 September 2017 - 02:31 PM

Убираем из функций получения path (хлебных крошек) SQL-запросы, т.к. все нужное есть в массиве $cats



function catCalculatePathToCategory( $categoryID )
{
# BEGIN оптимизируем SQL-запросы
global $cats;
if (isset($cats))
{
if (!$categoryID) return NULL;
$i = -1;
foreach ($cats as $key => $cat) if ($cat['categoryID'] == $categoryID) {$i = $key;break;}
$path = array();
if ($i<0) return $path;
while (true)
{
$level = $cats[$i]['level'];
$path[] = array('categoryID' => $cats[$i]['categoryID'],'parent' => $cats[$i]['parent'],'name' => $cats[$i]['name']);
if (!$level) break;
while ($level <= $cats[--$i]['level']);
}
return array_reverse($path);
}
# END оптимизируем SQL-запросы
if (!$categoryID) return NULL;

$path = array();

$q = db_query("select count(*) from ".CATEGORIES_TABLE.
" where categoryID=".(int)$categoryID);
$row = db_fetch_row($q);
if ( $row[0] == 0 ) return $path;

do
{
$q = db_query("select categoryID, parent, name FROM ".
CATEGORIES_TABLE." WHERE categoryID=".(int)$categoryID);
$row = db_fetch_row($q);
$path[] = $row;

if ( $categoryID == 1 ) break;

$categoryID = $row["parent"];
}
while ( 1 );
//now reverse $path
$path = array_reverse($path);
return $path;
}

function catCalculatePathToCategoryA( $categoryID )
{
# BEGIN оптимизируем SQL-запросы
global $cats;
if (isset($cats))
{
if (!$categoryID) return NULL;
$i = -1;
foreach ($cats as $key => $cat) if ($cat['categoryID'] == $categoryID) {$i = $key;break;}
$path = array();
if ($i<0) return $path;
while (true)
{
$level = $cats[$i]['level'];
if($categoryID != $cats[$i]['categoryID']) $path[] = array('categoryID' => $cats[$i]['categoryID'],'parent' => $cats[$i]['parent'],'name' => $cats[$i]['name']);
if (!$level) break;
while ($level <= $cats[--$i]['level']);
}
return array_reverse($path);
}
# END оптимизируем SQL-запросы
if (!$categoryID) return NULL;

$path = array();

$q = db_query("select count(*) from ".CATEGORIES_TABLE.
" where categoryID=".(int)$categoryID);
$row = db_fetch_row($q);
if ( $row[0] == 0 ) return $path;
$curr = $categoryID;
do
{
$q = db_query("select categoryID, parent, name FROM ".
CATEGORIES_TABLE." WHERE categoryID=".(int)$categoryID);
$row = db_fetch_row($q);
if($categoryID != $curr) $path[] = $row;

if ( $categoryID == 1 ) break;

$categoryID = $row["parent"];
}
while ( 1 );
//now reverse $path
$path = array_reverse($path);
return $path;
}

  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#43 Salp

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 216 сообщений
Репутация: 54
Продвинутый

Отправлено 08 March 2018 - 10:33 PM

Код переносится практически один-в-один, надо только $smarty-> заменить на $this-> и обрамить код тэгами {php}{/php} home.php после этого осталнется пустым и можно его будет удалить.

К сожалению, $this-> в Smarty3 выдает ошибку (((
  • 0