Hi All. Today i m going to share a custome block through which we can use content title as a option value to redirect at a particular url.
For this we create a custome block and  do some database coding in our controller.
Step 1
create a folder which you want to assign your module..In my case it carmodulesearch.
create info file inside this directory like carmodelsearch.info.yml
name: Car Model Search
description: 'Car Model Search module'
type: module
core: 8.x
Step 2 Create a controller under src/Controller direcoty.
<?php
/**
 * @file
 * Contains \Drupal\carmodelsearch\Form\carmodelsearchForm.
 */
namespace Drupal\carmodelsearch\Form;
use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Database\Database;
use Symfony\Component\HttpFoundation\RedirectResponse;
class CarModelForm extends ConfigFormBase
{
    /**
     * {@inheritdoc}.
     */
    public function getFormId()
    {
        return 'carmodelsearch_form';
    }
    /**
     * {@inheritdoc}.
     */
    public function buildForm(array $form, FormStateInterface $form_state)
    {
        $form = parent::buildForm($form, $form_state);
        $query = \Drupal::database()->select('node_field_data', 'nfd');
        $query->fields('nfd', ['nid', 'title']);
        $query->addField('nfl', 'field_link_uri');
        $query->addField('nfl', 'field_link_title');
        //$query->addField('ufd', 'field_link_url');
        $query->join('node__field_link', 'nfl', 'nfl.entity_id = nfd.nid');
        $query->condition('nfd.type', 'car_model');
        $cars = $query->execute()->fetchAllAssoc('nid');
        $options = [];
        foreach ($cars as $car) {
            $options[$car->field_link_uri] = $car->field_link_title;
        }
        
        $form['search'] = array(
            '#type' => 'select',
            '#title' => $this->t('Find a map update'),
            '#options' => $options
        );
        $form['actions']['#type'] = 'actions';
            $form['actions']['submit'] = array(
              '#type' => 'submit',
              '#value' => $this->t('Go'),
              '#button_type' => 'primary',
            );
        return $form;
    }
    /**
     * {@inheritdoc}
     */
    public function validateForm(array &$form, FormStateInterface $form_state)
    {
    }
    /**
     * {@inheritdoc}
     */
    public function submitForm(array &$form, FormStateInterface $form_state)
    {
        $response = new RedirectResponse($form_state->getValue('search'));
        $response->send();
    }
    /**
     * {@inheritdoc}
     */
    protected function getEditableConfigNames()
    {
        return [
            'carmodelsearch.settings',
        ];
    }
}
then create block directory and put this code.
<?php
namespace Drupal\carmodelsearch\Plugin\Block;
use Drupal\Core\Access\AccessResult;
use Drupal\Core\Block\BlockBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Session\AccountInterface;
/**
 * Provides a 'carmodelsearch' block.
 *
 * @Block(
 *   id = "carmodelsearch_block",
 *   admin_label = @Translation("carmodelsearch block"),
 * )
 */
class CarModelBlock extends BlockBase {
  /**
   * {@inheritdoc}
   */
  public function build() {
     $form = \Drupal::formBuilder()->getForm('Drupal\carmodelsearch\Form\CarModelForm');
    return $form;
  }
}
This code create a custome block with name carmodelsearch.
 
If you get any problem you can contact with me.
                       
                    
0 Comment(s)