Konstantin

Konstantin

С нами с 24 декабря 2022; Место в рейтинге пользователей: #6488
Серый
25 января 2018, 18:14
1
0
Вобщем, вот он, вот он рендер моей мечты:

Collections.renderer.imageplusmigx = function(value, metaData, record, rowIndex, colIndex, store) {
    if (value != '' && value != null) {
        var data = Ext.decode(value);
        var url = MODx.config.connectors_url + 'system/phpthumb.php?imageplus=1';
        
        var params = {};
        params.src = 'resourceimages/' + record.id + '/' + data.sourceImg.src;
        params.w = 100;
        if (data.sourceImg.src.indexOf('.png') !== -1) {
            params.f = 'png';
        }
        params.sw = data.crop.width;
        params.sh = data.crop.height;
        params.sx = data.crop.x;
        params.sy = data.crop.y;
        for (var i in params) {
            url += '&' + i + '=' + params[i];
        }
        return '<img alt="" src="' + url + '" width="' + (params.w || 80) + '">';
    }
}
Большое человеческое спасибо Алексею Ерохину!


Артем
10 января 2018, 19:35
1
0
Решение ниже:
1) Идем в файл core/components/collections/processors/mgr/resource/getlist.class.php
2) И комментируем строку 325 с текстом:
'class_key:!=' => 'CollectionContainer',
И будет вам счастье. Проверил у себя работает.
Илья Уткин
31 октября 2017, 11:22
3
+1
Я обычно как-то так делаю:

@EVAL return $modx->runSnippet('pdoResources', array(
	'parents' => 64,
	'limit' => 0,
	'tpl' => '@INLINE {$pagetitle}=={$id}',
	'outputSeparator' => '||',
	'sortby' => '{"menuindex":"ASC"}'
  ));
Виталий Серый
03 марта 2017, 22:43
4
+1
Все тоже самое, только тв запрашивать у требуемого ресурса.
{set $rows = json_decode(15 | resource : 'migx_tv', true)}
{foreach $rows as $row}
    {$row.image}
{/foreach}
Александр
08 августа 2016, 11:29
2
0
Вижу) спасибо огромное!
Если кому нужно, выкладываю скрипты:

Файл getlist.php
<?php
	if ($_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest' || empty($_POST['action'])) {
		return;
	}

	define('MODX_API_MODE', true);

	require dirname(dirname(dirname(__FILE__))) . '/index.php';
	
	$modx->getService('error','error.modError');
	$modx->setLogLevel(modX::LOG_LEVEL_ERROR);
	$modx->setLogTarget('FILE');
	
	
	if ($_POST['action'] == "getList" && isset($_POST['parent'])) {
		//Получаем значение для второго селектора
		$snippetParams = array();
		$snippetParams['parents'] = intval($_POST['parent']);
		$snippetParams['tpl'] = 'option.item';
		//Дописать параметры для сниппета получающего результаты по вкусу			

		$snippetResult = $modx->runSnippet('pdoResources', $snippetParams);

		$result = array($snippetResult, 'success');
	}
	else {
		$result = array('Некорректный запрос', 'error');
	}
	
	if (!empty($result)) {
		die(json_encode($result));
	}

javascript:
<script type="text/javascript">
    	$(document).on('change', 'select[name="selector-1"]', function(e) {
    		if ($(this).val() != '') {
        			$.ajax({
        				type: "POST",
        				url: "assets/ajax/getlist.php",
        				data: {
        				    action: 'getList', 
        				    parent: $("select[name='selector-1']").val()
           		         },

        			success: function(response) {
        				var data = eval(response);
        
        				switch (data[1]) {
        					case 'success':
    						//Если все ок - вставляем результат во второй селектор
    						$("select[name='selector-2']").val("").html("<option value='' selected disabled>Выберите значение из списка</option>" + data[0])
    
        						break;
        							
        					case 'error':
    						//Если не ок - выводим ошибку (используется jGrowl)
        						$.jGrowl(data[0], {theme: 'error', position: 'center'});
        							
        						break;
        						
        					}
        				}
        			});
    		}
    	});
    </script>

Ну и html понятно:
<select name="selector-1">
    <option selected disabled>Выберите услугу</option>
    [[!pdoMenu?
    	&level=`1`
    	&parents=`2`
    	&tplOuter=`@INLINE [[+wrapper]]`
    	&tpl=`@INLINE <option value="[[+id]]">[[+menutitle]]</option>`
    ]]
</select>
<select name="selector-2">
    <option value="" selected disabled>Выберите врача</option>
</select>
Дмитрий Танцирев
08 апреля 2016, 21:56
10
0
Может кому пригодится:

{"field":"published", "caption":"Чекбокс", "inputTVtype":"checkbox", "inputOptionValues":"Да==1"}

{"header": "Чекбокс", "dataIndex":"published", "show_in_grid":1, "renderer":"this.renderCrossTick"}
Илья Уткин
18 декабря 2015, 00:18
1
0
Попробуйте поставить customExtra и сохранять формы в нем.

В форме заявок нужно добавить хук, назовём его, к примеру saveRequest
[[!FormIt?  
    &hooks=`saveRequest,email,redirect`  
    &emailTo=`your@mail.ru`  
    &emailSubject=`Заказ обратного звонка`
    &emailTpl=`tpl.mail.contact`
    &redirectTo=`5`
]]

В сниппете создадим объект и сохраним его
<?php
$modx->addPackage('customextra', $modx->getOption('core_path').'components/customextra/model/');
$request = $modx->newObject('customExtraItem');
$request->set('name', $_POST['name']);
$request->set('string1', $_POST['contact']);
$request->set('description', $_POST['text']);
$request->save();
return true;



ilyaut.ru/addons/very-easy-to-add-custom-objects-in-modx/
Максим Кузнецов
28 июля 2015, 00:26
3
+3
1) По пунктам:
— При регистрации через Login нужно заносить пользователя в определенную группу (Users).
— Выставить группе анонимных пользователей права Load only на все контексты, где нужно запрашивать авторизацию
— Добавить в системной настройке unauthorized_page (403 ошибка) айди страницы с формой авторизации

После чего всех неавторизованных пользователей, при запросе на закрытую страницу, будет перебрасывать на страницу авторизации.

//Примечание: для альтернативы, если не нужна переадресация, можно создать простой сниппет (допустим, getAccess) и вызывать его на каждой странице.

Сниппет getAccess:
<?php
	$user = (!empty($userId)) ? $modx->getObject('modUser', $userId) : $modx->user;

	if (is_object($user) && $modx->user->isAuthenticated('web')) {
		return $content;
	}
	else {
		return $modx->getChunk('название_чанка');
	}
— соответственно, нужно создать чанк с формой авторизации и обозначить для сниппета параметр &content, в котором будет храниться html-код.

Пример:
<html>
	<head>
		[[$meta]]
	</head>
	<body>
		[[!getAccess? &content=`
			//ваш хтмл-код
		`]]
	</body>
</html>
(как альтернатива, можно переписать строчку сниппета «return $content» на «return $modx->getChunk($content);» — в таком случае, при вызове в поле &content нужно будет указывать название чанка, который отобразится авторизованному пользователю).

Из минусов такого метода — поисковые системы проиндексируют кучу дублей одинаковых страниц с формой авторизации.

2. modstore.pro/packages/ecommerce/payandsee — может быть, это вам поможет? В противном случае — придется настраивать свои сниппеты, завязанные на extend-полях пользователя.
Василий Наумкин
18 сентября 2013, 17:23
9
0
<?php
$tvid = 1; // id нужного ТВ параметра
$res = array(); // Сюда забиваем результаты

$q = $modx->newQuery('modTemplateVarResource', array('tmplvarid' => $tvid));
$q->select('contentid,value');
if ($q->prepare() && $q->stmt->execute()) {
	while ($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
		$res[$row['contentid']] = $row['value'];
	}
}
print_r($res);

Получишь массив с id ресурсов и значенями ТВ c id = 1.