2017-04-15 4 views
2

Drupal 8の新機能、私はWPの世界から来ているので、物事のハングを取得することは非常に混乱しています。私はカスタムモジュールを作成し、テキストを出力するページを持っています。私が立ち往生しているところでは、管理領域にフィールドを作成し、その保存した情報を取り出し、それを出力中のコンテンツに使用する機能があります。Drupal 8カスタムモジュール - 管理領域にフィールドを作成し、その入力をモジュールで使用する方法を教えてください。

チュートリアルに続き、非常に固執しています。誰でも私のためのロードマップやこれを達成するための有益な記事を提供できますか?

答えて

2

あなたのモジュール名が「カスタム」であると仮定し、次の手順に従って管理フォームを作成し、管理ページで保存した情報を引き出します。

フォルダ名「カスタム」を作成します。

"カスタム"フォルダ内に ""ファイルを "custom.info.yml"を作成します。

name: custom 
description: Show admin saved data through custom module. 
type: module 
# core: 8.x 
configure: admin/config/services/custom 

whoアクセス管理フォームのアクセス許可を作成します。
「カスタム」フォルダ内に「custom.permissions.yml」というファイルを作成します。

'administer custom': 
    'title': 'Administer Customform' 
    'description': 'Configure how Custom Form is used on the site.' 
    restrict access: true 

は、それがコンテンツのカスタム管理フォームのパス&のルートを作成します。

「カスタム」フォルダ内に「」ファイルを作成します。「カスタム。ルート。

custom.config: 
    path: '/admin/config/custom/config' 
    defaults: 
    _form: '\Drupal\custom\Form\CustomConfigForm' 
    _title: 'Custom Configuration' 
    requirements: 
    _permission: 'administer custom' 

今メニューを作成し(「custom.config」)このルートを割り当てるメニューパスで&カスタム・フォルダ内にフォームを作成し、フォームの場所は SRC /フォーム/ CustomConfigForm.php

するためのものです「custom.links.menu.yml」ファイルを「カスタム」フォルダ内に作成します。管理フォームの

custom.config: 
    title: 'Custom ' 
    description: 'Custom Admin Configuration' 
    parent: system.admin_config 
    route_name: custom.config 
    weight: 100 

カスタムフォルダ内のCustomConfigForm.phpファイルとファイルの場所を作成する今、あなたは、あなたの後に、その後、管理フォームを保存するとき

<?php 

namespace Drupal\custom\Form; 

use Drupal\Core\Form\ConfigFormBase; 
use Drupal\Core\Form\FormStateInterface; 

class CustomConfigForm extends ConfigFormBase { 

    public function getFormId() { 
     return 'custom_config_form'; 
    } 


    public function buildForm(array $form, FormStateInterface $form_state) { 

    $config = $this->config('custom.settings'); // store data in custom.settings 


    $form = parent::buildForm($form, $form_state); 

    $form['custom_types'] = array(
     '#type' => 'checkboxes', 
     '#title' => t('Content Types'), 
     '#description' => t('Configure where the custom button should appear.'), 
     '#options' => node_type_get_names(), 
     '#default_value' => $config->get('custom_types', array()), 
    ); 

    return $form; 
    } 

    public function submitForm(array &$form, FormStateInterface $form_state) { 
    $config = $this->config('custom.settings'); 
    $config->set('custom_types', $form_state->getValue('custom_types')); 
    $config->save(); // save data in custom.settings 

    return parent::submitForm($form, $form_state); 

    } 

    public function getEditableConfigNames() { 
    return ['custom.settings']; 
    } 

} 

のsrc /フォーム/ CustomConfigForm.phpです保存したデータを "custom.module"ファイルに取り込んでこのコードを使用します。

"custom.module"ファイルをカスタムフォルダ内に作成します。

$config = \Drupal::config('custom.settings'); // get saved settings 
$types = $config->get('custom_types', array()); // fetch particular saved data "custom_types" 
print $types; 

このモジュールを有効にします。
あなたのadminフォームのパスは、キャッシュの問題が発生する時々のDrupal 8にもYOUR_SITE_NAME /管理/設定/カスタム/ configに

で、そうならばすべての問題は、フォーム保存した後にキャッシュをクリアしています。

+0

ありがとうございました。非常に簡潔で簡単に従うことができます。今、私はページにアクセスしようとすると、私のエラーログにポップアップしています。私のカスタムモジュールはgoogle-calendarか名前空間google_calendarです。 InvalidArgumentException: "\ Drupal \ google_calendar \ Form \ GoogleCalendarConfigForm"クラスが存在しません。 Drupal \ Core \ DependencyInjection \ ClassResolver-> getInstanceFromDefinition()(/home/vagrant/Sites/gordon/core/lib/Drupal/Core/DependencyInjection/ClassResolver.phpの24行目)。 設定フォームは、確かにFormディレクトリにあります。 – relevantChuck

+0

そしておそらくaddtl infoが役立ちます。私のカスタムモジュールディレクトリはgoogle-calendarで、私のコントローラの名前空間にはDrupal \ google_calendar \ Controllerです。 – relevantChuck

+0

"google-calender.routing.yml"ファイル_form:pathとGoogleCalenderConfigFormで使用される名前空間 –

関連する問題