Константин Ильин

Константин Ильин

Был в сети 22 октября 2025, 18:41
Заказы принимаю
Как написал Александр, массив должен быть одномерным, т.е.
/*array { 
	["value"]=> "Название параметра" 
	["count"]=> "3" 
}*/
array { 
	["Название параметра"]=> "3" 
}

/*array { 
	["value"]=> "Название параметра 2" 
	["count"]=> "3" 
}*/
array { 
	["Название параметра 2"]=> "3" 
}
Если несколько массивов, то лучше их объединить и передать в toPlaceholders
$arrOne = array ( 
	"placeholderOne" => "3" 
);
$arrTwo = array (
	"placeholderTwo" => "5" 
);
$array = array_merge($arrOne,$arrTwo);
$modx->toPlaceholders($array);

//также можно указать любой префикс
$modx->toPlaceholders($array, 'my.');
Это бесплатный компонент, не нравится, не используй, или дай объявление в раздел объявлений о работе.
Как-то Вы не правильно судите, я пытаюсь разобраться в баге(если конечно он таковой) не только для себя ведь, а Вы говорите бросай и принимай как есть. Странный Вы человек.
блин, сразу забыл написать
Почему при использование prepareSnippet в pdoMenu, не обрабатывает первую запись??
joxi.ru/Vm65XJLTxOw59r

[[!pdoMenu?
   &parents=`0`
   &prepareSnippet=`trRes`
]]
Пробовал такое в pdoResources, там все ок
joxi.ru/Dr8WkgZIkxQ3vA

код сниппета
$row['menutitle'] = 'newTitle / '.$id;
//$row['pagetitle'] = 'newTitle / '.$id;
return serialize($row);
Подскажите пожалуйста
есть модель
<?xml version="1.0" encoding="UTF-8"?>
<model package="translator" baseClass="xPDOObject" platform="mysql" defaultEngine="MyISAM" phpdoc-package="translator" version="1.1">

    <object class="trItem" extends="modResource">
        <field key="translations" dbtype="text" phptype="text" null="true" default=""/>
    </object>

</model>
Как сделать так чтобы в чанках допустим pdoResource или pdoMenu, поле translations выводилось как плейсхолдер?
пробовал
[[!pdoMenu?
   &parents=`0`
   &select=`{"modResource":"*"}`
   &tpl=`tpl.trans.item`
]]
Работает, но при этом подключается content, хотелось бы узнать решение чтобы к выборке добавлялось только поле translations

Так делать как бы не очень выход, потому что мало ли в чанке используются другие поля, я то понимаю, что если надо в select дописать, а вот другой может не понять.
&select=`{"modResource":"id,pagetitle,translations "}`
есть ли какое либо изящное решение?
подскажите пожалуйста:
суть: Создание textfield на лету при создание(редактирование) записи, т.е. При нажатии Добавить, всплывает окно в котором на лету созданные textfield, к примеру 3 штуки, а если это UPDATE то и их значение соответственно, помимо этого есть поля не созданные на лету.
При сохранение отправляется в процессор, в котором поля созданные на лету колбасятся в JSON и записыватся в 1 колонку БД.

Вот столкнулся сразу же с проблемой
Есть процессор, в нем получаю массив полей
foreach ($arr as $value) {

               $fields[] = array(
                    'xtype' => 'textfield',
                    'fieldLabel' => $value['code'],
                    'name' => $value['code'],
                    'id' => "config.id + '-".$value['code']."'",
                    'anchor' => "99%",
                    'allowBlank' => "false",
                    'value' => ''
                );
           }
	return $this->success('ok',$fields);
Обращаюсь к этому процессору и хочу вставить в функцию определения полей getFields:

Ext.extend(Trans.window.CreateItem, MODx.Window, {

    getFields: function (config) {
        var fieldsArr = '';
        MODx.Ajax.request({
            url: Trans.config.connectorUrl
            ,params: {
                action: "mgr/tr_data/get_fields",
                id_res: MODx.request.id,
                createAction: true
            } 
            ,listeners: {
                success: {fn: function(response) {
                    //console.log(response);
                    fieldsArr = response['object'];
                     console.log(fieldsArr+ 'success');
                }, scope: this}
            }
        });

        console.log(fieldsArr + ' - массив полей');
        return [{
            xtype: 'textfield',
            fieldLabel: _('trans_lang_name'),
            name: 'name',
            id: config.id + '-name',
            anchor: '99%',
            allowBlank: false,
        }, {
            xtype: 'textfield',
            fieldLabel: _('trans_lang_code'),
            name: 'code',
            id: config.id + '-code',
            allowBlank: false,
            anchor: '99%'
        }, {
            xtype: 'xcheckbox',
            boxLabel: _('trans_lang_active'),
            name: 'active',
            id: config.id + '-active',
            checked: true,
        }];
    },

    loadDropZones: function () {
    }

});
Ext.reg('trans-item-window-create', Trans.window.CreateItem);
Ajax запрос отрабатывает позже чем весь код, поэтому console.log(fieldsArr + ' — массив полей'), не выводит массив. Если получить массив полей, то наверно лучше его обработать в js, а не выдавать id: config.id + '-name', в php?
Подскажите как быть с запросом к процессору, может в плагине раньше получать, но тогда я не смогу получить текущее value при апдейте.
Это мой первый компонент и я думал под танцы с бубном он передается автоматически))

Спасибо большое Сергей! все получилось, подсмотрел в других компонентах

Сделал так:
В плагине создал запись
$modx->controller->addHtml('<script type="text/javascript">
        	Trans.config = ' . $modx->toJSON($Trans->config) . ';
        	Trans.config.res_id = "'.$resource->get('id').'";
        	
		Trans.config.connector_url = "' . $Trans>config['connectorUrl'] . '";
			'.$trConfig.'
			</script>
        ');
в js
Trans.grid.Items = function (config) {
    Ext.applyIf(config, {
        url: Trans.config.connector_url,
      	*****
        baseParams: {
            action: 'mgr/transitems/getlist' ,
            res_id: Trans.config.res_id
        }, 
	*****
модель такая:
<object class="trItem" extends="modResource">
        <composite alias="Trans" class="trItemData" local="id" foreign="id_res" cardinality="many" owner="local" />
    </object>

    <object class="trItemData" table="translator_data" extends="xPDOSimpleObject">
        <field key="id_res" dbtype="int" precision="10" phptype="integer" null="false" default=""/>
	/***еще поля***/
	<aggregate alias="TranMain" class="trItem" local="id_res" foreign="id" cardinality="one" owner="foreign" />
    </object>
теперь запускается процессор на панели ресурса(modx-resource-tabs) getlist — trItemData, в котором получаю объекты trItemData, но проблема в том, что получаю все объекты всех ресурсов. Отсюда становится понятно, что надо указывать id текущего ресурса для выборки объектов trItemData(собственно поле id_res для этого и делал), но вот как получить для where id текущего ресурса никак не пойму.
Проще говоря как получить объекты trItemData только текущего ресурса(trItem)?
Никак не могу понять как получить id ресурса в функции prepareQueryBeforeCount для процессора modObjectGetListProcessor

public function prepareQueryBeforeCount(xPDOQuery $c)
    {
        $resource_id = intval($this->getProperty('resource_id'));
        $c->where(array('id' => $resource_id));
        return $c;
    }
причем если указать явно $resource_id = 1 работает.

И сразу еще вопрос только для процессора modObjectGetProcessor
Подскажите как там получать и возвращать данные, немного не понял его.
или придется везде в шаблонах вызовы менять?
Придется, т.к. вы меняете одно на другое, т.е. к примеру надо будет [[+tv.pole]] поменять на [[+pole]] везде.

Как выход создать поле через систему плагинов, потом скриптом быстренько пройтись и скопировать из ТВ в это поле — это лучший вариант, т.к. лазать в коде минишопа и что-то там менять бывает черевато мне кажется:)
Сергей, при установленном AjaxManager вот такая беда
joxi.ru/V2VRXy4u09EPd2

+ Права доступа показываются от предыдущего ресурса. При полной перезагрузке страницы все норм.
Так и не отстану со своим AjaxManager ))
Скорее всего это связанно с методом save() для ресурса
Когда опции разрабатывались, я тогда сделал магазин на онове альфы версии 2.3.0. Потом нужно было написать парсер по файлу csv, его как бы написал. Но вот с сохранением характеристик была беда…

При вызове метода save
$obj->save();
Затирались все характеристики.
Пришлось сначала искать характеристику засовывать в массив, потом сохранять ресурс, потом опять присваивать характеристики — ужас был…

Вроде это пофиксили(если смотреть логи)