We have already figured out the Form API, the Fields API and we know how the data in Drupal gets into the database. Now let's look at the foundation of all Drupal sites, namely the Entity API.
You have probably noticed that the fields do not exist by themselves, but are “attached” to entities: nodes, blocks, taxonomy terms, views, etc. You can create bundle entities, for example, material types, block types, taxonomy dictionaries. But what if you need to create a new entity with your bundles? In this case, you will need the Entity API to create a new entity.
Retrieving field values in entities is fairly simple, but there are several ways to do this. Let's see how best to work with field values in custom code. You can always see the latest information on working with fields on the official website:
https://www.drupal.org/docs/8/api/entity-api/working-with-the-entity-api
In this article, we will look at examples of working with values.
Working with Entities in Drupal is unified and all CRUD operations are also the same for all entities. In this article, we will figure out how to work with entities in custom code.
Let's look at simple examples first.
In past articles, we have already encountered hooks. In this article, we’ll take a closer look at hooks that help you work with entities.
In this article, you can read in general what hooks are and why they are needed:
http://drupalbook.org/drupal/92-what-hook-drupal-8
We will use hooks to add our custom code that will fire on certain events related to entities: add, delete, update.
You can see all the Drupal hooks on this page:
The events system allows you to build more complex systems with the ability to change functionality using custom code for certain events. Many hooks from Drupal 7 have been replaced by events. This allowed to unify the work of many parts of Drupal and additional copy modules. The events system itself came from Symfony and consists of the following parts:
Event Subscribers - “Subscribers” to specific events are functions or methods that fire on certain events. In code, is a class that implements the class:
In this article we will consider Field Formatters, that allow us to edit the display of fields and display them on the page.
In past articles, we created field type Link, in this article we will look at how these fields are displayed on the page and which class is responsible for it. Each field that you add through Drupal can be displayed on the page and edit its settings on the page Manage display.
It's common case to execute in developing Drupal modules. You should use entityQuery where it's possible, but sometimes it's needed to use SQL query to get more sophisticated data.
You can add to bookmarks this page to always have a cheat sheet on hand how to execute MySQL queries select, insert, update, delete in Drupal.
Select
Get single value:
In previous articles we have seen how the Link field type works: Storage, Widget, Formatter. In this article we will make our own bone field type for outputting video from youtube on a page with two different formats and settings.
This article focuses on the Fields API, and if you need to add the Yotube video field to your site, it is better to use the ready-made module:
In this article we will consider Field Formatters, that allow us to edit the display of fields and display them on the page.
In past articles, we created field type Link, in this article we will look at how these fields are displayed on the page and which class is responsible for it. Each field that you add through Drupal can be displayed on the page and edit its settings on the page Manage display.
In this tutorial we will look at how the Field Widget of the Link module works. This is a review article, so if you want to start writing your File Widget, please skip to the following articles.
In the last lesson we added Link fields for nodes and blocks. Now let's look at what the form for the Link field is formed by.
We have already met with autoloading of PHP classes in Drupal, and there is also a WidgetBase field widget class for fields:
core/lib/Drupal/Core/Field/WidgetBase.php