Сергей Шлоков

Сергей Шлоков

Был в сети 06 ноября 2025, 19:54
Заказы не принимаю
может я хочу поредактировать статический сниппет какого-нибудь стороннего модуля
Я такое не закладывал. Я-то думал чтобы сохранять файлы как временные.
Вот так безопасно
Теперь нужно добавлять это разрешение 'console.save_file' в базу при обновлении компонента.
Я решил, что если на выполнение кода права проверяются, то этого достаточно. А так как файлы сохраняются в директорию core и доступ снаружи туда закрыт, то посчитал, что это безопасно.
А по источникам файлов… Не все сразу. :)
Поэтому он и закомментирован. При разработке и тестировании пакета периодически приходится удалять вручную таблицы. Для чистоты эксперимента, так сказать.
А разработчик должен понимать всю ответственность такого решения.
Позволил себе добавить это решение на Github.
Теперь в большинстве случаев вообще не нужно лезть в этот ресолвер. Спасибо Михаилу.
П.С. Также я добавил код удаления таблиц при деинсталяции. Он закомментирован. Если вдруг кому-то нужно будет удалять таблицы, нужно просто раскомментировать.
А вот так еще и индексы добавляем автоматом, чтоб уж совсем голова не болела.
$schemaFile = MODX_CORE_PATH . 'components/modextra/model/schema/modextra.mysql.schema.xml';
if (is_file($schemaFile)) {
	$schema = new SimpleXMLElement($schemaFile, 0, true);
	if (isset($schema->object)) {
		foreach ($schema->object as $object) {
			$objName = (string)$object['class'];
			$objects[] = $objName;
			// Indexes
			foreach ($object->index as $index) {
				$indexes[$objName][] = (string) $index['name'];
			}
		}
	}
	unset($schema);
} else {
	$modx->log(modX::LOG_LEVEL_ERROR, 'Could not get classes from schema file.');
}
//Работаем с таблицами
foreach ($objects as $tmp) {
   $manager->createObjectContainer($tmp);
   ...
}
//Работаем с индексами
foreach ($ClassIndexes as $class=>$indexes) {
	foreach($indexes as $index) {
		$manager->addIndex($class,$index);
	}
}
Ну раз уж пошла такая пьянка, то я бы тогда добавил еще и это
$schemaFile = MODX_CORE_PATH . 'components/modextra/model/schema/modextra.mysql.schema.xml';
$objects = array();
if (is_file($schemaFile)) {
	$schema = new SimpleXMLElement($schemaFile, 0, true);
	if (isset($schema->object)) {
		foreach ($schema->object as $object) {
			$objects[] = (string)$object['class'];
		}
	}
	unset($schema);
} else {
	$modx->log(modX::LOG_LEVEL_ERROR, 'Could not get classes from schema file.');
}
Тады вааще все автоматом работать будет. А то я постоянно забываю добавлять классы.
Честно говоря не понимаю, чем лучше. Я, например, работая с несколькими объектами, сохраняю файлы для каждого (правильные addPackage и т.п. ) Потом открываю нужный и работаю. Легко и быстро. И доработка простейшая — поправил один файл и создал 3 процессора.
Так что, лично я не вижу никаких преимуществ табличного варианта.