Андрей Копп
С нами с 07 октября 2013; Место в рейтинге пользователей: #148Добавление 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);        mFilter2 вывод фильтров в другом блоке
Как вывести секцию CDATA в XML?
            Всем привет. Встала задача вывести в XML секцию CDATA, сам XML генерируется на PHP через массив. Вот пример того как это всё выводится:
        
        
        
    <?php
/*
 * Выводим данные по всем репозиториям для дерева разделов
 */
require_once  dirname(__FILE__).'/response.class.php';
 
class ExtrasRepository extends ExtrasResponse{
    var $root = '<repositories/>';
	public function process(){
		$result = array(
			'repository'  => [
			    'id' => '4d4c3fa6b2b0830da9000001',
                'name' => 'Extras',
                'description' => '<img src="http://modxcms.com/assets/images/icons/ico_tools.png" alt="Add-ons" class="left" /> <h3>Want something not included in the MODx core install?</h3><p>Menu builders to image galleries, helper utilitis to podcasting and everything in between. These add-ons can help you build a site to <em>exactly</em> match your vision.</p>',
				'createdon' => '2011-02-04T18:05:07+0000',
                'rank' => 0,
                'packages' => 760,
                'tag' => '',
                'templated' => 0
            ],
		);
		return $this->toXML($result);
	}
}
return 'ExtrasRepository';        Добавление данных в таблицу базы из AjaxForm и FormIT
            Всем привет. Делаю сейчас компонент, в котором пользователи добавляют свои блоги и на них могут подписываться. Застопорился на моменте когда нужно добавлять данные. Решил что через AjaxForm и FormIt надёжнее.
Вообщем делал следующим образом. Вызвал сниппет с такими параметрами:
        
        
        
    Вообщем делал следующим образом. Вызвал сниппет с такими параметрами:
{'!AjaxForm' | snippet : [
    'snippet' => 'FormIt',
    'form' => '@FILE components/ticketscommunity/form.tpl',
    'redirectTo' => 16,
    'hooks' => 'email,TicketsCommunityHooksBlog',
    'emailSubject' => 'Добавление нового блога "[[+name]]"',
    'emailTo' => 'admin@site.com',
    'validate' => 'alias:required',
    'validationErrorMessage' => 'В форме содержатся ошибки!',
    'successMessage' => 'Сообщение успешно отправлено'
]}        Оформление заказов по этапам
            С НОВЫМ ГОДОМ! Счастья, здоровья и всех благ!
Народ может кто-нибудь подсказать как в minishop2 можно сделать оформление заказа по шагам? Тоесть на первой странице у нас будет список товаров в корзине с введением скидок с купона, на втором шаге заполнение данных для оформления заказа, на третьем шаге оплата через PayPal и редирект после успешной оплаты на страницу с благодарностью, что выбрали наш магазин? И все шаги это отдельные странички были бы?
        
        
        
    Народ может кто-нибудь подсказать как в minishop2 можно сделать оформление заказа по шагам? Тоесть на первой странице у нас будет список товаров в корзине с введением скидок с купона, на втором шаге заполнение данных для оформления заказа, на третьем шаге оплата через PayPal и редирект после успешной оплаты на страницу с благодарностью, что выбрали наш магазин? И все шаги это отдельные странички были бы?
Вопросы по MinifyX
            Каждый раз прежде, когда пытался использовать это дополнение, натыкался на нерешимые преграды и отказывался, так и не исследовав всё до конца.
Но в текущий проект большой и требует серьёзной оптимизации — вот и пытаюсь последние 2 дня разобраться что откуда растёт.
Итак, у меня следующие вопросы по использованию MinifiX:
        
        
        
        
    Но в текущий проект большой и требует серьёзной оптимизации — вот и пытаюсь последние 2 дня разобраться что откуда растёт.
Итак, у меня следующие вопросы по использованию MinifiX:
[Решено] Дополнительные поля в Tickets
            Всем привет! Создаю форму добавления объявлений, добавил новые TV поля таким образом:
UPD: Всё оказалось намного проще. Выводим TicketForm с параметрами:
        
        
        
    <input type="text" name="tv_price" value="0" />где tv_price название tv параметра, но при сохранении сохраняет только значение value по умолчанию, тоесть 0. Не могу разобраться, как прописать name правильно tv.price или tvprice?UPD: Всё оказалось намного проще. Выводим TicketForm с параметрами:
[[!TicketForm?
&requiredFields=`parent,pagetitle,content,bprice,bcountry,bregion,bcity`
&allowedFields=`parent,pagetitle,content,published,bprice,bcountry,bregion,bcity`
&parents=`322,335,338,345,351,352,353,354,355,356,357,358,361,365,369,373`
]]а в чанке который выводит форму прописываем TV-параметры в name без префиксов tv., tv_ а как есть:<input type="text" name="bprice" value="0">        Проблема с tv при выводе с помощью Fenom
            Здравствуйте! Вот пытаюсь вывести tv «special_thumb» через снипет pdoResources в шаблоне используя Fenom:
Мой вопрос в следующем: как вывести tv параметр используя Fenom?
        
        
        
    {$_modx->runSnippet('!pdoResources', [
    'parents'=>$_modx->resource.id,
    'sortby'=>'menuindex',
    'sortdir'=>'ASC',
    'depth'=>1,
    'limit'=>0,
    'includeTVs'=>'special_thumb',
    'prepareTVs'=>1,
    'includeContent'=>1,
    'tpl'=>'@INLINE 
    <div class="special_item">
    	<div class="container">
    		<div class="row"> 
    			<div class="col-md-4 text-right">
    				<img src="{$special_thumb}" alt="">
    			</div>
    			<div class="col-md-8">
    				<h3>{$pagetitle}</h3>
    				{$content}
    				<a href="{$_modx->makeUrl($id)}" title="{$pagetitle}" class="read_more">Подробнее</a>
    			</div>
    		</div>
    	</div>
    </div>
    '
])}Код работает, но не выводится tv special_thumb, логи смотрел, там ошибок нет, заметил что в запросе есть такая строка `TVspecial_thumb` ON `TVspecial_thumb`.`contentid` = `modResource`.`id`но не понял что это значит.Мой вопрос в следующем: как вывести tv параметр используя Fenom?
mFilter2 и кастомные таблицы
            Вчера начал делать фильтрацию таблицы с фирмами на mFilter2. Сначало я создал файл кастомного класса:
core/components/msearch2/custom/filters/custom.class.php со следующим содержимым:
        
        
        
    core/components/msearch2/custom/filters/custom.class.php со следующим содержимым:
<?php
class CustomFilter extends mse2FiltersHandler {
    
	function __construct(mSearch2 &$mse2,array $config = array()) {
        parent::__construct($mse2, $config);
        $this->modx->addPackage('spromo' ,MODX_CORE_PATH.'components/spromo/model/');
        $this->modx->addPackage('gl' ,MODX_CORE_PATH.'components/gl/model/');
        $this->modx->addPackage('voteforms' ,MODX_CORE_PATH.'components/voteforms/model/');
    }
    
	public function getSpromoCompaniesValues(array $fields, array $ids) {
		$filters = array();
		$no_id = false;
		if (!in_array('id', $fields)) {
			$fields[] = 'id';
			$no_id = true;
		}
		$q = $this->modx->newQuery('SpromoCompanies');
		$q->select(implode(',', $fields));
		$q->where(array('SpromoCompanies.id:IN' => $ids));
		$tstart = microtime(true);
		if ($q->prepare() && $q->stmt->execute()) {
			$this->modx->queryTime += microtime(true) - $tstart;
			$this->modx->executedQueries++;
			while ($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
				foreach ($row as $k => $v) {
					$v = trim($v);
					if ($k == 'category_id') {
						if ($row['parent'] == $v) {continue;}
						else {$k = 'parent';}
					}
					if ($v == '' || ($k == 'id' && $no_id)) {
						continue;
					}
					elseif (isset($filters[$k][$v])) {
						$filters[$k][$v][] = $row['id'];
					}
					else {
						$filters[$k][$v] = array($row['id']);
					}
				}
			}
		}
		else {
			$this->modx->log(modX::LOG_LEVEL_ERROR, "[mSearch2] Error on get filter params.\nQuery: ".$q->toSql()."\nResponse: ".print_r($q->stmt->errorInfo(),1));
		}
		return $filters;
	}
}        
            
                    
                    
                