Александр Туниеков

Александр Туниеков

С нами с 19 декабря 2015; Место в рейтинге пользователей: #15
Александр Туниеков
17 сентября 2020, 15:03
0
Блин. Зачем потерли?? Вещь нужная. Теперь придется самому править :-(
Александр Туниеков
14 августа 2020, 21:23
0
Что-то не помогло :-).
Я в итоге закатал в плагин Ace строчку
$modx->controller->addHtml("<style>.ace_editor {font: 12px/normal 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;}</style>");
yadi.sk/i/WV5Y0IWDRaIqRA
Александр Туниеков
16 июля 2020, 09:35
0
Добрый день! У нас пришлось дописывать антибот чтоб с пустым реферал запросы автоматически блокировал. И то это только снизило нагрузку. Парсили с кучи разных IP и USER AGENT со всего мира. Самая полезное оказалось что у провайдера есть возможнось заблокировать не русские IP. Сразу снизило нагрузку.
Вы проанализируйте как атака идет. Если IP или USER AGENT один то заблокировать легко, а иначе нужно искать какие-то признаки что это не нужный трафик.
Александр Туниеков
05 апреля 2020, 01:39
0
Не понятно в чем проблема на хостинге. Ты бы хотя бы консоль разработчика chrome открыл и посмотрел какие запросы и ответы идут при запуске скрипта.
Александр Туниеков
04 апреля 2020, 16:25
0
Жесть. Вообще беккап базы каждый день должен делаться.
Вы посмотрите от какого юзера modx работает в core/config/config.inc.php. Если там не root то все просто заходите под этим пользователем и востонавливаете root или беккап делаете.
А если root то непонятно почему работает. Но если работает наверно проще поставить modx.cc/documentation/additions/databackup/ и сниппет backup выполнить.
Александр Туниеков
04 апреля 2020, 16:05
0
Вроде правильно скрипт написан… А что не получается?
Александр Туниеков
23 марта 2020, 15:27
+1
Извиняюсь. Наверно не дожал заплатить. Их там куча вылазить. Сейчас отправил. Дошло?
Александр Туниеков
23 марта 2020, 14:39
0
Кому стало полезно))): донатики
Сюда нажал. На яндекс перекинуло.

Со своей сборкой почти все победил. Как собрать разобрался, пакеты добавил, добавил сразу настройку поставщика модсторе, ошибки пролечил. И тут оказалось что все шаблоны и чанки на php написаны :-(. А на это привыкать не надо. В pdoTools поддержку $modx и php я вырубил. Придется чанки и шаблоны с другого проекта брать или самому переписывать ;-(.
Александр Туниеков
23 марта 2020, 00:41
0
Задонатил чуток :-). Но как собрать свою сборку на базе твоей не слишком понятно :-(. Сижу разбираюсь :-).
Александр Туниеков
21 марта 2020, 14:58
0
{'!TicketLatest' | snippet : [
      'checkPermissions'=>'list',
]}

Тест лишнее. Не работает. Наверно основной класс запроса не Ticket, поэтому не срабатыват. Извиняюсь, лезть в код не стал и точно сказать не могу. Только проверил.
Александр Туниеков
21 марта 2020, 05:33
0
Блин фиг пойми как заметку переписывать :-(. Сразу логические связки теряются :-). Ладно, надеюсь, комментарии читать будут.
Александр Туниеков
21 марта 2020, 05:29
0
Мда… Как то не подумал что list прокатит. Думал надо заводить какие-то отдельные права :-(. Вообщем не сообразил.
Для getTickets тоже прокатило. А с TicketLatest уже не срабатывает.
Александр Туниеков
20 марта 2020, 06:33
0
Я в старом modExtra делал. Там в build.config.php ресолверы подключаются
$BUILD_RESOLVERS = array(
    'tables',
    'chunks',
    'default_fields',
    //'setup',
    //'office',
);
Главное после tables его включить. В tables сами таблицы создаются.
В новом modExtra build.php
// Add resolvers into vehicle
		$resolvers = scandir($this->config['resolvers']);
		
		foreach ($resolvers as $resolver) {
			if (in_array($resolver[0], ['_', '.'])) {
				continue;
			}
			if ($vehicle->resolve('php', ['source' => $this->config['resolvers'] . $resolver])) {
				$this->modx->log(modX::LOG_LEVEL_INFO, 'Added resolver ' . preg_replace('#\.php$#', '', $resolver));
			}
		}
Ресолверы сами подключаются из папки. Наверно их стоит переименовать 1tables.php и т.д. Может сработает. Проверять надо.
А вы как данные в базу подключаете? Или еще не подключаете?
Александр Туниеков
19 марта 2020, 13:52
1
+1
Я тупо в ресолвере через newObject добавляю. Если есть лучше вариант, то будет интересно узнать.
resolve.default_fields.php
/** @var xPDOTransport $transport */
/** @var array $options */
/** @var modX $modx */
if ($transport->xpdo) {
    $modx =& $transport->xpdo;
	/** @var array $options */
	switch ($options[xPDOTransport::PACKAGE_ACTION]) {
		case xPDOTransport::ACTION_INSTALL:
			$fields = [
				[
					'name'=>'res_id',
					'label'=>'Мероприятие',
					'dbtype'=>'int',
					'precision'=>10,
					'phptype'=>'integer',
					'xtype'=>'tevent-univers-combo',
					'sort'=>1,
					'validate'=>'required',
					'select_query'=>
'{
    "parents":"0",
    "template":"1"
}',
					'filter'=>true,
					'active'=>true,
				],
///еще поля
			];
			foreach($fields as $field){
				if(!$in_field = $modx->getObject('tEventField',['name'=>$field['name']])){
					if($in_field = $modx->newObject('tEventField')){
						$in_field->fromArray($field);
						if(!$in_field->save()) $modx->log(xPDO::LOG_LEVEL_ERROR, "[tEvent] field {$field['name']} not add!");
					}
				}
			}
			$modx->log(xPDO::LOG_LEVEL_INFO, '[tEvent] Successfully add Default fields!');
			break;

	}
}
Александр Туниеков
05 марта 2020, 12:32
0
Читал год назад. (int) использую, а с санацией строки проблема вышла. В поле название города кавычки писались и его никто найти не мог. Так что, санация это работа надолго :-(.
Александр Туниеков
05 марта 2020, 12:20
0
Актуальность в одну минут, вообще не принципиально)))
В смысле, крон настраивать запросы для этих таблиц писать. На 80 базовых таблиц — это офигенное кол-во временных. Сайт только висеть будет их генерировать.
Александр Туниеков
05 марта 2020, 12:05
0
Если бы ты принял этот PR, пришлось бы pdoTools удалять.
Дыры много где есть. И никто вам не мешает взять и переписать PR или что-то еще без дыр, если они там есть. Вроде ничего такого не должно быть. Все стандартные дыры MODX только.
Александр Туниеков
05 марта 2020, 11:50
0
Никогда не понимал зачем такие мега запросы писать. Бесполезных join-нов куча. Этаж сколько выборка этого всего идти будет. А потом еще сидеть постоянно разбирать что там написано.
Выборка достаточно быстро идет. Какие-то тормоза не заметны. И в каком таком случае не приходиться разбирать что написано? Что в сниппете что в запросе одинаково приятно.
Для таких запросов проще временную таблицу сделать куда будут данные сливаться на бэкенде, и потом уже готовые данные забирать на фронте.
И еще за актуальность временных таблиц следить. Причем разных нужных данных может быть много вариантов. Вроде кол-во перестановок пропорционально n! Если 2 таблицы по 5 колонок, то кол-во возможных выборок 10! = 3628800 вариантов :-).
Александр Туниеков
05 марта 2020, 11:39
0
Ну если вы магистр напишите внятную инструкцию как делать санацию параметров.
$where['id'] = (int)$_POST['id'];
(int) это понятно. Для даты strftime можно использовать. А остальное? string, decimal, float. Хотя тоже все понятно. Только писать такие преобразования во все сниппеты долго. Плагин или что-то такое посмотрю. Ну здесь на интранет хакеров лет 10 не предвидеться. А если и предвидятся, то взлом внутреннего сайта это уже мелочь.
Александр Туниеков
04 марта 2020, 23:49
1
+1
Известная проблема :-)
В файле faq.mysql.schema.xml
<field key="question" dbtype="text" length="1023" phptype="text" null="false" default=""/>
phptype=«text» нет такого. Когда-то работало, а сейчас надо phptype=«string». Замените phptype=«text» на phptype=«string» везде в схеме и перегенируйте классы XPDO. Я с помощью migx это делаю. Создание таблиц через MIGX