Максим

Максим

Был в сети 10 декабря 2023, 17:27
Заказы принимаю
Да конечно можно! Логика такая:

Разбираемся с окном быстрого создания.
1) Очевидно что при вызове быстрого создания не происходит событие OnDocFormRender. Нужно отыскать событие которое происходит при открытии окна быстрого создания и добавить его

Разбираемся с новыми.
1) Находим нужное событие
2) Пишем плагин на это событие.

Все примеры у вас есть в вашем коде!
Данный сниппет зарегистрирует нужный style.css, который находится в assets/css/
<?php
$modx->regClientCSS('assets/css/style.css');
Если вы хотите передавать в сниппет только название файла, то в сниппете нужно указать путь к файлу:
<?php
// SnippetName = Test
if(empty($css)){return;}
$path = $modx->getOption('assets_url', $scriptProperties). 'css/'. $css;
$modx->regClientCSS($path);

Использование:
[[!Test?&css=`style.css`]]
Все гораздо проще! Установите компонент TVsuperSelect. Создайте TV данного типа и в возможные значения укажите вызов сниппета:
@EVAL return $modx->runSnippet('pdoResorces', ['parent'=>'1','tpl'=>'@INLINE {$pagetitle} {$id}=={$id}{$idx == $count ? '||' : ''}'])
А в параметрах вывода необходимо указать тип вывода разделитель запятая. После добавления нескольких ресурсов в это TV на выходе вы будите иметь список id ресурсов разделенных запятыми!
Прочитал и уже пытаюсь применить. Но в модыкс пока не силен((( Может кто подскажет что делаю не правильно. Ориентируясь на файл watermark.txt
1) создаю плагин, отмечаю галочкой системное событие OnWebPagePrerender и помощаю в него код:
$string = $modx->documentOutput;
$pattern = "/(<img[^>]*src\s*=\s*[\'\"])([^\'^\"]*\.(jpg|jpeg))([\'\"][^>]*>)/i";
$replacement = "$1/assets/plugins/watermark/watermarked.php?src=$2$4";
2) По указанному пути в переменной replacement кладу файл
3) в файле watermarked.php меняю значение переменной dirprefix указав в ней свой домен и указываю путь к изображению вотермарка.
После этого обновляю кеш, при этом даже по FTP удалял кеш!) И ничего не изменилось((((
Где и что я не доделал?
Спасибо всем кто думал! Новый xtype подсмотрел и скопировал заменив соответствующие параметры! Но как всегда при копировании чужого кода нет понимания. Новое поле стало обязательным для заполнения. Как его сделать не обязательным?
Вот что получилось:
Ext.namespace('miniShop2.combo');
miniShop2.combo.Fundament = function(config) {
    config = config || {};
    Ext.applyIf(config, {
        name: config.name || 'fundament',
        fieldLabel: _('ms2_product_' + config.name || 'fundament'),
        hiddenName: config.name || 'fundament',
        description: '<b></b>'+_('ms2_product_fundament_help'),
        ValueField: 'id',
        anchor: '99%',
        fields: ['id','name'],
        pageSize: 20,
        url: miniShop2.config.connector_url,
        typeAhead: false,
        edittable: false,
        allowBlank: false,
        store: [[0, 'Брус'], [1, 'Сваи']]
    });
    miniShop2.combo.Vendor.superclass.constructor.call(this, config);
};
Ext.extend(miniShop2.combo.Fundament, MODx.combo.ComboBox);
Ext.reg('minishop2-combo-fundament', miniShop2.combo.Fundament);

//miniShop2.plugin.twidth = {
miniShop2.plugin.msfield = {
	getFields: function(config) {
		return {
			twidth: {xtype: 'minishop2-combo-autocomplete', description: '<b>[[+twidth]]</b><br />'+_('ms2_product_twidth_help')},
            theight: {xtype: 'minishop2-combo-autocomplete', description: '<b>[[+theight]]</b><br />'+_('ms2_product_theight_help')},
            tlength: {xtype: 'minishop2-combo-autocomplete', description: '<b>[[+tlength]]</b><br />'+_('ms2_product_tlength_help')},
            karkasDesc: {xtype: 'textarea', description: '<b>[[+karkasDesc]]</b><br />'+_('ms2_product_karkasDesc_help')},
            tlengthXm: {xtype: 'modx-combo-property-set', description: '<b>[[+tlengthXm]]</b><br />'+_('ms2_product_tlengthXm_help')},
            fundament: {xtype: 'minishop2-combo-fundament', description: '<b>[[+fundament]]</b><br />'+_('ms2_product_fundament_help')}
		}
	}
	,getColumns: function() {
		return {
			twidth: {width:30, sortable:false, editor: {xtype:'minishop2-combo-autocomplete', name: 'twidth'}},
            theight: {width:30, sortable:false, editor: {xtype:'minishop2-combo-autocomplete', name: 'theight'}},
            tlength: {width:30, sortable:false, editor: {xtype:'minishop2-combo-autocomplete', name: 'tlength'}},
            karkasDesc: {width:30, sortable:false, editor: {xtype:'textarea', name: 'karkasDesc'}},
            tlengthXm: {width:30, sortable:false, editor: {xtype:'modx-combo-property-set', name: 'tlengthXm'}},
            fundament: {width:30, sortable:false, editor: {xtype:'minishop2-combo-fundament', name: 'fundament'}}
		}
	}
};
Перебрал все xtype с упоминанием combo из этого списка:
bobsguides.com/xtype-list.html
Ничего не нашел. Видимо нужно добавлять свой. Но я пока не силен в ModX и так же еще не разобрался с системой плагинов minishop2, кто нибудь может скинуть пример файла msproductdata.js с объявлением подобного xtype. Можно без комментариев в файле!