Лимиты там как раз есть... по крайней мере по памяти режут как дети в школу...Но ты так и не озвучил цифры...
Сколько категорий, сколько уровней, сколько товаров...
Небольшой разбор полётов:
Про штатный генератор я вообще молчу... но и тот что ты используеш не фонтан...
Вот это полное безобразие
private function getCategoryPath($category_id = 0, $path = '') {
$query = $this->db->query("SELECT c.parent_id FROM " . DB_PREFIX . "category c WHERE c.category_id = '" . (int) $category_id . "'");
if ($query->rows) {
foreach ($query->rows as $category) {
if ($category['parent_id'] != 0) {
$path = $this->getCategoryPath($category['parent_id'], $path);
} else {
return $category_id;
}
}
}
return $path . '_' . $category_id;
}
Давай считать... Если у тебя 18000 товаров равномерно распределены примерно по 100 товаров в категории - тогда у тебя должно быть порядка 180 категорий.
Не будем рассматривать кошмарные сценарии с каталогами в 10-15 уровней и будем считать что у тебя категории построены в три уровня и равномерно распределены примерно так:
Первый уровень 5 категорий, каждая категория первого уровня содержит 5 категорий второго уровня и аналогично категории второго уровня содержат по 5 категорий третьего уровня...
Получается 5 + 5*5 + 5*5*5 = 155 категорий... это меньше 180 но так считать проще.
Алгоритм который я привёл из твоего генератора сделает 5 запросов на первом уровне, 50 на втором уровне и 375 на третьем уровне... Итого: 430 запросов - и это на трёх уровнях. У меня на 1000 категорий до 12 уровней этот алгоритм дал около 8500 запросов
Всё тоже самое можно сделать одним запросом...
На тестовой базе в 1000 категорий, 12 уровней, 10 000 товаров - алгоритмы из твоего генератора на шаред хостинге не смогли вывести даже категории.
Переписал формирование категорий и товаров, изменил таблицу с алиасами и сайтмэп начал сносно генерится.
Для вывода категорий и товаров из тестовой базы выполняется 9 запросов (это на локалке), на тестовом хостинге возможно чуть больше запросов - движки немного отличаются... Один запрос на категории и один на товары... ни кеш ни запись в файл вообще не используются.
Так что подобные, рекурсивные алгоритмы, надо везде клещами вырывать и тогда всё будет работать и на шаред хостингах.