Puncte:1

Trageți și plasați pentru a sorta greutatea taxonomiei într-o vizualizare

drapel cn

Trebuie să creez o vizualizare de administrator personalizată pentru a înlocui pagina implicită de listare a termenilor taxonomiei pentru un anumit vocabular. Motivul este că am adăugat câmpuri personalizate în vocabular, iar administratorii trebuie să vadă acele câmpuri pe pagina de listare a termenilor. Pentru a fi clar, nu vorbesc despre pagina individuală a termenilor care arată conținutul atașat termenului respectiv, ci pagina reală de listare a administratorului care afișează toți termenii pentru un anumit vocabular. Evident, pot crea o vizualizare pentru a face acest lucru, dar nu îmi pot da seama cum să păstrez funcționalitatea de sortare prin glisare și plasare. M-am uitat la modulul Vizualizări Draggable, pe care l-am folosit înainte, dar care își creează propriul câmp de greutate separat și nu sortează pe termenul de taxonomie reală greutate. Există o modalitate mai bună de a face acest lucru? Vreau doar să pot sorta greutatea taxonomiei într-o vizualizare SAU și mai bine ar fi o modalitate de a afișa doar câmpurile personalizate în ecranul implicit de listare a termenilor taxonomiei, ceea ce nu mi-am putut da seama cum să fac. M-am gândit că este doar o vizualizare pe care o puteam edita ca și vizualizarea conținutului principal, dar cred că nu este. Nu am reușit să-mi dau seama cum să afișez câmpurile personalizate pe pagina de listare a taxonomiei implicite de administrator.

misterdidi avatar
drapel de
Se pare că este o problemă cunoscută cu Drupal8/9. Cea mai bună soluție pare să depășească ruta de prezentare generală. Vedeți acest exemplu (site-ul web este în franceză, dar codul se explică de la sine) https://kgaut.net/snippets/2020/drupal-8-surcharger-la-page-de-liste-des-termes-de-taxonomie.html sau acest thread https://www.drupal.org/project/drupal/issues/2975863#comment-12805681
Puncte:1
drapel cn

Am ajuns să creăm un modul personalizat care înlocuiește formularul de prezentare generală a taxonomiei. Am lipit codul nostru aici în cazul în care acest lucru ajută pe altcineva. În cazul nostru trebuia să adăugăm un câmp numit Acronym, un câmp numit Type și am adăugat și Status. Puteți ajusta după cum este necesar. Modulul nostru personalizat se numea mc_taxonomy și acesta era în fișierul mc_taxonomy.module.

<?php

utilizați Drupal\field\FieldConfigInterface;

/**
 * Implementează hook_form_FORM_ID_alter().
 *
 * Adăugați status, field_acronym și field_type la pagina de prezentare generală.
 */

funcția mc_taxonomy_form_taxonomy_overview_terms_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
  // Obțineți vocabul din formular pentru a citi datele de configurare a câmpului său.
  $vocab = $form_state->get(['taxonomie', 'vocabular']);
  $câmpuri = \Drupal::service('entity_field.manager')->getFieldDefinitions('taxonomy_term', $vocab->id());

  // Inserați câmpuri dacă există.
  mc_taxonomy_overview_insert_field($form, 'stare', 'Stare', 1, funcţie ($valoare) {
    returnează $valoare? „Published” : „Nepublicat”;
  });

  if (isset($fields['field_type'])) {
    mc_taxonomy_overview_insert_field($form, $fields['field_type']);
  }

  if (isset($fields['field_acronym'])) {
    mc_taxonomy_overview_insert_field($form, $fields['field_acronym']);
  }

}

function mc_taxonomy_overview_insert_field(&$form, $field, $label = null, $index = 1, $valueFunction = null) {
  dacă ($index <= 0) {
    // TODO Permite index == 0.
    // TODO Verificați limita superioară.
    throw new Exception('indexul trebuie să fie >= 1.');
  }
  // Extrageți datele din $field dacă sunt de tipul potrivit.
  if ($field instanceof FieldConfigInterface) {
    dacă (!$etichetă) {
      $label = $field->label();
    }
    $fieldName = $field->getName();
  } altfel {
    $fieldName = $field;
  }
  // Adăugați câmp la antet.
  $form['terms']['#header'] = array_merge(
    array_slice($form['terms']['#header'], $index - 1, $index, TRUE),
    [$label],
    array_slice($form['terms']['#header'], $index, NULL, TRUE)
  );
  foreach ($form['terms'] ca &$term) {
    // Găsiți termeni în matricea de randare.
    if (este_matrice($term) && !gol($term['#term'])) {
      // Adăugați câmp la termenul pentru corp.
      $fieldValue = $term['#term']->get($fieldName)->value;
      $term = array_merge(
        array_slice($term, $index - 1, $index, TRUE),
        [
          $fieldName => [
            '#markup' => $valueFunction ? $valueFunction($fieldValue): $fieldValue,
            '#type' => 'articol',
          ]
        ],
        array_slice($term, $index, NULL, TRUE)
      );
    }
  }
}

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.