Sergey (Sentinel)

Sergey (Sentinel)

С нами с 11 августа 2017; Место в рейтинге пользователей: #171
Николай Савин
29 марта 2022, 13:55
1
0
Если отключить — то получается не смогут. Согласен здесь проблема.
Наиболее простое решение это опираться на IP адрес клиента и срывать\показывать нужные компоненты.
Но это отдельный проект. Владельцы и разработчики далеко не дураки — я думаю в конце концов придумают решение.
Prihod
16 февраля 2022, 14:55
1
+1
$polylang = $modx->getService('polylang', 'Polylang')) {
$tools = $polylang->getTools();

$fieldName = 'my_field';
$xtype = 'polylang-field'; // textarea,polylang-text-editor,polylang-code-editor,polylang-combo,polylang-combo-boolean,polylang-field
$meta = $modx->getFieldMeta('modResource');
$data = array(
    'caption' => $fieldName,
    'description' => '',
    'xtype' => $xtype,
    'code' => '',
    'active' => 1,
    'required' => 0,
    'rank' => 0,
    'meta' => isset($meta[$fieldName]) ? $meta[$fieldName] : array()
);

$tools->addField('PolylangContent', $fieldName , $data);
Sergey (Sentinel)
15 декабря 2020, 22:20
1
0
@Павел Гвоздь Паш подскажи плиз
вывожу опцию
<div class="form-group create" >
    <label>Для кого</label>
    <input type="hidden" class="form-control [ js-ms2f-combobox-auto ]" name="options-for_whom">
  </div>
но в админке вот так



как правильно прописать?
Sergey (Sentinel)
25 апреля 2020, 18:19
3
0
в tinymcerte.toolbar1 добавляем fontsizeselect forecolor
в tinymcerte.plugins добавляем textcolor
все

toolbar
undo redo | styleselect | bold italic underline 
| fontselect fontsizeselect forecolor backcolor | alignleft aligncenter alignright
 | bullist numlist outdent indent | link image | code
mngatoff
02 декабря 2019, 02:25
1
0
плюс этого варианта еще и в том, что его можно без изменений использовать в карточке товара в форме добавления в корзину
Андрей
27 марта 2019, 20:26
1
+1
Я таким способом пользуюсь, просто дата файла

if ($modx->event->name == 'pdoToolsOnFenomInit') {

	// return file version
	$fenom->addModifier('version', function ($input) use ($modx) {
		$output = $input;

		$file = MODX_BASE_PATH.$input;

		if (file_exists($file)) {
			$output = $input.'?v='.filemtime($file);
		}

		return $output;
	});
	
}
Василий Stepanov
02 апреля 2017, 04:18
2
+1
Сделал вот так. Работает.
//собираем заголовки из категории ресурсов
$docfind = $modx->getCollection('modResource',array('parent' => '19'));
foreach ($docfind as $k => $res) {
    $title_m = $res->get('pagetitle');
    $titles[] = $title_m;
}

$path = 'http://www.amur.info/index.rss';
$ctx = stream_context_create(array('http' => array('timeout' => 6)));
$file = file_get_contents($path, 0, $ctx);

if ($file) {
    $rss = simplexml_load_string($file);
    $i = 0;
    foreach ($rss->channel->item as $item){
        $namespaces = $item->getNameSpaces(true);
        $yandex = $item->children($namespaces['yandex']); 
        
        $full_text = (string)$yandex->{'full-text'};       //полный текст статьи
        $title = $item->title;                             //заголовок статьи
        $pubdate = $item->pubDate;                         //дата публикации
        $link = $item->link;                               //ссылка на новость
        
	//создаем ресурсы в MODX, если ресурсов с такими заголовками еще нет
        if (in_array($title, $titles) == false) {
            $response = $modx->runProcessor('resource/create', array(
                'pagetitle' => $title,
                'longtitle' => $pubdate,
                'description' => $link,
                'introtext' => '',
                'content' => $full,
                'template' => $template,
            	'hidemenu' => 1,
            	'published' => 1,
            	'parent' => '19'
            ));
        }
        
        $i++;
        if ($i == 5) break;
    }
}
Владимир Тельнов
18 марта 2017, 01:58
2
0
Разобрался.

У меня стояла задача добавить поля «Дом» и «Номер квартиры» в профиль пользователя и отображать содержимое этих полей при создании нового заказа в miniShop2. Поля building и room — это единственные поля, которые не совпадают с полями в стандартном профиле пользователя, в результате чего при создании нового заказа приходится указывать номер дома и квартиры каждый раз в ручную.

Выполнил инструкцию из первого поста. После чего внес изменения в параметры сниппета officeProfile и в чанки tpl.msOrder (miniShop2), tpl.Office.profile.form (Office)

Для отображения нового поля в профиле в параметрах сниппета officeProfile, в раздел profileFields необходимо добавить поле new_field и соответствующее поле input
<input type="text" name="new_field" placeholder="" value="[[+modx.user.id:userinfo=`new_field`]]"/>
Для отображения нового поля при создании нового заказа в чанке tpl.msOrder отредактировал соответсвущий input
{foreach ['building'] as $field}
	<input type="text" id="{$field}" placeholder="{('ms2_frontend_' ~ $field) | lexicon}"
	name="{$field}" value="[[+modx.user.id:userinfo=`new_field`]]"
	class="form-control{($field in list $errors) ? ' error' : ''}">                      
{/foreach}
Наумов Алексей
26 января 2017, 15:24
3
+1
Нужен плагин, примерно такой:

<?php
if ($modx->event->name == 'OnLoadWebDocument') {
  $request = $_SERVER['REQUEST_URI'];
  $params = '';
  if (strpos($request, '?') !== false) {
  	list($request, $params) = explode('?', $request);
  }
  $uri = $request;
  if(!empty($uri) && strpos($uri, '.') === false && substr($uri, -1, 1) != '/') {
    $uri .= '/';
    if (!empty($params)) {
      $uri .= '?' . $params;
    }
    $modx->sendRedirect($uri, array('responseCode' => 'HTTP/1.1 301 Moved Permanently'));
  }
}
Максим
07 октября 2016, 06:49
1
0
Здравствуйте. Помогите разобраться. Мне нужно добавить 2 текстовых поля. На данный момент плагин выглядит так
<?php
switch ($modx->event->name) {
    case "OnMODXInit":
        $map = array(
            'modUser' => array(
                'fields' => array(
                    'executor' => 1,
                ),
                'fieldMeta' => array(
                    'executor' => array(
                        'dbtype' => 'tinyint',
                        'precision' => '1',
                        'phptype' => 'boolean',
                        'attributes' => 'unsigned',
                        'null' => false,
                        'default' => 1,
                    ),
                ),
            ),
            'modUserProfile' => array(
                'fields' => array(
                    'surname' => '',
                    'patronymic' => '',
                ),
                'fieldMeta' => array(
                    'surname' => array(
                        'dbtype' => 'varchar',
                        'precision' => '255',
                        'phptype' => 'string',
                        'null' => false,
                    ),
                ),
                'fieldMeta' => array(
                    'patronymic' => array(
                        'dbtype' => 'varchar',
                        'precision' => '255',
                        'phptype' => 'string',
                        'null' => false,
                    ),
                ),
            ),
        );

        foreach ($map as $class => $data) {
            $modx->loadClass($class);

            foreach ($data as $tmp => $fields) {
                if ($tmp == 'fields') {
                    foreach ($fields as $field => $value) {
                        foreach (array('fields', 'fieldMeta', 'indexes') as $key) {
                            if (isset($data[$key][$field])) {
                                $modx->map[$class][$key][$field] = $data[$key][$field];
                            }
                        }
                    }
                } elseif ($tmp == 'composites' || $tmp == 'aggregates') {
                    foreach ($fields as $alias => $relation) {
                        if (!isset($modx->map[$class][$tmp][$alias])) {
                            $modx->map[$class][$tmp][$alias] = $relation;
                        }
                    }
                }
            }
        }
        break;
    
    case "OnUserFormPrerender":
        if (!isset($user) || $user->get('id') < 1) {
            return;
        }

        if (!$modx->getCount('modPlugin', array('name' => 'AjaxManager', 'disabled' => false))) {
            $data['executor'] = $user->executor ? 'true' : 'false';
            $data['surname'] = htmlspecialchars($user->Profile->surname);
            $data['patronymic'] = htmlspecialchars($user->Profile->patronymic);

            $modx->controller->addHtml("
                <script type='text/javascript'>
                    Ext.ComponentMgr.onAvailable('modx-user-tabs', function() {
                        this.on('beforerender', function() {
                            // Получаем колонки первой вкладки
                            var leftCol = this.items.items[0].items.items[0].items.items[0];
                            var rightCol = this.items.items[0].items.items[0].items.items[1];

                            // Добавляем новое поле в левую колонку 3ым по счёту полем (перед полем 'Email')
                            leftCol.items.insert(3, 'modx-user-new-field', new Ext.form.TextField({
                                id: 'modx-user-new-field',
                                name: 'surname',
                                fieldLabel: 'Фамилия',
                                xtype: 'textfield',
                                anchor: '100%',
                                maxLength: 255,
                                value: '{$data['surname']}',
                            }));
                            
                            leftCol.items.insert(4, 'modx-user-patronymic-field', new Ext.form.TextField({
                                id: 'modx-user-patronymic-field',
                                name: 'patronymic',
                                fieldLabel: 'Отчество',
                                xtype: 'textfield',
                                anchor: '100%',
                                maxLength: 255,
                                value: '{$data['patronymic']}',
                            }));

                            // Скрытое поле с нулевым значением, для корректной обработки чекбокса при сохранении
                            ncb_hiddenField = new Ext.Element(document.createElement('input'));
                            ncb_hiddenField.set({
                                type: 'hidden',
                                name: 'executor',
                                value: 0,
                            });

                            // Добавляем чекбокс первым по счёту полем (перед чекбоксом 'Активный')
                            rightCol.items.insert(0, 'modx-user-new-checkbox', new Ext.form.Checkbox({
                                id: 'modx-user-new-checkbox',
                                name: 'executor',
                                hideLabel: true,
                                boxLabel: 'Исполнитель',
                                description: 'Назначить пользователя исполнителем',
                                xtype: 'xcheckbox',
                                inputValue: 1,
                                hiddenField: ncb_hiddenField,
                                listeners: {
                                    afterrender: function(that) {
                                        that.el.insertHtml('beforeBegin', ncb_hiddenField.dom.outerHTML);
                                    }
                                },
                                checked: {$data['executor']},
                            }));
                        });
                    });
                </script>
            ");
        }
        break;
}
Оба поля в профиле есть, но сохраняется только одно patronymic. Поле surname очищается после сохранения. Подскажите как сохранить оба этих поля?