Managing node-types¶
First and foremost, you need to create a new node-type before creating any kind of node.
If you want to know more about what a node-type is, please visit the other section of the developer documentation.
Add node-type¶
To add a new node type, follow these steps:
Create the YAML file In the
config/node_types/directory, create a file named after your node type in lowercase (e.g.,nodetypename.yaml).Follow the required structure The file must follow the correct structure and parameter types:
# 'name' is a required string. name: nodeTypeName # 'displayName' is a required string. displayName: 'The node type display name for editors' # 'color' is an optional string. color: '#000000' # 'description' is an optional string. description: nodeTypeName description # 'visible' is an optional boolean. visible: true # 'publishable' is an optional boolean. publishable: false # 'attributable' is an optional boolean. attributable: true # 'sortingAttributesByWeight' is an optional boolean. sortingAttributesByWeight: false # 'reachable' is an optional boolean. reachable: true # 'hidingNodes' is an optional boolean. hidingNodes: false # 'hidingNonReachableNodes' is an optional boolean. hidingNonReachableNodes: true # 'fields' defines the list of fields for the node type. # This section will be explained below in "Adding node-type field" fields: - ... - ... # 'defaultTtl' is an optional integer. It represents the number of minutes node' responses will live in HTTP cache defaultTtl: 15 # 'searchable' is an optional boolean. searchable: true
Note
You can use the nodetypes:validate-files command to check if your file structure is correct.
Once validated, run the app:migrate command and verify:
- The
src/GeneratedEntity/NSNodeTypeName.phpfile was correctly generated. - The API configuration in
config/api_resources/nsnodetypename.ymlis correct (you can test it via{{url}}/api/docs).
Delete node-type¶
To delete a node type, remove the associated files from the following directories:
config/node_types/src/GeneratedEntity/config/api_resources/
Warning
Deleting a node type does not remove the nodes linked to that type in the database.
You need to create a migration (command: bin/console doctrine:migrations:generate) and choose one of the following solutions.
Soft Delete¶
If you want to transfer nodes to another existing node type while keeping their data, use a migration like this:
public function up(Schema $schema): void
{
$this->addSql("UPDATE nodes SET nodetype_name = 'AnotherNodeTypeName' WHERE nodetype_name = 'NodeTypeName'");
$this->addSql("UPDATE nodes_sources SET discr = 'AnotherNodeTypeName' WHERE discr = 'NodeTypeName'");
}
public function down(Schema $schema): void
{
// Leave empty
}
Note
Alternatively, if you want to keep your data without transferring it to another node type,
you can create a “ghost” node type (GhostNodeType) with property visible to false and has no fields, then transfer your nodes there.
Hard Delete¶
To completely delete all nodes (and children) associated with the node type, use a migration like this:
Warning
This method will delete all node and also his children in cascade
public function up(Schema $schema): void
{
$this->addSql("DELETE FROM nodes WHERE nodetype_name = 'NodeTypeName'");
$this->addSql("DELETE FROM nodes_sources WHERE discr = 'NodeTypeName'");
}
public function down(Schema $schema): void
{
// Leave empty
}
Adding node-type field¶
To add fields to a node type, modify the fields property in your YAML file.
For example:
fields:
-
# Example field with minimal requirements
name: field_name_1
label: Field Name
type: string
-
# Example field with all possible parameters
name: field_name_2
label: Field Name Two
type: markdown
groupName: string
placeholder: string
description: string
minLength: 0
maxLength: 50
serializationMaxDepth: 2
universal: false
excludeFromSearch: false
excludedFromSerialization: false
indexed: false
visible: true
expanded: false
defaultValues: null # depends on the type
normalizationContext:
groups:
- get
- nodes_sources_base
- nodes_sources_default
serializationGroups: null
serializationExclusionExpression: null
For more details on field types and parameters, refer to Node-type fields.
Note
Always validate your file with nodetypes:validate-files before running app:migrate.
This command will:
- Update your node source entity.
- Generate a migration to add your fields to
node_sourcesdatabase table if they do not already exist in another node type.
Removing node-type field¶
To remove a field from a node type, open the YAML file in config/node_types/
and delete the corresponding field from the fields array.
Example:
Before (removing field_name_2):
fields:
-
name: field_name_1
label: Field Name
type: string
-
name: field_name_2
label: Field Name Two
type: markdown
After:
fields:
-
name: field_name_1
label: Field Name
type: string
Note
As with adding fields, validate your file with nodetypes:validate-files and then run app:migrate.
This command will update your node source entity and generate a migration to drop the field from node_sources
if it is not used by another node type.