Поиск товаров с одинаковым alt-name

Материал из Umicms
Версия от 16:29, 29 июня 2018; Kublan (обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к:навигация, поиск

Статья предоставлена партнером UMI.CMS Шириевым Артуром

Актуально для версии 18.

Это продолжение статьи "Уменьшение вложенности товаров".

Для корректной работы статьи нужно избавиться от товаров с одинаковым alt-name. Сделать это можно вот таким скриптом:

define("CURRENT_WORKING_DIR", str_replace("\\", "/", $dirname = dirname(__FILE__)));
require CURRENT_WORKING_DIR . '/libs/root-src/standalone.php';

// здесь можно заменить catalog и object на данные необходимого иерархического типа данных, например news и item — для страниц новостей.
$type_id = umiHierarchyTypesCollection::getInstance()->getTypeByName('catalog', 'object')->getId();

$hierarchy = umiHierarchy::getInstance();
$connection = ConnectionPool::getInstance()->getConnection('core');

// прямым запросов к базе ищем дубли по alt-name
$result = $connection->query("SELECT GROUP_CONCAT(id SEPARATOR ', ') id, COUNT(*) c FROM `cms3_hierarchy` WHERE `type_id` = $type_id GROUP BY alt_name HAVING c > 1");

// распечатываем ссылки на страницы
while($row = mysqli_fetch_assoc($result)) {
	foreach (explode(',', $row['id']) as $id) {
        $page = $hierarchy->getElement($id);
		echo "<a href=\"/admin/catalog/edit/{$page->getId()}/\">{$page->getName()}</a><br />\n";
	}
	echo "\n";
}

Кладем скрипт в корень сайта и вызываем из браузера. Корректируем страницы до тех пор, пока дублей не останется.