Андрей Шевяков

Андрей Шевяков

С нами с 28 сентября 2016; Место в рейтинге пользователей: #64
Евгений Webinmd
10 сентября 2025, 21:44
1
+4
из коробки такого функционала нет, но можно дописать. Надо внести изменения в файл
assets/components/fileattach/js/mgr/widgets/items.grid.js

1) добавить кнопку для открытия файлового менеджера

в районе строки 540, добавить кнопку вызова менеджера файлов, в блок
getTopBar: function (config) {

fields.push({
	xtype: 'button',
	cls: 'primary-button',
	text: _('upload'),
	handler: this.uploadFiles,
	scope: this
},{  // это вторая кнопка
	xtype: 'button',
	cls: 'primary-button',
	text: 'Из уже загруженных',
	handler: this.selectFiles,
	scope: this
});

2) Добавить handler

Тут вызывается this.selectFiles
этот handler надо прописать ниже, после метода uploadFiles

selectFiles: function(btn,e) { 

	var win = Ext.getCmp('fileattach-file'); 

	if(!win){ 
		var win = MODx.load({
			xtype: 'modx-browser'
			,openTo: 'files/' 
			,id: 'fileattach-file'
			,listeners: {
				'select':{fn:this.onBrowserSelect,scope:this}
			}
		});	 
	}

	win.show();

},

onBrowserSelect: function(data,field){  
	var value = data.url;

	//console.log(data);

	MODx.Ajax.request({
		url: FileAttach.config.connectorUrl,
		params: {
			action: 'mgr/browser', 
			url: data.url,
			size: data.size,
			ext: data.ext,
			shortname: data.shortName,
			name: data.name,
			docid: FileAttach.config.docid
		},
		listeners: {
			success: {
				fn: function() { 
					var store = Ext.getCmp('fileattach-grid-items').getStore(); 
					store.load({ params: { start: 0, limit: 20} });
					Ext.getCmp('fileattach-grid-items').getView().refresh(); 
				}, scope: this
			}
		}
	});
},

Этот код из рабочего проекта и решал мои задачи, изменяйте под ваши задачи
Володя
26 февраля 2025, 11:21
1
0
Можно попробовать плагином на событие OnBeforeManagerPageInit
if ('OnBeforeManagerPageInit' === $modx->event->name) {
    if (is_array($action) && in_array($action['controller'], ['security/user'])) {
        $modx->controller->addHtml('<script>
        Ext.override(MODx.grid.User, {
            Originals: {initComponent: MODx.grid.User.prototype.initComponent},
            initComponent: function () {
                this.Originals.initComponent.call(this);
                if (store = this.getStore()) {
                    store.baseParams["sort"] = "id";
                    store.baseParams["dir"] = "asc";
                }
            },
        });
        </script>');
    }
}
Riwka
25 декабря 2024, 14:29
1
+1
$array = array(ids); 
if(in_array($modx->resource->get('id'), $array)) {
	$modx->regClientStartupHTMLBlock('<script>Ext.onReady(function() {
if(MODx.loadRTE) MODx.loadRTE("modx-resource-introtext");
});</script>');
}

Вместо id можно поставить template и будут вам шаблоны
Роман
10 декабря 2024, 22:05
1
0
[[!msOptions?
                                    &options=`mount`
                                    &tpl=`tpl.msOptions.Roman`
                                    &sortOptionValues=`mount:SORT_ASC`
]]
Артур Шевченко
06 декабря 2024, 21:05
1
0
Есть параметр sortOptionValues в него надо передать что-то типа value:desc
Артур Шевченко
21 ноября 2024, 22:15
1
0
надо как то подгружать через Ajax, разные формы
Можно и подгружать. Устанавливаешь SendIt. Разметка будет такая
<form action="">
    <select name="realty_type" data-si-preset="load_fields" data-si-event="change" data-si-form>
        <option value="квартира" selected>квартира</option>
        <option value="земельный участок">земельный участок</option>
    </select>
    <div id="results">{'loadFields' | snippet: ['type' => 'квартира']}</div>
</form>
Пресет такой
'load_fields' => [
    'hooks' => '',
    'resultBlockSelector' => '#results',
    'resultShowMethod' => 'insert',
    'snippet' => 'loadFields'
]
Сниппет loadFields примерно такой
$type = $type ?? $_POST['realty_type'];
$html = '';
switch ($type) {
    case 'квартира':
        $html = $modx->getChunk('flatFields', []);
        break;
    case 'земельный участок':
        $html = $modx->getChunk('groundFields', []);
        break;
}
if($SendIt){
    if($result['success']){
        return $SendIt->success(true, ['html' => $html]);
    }else{
        return $SendIt->error(false, []);
    }
}
return $html;
Ну а в чанках соответственно поля.
Павел Романов
05 ноября 2024, 17:51
1
0
Можно такой сниппет сделать и запускать через CronManager:
<?php
$sql = "SELECT id FROM {$modx->getTableName('modResource')} WHERE deleted = 0 AND published = 1";
$q = $modx->prepare($sql);
$q->execute();
$resources = $q->fetchAll(PDO::FETCH_ASSOC);
foreach ($resources as $resource) {
    $response = $modx->runProcessor('mgr/index/update', array('id' =>$resource['id']), array('processors_path' => MODX_CORE_PATH . 'components/msearch2/processors/'));
    if ($response->isError()) {
        $modx->log(modX::LOG_LEVEL_ERROR, print_r($response->getAllErrors(), true));
    }
}
Александр
14 июля 2024, 12:55
6
+3
RewriteCond %{REQUEST_URI} ^/assets/images/products/[0-9]+/[^/]+\.(jpg|jpeg|png|gif|webp)$ [NC]
RewriteRule .* - [F]
Запрещает доступ ко всем изображениям в папке галереи товара, но не запрещает к вложенным в подпапках
Павел Романов
28 мая 2024, 12:22
2
+2
Сделайте сниппет getTags:
<?php
$id = $modx->getOption('id', $scriptProperties, $modx->resource->get('id'));
$table = $modx->getOption('table_prefix').'ms2_products';
if($query = $modx->query("SELECT * FROM {$table} WHERE id = {$id}")){
	$prod = $query->fetch(PDO::FETCH_ASSOC);
	$tags = json_decode($prod['tags'], 1);
	foreach($tags as $tag){
	    $out .= $modx->getChunk($tpl, array('tag' =>  $tag));
	}
}
return $out;

Вызывайте:
[[getTags? &tpl=`tag_tpl`]]

Если не на странице товара, указывайте &id:
[[getTags? &id=`[[+id]]` &tpl=`tag_tpl`]]

Чанк tag_tpl:
<a href="/search/?[[+tag]]" class="some-class">[[+tag]]</a>
Дима Касаткин
26 апреля 2024, 02:05
1
0
Запустит довольно просто, как раз этим занимался сейчас :) решил и здесь написать:

Создай второй контекст, создай плагин (в элементах в админке) назови например ContextSwitch и подключи его на OnHandleRequest вот код:
<?php
if ($modx->event->name != 'OnHandleRequest' || $modx->context->key == 'mgr') {return;}

// Определяем запрашиваемый хост
$host = $_SERVER['HTTP_HOST'];

// Выбираем контекст с настройкой http_host
$q = $modx->newQuery('modContextSetting', array('key' => 'http_host', 'value' => $host));
$q->select('context_key');

if ($q->prepare() && $q->stmt->execute()) {
    // Получаем ключ контекста
    if ($context = $q->stmt->fetch(PDO::FETCH_COLUMN)) {
        // Web инициализируется в index.php - на него переключаться не нужно
        if ($context != 'web') {
            $modx->switchContext($context);
        }
    }
}
Далее в новом контексте укажи настройку (правый клик в админке → редактировать контекст) и добавь туда 2 системные настройки:
1. site_start (укажи id страницы в новом контексте, её нужно там создать и опубликовать) и это будет главная страница!
2. http_host (полный адрес url без https и слешей, например sub.example.com)

И всё должно заработать!