Николай Загумённов

Николай Загумённов

Был в сети 19 июня 2026, 19:34
Заказы не принимаю
Николай Загумённов
Николай Загумённов
Хочу поделиться сниппетом, аналог pdoField, так как я часто пользуюсь pdoField.

Сниппет getLocalizatorField

<?php
$sp = &$scriptProperties;

$resource_id = $modx->getOption('resource_id', $sp, $modx->resource->id);
$field = $modx->getOption('field', $sp, 'pagetitle');
$key = $modx->getOption('key', $sp, $modx->getOption('cultureKey'));

$q = $modx->newQuery( "localizatorContent" );
$q->where( array( "`resource_id` = '" . $resource_id . "'", "`key` = '" . $key . "'" ) );
$q->select( array( $field ) );
$s = $q->prepare();  // print $q->toSQL(); die;
$s->execute();
$array = $s->fetch(PDO::FETCH_ASSOC);
$field_value = $array[$field];

return $field_value;
Вызов:

{'getLocalizatorField' | snippet : [ 
       'resource_id' => 20,
       'field' => 'content'
 ]}
mngatoff
mngatoff
а я влез в тикетовый процессор web/upload/file, и в методе process() дописал после проверки на дубли:
// Check for files limit
        if ($filesLimit = $this->modx->getOption('tickets.max_files_upload')) {
        	$checkLimit = $this->modx->newQuery($this->classKey, array('class' => $this->class));
	        if (!empty($this->ticket->id)) {
	            $checkLimit->andCondition(array('parent:IN' => array(0, $this->ticket->id)));
	        } else {
	            $checkLimit->andCondition(array('parent' => 0));
	        }
        	$checkLimit->andCondition(array('createdby' => $this->modx->user->id));
        	if ($this->modx->getCount($this->classKey, $checkLimit) >= $filesLimit) {
        		@unlink($data['tmp_name']);

            	return $this->failure('Вы не можете загрузить больше '.$filesLimit.' файлов');
        	}
        }
и джаваскрипт можно не трогать, и надежнее.
Хочется попросить Василия что-то подобное таки включить в релиз, полезная штука.
Дмитрий Меркурьев
Дмитрий Меркурьев
Если нужна синхронизация времени с сервером, то:
1. Пишем небольшой сниппет getWatch
<?php
$time = time();
//Если время сервера отличается от правильного то прибавляем или вычитаем от time кол-во секунд. Пример:
//$time += 3600;
return '<div id="digitalWatch" data-time="'.$time.'"></div>';
2. Вставляем его туда, где нужно выводить часы, обязательно некешированным
[[!getWatch]]
3. Добавляем js в основной js-файл сайта
$(function(){
	var $dw = $('#digitalWatch');
	if ($dw){
		var delta = 0;
		function makeWatch(){
			var currentDate = new Date().getTime();
			currentDate += delta;
			var currentServerDate = new Date(currentDate);
			var hours = currentServerDate.getHours();
			var minutes = currentServerDate.getMinutes();
			var seconds = currentServerDate.getSeconds();
			if (hours < 10) hours = "0" + hours;
			if (minutes < 10) minutes = "0" + minutes;
			if (seconds < 10) seconds = "0" + seconds;
			$dw.html(hours + ":" + minutes + ":" + seconds);
			setTimeout(makeWatch, 1000);
		}

		var serverTime = parseInt($dw.data('time'))*1000;
		var clientTime = new Date().getTime();
		delta = serverTime-clientTime;
		makeWatch();
	}
});
Илья Уткин
Илья Уткин
Немного дополнил плагин, так как не всегда $introtext = $content
if ($modx->event->name == "OnDocFormSave") {
    $introtext = $resource->get('introtext');
    $generateIntrotext = $resource->getIntroText($resource->get('content'), false);
    if (empty($resource->getProperty('disable_jevix'))) {
        $generateIntrotext = $resource->Jevix($generateIntrotext);
    }
    if ($introtext == $generateIntrotext) {
        $resource->set('introtext', '');
    $resource->save();
    }
}