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

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

С нами с 10 февраля 2014; Место в рейтинге пользователей: #151
Константин Ильин
19 октября 2016, 23:57
+1
Василий, дай пожалуйста комментарий по этому поводу
Константин Ильин
17 октября 2016, 12:38
0
блин, сразу забыл написать
Почему при использование 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);
Константин Ильин
17 октября 2016, 11:51
0
Подскажите пожалуйста
есть модель
<?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 "}`
есть ли какое либо изящное решение?
Константин Ильин
07 октября 2016, 20:32
0
Понял, ты как и советовал мне Илья Уткин, в ответе создаешь новые элементы.
Ух, буду разбираться в ExtJs
Как сделаю отпишу здесь, вдруг кому пригодиться)
Спасибо Сергей, как всегда выручаешь!
Константин Ильин
07 октября 2016, 19:18
0
Ребят, никто не сталкивался с таким?
Константин Ильин
04 октября 2016, 14:20
0
Все же хотелось бы получить массив и передать его функцию для создания полей, но похоже придется делать как ты говоришь и тут еще заний extJs придется набрать)
Тему создал modx.pro/help/9977/
Константин Ильин
02 октября 2016, 15:48
0
подскажите пожалуйста:
суть: Создание 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 при апдейте.
Константин Ильин
30 сентября 2016, 13:52
0
О как) Посмотрел MODx.request, получается из get берется. Вот по extJs modx'а мало что-то доков или я плохо ищу, посоветуешь что нибудь?
Насчет connectorUrl проглядел) вот что значит не подумав скопировать)
Еще раз спасибо Сергей!
Константин Ильин
30 сентября 2016, 12:07
1
0
Это мой первый компонент и я думал под танцы с бубном он передается автоматически))

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

Сделал так:
В плагине создал запись
$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
        }, 
	*****
Константин Ильин
30 сентября 2016, 10:58
0
модель такая:
<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)?
Константин Ильин
29 сентября 2016, 23:09
0
Никак не могу понять как получить 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
Подскажите как там получать и возвращать данные, немного не понял его.
Константин Ильин
23 сентября 2016, 11:03
0
или придется везде в шаблонах вызовы менять?
Придется, т.к. вы меняете одно на другое, т.е. к примеру надо будет [[+tv.pole]] поменять на [[+pole]] везде.

Как выход создать поле через систему плагинов, потом скриптом быстренько пройтись и скопировать из ТВ в это поле — это лучший вариант, т.к. лазать в коде минишопа и что-то там менять бывает черевато мне кажется:)
Константин Ильин
22 сентября 2016, 20:37
0
это не помогает?
joxi.ru/12M7daEC4e9jJr
При условии конечно, что вы добавили поля через плагины(расширения) минишоп вот инструкция:
docs.modx.pro/components/minishop2/development/plug-ins-products
Константин Ильин
22 сентября 2016, 16:43
+1
Мое упущение. Проверил не работает, автор не врет))
Константин Ильин
22 сентября 2016, 16:13
0
Только что работал с плейсхолдером из плагина, MODX 2.5.0
В плагине:
$modx->setPlaceholders(array('testPlaceholder' => 3),'ge.');
На странице
[[+ge.testPlaceholder:is=`1`:then=`Один`:else=`Не равно одному`]]

Результат: Не равно одному
если ставлю = 1, то выводит Один
Константин Ильин
19 сентября 2016, 19:33
0
Тут наверно к создателю магазину надо обратиться, к Василию.

У меня еще недавно были глюки с датами создания и публикации.
Константин Ильин
17 сентября 2016, 22:32
0
Сергей, при установленном AjaxManager вот такая беда
joxi.ru/V2VRXy4u09EPd2

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

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

Вроде это пофиксили(если смотреть логи)
Константин Ильин
17 сентября 2016, 22:00
0
Если у вас древовидное меню в 2-а уровня, то можно банально

1. Вызов pdoResource по всем категориям и чанк tplCat
[[pdoResources? 
    &parents=`8` 
    &tpl=`tplCat`
]]
2. В чанке tplCat вызов msProduct
[[msProducts? 
    &tpl=`product_item_menu`
    &link=`1` 
    &parents=`[[+id]]`
    &master=`[[*id]]`
    &tplWrapper=`@INLINE <li>[[+pagetitle]]</li><ul>[[+output]] </ul>`
]]
3. Чанк product_item_menu например:
<li><a href="[[+uri]]">[[+pagetitle]]</a><li>

Это если не «парится» лишний раз
Константин Ильин
02 сентября 2016, 13:51
0
Приветствую Володя!
Я больше программист, чем продвиженец, поэтому вопрос:
У меня стоит вывод города для H1. Например «Товары в г. Уфа», соответственно Уфа меняется в зависимости от геолокации. Проиндексирует ли гугл или яндекс сайт по всем городам? т.е. в выдаче например в Кирове будет писаться «Товары в г. Киров»?