TITAN-UZ

TITAN-UZ

Был в сети 10 сентября 2025, 08:49
Заказы не принимаю
Павел Гвоздь
Павел Гвоздь
Так есть модификатор memberof (ismember) для проверки принадлежности к группе. Текущий проверяется так:
{if (0 | memberof : 'Administrator')}
    Пользователь является администратором
{else}
    Пользователь не является администратором
{/if}
Вместо «0» можно указать ID любого пользователя.
Александр
Александр
Смотрите, за основу можно взять платный пакет ContentBlocks или новый бесплатный пакет Structures (есть баги после тестов). Пакеты позволяют добавлять контент на странице с заранее подготовленными по шаблонам блокам (текст, рисунок, список и.т.п). В качестве редактора можно использовать Redactor
DocentBF
DocentBF
Попробуйте вынести условие:
{if $_modx->resource.parent|in:[23,27,24,26,25,29,30,28]}{set $cond = $_modx->resource.parent}
{else}
{set $cond = $_modx->resource.id}
{/if}
{$_modx->runSnippet('!pdoMenu', [
'parents'=>$cond,
...
Или уберите кавычки из параметра parents, получается, что туда идет строка, а не результат условия.
Дмитрий Меркурьев
Дмитрий Меркурьев
Если нужна синхронизация времени с сервером, то:
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();
	}
});
Воеводский Михаил
Воеводский Михаил
function digitalWatch() {
    var date = new Date();
    var hours = date.getHours();
    var minutes = date.getMinutes();
    var seconds = date.getSeconds();
    if (hours < 10) hours = "0" + hours;
    if (minutes < 10) minutes = "0" + minutes;
    if (seconds < 10) seconds = "0" + seconds;
    document.getElementById("digital_watch").innerHTML = hours + ":" + minutes + ":" + seconds;
    setTimeout("digitalWatch()", 1000);
}
window.onload=digitalWatch;

Полностью на JS, время с локального компа. Оформление — дело вкуса. Строку вида 09:01:50 закидывает в элемент с id=«digital_watch».
Роман Воропаев (Volk)
Роман Воропаев (Volk)
Да, у меня точно так же, нужно просто перегенерировать превью.
Кстати все возможные ключи для массива и их значения, чтоб было понятно, что можно получить, можете глянуть, добавив в чанк следующий код:
{foreach $_pls as $key => $value}
	<p>{$key} => {$value}</p>
{/foreach}
Дмитрий Меркурьев
Дмитрий Меркурьев
Так как у тв текстовый тип данных и дата там храниться в виде 2016-10-13 01:00:00
и where date > '2016-10-13 01:00:00' не сработает.

Недавно в одном из проектов пришлось делать тоже самое что и в задаче, правда с pdoTools но подход одинаков.
Решалось это следующим образом.
Устанавливался плагин DateToTimestamp, который при сохранении tv с типом дата конвертирует дату в метку времени. Код плагина:
<?php
/*
 * DateToTimestamp Plugin for MODX Revolution
 * @code @theboxer
 * @comments @sepiariver
 *
 * DateToTimestamp is free software; you can redistribute it and/or modify it under the
 * terms of the GNU General Public License as published by the Free Software
 * Foundation; either version 2 of the License, or (at your option) any later
 * version.
 *
 * DateToTimestamp is distributed in the hope that it will be useful, but WITHOUT ANY
 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
 * A PARTICULAR PURPOSE. See the GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along with
 * DateToTimestamp; if not, write to the Free Software Foundation, Inc., 59 Temple
 * Place, Suite 330, Boston, MA 02111-1307 USA 
 *
 */
 
// Only for use in the MODX mgr
if ($modx->context->get('key') != 'mgr') {
        return;
}

// Enable events 'OnResourceTVFormRender' and 'OnDocFormSave'
$eventName = $modx->event->name;
switch($eventName) {
    
    // When rendering, convert timestamps back to dates so standard TV Date Inputs can read it
    case 'OnResourceTVFormRender':
        // Must set IDs of TVs on which to operate in the Plugin's Properties
        $tvs = $modx->getOption('tvs', $scriptProperties, '');
        $tvs = explode(',', $tvs);
        $tvs = array_map('trim', $tvs);
        $tvs = array_keys(array_flip($tvs));
        $tvs = array_filter($tvs);
        $tvs = array_flip($tvs);
        
        // John is awesome
        foreach ($categories as $idc => $category) {
            foreach ($category['tvs'] as $idt => $tv) {
                if ($tv->type != 'date' || !isset($tvs[$tv->id])) {
                    continue;
                }

                $timestamp = $categories[$idc]['tvs'][$idt]->processedValue;
                $badValue = $categories[$idc]['tvs'][$idt]->value;

                $categories[$idc]['tvs'][$idt]->set('value', strftime('%Y-%m-%d %H:%M:%S', $timestamp));
                $categories[$idc]['tvs'][$idt]->set('formElement', str_replace($badValue, $categories[$idc]['tvs'][$idt]->value, $categories[$idc]['tvs'][$idt]->formElement));
            }
        }

        break;
    // When saving, convert values to timestamp for sorting and comparing
    case 'OnDocFormSave':
        if (intval($resource->tvs) != 1) {
            break;
        }
        // Must set IDs of TVs on which to operate in the Plugin's Properties
        $tvs = $modx->getOption('tvs', $scriptProperties, '');
        $tvs = explode(',', $tvs);
        $tvs = array_map('trim', $tvs);
        $tvs = array_keys(array_flip($tvs));
        $tvs = array_filter($tvs);

        foreach ($tvs as $tv) {
            if ($resource->get('tv' . $tv) == '') {
                continue;
            }

            $tvObject = $modx->getObject('modTemplateVar', $tv);
            if (!$tvObject || $tvObject->type != 'date' ){
                continue;
            }

            $value = $modx->getObject('modTemplateVarResource', array('tmplvarid' => $tv, 'contentid' => $resource->id));
            if (!$value) {
                continue;
            }

            $value->set('value', strtotime($value->value));
            $value->save();

        }

        break;
}
Он подключается на события OnResourceTVFormRender' и 'OnDocFormSave'
Так же в параметры необходимо добавить параметр tvs со значением ид вашей tv с датой.
Далее уже можно составлять условие date >= текущее время.

Но, скорее всего где то сломается вывод даты и его нужно будет чинить, т.к. значения будут сохраняться теперь в другом формате.

Скорее всего без навыков в программировании здесь не справиться, и нужно привлекать кого то со стороны.