Score:1

ฉันต้องการสร้างโมดูลฟิลด์อนุกรมวิธานที่กำหนดเอง

ธง es

สิ่งที่ฉันต้องการจะทำ

ฉันต้องการทราบสิ่งนี้ใน Drupal9

  • สุดท้าย ฉันต้องการสร้างฟิลด์ที่กำหนดเองบนเว็บฟอร์ม
  • ด้วยฟิลด์ที่กำหนดเองนี้ ผู้ส่งที่ใช้เว็บฟอร์มสามารถเพิ่มคำศัพท์อนุกรมวิธานใหม่ให้กับคำศัพท์ (คำศัพท์นี้กำหนดไว้ล่วงหน้าในโมดูล) บนเว็บฟอร์มนี้
  • ช่องนี้เป็นช่องข้อความ
  • หากคำศัพท์ใหม่ออกจากคำศัพท์แล้ว จะไม่เพิ่มคำศัพท์นั้นลงในคำศัพท์
  • หากเป็นไปได้ ผู้ส่งสามารถเลือกข้อกำหนดจากข้อกำหนดที่ได้ลงทะเบียนไว้แล้ว

ปัญหา

ฉันกำลังลองใช้ฟิลด์ที่กำหนดเองซึ่งสามารถลงทะเบียนคำศัพท์ในประเภทเนื้อหาได้ (ฉันไม่สามารถเพิ่มฟิลด์ที่กำหนดเองลงในเว็บฟอร์มได้ ดังนั้นฉันจึงลองก่อน) ฉันสร้างมันอย่างไม่แน่นอนแล้ว อย่างไรก็ตาม ถ้าฉันเขียนบางอย่างลงในฟิลด์นี้ คำเตือนจะถูกส่งออกไป

คำเตือน: การแปลงอาร์เรย์เป็นสตริงใน Drupal\mymodule2\Plugin\Field\FieldType\MyModule2Field->isEmpty() (บรรทัดที่ 62 ของ modules/custom/mymodule2/src/Plugin/Field/FieldType/MyModule2Field.php)

MyModule2 เป็นโมดูลแบบกำหนดเองที่ฉันสร้างขึ้น

ดังนั้นฉันต้องการทราบวิธีสร้างฟิลด์ที่กำหนดเองซึ่งสามารถลงทะเบียนคำศัพท์ได้อย่างถูกต้อง

โครงสร้างโค้ดและโฟลเดอร์

mymodule2 (โฟลเดอร์) -mymodule2.info.yml

-mymodule2.module

-src(โฟลเดอร์)/ปลั๊กอิน(โฟลเดอร์)/ฟิลด์(โฟลเดอร์)

ฟิลด์(โฟลเดอร์)-FieldType(โฟลเดอร์)-MyModule2Field.php

ฟิลด์(โฟลเดอร์)-FieldWidget(โฟลเดอร์)-MyModule2Widget.php

ฟิลด์ (โฟลเดอร์) -FieldFormatter (โฟลเดอร์) -MyModule2Formatter.php

รหัส

mymodule2.info.yml

ชื่อ: mymodule2
ประเภท: โมดูล
คำอธิบาย : hogehoge
core_version_requirement: ^8.8 || ^9
แพ็คเกจ: ตัวอย่าง

mymodule2.module

<?php ?>

MyModule2Field.php

    <?php 
namespace Drupal\mymodule2\Plugin\Field\FieldType;

use Drupal\Core\Field\FieldItemBase;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
use Drupal\Core\TypedData\DataDefinition;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\taxonomy\Entity\Term;      
use Drupal\Core\Link;
use Drupal\Core\Url;
/**
 * Plugin implementation of the 'MyModule2' field type.
 *
 * @FieldType(
 *   id = "mymodule2",
 *   label = @Translation("MyModule"),
 *   description = @Translation("This field is used to store alpha-numeric values."),
 *   default_widget = "MyModule2Widget",
 *   default_formatter = "MyModule2Formatter"
 * )
 */
class MyModule2Field extends FieldItemBase {
 
 /**
  * {@inheritdoc}
  */
  
  public static function propertyDefinitions(FieldStorageDefinitionInterface $definition) {
    // Prevent early t() calls by using the TranslatableMarkup.
    $properties['mymodule2'] = DataDefinition::create('string')
    ->setLabel(new TranslatableMarkup('Text value'));
 
    return $properties;
  }
 
  /**
   * {@inheritdoc}
   */
  public static function schema(FieldStorageDefinitionInterface $definition) {
    $schema = [
        'columns' => [
          'mymodule2' => [
            'type' => 'varchar',
            'length' => 255,
          ],
        ],
    ];
    
    
    
    return $schema;
  }
 
  /**
   * {@inheritdoc}
   */
  public function isEmpty() {
    $value = $this->getValue();
    if (isset($value['mymodule2']) && $value['mymodule2'] != '') {
      
      /*this is problem code*/
      $val=implode("",$value);
      $arr = explode(',',$val);
      $categories_vocabulary='pixelarttag';
      foreach($arr as $a){
        $term = term::create(array(
        'parent' => array(),
        'name' => $a,
        'vid' => $categories_vocabulary,))->save();
      }
      return FALSE;
    }
    return TRUE;
  }
 
}
?>

MyModule2Widget.php

<?php 
namespace Drupal\mymodule2\Plugin\Field\FieldWidget;
 
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Field\WidgetBase;
use Drupal\Core\Form\FormStateInterface;
 
/**
 * Plugin implementation of the 'MyModule2Widget' widget.
 *
 * @FieldWidget(
 *   id = "MyModule2Widget",
 *   label = @Translation("My Field widget"),
 *   field_types = {
 *     "mymodule2"
 *   }
 * )
 */
class MyModule2Widget extends WidgetBase {
 
 /**
   * {@inheritdoc}
   */
  public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
   
    $element['mymodule2'] =  [
      '#type' => 'textfield',
      '#title' => 'AddictionTaxonomy',
      '#description' => 'Custom field to be used for alpha-numeric values',
      '#default_value' => isset($items[$delta]->title) ? $items[$delta]->title : NULL,
      '#weight' => 0,
    ];
 
    return $element;
  }
 
}
?>

MyModule2Formatter.php

<?php
namespace Drupal\mymodule2\Plugin\Field\FieldFormatter;
 
use Drupal\Core\Field\FormatterBase;
use Drupal\Core\Field\FieldItemListInterface;
 
/**
 * Plugin implementation of the 'MyModule2Formatter' formatter.
 *
 * @FieldFormatter(
 *   id = "MyModule2Formatter",
 *   label = @Translation("My Field Formatter"),
 *   field_types = {
 *     "mymodule2"
 *   }
 * )
 */
class MyModule2Formatter extends FormatterBase {
 
 /**
   * {@inheritdoc}
   */
  public static function defaultSettings() {
    return [
      // Implement default settings.
    ] + parent::defaultSettings();
  }
 
  /**
   * {@inheritdoc}
   */
  public function settingsSummary() {
    $summary = [];
    $summary[] = $this->t('Displays the random string.');
    return $summary;
  }
 
  /**
   * {@inheritdoc}
   */
  public function viewElements(FieldItemListInterface $items, $langcode) {
 
    $elements = [];
    foreach ($items as $delta => $item) {
      $elements[$delta] = [
        '#type' => 'markup',
        '#markup' => $item->mymodule2
      ];
    }
 
    return $elements;
  }
}
?>

ป.ล.

ฉันไม่เก่งภาษาอังกฤษ และฉันก็ไม่ค่อยรู้เกี่ยวกับ Drupal มากนัก ฉันเรียน Drupal ตั้งแต่ 1 เดือนที่แล้ว ดังนั้นฉันอาจถามอะไรโง่ๆ ได้โปรดยกโทษให้ฉันด้วย

ขอแสดงความนับถือ

apaderno avatar
us flag
Welcome to Drupal Answers! If `$value` contains an array, `$val = implode("", $value);` will cause that warning. Unfortunately, a question asking why the code written by users is causing a PHP warning and how to avoid it is off-topic for us, especially when the code causing the warning isn't using any Drupal function/method, as that isn't a question that requires Drupal knowledge to be answered.
yohei shibasaki avatar
es flag
ขอบคุณและขออภัยที่ถามคำถามผิดที่ ฉันจะถามคำถามเดิมในสถานที่ที่ถูกต้อง

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา