Наумов Алексей

Наумов Алексей

С нами с 31 марта 2013; Место в рейтинге пользователей: #13
Наумов Алексей
14 марта 2019, 16:02
0
Насколько я помню по своему опыту, главный трабл был в том, что были затерты js файлы.

Примерный сценарий:
1. Разворачиваем сайт
2. Устанавливаем поверх свежий (или не очень свежий) MODX
3. Обновляем все компоненты, задача — переустановить их с заменой файлов
4. Удаляем старые версии компонентов, чтобы уменьшить кол-во файлов
5. Тщательно ищем упоминания вирусов во всех файлах, сверяемся с исходниками modx и компонентов, используем антивирусы.
6. Кстати. Вот перед всем этим, хорошо бы проанализировать даты изменения файлов. Возможно, вам получится выяснить список файлов, модернизированных вирусом.
7. Недостающие файлы пытаемся найти через webarchive или свои старые бекапы. Это единственное место, где я смог найти js файлы.
Наумов Алексей
13 марта 2019, 16:46
0
bootstrap + возможно MobileDetect
Актуально)
Каталог с поддержкой фильтрации, значит MS2
Да, miniShop2 + mFilter2 (mSearch2).
Что-то удобное по загрузке фотографий для MS2 — ms2Gallery
Если нужно дополнительно, то да. Хотя и штатная галерея вроде ничего.
Отзывы — Tickets
Вполне. Или советую свой компонент easyComm.

Избранное к каталогу
msFavorites modstore.pro/packages/ecommerce/msfavorites
И возможно предзаказ
Или штатную корзину от минишопа, где покупка и будет «предзаказом», или вообще «Купить в 1 клик» в виде простейшей формы.

Office — если нужен кабинет. Авторизацию вроде он поддерживает штатно через HybridAuth.
Наумов Алексей
13 марта 2019, 09:08
0
Блокировать кнопку при отправке формы до получения ответа от сервера.
Наумов Алексей
12 марта 2019, 14:50
0
У вас 4 Мб чисто html кода!

Неудивительно, что долго.
Сначала его нужно сгенерировать, а потом еще и загрузить в браузер.

Исходный код страницы откройте ж.
Избавляйтесь от дикого количества пунктов в меню «Все разделы».
Наумов Алексей
11 марта 2019, 09:05
1
+1
Кнопками управлять так.
При объявлении окна, внутри
Ext.applyIf(config, {
после
fields: this.getFields(config)
добавляем еще кнопки (по умолчанию их 2 штуки, а вот вам пример на 4 штуки)
buttons: [
            {
                text: 'Моя кнопка',
                scope: this,
                handler: function () {
                    alert("Работает");
                }
            },
            {
                text: config.cancelBtnText || _('cancel'),
                scope: this,
                handler: function () {
                    config.closeAction !== 'close' ? this.hide() : this.close();
                }
            },
            {
                text: config.saveBtnText || _('save'),
                scope: this,
                handler: function () {
                    this.submit(false);
                }
            },
            {
                text: config.saveBtnText || _('save_and_close'),
                cls: 'primary-button',
                scope: this,
                handler: function () {
                    this.submit(true);
                }
            }
        ]
Наумов Алексей
27 февраля 2019, 15:08
0
Ошибки сервера посмотрите.
Наумов Алексей
26 февраля 2019, 17:54
0
Сугубо индивидуальная задача.
Как вариант «попроще» — создать неопубликованный ресурс «Меню», а внутри шпарить уже ресурсами-ссылками, вывод через pdoMenu.

Вариант через MIGX тоже можно, почему нет.
Да хоть в чанке пункты прописывайте, а своим сниппетом на вывод.
Наумов Алексей
26 февраля 2019, 17:03
0
Чет много кода))

Смотри, пример процессора, который выдает список категорий из Tickets. При этом они фильтруются по введенному пользователю значению (поиск по pagetitle).

<?php

class boardAdvertCategoryGetListProcessor extends modObjectGetListProcessor
{
    public $classKey = 'TicketsSection';
    public $languageTopics = array('resource');
    public $defaultSortField = 'pagetitle';

    /** {@inheritDoc} */
    public function prepareQueryBeforeCount(xPDOQuery $c) {

        if ($this->getProperty('combo')) {
            $c->leftJoin('modResource','Rubric','`TicketsSection`.`parent` = `Rubric`.`id`');
            $c->select($this->modx->getSelectColumns($this->classKey, $this->classKey, ''));
            $c->select('`Rubric`.`pagetitle` as `rubric`');
        }
        else {
            $c->select($this->modx->getSelectColumns($this->classKey, $this->classKey, ''));
        }
        $query = $this->getProperty('query');
        $c->where(array('class_key' => 'TicketsSection'));
        if (!empty($query)) {
            $c->where(array('pagetitle:LIKE' => '%'.$query.'%'));
        }

        $id = $this->getProperty('id');
        if (!empty($id)) {
            $c->where(array('id' => $id));
        }
        return $c;
    }
    /** {@inheritDoc} */
    public function prepareRow(xPDOObject $object) {
        if ($this->getProperty('combo')) {
            $array = array(
                'id' => $object->get('id'),
                'pagetitle' => $object->get('pagetitle'),
                'rubric' => $object->get('rubric'),
            );
        }
        else {
            $array = $object->toArray();
        }
        return $array;
    }
}

return 'boardAdvertCategoryGetListProcessor';
Наумов Алексей
26 февраля 2019, 17:00
0
Если мы откроем процессор modResourceCreateProcessor, то видим, что нужный permission это new_document.

А если мы откроем (к примеру) modObjectGetProcessor, то видим некий checkViewPermission и checkPolicy('view').

Короче для создания ресурса нужен new_document, для для просмотра объекта view.
Поизучайте код процессоров, посмотрите как они наследуются.
Наумов Алексей
26 февраля 2019, 16:22
0
Список стран есть при редактировании пользователя.
Объект — ну это просто объект, ресурс, шаблон, чанк, пользователь.
Наумов Алексей
26 февраля 2019, 11:31
0
Попробуй
xtype="minishop2-combo-category"
github.com/bezumkin/miniShop2/blob/master/assets/components/minishop2/js/mgr/misc/ms2.combo.js#L89

Если не прокатит или не тот функционал, сделай по аналогии свой xtype, только про процессор (который mgr/category/getcats ) не забудь, что он тоже нужен.
Наумов Алексей
26 февраля 2019, 11:09
0
Да, конечно. Но мне нужны отдельные страницы на каждое значение из фильтра. Каждый чекбокс со скриншота — это ссылка на свою страницу. Слайдер так не может :)
Наумов Алексей
26 февраля 2019, 10:38
0
Вариации разные возможны… конкретно в нашем случае это не было бы идеальным решением.
Наумов Алексей
26 февраля 2019, 09:44
0
Кеш то браузера обновили?)
Может файлы какие пропустились при обновлении, накатите еще раз.
Наумов Алексей
26 февраля 2019, 09:43
0
Нет такой настройки.
Зато есть это
Наумов Алексей
25 февраля 2019, 16:01
+2
Ниче не понятно)
Если вам нужен урезанный /manager/ то можно ограничить доступ к отдельным элементам, оставив только требуемые функции…
Наумов Алексей
25 февраля 2019, 11:17
0
Значит отрабатывается первый случай, когда {$option.value is array}.
Вообще, если в этом массиве один элемент, то можно его и вывести. Если может быть много, то foreach в помощь и проверка в цикле.
Наумов Алексей
25 февраля 2019, 11:01
0
{foreach $options as $option}
  <tr>
    <td>{$option.caption} :</td>
    <td>
    {if $option.value is array}
      {$option.value | join : ', '}
    {else}
      {$option.value ? "Да" : "Нет"} 
    {/if}
    {$option.measure_unit} 
    </td>
  </tr>
{/foreach}