• Какие изменения исходников допустимы, чтобы не потерять поддержку службы заботы?

    @ilyarsoftware
    Изменения системы регламентируются Лицензионным договором:
    3.2.4. Клиент вправе вносить изменения в правомерно приобретённый экземпляр Системы исключительно в целях функционирования Системы на конкретных технических средствах Клиента или под управлением конкретных программ Клиента (адаптация) в пределах, указанных на странице docs.umi-cms.ru/system_modification_rules, а также исправлять явные ошибки Системы.

    Другими словами, чтобы не потерять поддержку, изменения можно вносить только используя предусмотренные для этого способы. В сложных ситуация или какой-то неоднозначности следует обратиться в поддержку за советом.

    Кроме этого, важно помнить, что изменяя исходный код системы не предусмотренный для клиентских решений теряется не только поддержка, а также и техническая возможность обновления (измененные системные файлы будут презаписанны).
    Ответ написан
    Комментировать
  • Как отключить кэширование сайта на UMI CMS?

    @ilyarsoftware
    За кэширование отвечает Секция [cache] в файле config.ini, который находится в корне системы. Основные параметры config.ini можно установить в административном интерфейсе.

    Не исключайте возможные иные причины проблемы, например: кеш браузера или вносите изменения в неиспользуемый шаблон.
    Ответ написан
  • Как добавить дополнительное поле описание товара в админке UMI?

    @ilyarsoftware
    Добавить дополнительное поле можно через Модуль "Шаблоны данных", в стандартных типах данных группы полей и некоторые поля могу быть защищены от редактирования, например Общее [common]. Это сделано намерено, для защиты пользователя от фатальной ошибки.

    Для того чтобы иметь возможность редактировать защищенные группы и поля надо в адресной строке, при редактировании типа данных добавить параметр ?skip-lock=1 и перезагрузить страницу.

    Делайте это внимательно, не удалите "лишнего", что может привести к ошибкам работы системы.
    Ответ написан
    1 комментарий
  • Как редактировать содержимое страницы?

    @ilyarsoftware
    Посмотрите это видео Создание и редактирование каталога товаров, еще будет полезен это Редактирование объекта каталога.

    Некоторая информация отображаемая посетителю сайта действительно может быть не доступна для редактирования через административный интерфейс (может быть особенностью конкретного внедрения). В таком случае надо обратится к разработчику и уточнить требования по реализации, UMI.CMS позволяет сделать доступной для редактирования любую отображаемую пользователю информацию.
    Ответ написан
    Комментировать
  • Как собирать готовые блоки из компонентов Material Design Light, следуя BEM?

    @ilyarsoftware
    Библиотека MDL применяет БЭМ используя альтернативную схему именования т.н. «Стиль Гарри Робертса».

    Если следовать этой схеме, то надо заменить demo-card-wide на модификатор mdl-card--theme-demo:
    <div class="mdl-card mdl-card--theme-demo mdl-card mdl-shadow--2dp"/>

    Демонстрация

    Важно отметить mdl-card--theme-demo это булев модификатор, в этой схеме именования модификаторы вида «ключ-значение» не используются и они могут существовать отдельно от блока примиксовываясь к другим блокам как mdl-shadow--2dp из примера .
    Ответ написан
    Комментировать
  • Как отменить кэширование одного из xslt-шаблонов?

    @ilyarsoftware
    В конфигурационном файле есть секция [cache] в ней можно настроить not-allowed-methods. Если логику реализовать через кастомный макрос используя его для доставки CSS, то появится возможность добавить опцию not-allowed-methods[] = "custom/someLogic". Кастомный макрос прописать в шаблоне:

    <link rel="stylesheet" href="/udata/custom/someLogic" />

    Теоретически должно помочь.
    Ответ написан
    Комментировать
  • Ошибка в запросе usel?

    @ilyarsoftware
    Протокол USel это обертка над selector, включите отладку: define( "DEBUG_SQL_SELECTOR", false ), будет видно построены запрос по которому можно будет сделать вывод о причине проблемы.
    Ответ написан
  • Как вывести поле из полной новости в анонс?

    @ilyarsoftware
    Любое поле или группу любой страницы можно получить через протокол UPage, пример вывода значения поля content:

    <xsl:value-of 
      select="document(concat('upage://', @id, '.content'))//value"
      disable-output-escaping="yes" />

    @id это идентификатор страницы которое можно получить в текущем контексте, а также можно использовать путь страницы.

    Суть примера сводится к построению запроса: concat('upage://', @id, '.content')) в результате будет обращение по адресу upage://1.content (при @id=1), а //value обращение к ноде результирующего XML.

    Протокол UPage можно тестировать в браузере, например: http://site.com/upage/1.content или http://site.com/upage/1 для получения всей страницы.
    Ответ написан
    1 комментарий
  • Как делать кнопки БЭМ?

    @ilyarsoftware
    Все верно, основной класс .btn описывает общий стиль, а .btn_search модификацию или дополнение, применяем следующим образом:

    <div class="btn btn_search">search</div>

    Стоит отметить, что .btn_search т.н. булев модификатор, по методологии может быть еще модификатор вида «ключ-значение» .btn_type_search (см. подробнее Соглашение по именованию/Имя модификатора). Предположу, что для вашей задачи больше подойдет модификатора вида «ключ-значение»:

    <div class="btn btn_type_search">search</div>
    <div class="btn btn_type_submit">submit</div>


    Рекомендую посмотреть на блок button из библиотеки bem-components.
    Ответ написан
    1 комментарий
  • Альтернатива html шаблонизотру от Bem?

    @ilyarsoftware
    Любой, а точнее в вашем случае с поддержкой JSON, например NANO, хотя, грубо говоря, ближе к BH/BEMHTML, можно назвать json2html, пример использования json2html с CSS из bem-components:

    var data = [
      {
        'text': 'BEM — BEM Easy Makeup',
        'url': 'https://ru.bem.info/',
      },
    ];
    
    var template = {
      tag: 'a',
      class: 'button button_theme_islands button_size_xl',
      href: '${url}',
      children: [
        {
          tag: 'span',
          class: 'icon icon_social_twitter',
        },
        {
          tag: 'span',
          class: 'button__text',
          html: '${text}',
        },
      ]
    };
    document.body.innerHTML = json2html.transform( data, template );

    Демо на jsfiddle

    Уверен есть и другие, но все они не будут знать про БЭМ-термины и поэтому придется добавить хеперов для работы с боками, элементами, модификаторами и пр.

    На текущий момент мне не известно ничего удобнее BH/BEMHTML, но если такой шаблонизатор появится, его опубликуют в разделе bem.info/Проекты на БЭМ.
    Ответ написан
    Комментировать
  • Тестирование через коммит?

    @ilyarsoftware
    Можно купить микроскоп и забивать им гвозди, но разумно разобраться в его возможностях и использовать по назначению. Если это не очевидно, то никакие доводы не помогут.

    Осознав, что история изменений кода может быть хороши союзником в разработке и понимании проекта, то желании относиться к фиксации изменений, как к функции сохранения изменений пропадет и появится неуклонное желание фиксировать историю.

    Кода разработчик, а в идеале вся команда, делает фиксацию истории изменений, появляются возможности:
    • Понимание чем мотивированно изменение, потому что коммит привязан к номеру задачи или содержит внятный комментарий;
    • Понимание, как добавить новый функционал, если в истории коммиты это концентрированные изменения относящиеся к конкретным требования;
    • Имея в своем активе вышеперечисленные возможности и добавив Пару приемов работы с git (это же относится и к другим VCS) получаем реальный король над проектом.
    Ответ написан
    Комментировать
  • Почему не удаляются из объектов каталога свойства?

    @ilyarsoftware
    Так может быть. Типы в модуле Шаблоны данных могут быть вложенными, если мы добавляем атрибут в тип то этот же атрибут будет добавлен ко всем "детям", а удаление не наследуется т.е. атрибут может остаться в одном из типов. Посмотрите внимательно к какому типу относится объект и проверти атрибуты типа.
    Ответ написан
  • Как передать цену из другого поля?

    @ilyarsoftware
    Заказ пересчитывается при обновлении корзины и в момент оформления, поэтому манипуляция с объектами корзины напрямую непредсказуемо, посмотрите в направление обработки событий, например Цена в зависимости от условий.
    Ответ написан
  • Как организовать попарный вывод элементов списка в UMI.CMS?

    @ilyarsoftware
    Попробуйте так:
    <xsl:param name="colnum" select="2"/>
    
    <xsl:template match="udata[@module = 'catalog'][@method = 'getObjectsList']">
      <xsl:apply-templates select="lines/item[position() = 1]|lines/item[position() mod $colnum = 1]"/>
    </xsl:template>
    
    <xsl:template match="item">
      <div>
         <xsl:apply-templates select=".|following-sibling::item[position() &lt; $colnum]" mode="div"/>
      </div>
    </xsl:template>
    
    <xsl:template match="item" mode="div">
      <span class="element-{@id}" >
        <xsl:value-of select="."/>
      </span>
    </xsl:template>

    Демонстрация примера.
    На эту тему есть статья: Таблицы в несколько колонок в XSLT-шаблонах и похожий вопрос рассматривается в теме: вывод объектов каталога.
    Ответ написан
    Комментировать
  • Возможно ли использование i-bem.js без "BEM"?

    @ilyarsoftware
    Если я правильно понял вопрос, то такие "глупости" возможны:
    <!DOCTYPE html>
    <html class="ua_js_no">
    <head>
        <!--[if lt IE 9]><script src="https://yastatic.net/es5-shims/0.0/es5-shims.min.js"></script><![endif]-->
        <meta charset="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/>
        <title>bem-components dist</title>
        <script>(function(e,c){e[c]=e[c].replace(/(ua_js_)no/g,"$1yes");})(document.documentElement,"className");(function(d,n){d.documentElement.className+=" ua_svg_"+(d[n]&&d[n]("http://www.w3.org/2000/svg","svg").createSVGRect?"yes":"no");})(document,"createElementNS");</script>
        <!--[if gt IE 8]><!--><link rel="stylesheet" href="https://yastatic.net/bem-components/latest/desktop/bem-components.css"/>
        <!--<![endif]--><!--[if lte IE 8]><link rel="stylesheet" href="https://yastatic.net/bem-components/latest/desktop/bem-components.ie.css"/><![endif]-->
    </head>
    <body class="page page_theme_islands">
    <!-- write your code here -->
    <script src="https://yastatic.net/bem-components/latest/desktop/bem-components.js+bh.js"></script>
    </body>
    </html>

    Этот пример из темы dist-поставка bem-core/bem-components, или Использ... еще будет полезен доклад Чем bem-components лучше Bootstrap.

    П.С. Пример вместе с bem-components, если надо только bem-core.js+bh.js, смотрите bem-core-dist.
    Ответ написан
    Комментировать
  • Почему gulp-bem не собирает проект?

    @ilyarsoftware
    Если судить по примеру из тестов: https://github.com/floatdrop/gulp-bem/tree/master/...
    то должно быть так: https://github.com/SmirnovW/bem-test/pull/1/files

    $ git clone https://github.com/ilyar/bem-test.git && cd bem-test && npm i
    $ gulp
    [14:19:01] Using gulpfile ~/lab/bem-test/gulpfile.js
    [14:19:01] Starting 'default'...
    [14:19:01] Finished 'default' after 146 ms
    $ cat dist/index.css 
    .menu {
    	list-style: none;
    	color: green;
    }
    
    .menu__item {
    	margin-left: 10px;
    }
    Ответ написан
    3 комментария
  • Как добавить normalize.css в проект на bem ENB?

    @ilyarsoftware
    В приведенном примере указание зависимостей для технологии tmpl-spec.js — используется для тестов на шаблоны, по этой причине { block: 'normalize' } не попадает в css при сборке, чтобы подключить на проект стили и скрипты блоков desctop.blocks/page/page.deps.js:
    [{
        mustDeps: { block: 'normalize' },
    }]


    Пример описания зависимости по технологиям вместе общими зависимостями блока https://github.com/ilyar/bem-examples/blob/master/...

    Подробнее об описании зависимостей https://ru.bem.info/technology/deps/about/

    И все таки использовать глобальные стили (normalize/reset) противоречит прицепу: "Блок — независимый компонент", подробнее: опыт и рекомендация.
    Ответ написан
    Комментировать
  • Откуда взялась и как исправить - ошибка в UMI: coreException: CSRF Protection?

    @ilyarsoftware
    Может быть поможет, посмотрите раздел Главная/Конфигурация/Настройка доменов, если домен с которого вы работает не является основным, добавьте его в список Адрес зеркала домена в свойствах основного домен вашего сайта.

    Пробуйте решение для Ошибка (coreException): Give me a normal type to c..., эти ошибки могут быть связаны.

    Как временное решение можете отменить защиту CSRF установив параметр csrf_protection=0 в config.ini.
    Ответ написан
  • Не перегружает ли style.css пространство имён классов по принципам БЭМ?

    @ilyarsoftware
    БЭМ не догма и только про css, как любой другой паттерн проектирования он помогает управлять сложностью, ограничение которые можно увидеть это субъективное восприятие наблюдателя.

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

    Дополнение по примеру, если nav-theme__name это модификатор со значением name, то следуя классическому наименованию правильно будет nav-menu_theme_name (block_mod_value).

    Соглашение об наименовании является конкретикой и в этом аспекте важно не отходить от договоренностей.

    Дополнительно рекомендую посмотреть https://ru.bem.info/forum/?labels=css

    И все таки использовать глобальные стили (normalize/reset) противоречит прицепу: "Блок — независимый компонент", подробнее: опыт и рекомендация.
    Ответ написан
    Комментировать
  • Как настроить права в linux ubuntu, чтобы не париться?

    @ilyarsoftware
    Рекомендую настроить npm для текущего пользователя и не использовать sudo:

    echo "prefix=~/.local" > ~/.npmrc
    echo "export NODE_PATH=\$NODE_PATH:~/.local/lib/node_modules" >>  ~/.bashrc
    echo "export PATH=~/.local/bin:\$PATH" >>  ~/.bashrc
    echo "export PATH=./node_modules/.bin:\$PATH" >>  ~/.bashrc
    source ~/.bashrc

    После этого надо переустановить все глобальные пакеты.
    Ответ написан
    2 комментария