Abu

Abu

Был в сети 01 января 2023, 18:55
Заказы не принимаю
Таким же макаром получилось выводить extended поле в главном табе пользователя.

if (!$modx->getCount('modPlugin', array('name' => 'AjaxManager', 'disabled' => false))) {
            
            $profile = $user->getOne('Profile');
            $extended = $profile->get('extended');
            $field= $extended['field'];
            
            $data['extended-field'] = htmlspecialchars($field);
	    
	   ....
Вопрос: как сделать так, чтобы все нормально сохранялось в поле extended, если хочется без доп таблиц?
Постараюсь его переделать под новое API. Из нововведений, обязательный Submit приложения на Review, в целом ужесточение политики использования без ключей, разве что справку из психдиспансера пока не требуют. Забил также на Одноклассников, из-за их долбанутой политики, теперь и эти…
Сделал такой плагинчик на OnDocFormPrerender, для родителя id=5 скрывать цену и артикул, case 26 скрывать introtext. Работает и при создании товаров.

<?php
switch($modx->event->name) {
    case 'OnDocFormPrerender': 
        if($mode == modSystemEvent::MODE_NEW) {
           $s = intval($_REQUEST['parent']);
        } else {
                    $s = $resource->get('parent'); //родитель товара
        }

        switch($s) {
        case 5: 
            $modx->regClientStartupHTMLBlock('
           
            <script type="text/javascript">
                Ext.onReady(function () {
                     var divs= Ext.get("modx-resource-main-left").child("fieldset");
                     divs.hide();
                });
            </script>
                        
            ');
            break;
        case 26: 
            $modx->regClientStartupHTMLBlock('
           
            <script type="text/javascript">
                Ext.onReady(function () {
                     var divs= Ext.get("x-form-el-modx-resource-introtext").parent();
                     divs.hide();
                     
                     var vendors = Ext.get("x-form-el-modx-resource-vendor").parent();
                     vendors.hide();
                });
            </script>
                        
            ');
            break;

        default: ; 
        }     
    break;  
}
В копилку полезных плагинов — добавление тегов (опций modx_ms2_product_options) в поисковый индекс.

<?php
switch ($modx->event->name) {
	case 'mse2OnBeforeSearchIndex':

        $key = 'tags'; // имя опции товара
        $category = 0; // фильтрация по категории
        
	$mSearch2->fields[$key] = 1;
        $q = $modx->newQuery('msProductOption');
        $q->innerJoin('msProduct', 'msProduct', 'msProduct.id=msProductOption.product_id');
        $q->sortby('msProductOption.value','ASC');
        $q->select('DISTINCT(msProductOption.value), msProduct.id');
        $q->where(array('msProductOption.key' => $key));

        if (!empty($category)) {
        	$ids = $modx->getChildIds($category);
        	$ids[] = $category;
        	$q->innerJoin('msCategory', 'msCategory', 'msCategory.id=msProduct.parent');
        	$q->where(array('msCategory.id:IN' => $ids));
        }
        if ($q->prepare() && $q->stmt->execute()) {
        	while ($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
        		$resource = $modx->getObject('modResource', $row['id']);
        		$resource->set($key, $row['value']);
        	}
    
        }
	break;
}
Упс по мелочи менял js Офиса
assets\components\office\js\profile\default.js

$(document).on('submit', selector, function(e) {
			$(this).ajaxSubmit({
				url: OfficeConfig.actionUrl,
				dataType: 'json',
				beforeSubmit: function(data) {
				Office.Profile.setNew(elem);
последняя строчка вызов доп функции при submit

сама функция
setNew: function(elem) {
		var $newphoto = elem.find('input[name="newphoto"]');
		elem.find('input[name="photo"]', this.container).attr('value', $newphoto);
	}

};

Office.Profile.initialize('#office-profile-form');

как-то так
Да, на OnHandleRequest. Проверяет есть ли граватар и пустой ли профиль, тестировал с Office, все работает. Хотя, логичнее было бы на User(Before,Form)Save и т.п., но насколько я понял, при созданном пользователе подключение доп провайдера юзер не пересохраняется, плюс там еще проблемы с удалением фотки из профиля в Офисе (тут как раз таки сохраняется и не дает назначить другую фотку).