Quiero crear mi bloque personalizado con contenido personalizado en Drupal 8, al principio creo un bloque con solo texto simple y funciona correctamente, mi problema es cómo puedo pasarle mi variable personalizada. Vi un tutorial al respecto, mi nombre de Módulo es tcdev
y este es el contenido del .module
archivo.
function tcdev_theme($existing, $type, $theme, $path) {
return array('tcdev' =>
array(
'variables' => array(
'title' => 'Default title',
'description' => null
),
'template' => 'block--sliderblock'
)
);
}
y mi SliderBlock.php
namespace Drupal\tcdev\Plugin\Block;
use Drupal\Core\block\BlockBase;
/**
* Provides a 'SliderBlock' block.
*
* @Block(
* id = "slider_block",
* admin_label = @Translation("Slider Block"),
* )
*/
class SliderBlock extends BlockBase{
/**
* {@inheritdoc}
*/
public function build(){
return array(
'#title' => 'my title ',
'#description' => 'my custom desc'
);
}
}
y finalmente mi archivo de plantilla block--sliderblock.html.twig
<h2>My Custom Block{{ title }}-{{ description }}</h2>
Pero el resultado es solo "My Custom Block-". El problema es que las variables no se pasan al archivo de plantilla, ¿dónde está mi culpa?
aprecio cualquier ayuda
block--sliderblock.html.twig
, el problema es cómo pasarle mi variable. ¿Qué me sugieres según mi código? ? tnx por su atenciónblock--sliderblock.html.twig
procesado, porque usaste el nombre de una sugerencia de tema, esto se procesaría incluso si el bloque estuviera totalmente vacío, puedes probar esto)block--sliderblock.html.twig
y no le pasé nada. Habilito la información de depuración y la información de depuración es<!-- END OUTPUT from 'themes/bootstrap/templates/block/block--system-branding-block.html.twig' <!-- FILE NAME SUGGESTIONS: x block--sliderblock.html.twig * block--slider-block.html.twig * block--tcdev.html.twig * block.html.twig --> <!-- BEGIN OUTPUT from 'themes/gttc_2016/templates/block--sliderblock.html.twig' --> <h2>Block-</h2>
block--sliderblock.html.twig
. Esta plantilla funciona con su propio conjunto de variables. (Si desea utilizar esta rama, tendrá que copiarla del tema principal o base y luego verá qué variables hay dentro). Sus variables establecidas en la matriz de representación de la función de compilación terminarán entcdev.html.twig
. ¿Creaste este archivo de ramita?Así que descubrí que desea sobrescribir una plantilla de bloque predeterminada con una plantilla de bloque (módulo) personalizada, y luego pasarle las variables, primero debe asegurarse de sobrescribir su plantilla correctamente porque parece que su plantilla de bloque actual ha salido de su Directorio de temas (no módulo):
Para hacer esto primero, debe crear un directorio llamado
templates/
en la raíz de sus módulos y luego colocar su plantilla allí.Ahora dígale a Drupal que almacena la plantilla en su módulo. en
your_module.module
agregar esta función:Finalmente, tenga cuidado sobre dónde coloca su archivo de ramita y cómo lo nombra. Cree un directorio de plantillas en el directorio de su módulo y reemplace el
_
nombre de la función en el tema con-
:mymodule-block.html.twig
No te olvides de borrar el caché.
Con la ayuda de la respuesta escrita
Nicensin
en esta publicación:Drupal 8 custom block (module) crea un archivo de plantilla de ramita
fuente
Llegué a este punto también. Las variables no parecen pasar a la plantilla de bloque. Tengo casi el mismo código que usted, en mi caso habilité la depuración de ramitas y deshabilité el caché en services.yml. Incluso borrando la memoria caché estaba teniendo este problema, pero me resolvieron una vez que activé esta configuración en mi entorno de desarrollo.
fuente