diff --git a/assets/scss/composer.scss b/assets/scss/composer.scss index 4aa25f0f4..409935c9b 100644 --- a/assets/scss/composer.scss +++ b/assets/scss/composer.scss @@ -396,15 +396,19 @@ $color_red: #f56954; margin-top: 11px; } -.page-composer__container__child__edit { +.page-composer__container__child__edit, +.page-composer__container__child__error { border-left: 3px solid #f9f9f9; color: #404040 !important; - cursor: pointer; display: block; padding: 10px 15px 10px 27px; text-decoration: none !important; } +.page-composer__container__child__edit { + cursor: pointer; +} + .page-composer__container__child__right { position: absolute; right: 5px; diff --git a/src/Admin/BlockAdmin.php b/src/Admin/BlockAdmin.php index 1b1638401..ac2f94e86 100644 --- a/src/Admin/BlockAdmin.php +++ b/src/Admin/BlockAdmin.php @@ -172,12 +172,6 @@ protected function configureFormFields(FormMapper $form): void $form->add('position', IntegerType::class); } - $form->end(); - - $form->with('options', $optionsGroupOptions); - - $this->configureBlockFields($form, $block); - if (false !== $isComposer) { $form->add('enabled', HiddenType::class, ['data' => true]); } else { @@ -185,12 +179,18 @@ protected function configureFormFields(FormMapper $form): void } $form->end(); + + $form->with('options', $optionsGroupOptions); + + $this->configureBlockFields($form, $block); + + $form->end(); } else { $form ->with('options', $optionsGroupOptions) - ->add('type', ServiceListType::class, ['context' => 'sonata_page_bundle']) - ->add('enabled') - ->add('position', IntegerType::class) + ->add('type', ServiceListType::class, ['context' => 'sonata_page_bundle']) + ->add('enabled') + ->add('position', IntegerType::class) ->end(); } } diff --git a/src/Resources/public/app.css b/src/Resources/public/app.css index 0e7a8f0ee..1a85fddf6 100644 --- a/src/Resources/public/app.css +++ b/src/Resources/public/app.css @@ -1 +1 @@ -.page-composer__page-preview{background-color:#f9f9f9;border:1px solid #dcdcdc;border-radius:3px;margin-bottom:20px;padding:3px}.page-composer__page-preview__containers{min-height:400px;position:relative}.page-composer__page-preview__container,.page-composer__page-preview__container--no-block{color:#404040!important;display:block;padding:3px;position:absolute;text-decoration:none!important}.page-composer__page-preview__container__content{background:#fff;border:3px solid #fff;border-radius:2px;box-shadow:0 0 1px rgba(0,0,0,.35);box-sizing:border-box;color:#888;cursor:pointer;height:100%;overflow:hidden;padding:5px 7px;position:relative;width:100%}.page-composer__page-preview__container__content .drop-indicator{background:#8dd8c3;border-radius:2px;color:#fff;display:none;font-size:36px;height:46px;left:50%;line-height:46px;margin-left:-23px;margin-top:-23px;position:absolute;text-align:center;top:50%;width:46px}.page-composer__page-preview__add-block{position:absolute;right:10px;top:6px}.page-composer__page-preview__add-block .fa-dot-circle-o{display:none}.page-composer__block-type-selector{background:#fff;border-bottom:1px solid #ddd;border-top:1px solid #ddd;padding:7px 15px}.page-composer__block-type-selector label{display:inline-block;margin:0}.page-composer__block-type-selector select{font-size:12px;height:26px;line-height:26px;margin-bottom:0}.page-composer__container__view{background-color:#f9f9f9;border:1px solid #dcdcdc;border-radius:2px;position:relative}.page-composer__container__view__header{color:#3c8dbc!important;font-size:24px!important;line-height:1em!important;margin:0!important;padding:10px 15px}.page-composer__container__view__notice{background:#cfc4a7;border-radius:2px;color:#fff;display:none;font-size:11px;padding:3px 9px;position:absolute;right:15px;top:10px}.page-composer__container__view__notice.persist{padding-right:3px}.page-composer__container__view__notice.success{background:#5cc4a7}.page-composer__container__view__notice.error{background:#f56954}.page-composer__container__view__notice .close-notice{background:rgba(0,0,0,.35);border-radius:2px;cursor:pointer;display:inline-block;margin-left:10px;padding:0 5px}.page-composer__container__view .nav-tabs{background-color:#f9f9f9;border-bottom:none}.page-composer__container__view .nav-tabs>li>a{border:none!important;border-radius:0;color:#5cc4a7;margin:0}.page-composer__container__view .tabbable{background:#fff}.page-composer__container__view .well{background:#ededed;border:none;border-radius:0;box-shadow:none;margin:0}.page-composer__orphan-containers{background-color:#f9f9f9;border:1px solid #dcdcdc;border-radius:2px}.page-composer__orphan-containers__header{border-bottom:1px solid #dcdcdc;font-size:20px!important;line-height:1em!important;margin:0!important;padding:10px 15px}.page-composer__orphan-containers ul{list-style:none;margin:0;padding:0}.page-composer__orphan-container{border-left:3px solid #f9f9f9;border-top:1px solid #dcdcdc;cursor:pointer;display:block;padding:5px 15px 5px 12px}.page-composer__orphan-container.active{border-left-color:#3c8dbc}.page-composer__orphan-container:hover{background:#fff;border-left-color:#3c8dbc}.page-composer__orphan-container:first-child{border-top:none}.page-composer__page-preview__container__content:hover{box-shadow:0 0 1px rgba(0,0,0,.7);color:#404040}.page-composer__page-preview__container--no-block .page-composer__page-preview__container__content{background:transparent;border:1px dotted #ccc;box-shadow:none;color:#999;cursor:auto}.page-composer__page-preview__container.hover .page-composer__page-preview__container__content{border-color:#5cc4a7!important;border-style:dotted}.page-composer__page-preview__container.hover .drop-indicator{display:block}@keyframes droppedin{0%{background-color:#fff;border-color:#fff}50%{background-color:#abf8d9;border-color:#5cc4a7}to{background-color:#fff;border-color:#fff}}.page-composer__page-preview__container.dropped .page-composer__page-preview__container__content{animation-duration:.6s;animation-name:droppedin}.page-composer__page-preview__container.active .page-composer__page-preview__container__content{border-color:#3c8dbc;box-shadow:none;color:#404040}.page-composer__page-preview__container.active .page-composer__page-preview__add-block .fa-dot-circle-o,.page-composer__page-preview__container:hover .page-composer__page-preview__add-block .fa-dot-circle-o{display:inline-block}.page-composer__page-preview__container.active .page-composer__page-preview__add-block .fa-circle-o,.page-composer__page-preview__container:hover .page-composer__page-preview__add-block .fa-circle-o{display:none}.page-composer__page-preview__add-block:hover{background:#fff;color:#000;text-decoration:none}.page-composer__container__child-count{color:#999;font-size:12px!important;margin-top:4px}.page-composer__container__child .badge,.page-composer__container__child-count .badge{background-color:#3c8dbc;text-shadow:none}.page-composer__container__child>.badge{position:absolute;right:15px;top:8px}.page-composer__container__main-edition-area{background:#fff;border-bottom:1px solid #ddd;border-top:1px solid #ddd;display:none;position:relative}.page-composer__container__main-edition-area form{margin:0}.page-composer__container__children{list-style:none;margin:0 0 10px!important;padding:0}.page-composer__container__child{border-top:1px solid #ddd;min-height:40px;position:relative}.page-composer__container__child__content,.page-composer__container__child__helper{border-left:3px solid #3c8dbc}.page-composer__container__child__helper{background:hsla(0,0%,100%,.85);box-shadow:0 0 2px rgba(0,0,0,.35);padding:0 10px;position:absolute}.page-composer__container__child__helper h4{font-size:14px!important}.page-composer__container__child:first-child{border-top:none}.page-composer__container__child__content{display:none}.page-composer__container__child__content form{margin:0!important}.page-composer__container__child .box{border:none;border-radius:0;box-shadow:none;margin-bottom:0}.page-composer__container__child--expanded .page-composer__container__child__content{display:block}.page-composer__container__child__loader{background:hsla(0,0%,100%,.75);bottom:0;display:none;left:0;position:absolute;right:0;text-align:center;top:0}.page-composer__block-type-selector__loader,.page-composer__container__child__loader span{background:#aaa;border-radius:12px;box-sizing:border-box;color:#fff;display:inline-block;font-size:10px;height:24px;line-height:24px;padding:0 9px}.page-composer__block-type-selector__loader{display:none}.page-composer__container__child__loader span{margin-top:11px}.page-composer__container__child__edit{border-left:3px solid #f9f9f9;color:#404040!important;cursor:pointer;display:block;padding:10px 15px 10px 27px;text-decoration:none!important}.page-composer__container__child__right{position:absolute;right:5px;top:10px}.page-composer__container__child__remove,.page-composer__container__child__switch-enabled{display:none}.page-composer__container__child--expanded .page-composer__container__child__remove,.page-composer__container__child--expanded .page-composer__container__child__switch-enabled,.page-composer__container__child:hover .page-composer__container__child__remove,.page-composer__container__child:hover .page-composer__container__child__switch-enabled,.page-composer__container__child__enabled{display:inline-block}.page-composer__container__child__remove .badge,.page-composer__container__child__switch-enabled .badge{background-color:#f56954;cursor:pointer}.page-composer__container__child__remove__confirm{display:none}.page-composer__container__child__remove__confirm span{background:#eee;border-radius:2px;color:#fff;cursor:pointer;display:inline-block;padding:0 7px}.page-composer__container__child__remove__confirm span.yes{background-color:#00a65a}.page-composer__container__child__remove__confirm span.cancel{background-color:#f56954}.page-composer__container__child__toggle{display:none;left:10px;position:absolute;top:10px}.page-composer__container__child__toggle .fa-chevron-up{display:none}.page-composer__container__child--expanded .page-composer__container__child__toggle .fa-chevron-up{display:inline-block}.page-composer__container__child--expanded .page-composer__container__child__toggle .fa-chevron-down{display:none}.page-composer__container__child__edit:hover{background:#fff;border-left-color:#3c8dbc}.page-composer__container__child--expanded .page-composer__container__child__edit{border-left-color:#3c8dbc;box-shadow:inset 0 0 2px rgba(0,0,0,.35)}.page-composer__container__child__edit:hover .page-composer__container__child__toggle{display:inline-block}.page-composer__container__child h4{font-size:14px!important;margin:0!important}a.sonata-block-type>span{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}div.cms-fake-block{display:none}li.sonata-page-menu-children-element{float:left;font-size:16px;list-style:none;margin-left:20px}a.sonata-media-gallery-media-item-link{border:1px solid #ddd;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,.075);display:block;float:left;margin:0 0 18px 20px;padding:4px}a.sonata-media-gallery-media-item-link:hover{border-color:#0069d6;box-shadow:0 1px 4px rgba(0,105,214,.25)}.page-tree{list-style:none;margin-left:15px;margin-right:15px;padding-bottom:10px;padding-left:0}.page-tree ul{list-style:none;padding-left:30px}.page-tree__item{border:1px solid #ddd;border-radius:2px;color:#444;display:block;margin-bottom:5px;padding:7px 15px 7px 7px;position:relative}.page-tree__item .label{border-radius:2px;font-size:12px;margin-top:2px}.page-tree__item .label-warning{margin-right:5px}.page-tree__item .fa-caret-right{color:#3c8dbc;left:-22px;position:absolute;top:9px}.page-tree__item:hover{background:#eee;color:#000}.page-tree__item__is-hybrid{margin-right:5px}.page-tree__item.is-active{border:1px solid #3c8dbc}.page-tree__item.is-active:after,.page-tree__item.is-active:before{border:solid transparent;content:" ";height:0;left:100%;pointer-events:none;position:absolute;top:50%;width:0}.page-tree__item.is-active:after{border-color:hsla(0,0%,100%,0) hsla(0,0%,100%,0) hsla(0,0%,100%,0) #fff;border-width:8px;margin-top:-8px}.page-tree__item.is-active:before{border-color:hsla(0,0%,100%,0) hsla(0,0%,100%,0) hsla(0,0%,100%,0) #3c8dbc;border-width:9px;margin-top:-9px}.page-tree__item.is-active:hover:after{border-left-color:#eee}.page-tree__item.is-toggled .fa-caret-right{transform:rotate(90deg)}.page-tree__item__edit{font-weight:700}.page-tree__item__edit:hover{text-decoration:underline}.page-tree--toggleable li>ul{display:none}.page-tree--toggleable .page-tree__item{margin-left:25px}.page-tree--toggleable .page-tree__item .fa-caret-right{cursor:pointer}.page-tree--toggleable .page-tree__item .fa-caret-right:after{bottom:-5px;content:"";left:-10px;position:absolute;right:-10px;top:-5px} \ No newline at end of file +.page-composer__page-preview{background-color:#f9f9f9;border:1px solid #dcdcdc;border-radius:3px;margin-bottom:20px;padding:3px}.page-composer__page-preview__containers{min-height:400px;position:relative}.page-composer__page-preview__container,.page-composer__page-preview__container--no-block{color:#404040!important;display:block;padding:3px;position:absolute;text-decoration:none!important}.page-composer__page-preview__container__content{background:#fff;border:3px solid #fff;border-radius:2px;box-shadow:0 0 1px rgba(0,0,0,.35);box-sizing:border-box;color:#888;cursor:pointer;height:100%;overflow:hidden;padding:5px 7px;position:relative;width:100%}.page-composer__page-preview__container__content .drop-indicator{background:#8dd8c3;border-radius:2px;color:#fff;display:none;font-size:36px;height:46px;left:50%;line-height:46px;margin-left:-23px;margin-top:-23px;position:absolute;text-align:center;top:50%;width:46px}.page-composer__page-preview__add-block{position:absolute;right:10px;top:6px}.page-composer__page-preview__add-block .fa-dot-circle-o{display:none}.page-composer__block-type-selector{background:#fff;border-bottom:1px solid #ddd;border-top:1px solid #ddd;padding:7px 15px}.page-composer__block-type-selector label{display:inline-block;margin:0}.page-composer__block-type-selector select{font-size:12px;height:26px;line-height:26px;margin-bottom:0}.page-composer__container__view{background-color:#f9f9f9;border:1px solid #dcdcdc;border-radius:2px;position:relative}.page-composer__container__view__header{color:#3c8dbc!important;font-size:24px!important;line-height:1em!important;margin:0!important;padding:10px 15px}.page-composer__container__view__notice{background:#cfc4a7;border-radius:2px;color:#fff;display:none;font-size:11px;padding:3px 9px;position:absolute;right:15px;top:10px}.page-composer__container__view__notice.persist{padding-right:3px}.page-composer__container__view__notice.success{background:#5cc4a7}.page-composer__container__view__notice.error{background:#f56954}.page-composer__container__view__notice .close-notice{background:rgba(0,0,0,.35);border-radius:2px;cursor:pointer;display:inline-block;margin-left:10px;padding:0 5px}.page-composer__container__view .nav-tabs{background-color:#f9f9f9;border-bottom:none}.page-composer__container__view .nav-tabs>li>a{border:none!important;border-radius:0;color:#5cc4a7;margin:0}.page-composer__container__view .tabbable{background:#fff}.page-composer__container__view .well{background:#ededed;border:none;border-radius:0;box-shadow:none;margin:0}.page-composer__orphan-containers{background-color:#f9f9f9;border:1px solid #dcdcdc;border-radius:2px}.page-composer__orphan-containers__header{border-bottom:1px solid #dcdcdc;font-size:20px!important;line-height:1em!important;margin:0!important;padding:10px 15px}.page-composer__orphan-containers ul{list-style:none;margin:0;padding:0}.page-composer__orphan-container{border-left:3px solid #f9f9f9;border-top:1px solid #dcdcdc;cursor:pointer;display:block;padding:5px 15px 5px 12px}.page-composer__orphan-container.active{border-left-color:#3c8dbc}.page-composer__orphan-container:hover{background:#fff;border-left-color:#3c8dbc}.page-composer__orphan-container:first-child{border-top:none}.page-composer__page-preview__container__content:hover{box-shadow:0 0 1px rgba(0,0,0,.7);color:#404040}.page-composer__page-preview__container--no-block .page-composer__page-preview__container__content{background:transparent;border:1px dotted #ccc;box-shadow:none;color:#999;cursor:auto}.page-composer__page-preview__container.hover .page-composer__page-preview__container__content{border-color:#5cc4a7!important;border-style:dotted}.page-composer__page-preview__container.hover .drop-indicator{display:block}@keyframes droppedin{0%{background-color:#fff;border-color:#fff}50%{background-color:#abf8d9;border-color:#5cc4a7}to{background-color:#fff;border-color:#fff}}.page-composer__page-preview__container.dropped .page-composer__page-preview__container__content{animation-duration:.6s;animation-name:droppedin}.page-composer__page-preview__container.active .page-composer__page-preview__container__content{border-color:#3c8dbc;box-shadow:none;color:#404040}.page-composer__page-preview__container.active .page-composer__page-preview__add-block .fa-dot-circle-o,.page-composer__page-preview__container:hover .page-composer__page-preview__add-block .fa-dot-circle-o{display:inline-block}.page-composer__page-preview__container.active .page-composer__page-preview__add-block .fa-circle-o,.page-composer__page-preview__container:hover .page-composer__page-preview__add-block .fa-circle-o{display:none}.page-composer__page-preview__add-block:hover{background:#fff;color:#000;text-decoration:none}.page-composer__container__child-count{color:#999;font-size:12px!important;margin-top:4px}.page-composer__container__child .badge,.page-composer__container__child-count .badge{background-color:#3c8dbc;text-shadow:none}.page-composer__container__child>.badge{position:absolute;right:15px;top:8px}.page-composer__container__main-edition-area{background:#fff;border-bottom:1px solid #ddd;border-top:1px solid #ddd;display:none;position:relative}.page-composer__container__main-edition-area form{margin:0}.page-composer__container__children{list-style:none;margin:0 0 10px!important;padding:0}.page-composer__container__child{border-top:1px solid #ddd;min-height:40px;position:relative}.page-composer__container__child__content,.page-composer__container__child__helper{border-left:3px solid #3c8dbc}.page-composer__container__child__helper{background:hsla(0,0%,100%,.85);box-shadow:0 0 2px rgba(0,0,0,.35);padding:0 10px;position:absolute}.page-composer__container__child__helper h4{font-size:14px!important}.page-composer__container__child:first-child{border-top:none}.page-composer__container__child__content{display:none}.page-composer__container__child__content form{margin:0!important}.page-composer__container__child .box{border:none;border-radius:0;box-shadow:none;margin-bottom:0}.page-composer__container__child--expanded .page-composer__container__child__content{display:block}.page-composer__container__child__loader{background:hsla(0,0%,100%,.75);bottom:0;display:none;left:0;position:absolute;right:0;text-align:center;top:0}.page-composer__block-type-selector__loader,.page-composer__container__child__loader span{background:#aaa;border-radius:12px;box-sizing:border-box;color:#fff;display:inline-block;font-size:10px;height:24px;line-height:24px;padding:0 9px}.page-composer__block-type-selector__loader{display:none}.page-composer__container__child__loader span{margin-top:11px}.page-composer__container__child__edit,.page-composer__container__child__error{border-left:3px solid #f9f9f9;color:#404040!important;display:block;padding:10px 15px 10px 27px;text-decoration:none!important}.page-composer__container__child__edit{cursor:pointer}.page-composer__container__child__right{position:absolute;right:5px;top:10px}.page-composer__container__child__remove,.page-composer__container__child__switch-enabled{display:none}.page-composer__container__child--expanded .page-composer__container__child__remove,.page-composer__container__child--expanded .page-composer__container__child__switch-enabled,.page-composer__container__child:hover .page-composer__container__child__remove,.page-composer__container__child:hover .page-composer__container__child__switch-enabled,.page-composer__container__child__enabled{display:inline-block}.page-composer__container__child__remove .badge,.page-composer__container__child__switch-enabled .badge{background-color:#f56954;cursor:pointer}.page-composer__container__child__remove__confirm{display:none}.page-composer__container__child__remove__confirm span{background:#eee;border-radius:2px;color:#fff;cursor:pointer;display:inline-block;padding:0 7px}.page-composer__container__child__remove__confirm span.yes{background-color:#00a65a}.page-composer__container__child__remove__confirm span.cancel{background-color:#f56954}.page-composer__container__child__toggle{display:none;left:10px;position:absolute;top:10px}.page-composer__container__child__toggle .fa-chevron-up{display:none}.page-composer__container__child--expanded .page-composer__container__child__toggle .fa-chevron-up{display:inline-block}.page-composer__container__child--expanded .page-composer__container__child__toggle .fa-chevron-down{display:none}.page-composer__container__child__edit:hover{background:#fff;border-left-color:#3c8dbc}.page-composer__container__child--expanded .page-composer__container__child__edit{border-left-color:#3c8dbc;box-shadow:inset 0 0 2px rgba(0,0,0,.35)}.page-composer__container__child__edit:hover .page-composer__container__child__toggle{display:inline-block}.page-composer__container__child h4{font-size:14px!important;margin:0!important}a.sonata-block-type>span{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}div.cms-fake-block{display:none}li.sonata-page-menu-children-element{float:left;font-size:16px;list-style:none;margin-left:20px}a.sonata-media-gallery-media-item-link{border:1px solid #ddd;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,.075);display:block;float:left;margin:0 0 18px 20px;padding:4px}a.sonata-media-gallery-media-item-link:hover{border-color:#0069d6;box-shadow:0 1px 4px rgba(0,105,214,.25)}.page-tree{list-style:none;margin-left:15px;margin-right:15px;padding-bottom:10px;padding-left:0}.page-tree ul{list-style:none;padding-left:30px}.page-tree__item{border:1px solid #ddd;border-radius:2px;color:#444;display:block;margin-bottom:5px;padding:7px 15px 7px 7px;position:relative}.page-tree__item .label{border-radius:2px;font-size:12px;margin-top:2px}.page-tree__item .label-warning{margin-right:5px}.page-tree__item .fa-caret-right{color:#3c8dbc;left:-22px;position:absolute;top:9px}.page-tree__item:hover{background:#eee;color:#000}.page-tree__item__is-hybrid{margin-right:5px}.page-tree__item.is-active{border:1px solid #3c8dbc}.page-tree__item.is-active:after,.page-tree__item.is-active:before{border:solid transparent;content:" ";height:0;left:100%;pointer-events:none;position:absolute;top:50%;width:0}.page-tree__item.is-active:after{border-color:hsla(0,0%,100%,0) hsla(0,0%,100%,0) hsla(0,0%,100%,0) #fff;border-width:8px;margin-top:-8px}.page-tree__item.is-active:before{border-color:hsla(0,0%,100%,0) hsla(0,0%,100%,0) hsla(0,0%,100%,0) #3c8dbc;border-width:9px;margin-top:-9px}.page-tree__item.is-active:hover:after{border-left-color:#eee}.page-tree__item.is-toggled .fa-caret-right{transform:rotate(90deg)}.page-tree__item__edit{font-weight:700}.page-tree__item__edit:hover{text-decoration:underline}.page-tree--toggleable li>ul{display:none}.page-tree--toggleable .page-tree__item{margin-left:25px}.page-tree--toggleable .page-tree__item .fa-caret-right{cursor:pointer}.page-tree--toggleable .page-tree__item .fa-caret-right:after{bottom:-5px;content:"";left:-10px;position:absolute;right:-10px;top:-5px} \ No newline at end of file diff --git a/src/Resources/views/BlockAdmin/compose_preview.html.twig b/src/Resources/views/BlockAdmin/compose_preview.html.twig index 68c8eeb2a..c5310a4ec 100644 --- a/src/Resources/views/BlockAdmin/compose_preview.html.twig +++ b/src/Resources/views/BlockAdmin/compose_preview.html.twig @@ -4,29 +4,49 @@ data-block-enabled="{{ child.enabled|default('0') }}" data-block-type="{{ child.type }}" > - - {% set service = attribute(blockServices, child.type) %} - {% if service.metadata is defined %} - {% set metadata = service.metadata %} + {% else %} +
+ {% endif %} + {% if service %} + {% set metadataTitle = service.metadata.title|trans({}, service.metadata.domain|default('SonataPageBundle')) %} + {% set blockTitle = child.name|default(metadataTitle) %} + {% set blockImage = service.metadata.image ? asset(service.metadata.image) : null %} + {% set blockClass = service.metadata.option('class') %} {% else %} - {% set metadata = service.blockMetadata %} + {% set metadataTitle = child.type %} + {% set blockTitle = child.name %} + {% set blockImage = null %} + {% set blockClass = null %} {% endif %} -

- {{ child.name|default(metadata.title)|trans({}, metadata.domain|default('SonataPageBundle')) }} -

- {% if not metadata.image %} - - {% else %} - + +

{{ blockTitle }}

+ + {% if blockImage %} + + {% elseif blockClass %} + {% endif %} - {{ metadata.title|trans({}, metadata.domain|default('SonataPageBundle')) }} - - - - + + {{ metadataTitle }} + + {% if service %} + + + + + {% endif %} + {% if service %}
+ {% else %} +
+ {% endif %}
@@ -45,7 +65,8 @@ 'context': 'list', 'field': 'enabled', '_sonata_admin': 'sonata.page.admin.block' - }) }}"> + }) }}" + > {% if child.enabled %}{{ 'composer.disable'|trans({}, 'SonataPageBundle') }} {% else %} @@ -60,8 +81,7 @@
-
-
+
{{ 'loading'|trans({}, 'SonataPageBundle') }} diff --git a/tests/Functional/Admin/BlockAdminTest.php b/tests/Functional/Admin/BlockAdminTest.php index 8c85bf680..e52732d17 100644 --- a/tests/Functional/Admin/BlockAdminTest.php +++ b/tests/Functional/Admin/BlockAdminTest.php @@ -16,6 +16,7 @@ use Doctrine\ORM\EntityManagerInterface; use Sonata\PageBundle\Tests\App\Entity\SonataPageBlock; use Sonata\PageBundle\Tests\App\Entity\SonataPagePage; +use Sonata\PageBundle\Tests\App\Entity\SonataPageSite; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; final class BlockAdminTest extends WebTestCase @@ -52,7 +53,7 @@ public static function provideCrudUrlsCases(): iterable yield 'Edit Block' => ['/admin/tests/app/sonatapageblock/1/edit']; yield 'Remove Block' => ['/admin/tests/app/sonatapageblock/1/delete']; - yield 'Compose preview Block' => ['/admin/tests/app/sonatapageblock/3/compose-preview']; + yield 'Compose preview Block' => ['/admin/tests/app/sonatapageblock/2/compose-preview']; } /** @@ -233,9 +234,14 @@ private function prepareData(): void $manager = $container->get('doctrine.orm.entity_manager'); \assert($manager instanceof EntityManagerInterface); + $site = new SonataPageSite(); + $site->setName('name'); + $site->setHost('localhost'); + $page = new SonataPagePage(); $page->setName('name'); $page->setTemplateCode('default'); + $page->setSite($site); $parentBlock = new SonataPageBlock(); $parentBlock->setType('sonata.page.block.container'); @@ -245,13 +251,13 @@ private function prepareData(): void $block = new SonataPageBlock(); $block->setType('sonata.block.service.text'); - $block->setParent($parentBlock); $page->addBlock($parentBlock); $page->addBlock($parentBlock2); + $parentBlock->addChild($block); + $manager->persist($site); $manager->persist($page); - $manager->persist($block); $manager->flush(); } diff --git a/tests/Functional/Admin/PageAdminTest.php b/tests/Functional/Admin/PageAdminTest.php index efa9f837f..78fa92441 100644 --- a/tests/Functional/Admin/PageAdminTest.php +++ b/tests/Functional/Admin/PageAdminTest.php @@ -58,7 +58,7 @@ public static function provideCrudUrlsCases(): iterable yield 'Show Page' => ['/admin/tests/app/sonatapagepage/1/show']; yield 'Remove Page' => ['/admin/tests/app/sonatapagepage/1/delete']; yield 'Compose Page' => ['/admin/tests/app/sonatapagepage/1/compose']; - yield 'Compose Show Page' => ['/admin/tests/app/sonatapagepage/compose/container/1']; + yield 'Compose Container Page' => ['/admin/tests/app/sonatapagepage/compose/container/1']; // Snapshot child pages yield 'List Snapshot Page' => ['/admin/tests/app/sonatapagepage/1/sonatapagesnapshot/list']; @@ -296,10 +296,13 @@ private function prepareData(): void $block = new SonataPageBlock(); $block->setType('sonata.block.service.text'); - $block->setParent($parentBlock); + + $block2 = new SonataPageBlock(); + $block2->setType('non_existent_block'); $page->addBlock($parentBlock); - $page->addBlock($block); + $parentBlock->addChild($block); + $parentBlock->addChild($block2); $manager->persist($site); $manager->persist($site2); diff --git a/tests/Functional/Command/CloneSiteCommandTest.php b/tests/Functional/Command/CloneSiteCommandTest.php index 143d5cfe6..75bf98681 100644 --- a/tests/Functional/Command/CloneSiteCommandTest.php +++ b/tests/Functional/Command/CloneSiteCommandTest.php @@ -139,10 +139,9 @@ private function prepareData(): void $block = new SonataPageBlock(); $block->setType('sonata.block.service.text'); - $block->setParent($parentBlock); $page->addBlock($parentBlock); - $page->addBlock($block); + $parentBlock->addChild($block); $manager->persist($site); $manager->persist($site2); diff --git a/tests/Functional/Frontend/PageTest.php b/tests/Functional/Frontend/PageTest.php index f07549c75..5631dd494 100644 --- a/tests/Functional/Frontend/PageTest.php +++ b/tests/Functional/Frontend/PageTest.php @@ -199,10 +199,9 @@ public static function providePages(): iterable $block = new SonataPageBlock(); $block->setType('sonata.block.service.text'); $block->setSetting('content', 'Footer content'); - $block->setParent($containerBlock); $page->addBlock($containerBlock); - $page->addBlock($block); + $containerBlock->addChild($block); return $page; })(), '/random_route', 404, ['Footer content'], []]; @@ -257,20 +256,21 @@ private function prepareData(): void $block = new SonataPageBlock(); $block->setType('sonata.page.block.shared_block'); $block->setSetting('blockId', 3); - $block->setParent($containerBlock); $block2 = new SonataPageBlock(); $block2->setType('sonata.page.block.pagelist'); - $block2->setParent($containerBlock); $block3 = new SonataPageBlock(); $block3->setType('sonata.page.block.children_pages'); $block3->setSetting('pageId', 1); - $block3->setParent($containerBlock); $block4 = new SonataPageBlock(); $block4->setType('sonata.page.block.breadcrumb'); - $block4->setParent($containerBlock); + + $containerBlock->addChild($block); + $containerBlock->addChild($block2); + $containerBlock->addChild($block3); + $containerBlock->addChild($block4); $page->addBlock($containerBlock); $page->addBlock($block); @@ -308,7 +308,8 @@ private function preparePageTypesData(PageInterface $page): void $block = new SonataPageBlock(); $block->setType('sonata.block.service.text'); $block->setSetting('content', 'Page content'); - $block->setParent($containerBlock); + + $containerBlock->addChild($block); $page->setSite($site); $page->addBlock($containerBlock); @@ -363,17 +364,15 @@ private function prepareGlobalPageData(): void $block = new SonataPageBlock(); $block->setType('sonata.block.service.text'); $block->setSetting('content', 'Footer content'); - $block->setParent($containerBlock); $block2 = new SonataPageBlock(); $block2->setType('sonata.block.service.text'); $block2->setSetting('content', 'Page content'); - $block2->setParent($containerBlock2); $page->addBlock($containerBlock); - $page->addBlock($block); $page2->addBlock($containerBlock2); - $page2->addBlock($block2); + $containerBlock->addChild($block); + $containerBlock2->addChild($block2); $manager->persist($site); $manager->persist($page); diff --git a/tests/Functional/Frontend/SnapshotTest.php b/tests/Functional/Frontend/SnapshotTest.php index 41a20636c..f85f552dd 100644 --- a/tests/Functional/Frontend/SnapshotTest.php +++ b/tests/Functional/Frontend/SnapshotTest.php @@ -258,7 +258,8 @@ private function prepareSnapshotTypesData(PageInterface $page): void $block = new SonataPageBlock(); $block->setType('sonata.block.service.text'); $block->setSetting('content', 'Page content'); - $block->setParent($containerBlock); + + $containerBlock->addChild($block); $page->setSite($site); $page->addBlock($containerBlock); @@ -313,17 +314,15 @@ private function prepareGlobalSnapshotData(): void $block = new SonataPageBlock(); $block->setType('sonata.block.service.text'); $block->setSetting('content', 'Footer content'); - $block->setParent($containerBlock); $block2 = new SonataPageBlock(); $block2->setType('sonata.block.service.text'); $block2->setSetting('content', 'Page content'); - $block2->setParent($containerBlock2); $page->addBlock($containerBlock); - $page->addBlock($block); $page2->addBlock($containerBlock2); - $page2->addBlock($block2); + $containerBlock->addChild($block); + $containerBlock2->addChild($block2); $manager->persist($site); $manager->persist($page);