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


Правила форума

Внимание!!! Если не можете скачать, пожалуйста ознакомьтесь с условиями получения доступа с файлам форума. Правила форума


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


Сообщений в теме: 41

#41 Salp

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

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

Отправлено 23 июня 2017 - 10:19

 badisoft сказал:

Никак :). Эта функция не работает с 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");

Дошло )))

#42 badisoft

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

  • VIP
  • 5 006 сообщений
Репутация: 766
Мастер

Отправлено 27 сентября 2017 - 14:31

Убираем из функций получения 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;
}


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