nnagornyy / gtd.vueeditor
Блочный редактор контента для 1с-bitrix
Installs: 467
Dependents: 0
Suggesters: 0
Security: 0
Stars: 3
Watchers: 0
Forks: 14
Open Issues: 17
Type:bitrix-module
Requires
- php: >=7.4.0
- ext-json: *
- composer/installers: ~1
- dev-master
- 1.0.0
- 0.38.1
- 0.38.0
- 0.37.1
- 0.37.0
- 0.36.9
- 0.36.5
- 0.36.1
- 0.36.0
- 0.33.1
- 0.33.0
- 0.32.5
- 0.32.3
- 0.32.1
- 0.32.0
- 0.31.1
- 0.31.0
- 0.30.6
- 0.30.5
- 0.30.3
- 0.30.2
- 0.30.1
- 0.30.0
- 0.12.1
- 0.12.0
- 0.11.3
- 0.11.0
- 0.10.5
- 0.10.4
- 0.10.3
- 0.10.2
- 0.10.1
- 0.10.0
- 0.9.0
- 0.8.0
- 0.7.0
- 0.6.0
- 0.5.1
- 0.5.0
- 0.4.0
- 0.3.10
- 0.3.9
- 0.3.2
- 0.3.1
- 0.3.0
- 0.2.0
- dev-dependabot/npm_and_yarn/app/json5-1.0.2
- dev-dependabot/npm_and_yarn/app/express-4.18.2
- dev-dependabot/npm_and_yarn/app/qs-6.5.3
- dev-dependabot/npm_and_yarn/app/decode-uri-component-0.2.2
- dev-dependabot/npm_and_yarn/app/loader-utils-1.4.2
- dev-dependabot/npm_and_yarn/app/minimatch-3.0.8
- dev-dependabot/npm_and_yarn/app/terser-5.14.2
- dev-dependabot/npm_and_yarn/app/node-sass-7.0.0
- dev-dependabot/npm_and_yarn/app/axios-0.21.2
- dev-dependabot/npm_and_yarn/app/buefy-0.7.2
- dev-dependabot/npm_and_yarn/app/path-parse-1.0.7
- dev-dependabot/npm_and_yarn/app/dns-packet-1.3.4
- dev-dependabot/npm_and_yarn/app/hosted-git-info-2.8.9
- dev-table-block
- dev-texteditor-block
- dev-gallery-block
- dev-dev-master
This package is auto-updated.
Last update: 2025-03-25 09:27:58 UTC
README
TO DO
Цели [модуль]
- Проверка установленной ноды и ее версии из админки
- Запуск билда из админки и парсинг данных (все ли блоки найдены)
- Брать блоки из других мест, например из /local/vueeditor/ для отделения модуля и блоков чисто для проекта
- Свойство для инфоблоков
- Свойство для пользовательских полей
- Блок текста с редактором - выбрать редактор
Блоки
на 22.12.2021
- vtext - Блок текста с виз.редактором quilljs
- vheader - Заголовок с выбором размера
- vquote - Текстовое поле для цитаты
- documents - Загрузка документов с названием и описанием
- gallery - Галерея изображений с названиями и описаниями
- youtubeVideo - Видео с youtube (по ссылке)
- vtable - Таблица
- vimage - Загрузка изображения
Регистрация своих блоков
каждый блок должен иметь файл конфигурации, наименование по принципу
blockName.config.json
пример конфига
{ "name": "Строка", "handler" : "\Gtd\Editor\Handler\String" "conf" : { "foo": "bar", "other": "some", "array": [ "one", "two", "three" ] } }
name - используется для текстового представления названия блока
handler - класс для обработки данных перед выводом в публичную часть
conf - пробрасывается в ваш блок
Ссылки
Применение
Это модуль для 1С-Битрикс. В нём содержится
- vue-компонент редактора на typescript со сборкой через webpack (папка app)
- код для подключения компонента как типа свойств инфоблока и uf-поля
- бэк для некоторых блоков, например сохранение файлов (папка service)
Установка
composer require nnagornyy/gtd.vueeditor
После этого установить модуль в админке битрикса через Установленные решения.
После установки должна появиться папка /local/vueeditor
Подключите модуль в init.php \Bitrix\Main\Loader::includeModule('gtd.vueeditor');
(он подключит js и стили редактора).
Добавление блока
При сборке блоки из /local/vueeditor
копируются в модуль/app/src/ext_block
При разработке блоков можно делать правки в самом ext_block, но потом обязательно скопировать в /local/vueeditor и закоммитить.
Структура блока:
папка = код названия блока,
конфиг = код.config.json,
компонент = код.vue
В компоненте в data обязательно должно быть поле editorData
, информация из него будет сохраняться как значение блока.
В качестве примера можно скопировать vheader со своим названием и делать на основе него.
Префикс v в некоторых готовых блоках нужен только для того, чтобы они не пересекались с существующими тегами.
Пример компонента:
<template> <el-input v-model="editorData" placeholder="Введите заголовок"></el-input> </template> <script> export default { name: "simpleHeader", data(){ return{ editorData: '', } } } </script> <style scoped> </style>
Если инициируем редактор вручную (например при использовании как вью-компонент), добавляем название нового блока в параметр allowBlock конструктора.
Сборка
Изнутри модуля
cd local/modules/gtd.vueeditor/app
yarn build-prod
Или можно добавить команду сборки снаружи (пример для /local/package.json
)
"scripts": { "build:editor": "cd modules/gtd.vueeditor/app; yarn; yarn build-prod", "dev:editor": "cd modules/gtd.vueeditor/app; yarn; yarn build-dev" },
Артефакты сборки сохраняются в /local/vueeditor_assets/
Если вы коммитите артефакты - нужно руками добавлять папку в гит после пересборки с новыми блоками.
Если вы собираете налету - добавьте папку в гитигнор.
Использование как vue-компонента
Конструктор блочного редактора существует как глобальная переменная document.vueeditor(value, inputName, allowBlock, appId)
.
Можно добавить компонент-обертку в свой проект, которая будет инициировать объект редактора.
Пример:
<template> <div id="editor"></div> </template> <script> export default { name: "editor", props:{ value:{ type: Array, default: function(){ return []; } }, allowBlocks:{ type: Array, default: function(){ return []; } } }, data(){ return {} }, mounted() { const editor = new document.vueeditor(JSON.parse(JSON.stringify(this.value)) , 'someName', this.allowBlocks, 'editor'); editor .onValueChange((value) => { this.$emit('input', JSON.parse(JSON.stringify(value))); }) .initEditor(); } } </script>
А в компоненте, где используется блочный редактор, добавляем
<editor v-model="event.contentRaw" :allow-blocks="editorBlocks" ></editor> ... import Editor from 'path2component/editor.vue'; ... components: { Editor }, ... editorBlocks: [ 'vtext', 'documents', 'vquote', 'someNewBlock' ],
Использование как свойства ИБ
// todo
Использование как UF-поля
// todo
Добавление обработчика на получение данных
При получении данных из БД можно воспользоваться хендлерами блоков и обработать данные прежде, чем вывести их.
Важно! В сам блочный редактор должны идти необработанными данные, обработка нужна для вывода в публичке.
- Используем парсер, чтобы получить обработанные данные блока
public function getContent(): array { \Bitrix\Main\Loader::includeModule('gtd.vueeditor'); $arr = $this->getContentArrayFromDB(); $editor = new \Gtd\VueEditor\Block\BlockParser($arr, $_SERVER['DOCUMENT_ROOT'].'/local/vueeditor/'); $res = $editor->processingBlock(); return $res; }
Первый параметр - десериализованный массив из БД как он пришёл из блочного редактора.
Второй параметр (необязательный) - где искать конфиги для кастомных блоков (по умолчанию ищет в модуль/app/src/ext_block).
Путь к конфигам нужен, если вы коммитите артефакты и не запускаете сборку на бою. Тогда компоненты из /local/vueeditor не попадут в модуль/app/src/ext_block на бою, и скрипт не найдет конфиги в папке по умолчанию.
-
Добавляем класс, имплементирующий интерфейс
\Gtd\VueEditor\Block\Handler
-
Добавляем путь к классу в конфиг блока.
например, в myblock.conj.json:"handler": "\\My\\Module\\Blocks\\MyBlock"
-
Реализуем методы setBlock(\Gtd\VueEditor\Block\Block $block) и getData() Можно скопировать их из дефолтного хендлера
\Gtd\VueEditor\Block\DefaultHandler
вgtd.vueeditor/lib/block/defaulthandler.php
Метод setBlock получает блок как есть, здесь можно обработать данные или просто записать их в переменную класса, чтобы потом использовать в getData.
Метод getData должен вернуть данные, которые попадут в поле content
блока и будет потом использовать при выводе.
Пресеты
// todo