Puncte:0

Cum pot face să apară un link de modul personalizat pe /admin/config?

drapel cn

Am un modul personalizat la care lucrez și aș dori să îl fac configurabil prin meniul de administrare. Întâmpin dificultăți în a obține un formular să apară în pagina de administrare.

Vizitarea admin/config/MYMODULE arată formularul, pur și simplu nu este vizibil pe pagina /admin/config.

Iată structura mea de fișiere până acum (excluzând fișierele irelevante):

*Fișierul formular este doar un exemplu de formular pentru a încerca să îl faceți să apară pe pagina de administrare.

MYMODULE.routing.yml

MYMODULE.settings:
  cale: „/admin/config/system/MYMODULE”
  implicite:
    _form: „\Drupal\MYMODULE\Form\myModuleSettingsForm”
    _title: „Setări modul meu”
  cerinte:
    _permission: „administrați configurația site-ului”

MYMODULE.schema.yml

MYMODULE.settings:
  tip: config_object
  etichetă: „myModule Settings”
  cartografiere:
    drum_to_sound:
      tip: sfoară
      etichetă: „Path to Sound”

MYMODULE.links.menu.yml

MYMODULE.settings:
  titlu: „Setări modul meu”
  descriere: „Alterează setările myModule”
  nume_rută: MYMODULE.settings
  părinte: system.admin_config_system

MYMODULE.settings.yml

cale:
  path_to_sound: „/modules/custom/MYMODULE/myModule.mp3”

myModuleSettingsForm.php

<?php

spațiu de nume Drupal\MYMODULE\Form;

utilizați Drupal\Core\Form\ConfigFormBase;
utilizați Drupal\Core\Form\FormStateInterface;

/**
 * Configurați exemplu de setări pentru acest site.
 */
clasa myModuleSettingsForm extinde ConfigFormBase {

  /**
   * Setări de configurare.
   *
   * @var șir
   */
  const SETTINGS = 'MYMODULE.settings';

  /**
   * {@inheritdoc}
   */
  funcția publică getFormId() {
    returnează „MYMODULE_admin_settings”;
  }

  /**
   * {@inheritdoc}
   */
  funcția protejată getEditableConfigNames() {
    întoarcere [
      static::SETĂRI,
    ];
  }

  /**
   * {@inheritdoc}
   */
  funcția publică buildForm(array $form, FormStateInterface $form_state) {
    $config = $this->config(static::SETTINGS);

    $form['example_thing'] = [
      '#type' => 'câmp text',
      '#title' => $this->t('Lucruri'),
      '#default_value' => $config->get('example_thing'),
    ];

    return parent::buildForm($form, $form_state);
  }

  /**
   * {@inheritdoc}
   */
  funcția publică submitForm(matrice &$form, FormStateInterface $form_state) {
    // Preluați configurația.
    $this->configFactory->getEditable(static::SETTINGS)
      // Setați setarea de configurare trimisă.
      ->set('example_thing', $form_state->getValue('example_thing'))
      // Puteți seta mai multe configurații simultan prin realizarea
      // apeluri multiple la set().
      ->salvare();

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

}

Înțeleg că acum ar trebui să pot vedea acest formular pe pagina de configurare, dar nu o fac, indiferent de ștergerea cache-ului etc.Am urmat documentația pentru a face acest lucru și chiar am făcut referințe încrucișate la alte module populare, așa că nu sunt sigur ce greșesc.

Puncte:0
drapel ne

A folosi părinte: system.admin_config pentru un link de meniu are nevoie de un traseu care are _controller: „\Drupal\system\Controller\SystemController::systemAdminMenuBlockPage” ca controlor. Și abia acum poți adăuga copii la acel link.

părinte: system.admin_config este pentru crearea de noi blocuri tematice. În timp ce ai putea folosi părinte: system.admin_config_content, părinte: system.admin_config_system etc. pentru a adăuga linkul la un bloc existent.

Deci, fie comuta părinte: system.admin_config la părinte: system.admin_config_content de exemplu, în link-urile dvs. Yaml și în ruta dvs. Yaml calea către cale: „/admin/config/content/MYMODULE” pentru a adăuga linkul la blocul „Crearea conținutului”.

Sau ajustați MYMODULE.routing.yml și MYMDOULE.links.menu.yml astfel încât să arate așa cum se arată mai jos, în schimb, pentru a crea un nou bloc tematic și a lăsa linkul să fie un copil al acestuia.

MYMODULE.routing.yml:

MYMODULE.settings:
  calea: „/admin/config/MYMODULE”
  implicite:
    _controller: „\Drupal\system\Controller\SystemController::systemAdminMenuBlockPage”
    _title: „MyModule”
  cerinte:
    _permission: „acces paginile de administrare”

MYMODULE.example_thing:
  cale: „/admin/config/MYMODULE/example-thing”
    _form: „\Drupal\MYMODULE\Form\myModuleSettingsForm”
    _title: „Exemplu lucru”
  Opțiuni:
    _admin_route: ADEVĂRAT
  cerinte:
    _permission: „acces paginile de administrare”

MYMODULE.links.menu.yml

MYMODULE.settings:
  titlu: „MyModule”
  nume_rută: MYMODULE.settings
  părinte: system.admin_config
  descriere: „Configurați MyModule”
  greutate: -10

MYMODULE.example_thing:
  titlu: „Exemplu lucru”
  părinte: MYMODULE.settings
  descriere: „Exemplu de configurare a lucrurilor”
  greutate: 0
  nume_rută: MYMODULE.example_thing
Joseph avatar
drapel cn
Înțeleg și apreciez acest răspuns, mulțumesc. Cu toate acestea, am testat adăugarea lui la un bloc existent, cum ar fi sistemul, făcând așa cum ați spus și încă nu apare
leymannx avatar
drapel ne
@Joseph â Dacă ați trecut la `parent: system.admin_config_system` în linkurile dvs. Yaml, comutați la `path: '/admin/config/system/MYMODULE'` în ruta dvs. Yaml. Goliți memoria cache, desigur, și dacă acest lucru tot nu funcționează, aruncați o privire la baza de cod a Drupal, în special la toate modulele. Există o mulțime de exemple despre cum ați pus corect un link pe pagina /admin/config.De exemplu https://git.drupalcode.org/project/drupal/-/blob/9.3.9/core/modules/system/system.routing.yml#L153-159 și https://git.drupalcode.org/ project/drupal/-/blob/9.3.9/core/modules/system/system.links.menu.yml#L115-120.
Joseph avatar
drapel cn
Mi-am editat întrebarea pentru a schimba legăturile și fișierele de rutare la ceea ce sunt acum, care sunt copii aproape identice ale modului în care se face în exemplele pe care le-ați furnizat și tot nu va apărea. Îmi lipsește ceva sau există alt lucru care poate împiedica funcționarea acestuia?
No Sssweat avatar
drapel ua
„Există alt lucru care îl împiedică să funcționeze?” Puteți reproduce problema modulului la o nouă instalare Drupal, dacă nu, atunci da, ceva împiedică să funcționeze așa cum ar trebui @Joseph

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.