El BlockBundle proporciona integración con SonataBlockBundle. Este te asiste gestionando fragmentos de contenido, conocidos como bloques. Lo que hace BlockBundle es similar a lo que hace Twig, pero para bloques almacenados en una BD. De esta manera, un editor puede modificar los bloques. Además, el BlockBundle proporciona la lógica para determinar qué bloque se tendría que dibujar en cuáles páginas.
El BlockBundle por sí mismo no proporciona una funcionalidad de edición para bloques. No obstante, puedes encontrar ejemplos de cómo hacer editables los bloques en el recinto de seguridad del CMF de Symfony.
Este paquete está basado en el SonataBlockBundle
La clave de configuración para este paquete es symfony_cmf_block
# app/config/config.yml
symfony_cmf_block:
document_manager_name: default
Antes de que puedas dibujar un bloque, necesitas crear un objeto que represente los datos de tu bloque en el repositorio. Lo puedes conseguir con el siguiente fragmento de código (ten en cuenta que $parentPage necesita ser una instancia de una página definida por el ContentBundle):
$myBlock = new SimpleBlock();
$myBlock->setParentDocument($parentPage);
$myBlock->setName('sidebarBlock');
$myBlock->setTitle('My first block');
$myBlock->setContent('Hello block world!');
$documentManager->persist($myBlock);
Ten en cuenta que sidebarBlock es el identificador que escogimos para el bloque. Junto con el documento padre del bloque, esto hace único al bloque. Las otras propiedades son específicas de Symfony\Cmf\Bundle\BlockBundle\Document\SimpleBlock.
Nota
El sencillo bloque ahora está listo para dibujarlo, ve Dibujando el bloque.
Nota
Siempre asegúrate de implementar la interfaz Sonata\BlockBundle\Model\BlockInterface o un bloque de documento existente tal como Symfony\Cmf\Bundle\BlockBundle\Document\BaseBlock.
Si miras dentro de la clase SimpleBlock, notarás el método getType. Este define el nombre del servicio de bloque que procesa el bloque al dibujarlo.
Un bloque de servicio contiene:
Échale un vistazo a los bloques de servicio en Symfony\Cmf\Bundle\BlockBundle\Block para ver algunos ejemplos.
Nota
Asegúrate de implementar siempre la interfaz Sonata\BlockBundle\Block\BlockServiceInterface o un bloque de servicio existente tal como el Sonata\BlockBundle\Block\BaseBlockService.
Este contiene el controlador lógico. Combina las opciones predefinidas en este método si lo quieres utilizar:
// ...
if ($block->getEnabled()) {
// combina las opciones
$settings = array_merge($this->getDefaultSettings(), $block->getSettings());
$feed = false;
if ($settings['url']) {
$feed = $this->feedReader->import($block);
}
return $this->renderResponse($this->getTemplate(), array(
'feed' => $feed,
'block' => $block,
'settings' => $settings
), $response);
}
// ...
Nota
Si tienes que usar mucha lógica, la puedes mover a un servicio específico e inyectarlo en el bloque de servicio. Luego usar ese servicio específico en el método execute.
El método getDefaultSettings contiene las opciones predefinidas de un bloque. Las opciones después se pueden alterar en múltiples sitios, reflejándose en una cascada como esta:
las opciones predefinidas se almacenan en el bloque de servicio
las opciones se pueden alterar a través de los ayudantes de plantilla:
{{ sonata_block_render({
'type': 'acme_main.block.rss',
'settings': {
'title': 'Symfony2 CMF news',
'url': 'http://cmf.symfony.com/news.rss'
}
}) }}
y las opciones también se pueden alterar en un bloque de documento, la ventaja es que las opciones están almacenadas en PHPCR y te permiten implementar una interfaz de usuario final o de administración para cambiar algunas o todas las opciones.
Los métodos buildEditForm y buildCreateForm contienen configuración de formulario para editar utilizando una interfaz de usuario final o de administración. El método validateBlock contiene la configuración de validación.
El método getCacheKeys contiene las claves utilizadas para el bloque de la memoria caché.
Puedes usar los métodos getJavascripts y getStylesheets para definir activos js y css. Usa los ayudantes de Twig sonata_block_include_javascripts y sonata_block_include_stylesheets para reproducirlos.
{{ sonata_block_include_javascripts() }}
{{ sonata_block_include_stylesheets() }}
Nota
Esto reproducirá los bloques js y css* de todos los bloques cargados en el contenedor de servicios de tu aplicación.
Puedes usar el método load para cargar datos adicionales. Este se invoca cada vez que se reproduce un bloque y antes de llamar al método execute.
Para realmente reproducir el bloque del ejemplo de la sección del bloque documento, solo añade el siguiente código a tu plantilla Twig:
{{ sonata_block_render({'name': 'sidebarBlock'}) }}
Esto hará que se dibuje el BlockBundle según el bloque en cada página que tenga un bloque llamado 'sidebarBlock'. Naturalmente, es necesario que la página real sea reproducida por la plantilla que contiene el fragmento anterior.
Esto pasa al reproducir un bloque, ve las siguientes secciones para más detalles:
También Puedes incorporar bloques en contenido utilizando el filtro cmf_embed_blocks.
El BlockBundle viene con cuatro bloques de propósito general:
Además el BlockBundle tiene bloques más específicos:
Puedes encontrar ejemplos de uso de este paquete en el Recinto de seguridad del CMF de Symfony. Dale un vistazo en el BlockBundle del recinto de seguridad. También te muestra cómo hacer editables los bloques usando el CreateBundle.