Provides CLI access to entity data and intelligence from multiple sources.
- Entity Agnostic: Works with all content entity types
- Plugin System: Extensible architecture using PHP 8 Attributes
- Drush Commands: Full CLI access for AI tool consumption
- Built-in Integrations: Statistics and Content Translation plugins included
- Contrib Integrations: Plugins for Analyze and AI Social Posts modules
composer require drupal/content_intel
drush en content_intelVisit /admin/config/content/content-intel to enable/disable plugins.
# List all content entity types
drush ci:types
drush ci:types --format=json
# List bundles for an entity type
drush ci:bundles node
drush ci:bundles taxonomy_term --format=json
# List fields for an entity type/bundle
drush ci:fields node article
drush ci:fields user
# List available intel plugins
drush ci:plugins
drush ci:plugins --format=json# List entities
drush ci:list node
drush ci:list node article --limit=10
drush ci:list taxonomy_term tags --format=json
# Get full intel for a single entity
drush ci:entity node 1
drush ci:entity node 1 --format=json
drush ci:entity node 1 --fields=title,body
drush ci:entity node 1 --plugins=statistics,content_translation
# Get entity summary (basic info only)
drush ci:summary node 1
# Batch collect intel for multiple entities
drush ci:batch node --bundle=article --limit=5 --format=json
drush ci:batch node --ids=1,2,3 --plugins=statisticsCreate a class in src/Plugin/ContentIntel/ with the attribute:
<?php
namespace Drupal\mymodule\Plugin\ContentIntel;
use Drupal\content_intel\Attribute\ContentIntel;
use Drupal\content_intel\ContentIntelPluginBase;
use Drupal\Core\Entity\ContentEntityInterface;
use Drupal\Core\StringTranslation\TranslatableMarkup;
/**
* Example ContentIntel plugin.
*/
#[ContentIntel(
id: 'my_plugin',
label: new TranslatableMarkup('My Plugin'),
description: new TranslatableMarkup('Description here.'),
entity_types: ['node'],
weight: 50,
)]
class MyPlugin extends ContentIntelPluginBase {
/**
* {@inheritdoc}
*/
public function isAvailable(): bool {
return TRUE;
}
/**
* {@inheritdoc}
*/
public function applies(ContentEntityInterface $entity): bool {
return TRUE;
}
/**
* {@inheritdoc}
*/
public function collect(ContentEntityInterface $entity): array {
return [
'metric' => 123,
'status' => 'active',
];
}
}- statistics: Page view counts from Statistics module (nodes only)
- content_translation: Translation status and coverage
- analyze: Analysis data from Analyze module plugins
- ai_social_posts: Social media posts linked to nodes
Other modules can use the collector service directly:
$collector = \Drupal::service('content_intel.collector');
// Get entity types.
$types = $collector->getEntityTypes();
// Get bundles.
$bundles = $collector->getBundles('node');
// Get fields.
$fields = $collector->getFields('node', 'article');
// List entities.
$entities = $collector->listEntities('node', 'article', limit: 10);
// Load and analyze entity.
$entity = $collector->loadEntity('node', 1);
$intel = $collector->collectIntel($entity);
// Get available plugins.
$plugins = $collector->getPlugins();- Drupal 10.3+ or 11.x
- PHP 8.1+
- Statistics module: Enables view count tracking
- Content Translation module: Enables translation status
- Analyze module: Enables content analysis plugins
- AI Social Posts module: Enables social post tracking