web-dev-qa-db-ja.com

Ajaxを介したブロックの読み込み

ブロック付きのカスタムモジュールがあります。

_namespace Drupal\generator\Plugin\Block;

use Drupal\Core\Block\BlockBase;

class GeneratorBlock extends BlockBase {

    public function build() {
        $form = \Drupal::formBuilder()->getForm('Drupal\generator\Form\ProjektForm');

        return array(
          'form' => $form,
          '#attached' => array(
            'library' =>  array(
              'generator/generator-css'
            ),
          ),
        );

    }
} 
_

それが行うすべては、追加の_.css_ファイル(ライブラリから)を使用してそこにFromを配置することです。このブロックは、管理->構造->ブロックレイアウトで配置でき、正常に動作します。

私が今欲しいのはAjax経由でそのブロックを読み込むです(場合によってはブロック全体を更新したいためです)。そして、私はそれをラッパーにロードするか($.load(...)のように)、またはJS変数でブロックのコンテンツを取得することを意味します(ブロックを含むページ全体ではなく、レンダリングされたブロックのみ)。

drupal.org にDrupal 7のチュートリアルを見つけましたが、Drupal 8に移植できませんでした。

6
PolGraphic

#ajax Drupal ajax。

namespace Drupal\generator\Plugin\Block;

use Drupal\Core\Block\BlockBase;
use Drupal\generator\Form\ProjektForm;

class GeneratorBlock extends BlockBase {

  public function build() {
    return array(
      'form_wrapper' => array(
        '#prefix' => '<div id="form-wrapper">',
        '#suffix' => '</div>',
        '#markup' => '',
      ),
      'load_form' => array(
        '#type' => 'button',
        '#value' => $this->t('Load form'),
        '#ajax' => array(
          'wrapper' => 'form-wrapper',
          'callback' => array(static::class, 'getForm'),
        ),
      ),
      '#attached' => array(
        'library' =>  array(
          'generator/generator-css'
        ),
      ),
    );
  }

  public static function getForm() {
    return \Drupal::formBuilder()->getForm(ProjektForm::class);
  }

} 
5
Eyal