Uncategorized

Writing custom fields in Drupal 8

Concept of a field

Fields are the data entry points to a web application. Usually, they provide HTML elements and may be responsible for any manipulation of data before it goes into and comes out of the application. The data captured from a single field can be simple or complex.

Assuming we want to create a field for country, all we need is a single HTML element – textfield or select options. An address field, on the other hand, is a collection of discrete data which may include standalone simple fields including a textfield representing postcode (provided by a core module) and a country field (maybe from a custom or contributed module).

Screenshot of simple and complex fields

In the Drupal world, when considering solutions the first phrase you may hear is, “there’s a module for that!”. However, for the task at hand, “you need a module for that!”. We are now going to write a module which provides this custom country field..

To create a new field in Drupal 7, a number of hooks need to be implemented in a custom module and these include the following:

  • hook_field_info() – the field type definition as well as its settings.
  • hook_field_schema() – the database schema for the field structure.
  • hook_field_widget_info() – the widget types to use for the field type.
  • hook_field_formatter_info() – the display of field values.

The task in Drupal 8 is founded on the same principles although the implementation differs. The first thing to remember here is, “there is a class for that!”. A lot of the hard work has been done in Drupal core and all we need to do is extend some classes and override default methods to suit our implementation.

Comparison of Drupal 7 hooks with Drupal 8 plugins

Creating a module

All contrib and custom modules should be placed inside the “modules” folder in your site root. Core-related code is now in “core”. However, it’s also best practice to have “contrib” and “custom” sub-folder in “modules” for clear separation of these types of modules. So we’ll create our “country” folder under modules\custom. What used to go inside *.info file is now in country.yml, so we create that file too and add the following:

name: Country
type: module
description: Defines a simple country field type.
package: Field types
version: VERSION
core: 8.x
dependencies:
  - field

Inside your module directory, you need a “src” subdirectory to keep all your class files. To organise things further, you need a “Plugin” sub-folder in “src”. There are different types of plugins e.g. fields, actions, blocks and menus. So you need to create another folder called “Field” inside Plugin and you’ll end up with a directory structure like src\Plugin\Field

Example directory structure for a Drupal 8 module

Next, we need to define our data type, widget and formatter. These will be in classes with each occupying its own folder again. Let’s take them one by one.

Data Type

The folder is called FieldType, so create it – src\Plugin\Field\FieldType. Create a class, which we shall call “CountryItem”. The file is called CountryItem.php and in it we should have:

class CountryItem {
}

How do we define our field type? With the new plugin system, this requires an annotation1 – something like a special comment block to allow core classes know about our field type. Your code should now look like this:

/**
 * Plugin implementation of the 'country' field type.
 *
 * @FieldType(
 *   id = "country",
 *   label = @Translation("Country"),
 *   description = @Translation("Stores the ISO-2 name of a country."),
 *   category = @Translation("Custom"),
 *   default_widget = "country_default",
 *   default_formatter = "country_default"
 * )
 */
class CountryItem {
}

 

 

Read More 4501
Read More 4502
Read More 4503
Read More 4504
Read More 4505
Read More 4506
Read More 4507
Read More 4508
Read More 4509
Read More 4510
Read More 4511
Read More 4512
Read More 4513
Read More 4514
Read More 4515
Read More 4516
Read More 4517
Read More 4518
Read More 4519
Read More 4520
Read More 4521
Read More 4522
Read More 4523
Read More 4524
Read More 4525
Read More 4526
Read More 4527
Read More 4528
Read More 4529
Read More 4530
Read More 4531
Read More 4532
Read More 4533
Read More 4534
Read More 4535
Read More 4536
Read More 4537
Read More 4538
Read More 4539
Read More 4540
Read More 4541
Read More 4542
Read More 4543
Read More 4544
Read More 4545
Read More 4546
Read More 4547
Read More 4548
Read More 4549
Read More 4550
Read More 4551
Read More 4552
Read More 4553
Read More 4554
Read More 4555
Read More 4556
Read More 4557
Read More 4558
Read More 4559
Read More 4560
Read More 4561
Read More 4562
Read More 4563
Read More 4564
Read More 4565
Read More 4566
Read More 4567
Read More 4568
Read More 4569
Read More 4570
Read More 4571
Read More 4572
Read More 4573
Read More 4574
Read More 4575
Read More 4576
Read More 4577
Read More 4578
Read More 4579
Read More 4580
Read More 4581
Read More 4582
Read More 4583
Read More 4584
Read More 4585
Read More 4586
Read More 4587
Read More 4588
Read More 4589
Read More 4590
Read More 4591
Read More 4592
Read More 4593
Read More 4594
Read More 4595
Read More 4596
Read More 4597
Read More 4598
Read More 4599
Read More 4600
Read More 4601
Read More 4602
Read More 4603
Read More 4604
Read More 4605
Read More 4606
Read More 4607
Read More 4608
Read More 4609
Read More 4610
Read More 4611
Read More 4612
Read More 4613
Read More 4614
Read More 4615
Read More 4616
Read More 4617
Read More 4618
Read More 4619
Read More 4620
Read More 4621
Read More 4622
Read More 4623
Read More 4624
Read More 4625
Read More 4626
Read More 4627
Read More 4628
Read More 4629
Read More 4630
Read More 4631
Read More 4632
Read More 4633
Read More 4634
Read More 4635
Read More 4636
Read More 4637
Read More 4638
Read More 4639
Read More 4640
Read More 4641
Read More 4642
Read More 4643
Read More 4644
Read More 4645
Read More 4646
Read More 4647
Read More 4648
Read More 4649
Read More 4650
Read More 4651
Read More 4652
Read More 4653
Read More 4654
Read More 4655
Read More 4656
Read More 4657
Read More 4658
Read More 4659
Read More 4660
Read More 4661
Read More 4662
Read More 4663
Read More 4664
Read More 4665
Read More 4666
Read More 4667
Read More 4668
Read More 4669
Read More 4670
Read More 4671
Read More 4672
Read More 4673
Read More 4674
Read More 4675
Read More 4676
Read More 4677
Read More 4678
Read More 4679
Read More 4680
Read More 4681
Read More 4682
Read More 4683
Read More 4684
Read More 4685
Read More 4686
Read More 4687
Read More 4688
Read More 4689
Read More 4690
Read More 4691
Read More 4692
Read More 4693
Read More 4694
Read More 4695
Read More 4696
Read More 4697
Read More 4698
Read More 4699
Read More 4700
Read More 4701
Read More 4702
Read More 4703
Read More 4704
Read More 4705
Read More 4706
Read More 4707
Read More 4708
Read More 4709
Read More 4710
Read More 4711
Read More 4712
Read More 4713
Read More 4714
Read More 4715
Read More 4716
Read More 4717
Read More 4718
Read More 4719
Read More 4720
Read More 4721
Read More 4722
Read More 4723
Read More 4724
Read More 4725
Read More 4726
Read More 4727
Read More 4728
Read More 4729
Read More 4730
Read More 4731
Read More 4732
Read More 4733
Read More 4734
Read More 4735
Read More 4736
Read More 4737
Read More 4738
Read More 4739
Read More 4740
Read More 4741
Read More 4742
Read More 4743
Read More 4744
Read More 4745
Read More 4746
Read More 4747
Read More 4748
Read More 4749
Read More 4750
Read More 4751
Read More 4752
Read More 4753
Read More 4754
Read More 4755
Read More 4756
Read More 4757
Read More 4758
Read More 4759
Read More 4760
Read More 4761
Read More 4762
Read More 4763
Read More 4764
Read More 4765
Read More 4766
Read More 4767
Read More 4768
Read More 4769
Read More 4770
Read More 4771
Read More 4772
Read More 4773
Read More 4774
Read More 4775
Read More 4776
Read More 4777
Read More 4778
Read More 4779
Read More 4780
Read More 4781
Read More 4782
Read More 4783
Read More 4784
Read More 4785
Read More 4786
Read More 4787
Read More 4788
Read More 4789
Read More 4790
Read More 4791
Read More 4792
Read More 4793
Read More 4794
Read More 4795
Read More 4796
Read More 4797
Read More 4798
Read More 4799
Read More 4800
Read More 4801
Read More 4802
Read More 4803
Read More 4804
Read More 4805
Read More 4806
Read More 4807
Read More 4808
Read More 4809
Read More 4810
Read More 4811
Read More 4812
Read More 4813
Read More 4814
Read More 4815
Read More 4816
Read More 4817
Read More 4818
Read More 4819
Read More 4820
Read More 4821
Read More 4822
Read More 4823
Read More 4824
Read More 4825
Read More 4826
Read More 4827
Read More 4828
Read More 4829
Read More 4830
Read More 4831
Read More 4832
Read More 4833
Read More 4834
Read More 4835
Read More 4836
Read More 4837
Read More 4838
Read More 4839
Read More 4840
Read More 4841
Read More 4842
Read More 4843
Read More 4844
Read More 4845
Read More 4846
Read More 4847
Read More 4848
Read More 4849
Read More 4850
Read More 4851
Read More 4852
Read More 4853
Read More 4854
Read More 4855
Read More 4856
Read More 4857
Read More 4858
Read More 4859
Read More 4860
Read More 4861
Read More 4862
Read More 4863
Read More 4864
Read More 4865
Read More 4866
Read More 4867
Read More 4868
Read More 4869
Read More 4870

Related Articles

Leave a Reply

Back to top button