Финансовая поддержка VPS, бесплатные дополнения и docs Донаты оплачивают сервер и двигают бесплатные дополнения MODX и документацию. Поддержать

Всего 126 145 комментариев

Алексей
Алексей
А как создать 2 таблицы со связанными полями, чтобы при удалении графы из 1-й, удалялось информация из 2-й?
пример:
<?xml version="1.0" encoding="UTF-8"?>
<model package="doodles" baseClass="xPDOObject" platform="mysql" defaultEngine="MyISAM" version="1.1">
	<object class="doodles" table="doodles" extends="xPDOSimpleObject" >

	<field key="title" dbtype="varchar" precision="255" phptype="string" null="false" default="" index="index" />
	<field key="description" dbtype="text" phptype="string" />

	<index alias="PRIMARY" name="PRIMARY" primary="true" unique="true">
		<column key="id" collation="A" null="false" />
	</index>

	</object>

	<object class="doodlesCategories" table="doodles_Categories" extends="xPDOSimpleObject">
		<field key="cid" dbtype="int" precision="11" phptype="integer" null="false" index="index" />
		<field key="did" dbtype="int" precision="11" phptype="integer" null="false" />

		<index alias="cid" name="cid" primary="false" unique="false" type="BTREE" >
			<column key="cid" length="" collation="A" null="false" />
			<column key="did" length="" collation="A" null="false" />
		</index>

		<aggregate alias="Resource" class="modResource" local="cid" foreign="id" cardinality="one" owner="foreign" />
		<aggregate alias="doodless" class="doodles" local="did" foreign="id" cardinality="one" owner="foreign" />
	</object>
</model>
Схема:
http://schemaviewer.dev.kenters.com/51aa188bce3e55.64196579
Я хочу сделать так, чтобы при удалении строки из таблицы doodles, удалялась соответствующая строка из doodlesCategories. Какие связи необходимо поставить?
Peter Zenin
Peter Zenin
Мало было ,forceSelection: false — перестал сразу автоматом заменять,
но он все равно заменял вводимое после 3 символа, пришлось откатить символы вот так:
,minChars: 100
Теперь можно вводить новое значение спокойно, а если надо выбрать из существующих — то просто раскрыть список и выбрать.
Peter Zenin
Peter Zenin
Все, разобрался, надо было добавить ,forceSelection: false

Наверное в мод екс оно переопределяется в true

PS: Про массив массивов — да, когда много, а когда один — он такой. я его из фаербага взял.

Остался вопрос, как построить запрос в xpdo чтоб взять все разные значения из одного поля таблицы. Если кто на вскидку знает, подскажите, или хотя бы где покопать. Еще не смог приучиться к xpdo.
Василий Наумкин
Василий Наумкин
В results вроде должен быть массив массивов.

То есть
$arrRet = array(
	'total' => 1,
	'results' => array(
		array(
			'id' => 77,
			'name' => 'test'
		)
	)
);

Ну и смотри, что именно отправляется в консоли браузера. И еще можно убрать у комбобокса typeAhead — это он включает автоподстановку.
Peter Zenin
Peter Zenin
Нет я сделал наподобие:
miniShop2.combo.Unit = function(config) {
    config = config || {};

    Ext.applyIf(config,{
        name: config.name || 'unit'
        ,fieldLabel: _('ms2_product_' + config.name || 'unit')
        ,hiddenName: config.name || 'unit'
        ,displayField: 'name'
        ,valueField: 'id'
        ,anchor: '99%'
        ,fields: ['name','id']
        ,pageSize: 20
        ,url: miniShop2.config.connector_url
        ,typeAhead: true
        ,editable: true
        ,allowBlank: true
        //,emptyText: _('no')
        ,baseParams: {
            //action: 'mgr/settings/vendor/getlist'
            action: 'mgr/settings/unit/getlist'
            ,combo: 1
            ,id: config.value
            //,limit: 0
        }
    });
    miniShop2.combo.Unit.superclass.constructor.call(this,config);
};
Ext.extend(miniShop2.combo.Unit,MODx.combo.ComboBox);
Ext.reg('minishop2-combo-unit',miniShop2.combo.Unit);

miniShop2.plugin.unit = {
    getFields: function(config) {
        return {
            unit: {xtype: 'minishop2-combo-unit', description: '<b></b><br />'+_('ms2_product_unit_help')}
        }
    }
    ,getColumns: function() {
        return {
            unit: {width:50, sortable:false, editor: {xtype:'minishop2-combo-unit', name: 'unit'}}
        }
    }
};
Все как следует, сделал файл пока просто для тестирования:
/core/components/minishop2/processors/mgr/settings/unit/getlist.class.php
<?php

class msUnitGetListProcessor extends modObjectGetListProcessor {

	public function process() {

        $arrRet = array(
            'total' => 1,
            'results' => array(
                'id' => 77,
                'name' => 'test'
            )
        );
        return json_encode($arrRet);

	}

}

return 'msUnitGetListProcessor';
Я не совсем идиот. :) Просто я набираю сейчас в поле что-то, а он test подставляет насильно, хотя emptyText убрал.
Василий Наумкин
Василий Наумкин
Гораздо проще.

Если при вызове сниппета getPage не был указан параметр limit, то он слушает $_GET['limit'], Например,
вот так.

То есть, всего-то и нужно сделать выпадающий список, который при выборе пункта перезагрузит страницу с нужным limit.
Peter Zenin
Peter Zenin
Извиняюсь, я туплю, нашел где их добавлять, производителей.

Просто я пытаюсь дополнительное поле сделать с выпадающим списком как vendor
Мне надо чтоб искал из поля в таблице msProducts и подставлял, а если поля нет, то текущий оставлял, чтоб можно было сохранить и добавить.

Оказывается vendor нее очень удачный пример для копирования, т.к. там автоматом выставляется ноль, если ничего не выбрано…

Даже не представляю по какому примеру сделать автозаполняемое поле из уже существующих значений (чтоб подбирал только разные), а если ничего не выбрано то оставлял текущее.

Подскажите с чего можно подсмотреть подобный функционал?

Заранее благодарю!