PHPackages                             kiberden/content - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. kiberden/content

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

kiberden/content
================

06.0k↓33.3%PHP

Since Apr 12Pushed 5y ago1 watchersCompare

[ Source](https://github.com/kiberden/content)[ Packagist](https://packagist.org/packages/kiberden/content)[ RSS](/packages/kiberden-content/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

Bxcontent
=========

[](#bxcontent)

[![Latest Stable Version](https://camo.githubusercontent.com/4019e0cab37e041a0e54e76baac74f2746dde5511fc879d79e4efc991ebe7e60/68747470733a2f2f706f7365722e707567782e6f72672f6d617276696e3235352f6278636f6e74656e742f762f737461626c652e706e67)](https://packagist.org/packages/marvin255/bxcontent)[![License](https://camo.githubusercontent.com/a720159be7a79149e38898c1e67203fea8c553d88a664dcec3ad55509475d568/68747470733a2f2f706f7365722e707567782e6f72672f6d617276696e3235352f6278636f6e74656e742f6c6963656e73652e737667)](https://packagist.org/packages/marvin255/bxcontent)[![Build Status](https://camo.githubusercontent.com/ba1b78e7be9ab013fe8926a56dd662c807bd383d7eacf63ec21ea174d86c946c/68747470733a2f2f7472617669732d63692e6f72672f6d617276696e3235352f6278636f6e74656e742e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/marvin255/bxcontent)

Дополнительное поле для элементов инфоблока с возможностью создания сложных сниппетов со сложным html для контент менеджеров.

Оглавление
----------

[](#оглавление)

- [Установка](#%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0).
- [Использование](#%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5).
- [Регистрация сниппетов в системе](#%D0%A0%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F-%D1%81%D0%BD%D0%B8%D0%BF%D0%BF%D0%B5%D1%82%D0%BE%D0%B2-%D0%B2-%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B5).
- [Доступные типы элементов управления](#%D0%94%D0%BE%D1%81%D1%82%D1%83%D0%BF%D0%BD%D1%8B%D0%B5-%D1%82%D0%B8%D0%BF%D1%8B-%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2-%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F).
- [Представление результата](#%D0%9F%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D1%80%D0%B5%D0%B7%D1%83%D0%BB%D1%8C%D1%82%D0%B0%D1%82%D0%B0).
- [Добавление своих js и стилей](#%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D1%81%D0%B2%D0%BE%D0%B8%D1%85-js-%D0%B8-%D1%81%D1%82%D0%B8%D0%BB%D0%B5%D0%B9).
- [Сборки сниппетов](#%D0%A1%D0%B1%D0%BE%D1%80%D0%BA%D0%B8-%D1%81%D0%BD%D0%B8%D0%BF%D0%BF%D0%B5%D1%82%D0%BE%D0%B2).

Установка
---------

[](#установка)

**С помощью [Composer](https://getcomposer.org/doc/00-intro.md)**

1. Добавьте в ваш composer.json в раздел `require`:

    ```
    "require": {
        "marvin255/bxcontent": "~0.4"
    }
    ```
2. Если требуется автоматическое обновление библиотеки через composer, то добавьте в раздел `scripts`:

    ```
    "scripts": [
        {
            "post-install-cmd": "\\marvin255\\bxcontent\\installer\\Composer::injectModule",
            "post-update-cmd": "\\marvin255\\bxcontent\\installer\\Composer::injectModule",
        }
    ]
    ```
3. Выполните в консоли внутри вашего проекта:

    ```
    composer update

    ```
4. Если пункт 2 не выполнен, то скопируйте папку `vendors/marvin255/bxcontent/marvin255.bxcontent` в папку `local/modules` вашего проекта.
5. Установите модуль в административном разделе 1С-Битрикс "Управление сайтом".

**Обычная**

1. Скачайте архив с репозиторием.
2. Скопируйте папку `marvin255.bxcontent` из архива репозитория в папку `local/modules` вашего проекта.
3. Установите модуль в административном разделе 1С-Битрикс "Управление сайтом".

Использование
-------------

[](#использование)

В административной части для управления инфоблоками появится новое свойство `Конструктор html`. Соответственно, чтобы использовать конструктор нужно создать для элементов нужного инфоблока пользовательское свойство типа `Конструктор html`. После этого на странице редактирования элемента появится конструктор.

Основная единица конструктора - сниппет. Каждый сниппет должен быть задан как объект, реализующий интерфейс `\marvin255\bxcontent\snippets\SnippetInterface`. Сниппет имеет два основных поля: название сниппета и массив с элементами управления.

В качестве элементов управления должны быть заданы объекты, реализующие интерфейс `\marvin255\bxcontent\controls\ControlInterface`. Для каждого элемента управления в обязательном порядке должны быть заданы: тип (передается в js для правильного отображения), имя (значение элемента управления будет создано и передано в базу данных под этим именем) и название (отобразится в интерфейсе). Кроме того, каждый элемент управления можно сделать множественным, если указать параметр `multiple` в таком случае элемент вернет в качестве значения массив и в конструкторе будет отображено несколько полей для данного элемента.

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

Для управления типами сниппетов в системе используется класс `\marvin255\bxcontent\SnippetManager`, с помощью которого можно получить все зарегистрированные сниппеты в системе и задать новые типы сниппетов. `\marvin255\bxcontent\SnippetManager` реализует шаблон singleton и доступен по вызову `\marvin255\bxcontent\SnippetManager::getInstance()`.

Регистрация сниппетов в системе
-------------------------------

[](#регистрация-сниппетов-в-системе)

Для того, чтобы сниппеты появились в системе, они должны быть зарегистрированы в `\marvin255\bxcontent\SnippetManager`. Для этого существует событие `collectSnippets`, в которое единственным параметром передается ссылка на объект `\marvin255\bxcontent\SnippetManager`. Для регистрации сниппета не обязательно создавать отдельный класс, можно воспользоваться общим классом `\marvin255\bxcontent\snippets\Base`, который поставляется вместе с модулем.

Пример регистрации сниппетов:

```
AddEventHandler('marvin255.bxcontent', 'collectSnippets', 'collectSnippetsHandler');
function collectSnippetsHandler($manager)
{
    //сниппет с текстом и выпадающим списком
    $manager->set('text_select', new \marvin255\bxcontent\snippets\Base([
        'label' => 'Текст и выпадающий список',
        'controls' => [
            new \marvin255\bxcontent\controls\Editor([
                'name' => 'description',
                'label' => 'Текстовый редактор',
            ]),
            new \marvin255\bxcontent\controls\Select([
                'name' => 'class',
                'label' => 'Список',
                'prompt' => '-',
                'list' => [
                    'item1' => 'Опция 1',
                    'item2' => 'Опция 2',
                ],
            ]),
        ],
    ]));

    //сниппет со слайдером
    $manager->set('slider', new \marvin255\bxcontent\snippets\Base([
        'label' => 'Слайдер',
        'controls' => [
            new \marvin255\bxcontent\controls\Input([
                'name' => 'title',
                'label' => 'Заголовок слайдера',
            ]),
            new \marvin255\bxcontent\controls\Combine([
                'name' => 'slides',
                'label' => 'Слайды',
                'multiple' => true,
                'elements' => [
                    new \marvin255\bxcontent\controls\File([
                        'name' => 'image',
                        'label' => 'Файл с изображением',
                    ]),
                    new \marvin255\bxcontent\controls\Input([
                        'name' => 'sign',
                        'label' => 'Подпись',
                    ]),
                ],
            ]),
        ],
    ]));
}
```

Доступные типы элементов управления
-----------------------------------

[](#доступные-типы-элементов-управления)

Поскольку все элементы управления обрабатываются на стороне js, то они должны быть описаны и в php и в js. Соответственно, их количество на данный момент ограничено:

1. `\marvin255\bxcontent\controls\Input` - обычная строка для ввода текста,
2. `\marvin255\bxcontent\controls\Editor` - wysiwyg-редактор,
3. `\marvin255\bxcontent\controls\Textarea` - поле для ввода нескольких строк текста (textarea),
4. `\marvin255\bxcontent\controls\File` - поле с возможностью выбрать или загрузить файл в файловую систему Битрикса,
5. `\marvin255\bxcontent\controls\Image` - поле с возможностью выбрать или загрузить изображение в файловую систему Битрикса,
6. `\marvin255\bxcontent\controls\Select` - поле с ограниченным количеством вариантов для выбора (select),
7. `\marvin255\bxcontent\controls\Combine` - поле с помощью которого можно скомбинировать несколько других полей.

Представление результата
------------------------

[](#представление-результата)

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

При создании каждого сниппета можно указать объект, реализующий интерфейс `\marvin255\bxcontent\views\ViewInterface`, который будет отвечать за отображение данного конкретного сниппета.

```
AddEventHandler('marvin255.bxcontent', 'collectSnippets', 'collectSnippetsHandler');
function collectSnippetsHandler($manager)
{
    //получаем объект приложения битрикса для отображения компонентов
    global $APPLICATION;
    //сниппет с текстом и выпадающим списком
    $manager->set('text_select', new \marvin255\bxcontent\snippets\Base([
        'view' => new \marvin255\bxcontent\views\Component($APPLICATION, 'custom:slider'),
        'label' => 'Текст и выпадающий список',
        'controls' => [
            new \marvin255\bxcontent\controls\Editor([
                'name' => 'description',
                'label' => 'Текстовый редактор',
            ]),
            new \marvin255\bxcontent\controls\Select([
                'name' => 'class',
                'label' => 'Список',
                'prompt' => '-',
                'list' => [
                    'item1' => 'Опция 1',
                    'item2' => 'Опция 2',
                ],
            ]),
        ],
    ]));
}
```

Соотвественно, для вывода сформированного для всех сниппетов html, достаточно будет вызвать метод `render` менеджера сниппетов. Например, для компонента `bitrix:news.detail` это будет выглядеть так:

```
//template.php
echo \marvin255\bxcontent\SnippetManager::getInstance()->render($arResult['PROPERTIES']['html_constructor_property']['VALUE']);
```

либо, при условии, что свойство указано для отображения:

```
//template.php
echo $arResult['DISPLAY_PROPERTIES']['html_constructor_property']['DISPLAY_VALUE'];
```

Добавление своих js и стилей
----------------------------

[](#добавление-своих-js-и-стилей)

Менеджер сниппетов обладает функционалом для добавления js и css.

Например, в событии можно указать не только специфический сниппет, но так же и скрипты и стили для него:

```
AddEventHandler('marvin255.bxcontent', 'collectSnippets', 'collectSnippetsHandler');
function collectSnippetsHandler($manager)
{
    $manager->addJs('/bitrix/js/marvin255.bxcontent/controls.js');
    $manager->addCss('/bitrix/css/marvin255.bxcontent/plugin.css');
}
```

Сборки сниппетов
----------------

[](#сборки-сниппетов)

Часть сниппетов заранее определена и добавлена в состав библиотеки. Сниппет из сборки должен наследовать классу `\marvin255\bxcontent\packs\Pack`. Такой сниппет может быть добавлен к менеджеру с помощью функции `\marvin255\bxcontent\packs\Pack::setTo`, которая первым параметром принимает объект менеджера, а вторым - массив настроек для сниппета. Кроме того, сниппет из сборки имеет встроенные методы для отображения.

```
use marvin255\bxcontent\packs\bootstrap;

AddEventHandler('marvin255.bxcontent', 'collectSnippets', 'collectSnippetsHandler');
function collectSnippetsHandler($manager)
{
    bootstrap\Carousel::setTo($manager, ['label' => 'кастомное название сниппета перепишет то, что задано в сниппете']);
    bootstrap\Collapse::setTo($manager);
    bootstrap\Media::setTo($manager);
    bootstrap\Tabs::setTo($manager);
}
```

**Сборка сниппетов для bootstrap**

`\marvin255\bxcontent\packs\bootstrap\Carousel` - [слайдер из bootsrap](https://getbootstrap.com/docs/3.3/javascript/#carousel).

`\marvin255\bxcontent\packs\bootstrap\Collapse` - [аккордеон из bootsrap](https://getbootstrap.com/docs/3.3/javascript/#collapse).

`\marvin255\bxcontent\packs\bootstrap\Tabs` - [закладки из bootsrap](https://getbootstrap.com/docs/3.3/javascript/#tabs).

`\marvin255\bxcontent\packs\bootstrap\Media` - [медиа объекты из bootsrap](https://getbootstrap.com/docs/3.3/components/#media).

###  Health Score

21

—

LowBetter than 18% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity21

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity30

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/7109956?v=4)[Kiber Den](/maintainers/kiberden)[@kiberden](https://github.com/kiberden)

---

Top Contributors

[![kiberden](https://avatars.githubusercontent.com/u/7109956?v=4)](https://github.com/kiberden "kiberden (3 commits)")

### Embed Badge

![Health badge](/badges/kiberden-content/health.svg)

```
[![Health](https://phpackages.com/badges/kiberden-content/health.svg)](https://phpackages.com/packages/kiberden-content)
```

###  Alternatives

[nodejs-php-fallback/stylus

PHP wrapper to execute stylus node package or fallback to a PHP alternative

11135.5k4](/packages/nodejs-php-fallback-stylus)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
