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

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

С нами с 31 января 2013; Место в рейтинге пользователей: #3
Сергей Шлоков
03 сентября 2015, 23:34
2
+3
Вообще полезно читать официальную документацию. Вот код примера из нее, чуть измененный
<?php
$output = '';
$options = !empty($options)?$options:50;
if (!empty($input) && !empty($options)) {
  if (strlen($input) > $options) {
    $output = substr($input, 0, strrpos(substr($input, 0, $options), '.'));
  } else{
    $output = $input;
  }
}
return $output;
Засовываем это в сниппет, например, smartcuttext и вызываем
[[+content:smartcuttext =`200`]]
Сергей Шлоков
03 сентября 2015, 14:43
0
Поправил.
Сделал так — если код есть — записываем, если нет — удаляем файл.
Сергей Шлоков
03 сентября 2015, 14:04
0
Еще добавил проверку на пустое имя файла. Точно помню, что была, но в процессе видимо пропала.
Сергей Шлоков
03 сентября 2015, 13:51
0
может я хочу поредактировать статический сниппет какого-нибудь стороннего модуля
Я такое не закладывал. Я-то думал чтобы сохранять файлы как временные.
Вот так безопасно
Теперь нужно добавлять это разрешение 'console.save_file' в базу при обновлении компонента.
Сергей Шлоков
03 сентября 2015, 13:39
0
Точно. Добавил basename().
Теперь файл сохраняется только в /core/components/console/files/, не выше и не ниже.
Так безопасно?
П.С. Учиться и учиться ещё.
Сергей Шлоков
03 сентября 2015, 12:15
0
Я решил, что если на выполнение кода права проверяются, то этого достаточно. А так как файлы сохраняются в директорию core и доступ снаружи туда закрыт, то посчитал, что это безопасно.
А по источникам файлов… Не все сразу. :)
Сергей Шлоков
02 сентября 2015, 10:02
+1
Поэтому он и закомментирован. При разработке и тестировании пакета периодически приходится удалять вручную таблицы. Для чистоты эксперимента, так сказать.
А разработчик должен понимать всю ответственность такого решения.
Сергей Шлоков
02 сентября 2015, 09:55
+1
Позволил себе добавить это решение на Github.
Теперь в большинстве случаев вообще не нужно лезть в этот ресолвер. Спасибо Михаилу.
П.С. Также я добавил код удаления таблиц при деинсталяции. Он закомментирован. Если вдруг кому-то нужно будет удалять таблицы, нужно просто раскомментировать.
Сергей Шлоков
02 сентября 2015, 07:23
0
Наверно в наборе параметров для тикетов.
Сергей Шлоков
01 сентября 2015, 21:21
+2
Василий уехал в отпуск. Пусть человек отдохнет.
П.С. А ключик от modExtra он мне оставил.
Сергей Шлоков
01 сентября 2015, 21:18
+2
А вот так еще и индексы добавляем автоматом, чтоб уж совсем голова не болела.
$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);
	}
}
Сергей Шлоков
01 сентября 2015, 20:34
+2
Ну раз уж пошла такая пьянка, то я бы тогда добавил еще и это
$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.');
}
Тады вааще все автоматом работать будет. А то я постоянно забываю добавлять классы.
Сергей Шлоков
01 сентября 2015, 18:00
0
Если Николай посчитает нужным такой функционал и его все устроит, я готов отправить pullrequest.
Сергей Шлоков
01 сентября 2015, 11:55
+3
Ужас ужас.
И тут и на modxclub.ru и на modx.com и на хабре полно информации о работе со сторонними пользовательскими таблицами. Для начала нужно освоить это. Дальше таких вопросов уже не будет.
Например, вот.
Сергей Шлоков
01 сентября 2015, 11:41
0
А вы авторизуетесь случайно не в админке? Tickets проверяет пользователя в текущем контексте.
Сергей Шлоков
01 сентября 2015, 11:31
0
Причем уже куча комментов почти месячной давности :)
Сергей Шлоков
01 сентября 2015, 08:15
0
Мне кажется этот вопрос лучше задать автору modDevTools.