Массовое обновление ссылок (uri) товаров [MODX]

04 Сентября 2018
php

Ниже представлен пример обновления ссылок товаров в магазине minishop.

Так как часто встречаются сервера с небольшим количеством оперативной памяти, то мы сделали вариант, при котором можно лимитировать количество обработанных ссылок за раз.

Алгоритм действий прост:

  • Указываем переменную $limit, если у вас хороший сервер с большим количество оперативной памяти и правильно настроен сервер, то можете указать любое максимальное число, и пропустить следующий, НО если у вас ограниченное количество ресурсов, то укажите такое число, при котором не будет выводиться ошибки связанные с исчерпанием ресурсов.
  • Запустите скрипт, по завершению - поменяйте значение переменной $offset в соответствие с количеством уже обновленных ссылок и запустите скрипт снова, и так повторяйте пока не обновите все товары.
ini_set("memory_limit", "512M");			// лимит памяти
ini_set('max_execution_time', "3200");			// лимит времени выполнения
						
$limit = 2500;						// лимит выборки
$offset = 0;						// отступ от начала выборки
$q = $modx->newQuery('msProduct');
$q->limit($limit,offset);
$docs = $modx->getCollection('msProduct',$q);
foreach($docs as $doc){
    $title = $doc->get('pagetitle') . '-' . $doc->get('id'); 	// то как будет выглядеть будущая ссылка, сейчас pagetitle - id
    $alias = $doc->cleanAlias($title);
    $doc->set('alias', $alias);
    $doc->save();
}