Я пытаюсь интегрировать SonataNewsBundle в Symfony 4.4.
CKEditor не показывает в поле «Content» для сообщения новостей. Я прочитал, наверное, все, что можно найти в Интернете, и не смог найти способ решить эту проблему.
fos_ck_editor.yaml
:
editor:
base_path: "bundles/fosckeditor"
js_path: "bundles/fosckeditor/ckeditor.js"
input_sync: true
default_config: base_config
configs:
base_config:
toolbar: full
twig:
form_themes:
- '@FOSCKEditor/Form/ckeditor_widget.html.twig'
sonata_admin.yaml
:
sonata_admin:
title: 'Something...'
dashboard:
blocks:
- { type: sonata.admin.block.admin_list, position: left }
options:
legacy_twig_text_extension: false
security:
handler: sonata.admin.security.handler.role
# DEPRECATED: override templates to enable CKEditor
templates:
edit: Admin/CRUD/edit.html.twig
# extra CSS/JS to for SonataFormatter
assets:
extra_javascripts:
- bundles/fosckeditor/ckeditor.js
- bundles/sonataformatter/vendor/markitup-markitup/markitup/jquery.markitup.js
- bundles/sonataformatter/markitup/sets/markdown/set.js
- bundles/sonataformatter/markitup/sets/html/set.js
- bundles/sonataformatter/markitup/sets/textile/set.js
extra_stylesheets:
- bundles/sonataformatter/markitup/skins/sonata/style.css
- bundles/sonataformatter/markitup/sets/markdown/style.css
- bundles/sonataformatter/markitup/sets/html/style.css
- bundles/sonataformatter/markitup/sets/textile/style.css
# General block configuration
sonata_block:
blocks:
# Enable the SonataAdminBundle block
sonata.admin.block.admin_list:
contexts: [admin]
# Enable SonataFormatter block
sonata.formatter.block.formatter: ~
sonata_formatter.yaml
:
sonata_formatter:
#default_formatter: text
default_formatter: markdown
formatters:
markdown:
service: sonata.formatter.text.markdown
extensions:
- sonata.formatter.twig.control_flow
- sonata.formatter.twig.gist
- sonata.media.formatter.twig
text:
service: sonata.formatter.text.text
extensions:
- sonata.formatter.twig.control_flow
- sonata.formatter.twig.gist
- sonata.media.formatter.twig
rawhtml:
service: sonata.formatter.text.raw
extensions:
- sonata.formatter.twig.control_flow
- sonata.formatter.twig.gist
- sonata.media.formatter.twig
richhtml:
service: sonata.formatter.text.raw
extensions:
- sonata.formatter.twig.control_flow
- sonata.formatter.twig.gist
- sonata.media.formatter.twig
twig:
service: sonata.formatter.text.twigengine
extensions: [] # Twig formatter cannot have extensions
ckeditor:
templates:
browser: '@SonataFormatter/Ckeditor/browser.html.twig'
upload: '@SonataFormatter/Ckeditor/upload.html.twig'
Потом небольшой оверрайд (ради экспериментов) в sonata_news.yaml
:
sonata_news:
(...cut...)
# override defaults
admin:
post:
class: App\Admin\PostAdmin
После редактирования Пост просто уходит меня с пустым «Содержимое» и редактируемым текстовым полем «Необработанное содержимое».
Когда я следую одному из найденных мной советов и применяю класс ckeditor
CSS к полю «Содержимое» с приведенным ниже фрагментом, CKEditor действительно показывает, но опять же в поле «Raw content» (а не «Content»), без какой-либо реакции / изменений в настройках средства форматирования, без использования фактических форматов ...
PostAdmin.php
(...cut...)
protected function configureFormFields(FormMapper $formMapper)
{
// get parent field configuration
parent::configureFormFields($formMapper);
$isHorizontal = 'horizontal' === $this->getConfigurationPool()->getOption('form_type');
$formMapper
->with('group_post')
->add('content', FormatterType::class, [
'event_dispatcher' => $formMapper->getFormBuilder()->getEventDispatcher(),
'format_field' => 'contentFormatter',
'source_field' => 'rawContent',
'source_field_options' => [
'horizontal_input_wrapper_class' => $isHorizontal ? 'col-lg-12' : '',
'attr' => [
//'class' => 'ckeditor', // NOTE: only way to get it half-assed-working
'rows' => 20
]
],
'ckeditor_context' => 'news',
'target_field' => 'content',
'listener' => true,
])
->end()
;
}
На консоли отладки JS нет ошибок, а на сетевой консоли нет ресурсов 404 ...
** EDIT:
Как и я сравнение с необработанным HTML выводом https://demo.sonata-project.org/ при редактировании сообщения и моей собственной формой, я вижу, что мне не хватает некоторых встроенных JavaScript код, который ссылается на селектор формата и сам CKEditor. Откуда он берется и почему на моем конце не отображается?
** EDIT2:
... и, по-видимому, он исходит из formatter.html.twig
;
vendor$ grep "This code requires CKEDITOR and jQuery" -r *
sonata-project/formatter-bundle/src/Resources/views/Form/formatter.html.twig: // This code requires CKEDITOR and jQuery MarkItUp
** EDIT3:
Я ясно вижу, что проблема в том, что Symfony 4.4 не разрешает объявление yaml, требуемое пакетом форматирования, как указано здесь: https://sonata-project.org/bundles/formatter/2-x/doc/reference/formatter_widget.html
twig:
debug: '%kernel.debug%'
strict_variables: '%kernel.debug%'
form:
resources:
# ...
- 'SonataFormatterBundle:Form:formatter.html.twig'
Преобразование этой части в формат Symfony 4.4 тоже не работает:
framework:
templating:
form:
resources:
- 'SonataFormatterBundle:Form:formatter.html.twig'
Кто угодно?