TITAN-UZ

TITAN-UZ

С нами с 27 февраля 2014; Место в рейтинге пользователей: #78
Алексей Ерохин
30 января 2017, 10:56
1
+2
[[#[[+parent]].pagetitle]]

{$parent | resource: 'pagetitle'}
Павел Гвоздь
17 декабря 2016, 22:35
1
+1
Так есть модификатор memberof (ismember) для проверки принадлежности к группе. Текущий проверяется так:
{if (0 | memberof : 'Administrator')}
    Пользователь является администратором
{else}
    Пользователь не является администратором
{/if}
Вместо «0» можно указать ID любого пользователя.
Александр
04 ноября 2016, 20:13
1
+4
Смотрите, за основу можно взять платный пакет ContentBlocks или новый бесплатный пакет Structures (есть баги после тестов). Пакеты позволяют добавлять контент на странице с заранее подготовленными по шаблонам блокам (текст, рисунок, список и.т.п). В качестве редактора можно использовать Redactor
Андрей
31 октября 2016, 23:58
3
+2
Массив только лучше задавать так:
{set $a = ["5","8","9"]}
                     
{if $_modx->resource.parent in list $a}

.....

{/if}
DocentBF
31 октября 2016, 23:52
1
+2
Попробуйте вынести условие:
{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, получается, что туда идет строка, а не результат условия.
Дмитрий Меркурьев
21 октября 2016, 14:37
2
+4
Если нужна синхронизация времени с сервером, то:
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();
	}
});
Воеводский Михаил
21 октября 2016, 00:36
1
+3
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)
19 октября 2016, 10:20
2
+1
Да, у меня точно так же, нужно просто перегенерировать превью.
Кстати все возможные ключи для массива и их значения, чтоб было понятно, что можно получить, можете глянуть, добавив в чанк следующий код:
{foreach $_pls as $key => $value}
	<p>{$key} => {$value}</p>
{/foreach}
Дмитрий Меркурьев
12 октября 2016, 17:14
1
+1
Так как у тв текстовый тип данных и дата там храниться в виде 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 >= текущее время.

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

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