wp-productzilla/wp-content/themes/blocksy/inc/components/blocks/gutenberg-block.php
rizal.productzilla e38e8b231d templating
2024-04-01 16:08:46 +07:00

121 lines
2.4 KiB
PHP

<?php
namespace Blocksy;
class GutenbergBlock {
protected $name;
protected $uri;
protected $widget_path;
protected $config;
public function __construct($name, $config) {
$this->name = $name;
$this->config = $config;
$this->uri =
get_template_directory_uri() . '/static/bundle/blocks/' .
$this->name;
$this->widget_path =
get_template_directory() . '/inc/components/blocks/' . $name;
add_action('init', [$this, 'register_gutenberg_block']);
add_action('init', [$this, 'localize_data']);
add_filter(
'render_block',
function ($block_content, $block) {
if ($block['blockName'] === 'blocksy/' . $this->name) {
wp_enqueue_style(
'blocksy-block-' . $this->name . '-styles'
);
}
return $block_content;
},
10,
2
);
add_action('wp_enqueue_scripts', function () {
$theme = blocksy_get_wp_parent_theme();
$file_path = '/static/bundle/' .
'theme-block-' .
$this->name .
'.min.css';
if (! file_exists(get_template_directory() . $file_path)) {
return;
}
wp_register_style(
'blocksy-block-' . $this->name . '-styles',
get_template_directory_uri() . $file_path,
[],
$theme->get('Version')
);
});
}
public function render($attributes) {
$file_path = $this->widget_path . '/view.php';
if (! file_exists($file_path)) {
return '';
}
return blocksy_render_view($file_path, [
'atts' => $attributes,
]);
}
public function register_gutenberg_block() {
call_user_func(
'register_' . 'block_type',
'blocksy/' . $this->name,
[
'attributes' => isset($this->config['attributes'])
? $this->config['attributes']
: [],
'render_callback' => function ($attributes, $content) {
if ($this->config['static']) {
return $content;
}
return $this->render($attributes);
},
'editor_style_handles' => [
'blocksy-theme-blocks-editor-styles',
]
]
);
}
public function localize_data() {
$options_file = $this->widget_path . '/options.php';
if (!file_exists($options_file)) {
return;
}
add_filter('blocksy:gutenberg-blocks-data', function ($data) use (
$options_file
) {
$options = blocksy_akg(
'options',
blocksy_get_variables_from_file(
$options_file,
['options' => []]
)
);
$options_name = str_replace('-', '_', $this->name);
$data[$options_name] = $options;
return $data;
});
}
}