Кровельный
С нами с 30 мая 2023; Место в рейтинге пользователей: #7219Как вызвать getService $this->modx в наследуемом классе?
MODX Revolution 2.8.3-pl
Как вызвать getService $this->modx в наследуемом классе, чтобы воспользоваться функциями из другого компонента?
Например в обработчике корзины:
Как вызвать getService $this->modx в наследуемом классе, чтобы воспользоваться функциями из другого компонента?
Например в обработчике корзины:
<?php
class msCartCustomHandler extends msCartHandler {
}
Встречайте VSCode IntelliSense for MODX
Представляю вашему вниманию расширение для VSCode, которое обеспечивает широкий спектр инструментов для работы с MODX и Fenom. Этот плагин значительно упрощает процесс разработки ваших проектов, делая его более эффективным и удобным.
Установить бесплатно.
Установить бесплатно.
Подсветка кода в TinyMce
1. Как в редакторе TinyMce при переключении чекбокса Toggle Editor редактировать в Ace, и на оборот?
РЕШЕНО:
<script>
// assets/components/tinymce/tiny.js:110 — addContentBelow()
if (cb.dom.checked) {
tinyMCE.execCommand('mceAddControl',false,id);
Ext.state.Manager.set(MODx.siteId+'-tiny',true);
//Ext.select('#x-form-el-ta > .ace_editor').remove();
Ext.select('#x-form-el-ta > .ace_editor').hide().setHeight(0);
} else {
tinyMCE.execCommand('mceRemoveControl',false,id);
Ext.state.Manager.set(MODx.siteId+'-tiny',false);
if (Ext.select('#x-form-el-ta > .ace_editor').elements.length == 0) {
MODx.ux.Ace.replaceTextAreas(Ext.query('#ta'));
Ext.get(id).setHeight(0).hide();
} else {
Ext.select('#x-form-el-ta > .ace_editor').show().setHeight(386);
}
}
</script>
Теперь станет удобно верстать контент разработчику или администратору, если нет контент-менеджера.Использование MODX вне MODX3
Перевод заметки Using MODX Outside of MODX3
В одной из статей было рассмотрено создание экземпляра объекта $modx в эпоху до MODX3. В этой статье мы рассмотрим использование MODX вне MODX Revolution 3. Большая часть кода такая же, как и в предыдущей статье (прим. переводчика: предыдущая статья не переведена, так как немного не актуальна в рамках перехода на модх3). Основное отличие состоит в том, что MODX Revolution 3 широко использует пространства имен и имеет автозагрузчик для загрузки классов.
В одной из статей было рассмотрено создание экземпляра объекта $modx в эпоху до MODX3. В этой статье мы рассмотрим использование MODX вне MODX Revolution 3. Большая часть кода такая же, как и в предыдущей статье (прим. переводчика: предыдущая статья не переведена, так как немного не актуальна в рамках перехода на модх3). Основное отличие состоит в том, что MODX Revolution 3 широко использует пространства имен и имеет автозагрузчик для загрузки классов.
Добавление полей в $_modx->resource.
Подскажите может кто сталкивался. Пишу плагин почти в слепую ориентируясь на minishop2. Создал необходимы таблицы:
<object class="hdOrder" extends="modResource">
<composite alias="Data" class="hdOrderData" local="id" foreign="id" cardinality="one" owner="local"/>
</object>
<object class="hdOrderData" table="hd_orders" extends="xPDOSimpleObject">
<field key="contact" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="true"/>
<index alias="contact" name="contact" primary="false" unique="false" type="BTREE">
<column key="contact" length="" collation="A" null="false"/>
</index>
<aggregate alias="Order" class="hdOrder" local="id" foreign="id" cardinality="one" owner="foreign"/>
</object>
Хочу вывести значения переменных из таблицы hdOrderData на странице типа $_modx->resource.article, но не выводится. Само присоединение сделано через плагинcase 'OnLoadWebDocument':
// Set product fields as [[*resource]] tags
if ($modx->resource->get('template') === 7) {
if ($dataMeta = $modx->getFieldMeta('hdOrderData')) {
unset($dataMeta['id']);
$modx->resource->_fieldMeta = array_merge(
$modx->resource->_fieldMeta,
$dataMeta
);
}
}
break;
Нужен вывод $_modx->resource.contact Управления плагинам minishop2 или добавление полей в ms2_products через компонент [msAddField]
Все давно уже познакомились с методом добавления полей через плагины который написал Василий еще в каком то 17 или 2018 году, может раньше…
Давно уже написал класс для управления полями через мой компонент который так и не представился миру msCml (синхронизация 1С с характеристикам msOptionsPrice2).
На этих выходных все таки дошли руки и собрал таки компонент msAddField (пока только на github, для самых маленьких))))): там же ссылка на яндекс диск)
Давно уже написал класс для управления полями через мой компонент который так и не представился миру msCml (синхронизация 1С с характеристикам msOptionsPrice2).
На этих выходных все таки дошли руки и собрал таки компонент msAddField (пока только на github, для самых маленьких))))): там же ссылка на яндекс диск)
Выведение опций товара по категориям
Сниппет msProductOptions выводит товары общим массивом. В принципе, никто не запрещает в чанке вывода делать с этим массивом всё что угодно, в том числе и делить по категориям. Однако всё чаще поступает запрос от клиента не только вывести категории, но и соблюсти их сортировку.
Для этих целей мне пришлось msProductOptions переписать. Мой вариант сниппета воспроизводит запрос msProductData::loadOptions с сортировкой по полю rank категории, затем группирует все опции по категориям с соблюдением сортировки самих опций.
Для этих целей мне пришлось msProductOptions переписать. Мой вариант сниппета воспроизводит запрос msProductData::loadOptions с сортировкой по полю rank категории, затем группирует все опции по категориям с соблюдением сортировки самих опций.
Удалить все фото товара через API
Всем привет.
Простой вопрос поставил в тупик — как удалить через API все фото товара?
Я так понимаю такой процессор нужно запускать, но как туда переждать ID фоток зная ID товара?
Простой вопрос поставил в тупик — как удалить через API все фото товара?
Я так понимаю такой процессор нужно запускать, но как туда переждать ID фоток зная ID товара?
$response = $modx->runProcessor('components/minishop2/processors/mgr/gallery/multiple',array(
'method' => 'remove',
'ids' => '1291,1292',
));
Добавление select с данными из другой таблицы в modExtra
Всем привет. Кто-нибудь на заготовке modExtra делал CоmboBox с данными из других таблиц? У меня есть файл вызывающий модальное окно с полями для заполнения:
assets/components/extras/js/mgr/widgets/categories.window.js
assets/components/extras/js/mgr/widgets/categories.window.js
Extras.window.CreateCategory = function (config) {
config = config || {};
if (!config.id) {
config.id = 'extras-category-window-create';
}
Ext.applyIf(config, {
title: _('extras_category_create'),
width: 550,
autoHeight: true,
url: Extras.config.connector_url,
action: 'mgr/category/create',
fields: this.getFields(config),
keys: [{
key: Ext.EventObject.ENTER, shift: true, fn: function () {
this.submit()
}, scope: this
}]
});
Extras.window.CreateCategory.superclass.constructor.call(this, config);
};
Ext.extend(Extras.window.CreateCategory, MODx.Window, {
getFields: function (config) {
return [{
xtype: 'textfield',
fieldLabel: _('extras_category_name'),
name: 'name',
id: config.id + '-name',
anchor: '99%',
allowBlank: false,
}, {
xtype: 'textfield',
fieldLabel: _('extras_category_repository'),
name: 'repository_id',
id: config.id + '-repository_id',
anchor: '99%',
allowBlank: true,
}, {
xtype: 'xcheckbox',
boxLabel: _('extras_category_active'),
name: 'active',
id: config.id + '-active',
checked: true,
}];
},
loadDropZones: function () {
}
});
Ext.reg('extras-category-window-create', Extras.window.CreateCategory);
Extras.window.UpdateCategory = function (config) {
config = config || {};
if (!config.id) {
config.id = 'extras-category-window-update';
}
Ext.applyIf(config, {
title: _('extras_category_update'),
width: 550,
autoHeight: true,
url: Extras.config.connector_url,
action: 'mgr/category/update',
fields: this.getFields(config),
keys: [{
key: Ext.EventObject.ENTER, shift: true, fn: function () {
this.submit()
}, scope: this
}]
});
Extras.window.UpdateCategory.superclass.constructor.call(this, config);
};
Ext.extend(Extras.window.UpdateCategory, MODx.Window, {
getFields: function (config) {
return [{
xtype: 'hidden',
name: 'id',
id: config.id + '-id',
}, {
xtype: 'textfield',
fieldLabel: _('extras_category_name'),
name: 'name',
id: config.id + '-name',
anchor: '99%',
allowBlank: false,
}, {
xtype: 'textfield',
fieldLabel: _('extras_category_repository'),
name: 'repository_id',
id: config.id + '-repository_id',
anchor: '99%',
allowBlank: true,
}, {
xtype: 'xcheckbox',
boxLabel: _('extras_category_active'),
name: 'active',
id: config.id + '-active',
}];
},
loadDropZones: function () {
}
});
Ext.reg('extras-category-window-update', Extras.window.UpdateCategory);
Кеширование ресурса из другого контекста
Добрый день!
Страницы из другого контекста грузятся нормально, но каждый раз берутся не из кеша, а рендерятся заново. Подскажите, пожалуйста, как страницы грузить из кеша контекста web или сохранять их в кеше контекста web1? Или сразу брать кешированными из контекста web?
У меня есть 2 контекста: web и web1. Контекст web открывается на домене site.ru. Контекст web1 открывается на поддомене web1.site.ru. В контексте web содержится каталог minishop2 и другие прочие страницы. В контексте web1 есть главная страница.
Страницы из другого контекста грузятся нормально, но каждый раз берутся не из кеша, а рендерятся заново. Подскажите, пожалуйста, как страницы грузить из кеша контекста web или сохранять их в кеше контекста web1? Или сразу брать кешированными из контекста web?
У меня есть 2 контекста: web и web1. Контекст web открывается на домене site.ru. Контекст web1 открывается на поддомене web1.site.ru. В контексте web содержится каталог minishop2 и другие прочие страницы. В контексте web1 есть главная страница.