Массовое обновление ссылок (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();
}