Preprocess page assign a custom block to variables code
$customblock = \Drupal::service('plugin.manager.block')- >createInstance('custom_block_id', []);
$variables['home_meal_plan'] = $customblock->build();
*******************************************************************************
1 - Creating custom form
goto - custom_module\src\Form and create a customform.php
<?php
namespace Drupal\meal_plan\Form;
use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Drupal\cms_pages\Controller\CommonFunc;
/**
* Provides meal plan form.
*
* @internal
*/
class HomeMealForm extends FormBase {
/**
* {@inheritdoc}
*/
public function getFormId() {
return 'home_meal_form';
}
/**
* {@inheritdoc}
*/
public function buildForm(array $form, FormStateInterface $form_state) {
global $base_url;
$hindi = CommonFunc::isHindi();
if (\Drupal::currentUser()->isAnonymous()) {
$footer_content = CommonFunc::getCmsContent('field_meal_plan_footer_content');
$meal_plan_heading = CommonFunc::getCmsContent('field_meal_plan_heading');
$form['age'] = [
'#type' => 'textfield',
'#attributes' => array('class' => array('inptFld'), 'id' => array('home-meal-age') ,'autocomplete' => array('off')),
'#default_value' => '',
'#placeholder' => 'Eg. 7',
'#required' =>TRUE
];
$query = \Drupal::entityQuery('taxonomy_term');
$query->condition('vid', 'food_type');
$query->sort('name');
$tids = $query->execute();
$options = [];
$options = [
'Vegan' => t('Vegan'),
'Veg' => t('Veg'),
'Eggetarian' => t('Eggetarian'),
'Pescatarian' => t('Pescatarian'),
'Nonveg' => t('Non-Veg'),
];
$options1 = [
'2-12' => t('2-12'),
'13-17' => t('13-17'),
'18-25' => t('18-25'),
'25-50' => t('25-50'),
];
$form['food_type'] = [
'#type' => 'radios',
'#options' => $options,
'#default_value' => 'Vegan',
'#required' => TRUE,
];
$form['age_range'] = [
'#type' => 'radios',
'#options' => $options1,
'#default_value' => '2-12',
'#required' => TRUE,
];
$form['footer_content'] =[
'#markup' => $footer_content,
];
$form['submit'] = [
'#type' => 'submit',
'#value' => t("Apply"),
'#attributes' => array('class' => array('primary-button hvr-ripple-out')),
'#validate' => ['::submitValidateMeal'],
];
$form['#theme'] = 'HomeMealForm';
$form['#meal_plan_heading'] = $meal_plan_heading;
$form['#attached']['library'][] = 'meal_plan/meal_style';
return $form;
}
}
/**
* {@inheritdoc}
*/
public function submitValidateMeal(array &$form, FormStateInterface $form_state) {
if ($form_state->getValue('age') == '') {
$form_state->setErrorByName('age', 'Please select date of birth');
}
elseif ($form_state->getValue('age') < 1) {
$form_state->setErrorByName('age', 'Minimum required age is 1 year.');
}
elseif ($form_state->getValue('age') > 12) {
$form_state->setErrorByName('age', 'The recommendations are for healthy children between 1 year to 12 years of age. Please enter appropriate age.');
}
}
/**
* {@inheritdoc}
*/
public function submitForm(array &$form, FormStateInterface $form_state) {
global $base_url;
$age = $form_state->getValue('age');
$food_type = $form_state->getValue('food_type');
$age_range = $form_state->getValue('age_range');
$meal_data = ['age' => $age, 'food_preference' => $food_type];
$session = \Drupal::request()->getSession();
$session->set('meal_data', $meal_data);
$form_state->setRedirect('meal_plan.unreg_routine');
}
}
3- assign custom create Block to a variable in preprocess : in theme.theme file
/**
* Implements hook_preprocess().
*/
function theme_new_preprocess(array &$variables, $hook) {
$variables['base_path'] = base_path();
$variables['is_front'] = \Drupal::service('path.matcher')->isFrontPage();
$current_path = \Drupal::service('path.current')->getPath();
$variables['current_path'] = $current_path;
$alised_path = \Drupal::service('path_alias.manager')->getAliasByPath($current_path);
$alised_path = ltrim($alised_path, '/');
$variables['alised_path'] = $alised_path;
$current_url = explode("/", $alised_path);
if($variables['is_front']) {
$customblock = \Drupal::service('plugin.manager.block')->createInstance('home_custom_meal_form_block', []);
$variables['home_meal_plan'] = $customblock->build();
}
}