Rules is a tool that enables you to define automatic, conditionally executed actions, triggered by various types of events. in this tutorial I’ll show you how to create custom rules condition in Drupal 8.
Create a module
In Drupal 8, it is necessary to create an info.yml
file that contains the metadata for every custom module. you will need to create the codimth_custom_rules_condition.info.yml
file under the modules/custom/codimth_custom_rules_condition
folder. Inside this file enter following:
name: Codimth Custom Rules Condition
description: Create a custom rules condition
package: CodimTh
type: module
core: 8.x
dependencies:
- rules
Once the folder and file has been created, you can go to your Drupal dashboard and enable the custom module we have just created.
Create a Condition Class
Now, we’ll create a class that will contain the logic of our condition. we’ll place our NodeIDIs.php
class under the modules/custom/codimth_custom_rules_condition/src/Plugin/Condition
directory.
The class file should contain annotation as well. The annotation allows us to identify the condition, also this class will contain doEvaluate() method.
doEvaluate() method will contain the logic of our condition.
Now, this is what the class file should contain in the end:
<?php
namespace Drupal\codimth_custom_rules_condition\Plugin\Condition;
use Drupal\node\NodeInterface;
use Drupal\rules\Core\RulesConditionBase;
/**
* Provides a 'Node ID is' condition.
*
* @Condition(
* id = "codimth_custom_rules_condition_node_id_is",
* label = @Translation("Node ID is"),
* category = @Translation("Node"),
* context = {
* "node" = @ContextDefinition("entity:node",
* label = @Translation("Node")
* ),
* "ids" = @ContextDefinition("string",
* label = @Translation("IDs of Nodes"),
* description = @Translation("IDs of Nodes"),
* multiple = TRUE
* )
* }
* )
*
*/
class NodeIDIs extends RulesConditionBase
{
/**
* @param \Drupal\node\NodeInterface $node
* The node to check.
*
* @return bool
* TRUE if the node id existe in $ids array.
*/
protected function doEvaluate(NodeInterface $node, $ids)
{
return in_array($node->id(),$ids);
}
}
Now, go back to your site, and you should be able to see the Condition you have just created. follow these screenshots to know how to use it.
Next steps
- Clear your Drupal 8 caches. To do this I use this Drush command:
drush cr
if you don’t currently use Drush, I highly recommend using it, or the Drupal Console. - I hope you found this article useful. let me know if you have any questions and I’ll be happy to answer them.
- This code can be found and downloaded from https://github.com/codimth/codimth_custom_rules_condition.