Григорий Коленько

Григорий Коленько

С нами с 26 апреля 2013; Место в рейтинге пользователей: #219
Alexander V
15 июля 2016, 16:34
1
0
А в чём собственно проблема? Просто кому-то захотелось маркет завести, привели пример.
Воеводский Михаил
07 апреля 2016, 17:47
1
+1
Самое простое — поставить ресурсу галку «Контейнер».
Иной вариант — в Типах файлов для HTML убрать расширение.
Сергей Шлоков
22 марта 2016, 20:06
1
-1
На вскидку.
...
// Я бы заменил getCollection() на newQuery(). Быстрее и меньше памяти жрет.
$rows = $pdo->getCollection('modResource', $q);
$output = '';
// Нужно указать название чанка
$chunk= $modx->getChunk('чанк');
foreach ($rows as $row) {
	// В чанке плейсхолдеры должны совпадать с именами ключей массива $row
	$modx->setPlaceholders($row);
	$modx->getParser()->processElementTags('', $chunk, false, false, '[[', ']]', array(), 10);
	$modx->getParser()->processElementTags('', $chunk, true, true, '[[', ']]', array(), 10);
	$output .= $chunk;
	$modx->unsetPlaceholders($row);
}
На 30 объектах время сократится раза в 2.
Василий Наумкин
19 ноября 2015, 10:23
10
+7
My quick example:
<?php
$tplWrapper = '@INLINE <ul>{{+output}}</ul>';
$tplYear = '@INLINE <li>{{+year}}<sup>({{+count}})</sup><ul>{{+resources}}</ul></li>';
$tplMonth = '@INLINE <li>{{+month}}<sup>({{+count}})</sup><ul>{{+resources}}</ul></li>';
$tpl = '@INLINE <li><a href="{{+uri}}">{{+pagetitle}}</a></li>';

$pdo = $modx->getService('pdoFetch');

$resources = $pdo->getCollection(
	'modResource',
	array('published' => true, 'deleted' => false),
	array('parents' => 0, 'sortby' => 'createdon', 'sortdir' => 'DESC')
);
$tree = array();
foreach ($resources as $resource) {
	$year = date('Y', $resource['createdon']);
	$month = date('m', $resource['createdon']);
	$tree[$year][$month][] = $resource;
}

$output = '';
foreach ($tree as $year => $months) {
	$tmp1 = '';
	$count = 0;
	foreach ($months as $month => $resources) {
		$tmp2 = '';
		foreach ($resources as $resource) {
			$tmp2 .= $pdo->getChunk($tpl, $resource);
			$count++;
		}
		$tmp1 .=  $pdo->getChunk($tplMonth, array(
			'month' => $month,
			'count' => count($resources),
			'resources' => $tmp2,
		));
	}
	$output .=  $pdo->getChunk($tplYear, array(
		'year' => $year,
		'count' => $count,
		'resources' => $tmp1,
	));
}

return $pdo->getChunk($tplWrapper, array('output' => $output));

Result:
Сергей Шлоков
29 октября 2015, 19:38
1
+2
Правильно Иван пишет. Нужно перехватывать через javascript. Самый просто вариант, переопределить эти функции дерева. Создаешь js файл.
Ext.onReady(function () {
   var tree = Ext.getCmp('modx-tree-resource');
  // Это стандартная функция из файла modx.tree.resource.js
   tree.quickUpdate = function(itm,e,cls){
   MODx.Ajax.request({
            url: MODx.config.connector_url
            ,params: {
                action: 'resource/get'
                ,id: this.cm.activeNode.attributes.pk
            }
            ,listeners: {
                'success': {fn:function® {
                    var pr = r.object;
                    pr.class_key = cls;

                    var w = MODx.load({
                        xtype: 'modx-window-quick-update-modResource'
                        ,record: pr
                        ,listeners: {
                            'success':{fn:function® {
                                this.refreshNode(this.cm.activeNode.id);
                                var newTitle = '<span dir="ltr">' + r.f.findField('pagetitle').getValue() + ' (' + w.record.id + ')</span>';
                                w.setTitle(w.title.replace(/<span.*\/span>/, newTitle));
                            },scope:this}
                            ,'hide':{fn:function() {this.destroy();}}
                        }
                    });
                    w.title += ': <span dir="ltr">' + w.record.pagetitle + ' ('+ w.record.id + ')</span>';
                    w.setValues(r.object);
                    w.show(e.target,function() {
                        Ext.isSafari ? w.setPosition(null,30) : w.center();
                    },this);
                },scope:this}
            }
        });
}
Подключаешь его в плагине на событие OnManagerPageBeforeRender. Тут же и быстрое создание переопределить.
Добавляй сюда нужный код. Например, можно переопределить процессор на свой и там делай что надо. Все зависит от задачи.
Василий Наумкин
29 октября 2015, 09:32
2
0
pdoTools логирует ошибки Fenom на уровне 1 (LOG_LEVEL_ERROR).

Я бы, на твоём месте, разобрался, почему журнал системы не работает.
Василий Наумкин
14 октября 2015, 05:19
1
+1
Весь where — это второй параметр при вызове функции. Так что указывать нужно вот так:
<?php
$pdo = $modx->getService('pdoFetch');
$resources = $pdo->getCollection('modResource',
	array(
		'parent' => 9,
		'published' => false
	),
	array(
		'limit' => 3,
		'sortdir' => 'DESC',
		'processTVs' => true,
		'tvPrefix' => 'tv.' 		
	)
);
Максим Кузнецов
04 октября 2015, 20:55
1
0
&titleField=`[[*meta_title]]`
Сергей Шлоков
04 октября 2015, 12:48
1
+1
Со времен Evolution в любом сниппете можно сделать
include 'file.php';
В сниппете да, а в ресурсе, чанке, шаблоне? И без фильтров и других примочек MODX.
Есть статические элементы, есть Gitify, есть установочные пакеты
Статические элементы, как мы знаем от Евгения Борисова, на продакшене нужно отключать.
Gitify для меня как высшая математика. Для простых пользователей очень сложно. Установочные пакеты — мейби.
Короче, без серьёзного профита в удобстве или скорости это просто любопытный эксперимент, не более.
Мне кажется так удобнее и практичнее для разработки. Раз, создал файл. Два, в ресурсе его просто вызываешь как обычно. Все как и было, только файл не в базе, а на диске. Отредактировал, нажал F5 и все сразу обновилось. Используя статические элементы, например, нужно сначала кэш почистить.
По скорости, допустим, сниппеты кэшируются, а чанки нет. За ними нужно лезть в базу.
С этого нужно было начинать. Без серьёзного улучшения производительности говорить не о чем.
Согласен, но у меня нет больших и сложных компонентов. А мне кажется, на маленьких данных преимуществ не будет видно. Но попробую ради интереса.
П.С. Даже просто ради эксперимента, мне понравилось.
Сергей Шлоков
18 сентября 2015, 19:56
1
0
Эх, мне бы на десять лет назад слетать, я бы тоже знал это. :)