#Creando Tu Primer Block
#Concepto
Un m贸dulo puede registrar m煤ltiples blocks en PrettyBlocks. Esta flexibilidad te permite crear una variedad de contenido personalizable para tu sitio PrestaShop.
Desde la versi贸n 3.1, PrettyBlocks integra nativamente los siguientes blocks:
- Slider
- Banner de imagen
- T铆tulo
- Texto personalizado
- Productos destacados
- Preguntas frecuentes
- Renderizar m贸dulo
- Renderizar hook
- Lista de productos
Estos blocks integrados proporcionan una base s贸lida para la creaci贸n de contenido, permiti茅ndote personalizarlos seg煤n tus necesidades.
Es importante tener en cuenta que los classicblocks ahora se consideran obsoletos y ya no se recomiendan para nuevas implementaciones.
#Estructura del M贸dulo
Para comenzar a crear tus propios blocks, primero necesitas entender la estructura b谩sica de un m贸dulo PrestaShop compatible con PrettyBlocks. Aqu铆 tienes un ejemplo de la estructura t铆pica de dicho m贸dulo:
1 2use PrestaShop\PrestaShop\Core\Module\WidgetInterface; 3class FakeModule extends Module implements WidgetInterface 4{ 5 public function __construct() 6 { 7 $this->name = 'fakemodule'; 8 $this->tab = 'administration'; 9 $this->version = '1.0.0';10 $this->author = 'PrestaSafe';11 $this->need_instance = 1;12 13 $this->bootstrap = true;14 parent::__construct();15 16 $this->displayName = $this->l('Fake module');17 $this->description = $this->l('Fake module');18 19 $this->ps_versions_compliancy = array('min' => '1.7', 'max' => _PS_VERSION_);20 }21 22 public function install()23 {24 return parent::install() && $this->registerHook('ActionRegisterBlock');25 }26 27 public function uninstall()28 {29 return parent::uninstall() && $this->unregisterHook('ActionRegisterBlock');30 }31 32 // Register blocks here.33 public function hookActionRegisterBlock()34 {35 $blocks = [];36 $blocks[] = [37 'name' => 'Fake block',38 'description' => 'Description of your block',39 'code' => 'fake_block', // required must be uniq + used for execution of beforeRendering hook (beforeRenderingFakeBlock in this case)40 'icon' => 'StarIcon', // https://heroicons.com V241 'icon_path' => 'https://yoursite.com/img/icon.png', // custom icon42 'need_reload' => true, // reload iframe after save43 'nameFrom' => 'field_name', // take the name of a config field44 'templates' => [45 'default' => 'module:'.$this->name.'/views/templates/block/default.tpl'46 ],47 'config' => [48 'fields' => [49 // ... array of fields50 ]51 ],52 'repeater' => [53 'name' => 'Element repeated',54 'nameFrom' => 'field name',55 'groups' => [56 // ... array of fields57 ]58 ]59 60 ];61 62 return $blocks;63 }64 65}
Desde la versi贸n 2.0.0
, puedes utilizar nuestra interfaz proporcionada para crear una estructura m谩s legible y organizada:
En primer lugar, crea una clase para tu Block:
1use PrestaSafe\PrettyBlocks\Interfaces\BlockInterface; 2 3class MyCustomBlock implements BlockInterface 4{ 5 private $module; 6 7 public function __construct($module) 8 { 9 $this->module = $module;10 }11 12 13 public function registerBlocks(): array14 {15 return16 [17 'name' => $this->module->l('Fake block'),18 'description' => $this->module->l('Description of your block'),19 'code' => 'fake_block', // required must be uniq + used for execution of beforeRendering hook (beforeRenderingFakeBlock in this case)20 'icon' => 'StarIcon', // https://heroicons.com V221 'icon_path' => 'https://yoursite.com/img/icon.png', // custom icon22 'need_reload' => true, // reload iframe after save23 'nameFrom' => 'field_name', // take the name of a config field24 'insert_default_values' => true, // new since 2.0.025 'templates' => [26 'default' => 'module:'.$this->module->name.'/views/templates/block/default.tpl'27 ],28 'config' => [29 'fields' => [30 // ... array of fields31 ]32 ],33 'repeater' => [34 'name' => $this->module->l('Element repeated'),35 'nameFrom' => $this->module->l('field name'),36 'groups' => [37 // ... array of fields38 ]39 ]40 ];41 }42}
Luego, en tu m贸dulo, registra tu block en el hook ActionRegisterBlock
de la siguiente manera:
1public function hookActionRegisterBlock() 2{ 3 4 return HelperBuilder::renderBlocks( 5 [ 6 new MyCustomBlock($this) 7 // new MySecondCustomBlock($this) 8 ] 9 );10}
El hook ActionRegisterBlock est谩 dise帽ado para registrar uno o m谩s block(s) en Prettyblocks. Puedes utilizar los dos ejemplos proporcionados para registrar tus blocks. Si est谩s utilizando la interfaz proporcionada, aseg煤rate de que Composer cargue autom谩ticamente tus clases de block de la siguiente manera:
1{ 2 "name": "company/your_module", 3 "description": "your description", 4 "license": "AFL-3.0", 5 "keywords": [ 6 "prestashop", 7 ], 8 "authors": [ 9 {10 "name": "Authors",11 "homepage": "https://...."12 }13 ],14 "config": {15 "preferred-install": "dist",16 "prepend-autoloader": false17 },18 "autoload": {19 "classmap": [20 "classes/blocks"21 ],22 "exclude-from-classmap": []23 },24 "type": "prestashop-module"25 }
En este ejemplo, nuestros blocks se encuentran en la carpeta classes/blocks
de nuestro m贸dulo.
A continuaci贸n, ejecuta composer dump-autoload
en el directorio de tu m贸dulo.
Si tus blocks no se cargan, no olvides agregar el autoload en tu m贸dulo:
1use PrestaShop\PrestaShop\Core\Module\WidgetInterface;2if (file_exists(__DIR__ . '/vendor/autoload.php')) {3 require_once __DIR__ . '/vendor/autoload.php';4}5class FakeModule extends Module implements WidgetInterface6{7 // ...
#Detalles del Block
Campo | Descripci贸n | Tipo | Requerido |
---|---|---|---|
name |
Nombre de visualizaci贸n de tu block | String |
true |
description |
Descripci贸n de tu block | String |
true |
code |
C贸digo de tu block debe ser 煤nico | String |
true |
icon |
Icono de Heroicons (v2) en formato camelCase ej., academic-cap => AcademicCapIcon Lista disponible aqu铆: Heroicons |
String |
false |
icon_path |
URL de tu icono personalizado | String |
false |
nameFrom |
Asigna un nombre personalizado a tu block ej., title Tomar谩 el valor del campo de configuraci贸n title |
String |
false |
need_reload |
Recarga el iframe despu茅s de guardar un block, 煤til si est谩s desarrollando un block de slider, por ejemplo Por defecto: true |
Bool |
false |
insert_default_values |
Establece valores predeterminados para los campos (los campos deben tener la opci贸n 'force_default_value' => true, ) al insertar el block (para tener datos de demostraci贸n) Por defecto: false |
Bool |
false |
templates |
Plantillas para tu block, es imperativo tener una plantilla con la clave default Puedes registrar tantas plantillas como desees |
Array |
true |
config |
Campos de configuraci贸n para tu block Debe tener un array de campos 'fields' => [ /*... campos ...*/ ] ver Campos Disponibles |
Array |
false |
repeater |
Campos repetibles M谩s detalles a continuaci贸n Campos Repetibles |
Array |
false |
#Campos Repetibles
Los campos repetibles te permiten agregar tantos datos como el usuario desee. Se requieren varios par谩metros.
Campo | Descripci贸n | Tipo | Requerido |
---|---|---|---|
name |
Nombre predeterminado de los elementos listados | String |
true |
nameFrom |
Toma el nombre del valor del campo repetido ej., 'nameFrom' => 'title' mostrar谩 el valor del campo t铆tulo en la lista |
String |
false |
groups |
Lista de campos ver Campos Disponibles |
Array |
false |