Есть в обслуживании большой магазин шин с 8к товарами. При попытке стандартной генерации карты сайта - генерится ограниченное количество товаров (обычно это число, указанное в настройках магазина, для вывода товаров на странице категории).И дополнительно ко всему этому - карта сайта генерится на лету - т.е. постоянно сильно нагружает сервер в момент генерации.
Первым делом идем по пути /administrator/components/com_virtuemart/models/ и находим файл product.php. Далее создаем его копию тут же и называем product-10k.php. В самом файле находим 2 момента и меняем в них значения на 10000:
находим
if(empty($limit)){ $limit = 30; }
меняем
if(empty($limit)){ $limit = 10000; }
находим
$maxNumber = VmConfig::get ('absMaxProducts', 700);
меняем
$maxNumber = VmConfig::get ('absMaxProducts', 10000);
Далее в корне сайта создайм файл-скрипт sitemap_generator.php и добавляем туда такой код:
<?php error_reporting(E_ALL ^ E_NOTICE); ini_set('display_errors', 'off'); ini_set('max_execution_time', '0'); $d_root = $_SERVER['DOCUMENT_ROOT']; rename("$d_root/administrator/components/com_virtuemart/models/product.php", "$d_root/administrator/components/com_virtuemart/models/product-temp.php"); rename("$d_root/administrator/components/com_virtuemart/models/product-10k.php", "$d_root/administrator/components/com_virtuemart/models/product.php"); $url = "http://test-site.com/component/xmap/xml/1.html?view=xml"; $path = $d_root.'/sitemap-vm.xml'; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $data = curl_exec($ch); curl_close($ch); if(!empty($data)) { file_put_contents($path, $data); } rename("$d_root/administrator/components/com_virtuemart/models/product.php", "$d_root/administrator/components/com_virtuemart/models/product-10k.php"); rename("$d_root/administrator/components/com_virtuemart/models/product-temp.php", "$d_root/administrator/components/com_virtuemart/models/product.php"); $file = fopen($path, 'r'); $text = fread($file, filesize($path)); fclose($file); $file = fopen($path, 'w'); $text = array_shift(explode('<br />', $text)); fwrite($file, $text); fclose($file); unset($text); $fp = gzopen ($d_root.'/sitemap-vm.xml.gz', 'w9'); gzwrite ($fp, file_get_contents($path)); gzclose($fp);
вместо test-site.com - укажите свой сайт
после его работы на выходе в корне получаем 2 файла sitemap-vm.xml и sitemap-vm.xml.gz которые можем добавлять в гугл или яндекс вебмастер-тулз
Иногда может возникнуть ошибка: Allowed memory size of 536870912 bytes exhausted для файла /libraries/joomla/application/component/view.php. Что бы от нее избавиться - находим в файле функцию public function loadTemplate($tpl = null) и в начале ее выполнения дописываем строку на увеличение лимита памяти:
public function loadTemplate($tpl = null) { ini_set('memory_limit', '2048M');
Вот и все 🙂