
Drupal At Your Fingertips
Give your coding agent synced Drupal 9+ chapter docs—from AJAX and actions to AI hooks—while you implement modules, themes, and site fixes.
Install
npx skills add https://github.com/grasmash/drupal-claude-skills --skill drupal-at-your-fingertipsWhat is this skill?
- 53-topic mirror of Drupal at Your Fingertips (upstream d9book), last verified 2025-10-31
- Per-chapter pointers to canonical online docs with code examples, patterns, and troubleshooting
- Coverage spans actions, AJAX, AI, and broader site-building chapters—not a single-task snippet
- Structured for agent retrieval instead of hunting drupalatyourfingertips.com tab-by-tab
- Maintained sync metadata (source URLs, author Selwyn Polit) for traceability
Adoption & trust: 1 installs on skills.sh; 67 GitHub stars; 3/3 security scanners passed (skills.sh audits); trending (+100% hot-view momentum).
Recommended Skills
Journey fit
Drupal implementation work lives in Build; this pack is the on-ramp reference shelf agents pull during backend and integration tasks. Topics align with CMS routing, entities, hooks, and services—classic backend surface area, not launch SEO or ops runbooks alone.
Common Questions / FAQ
Is Drupal At Your Fingertips safe to install?
skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.
SKILL.md
READMESKILL.md - Drupal At Your Fingertips
Last synced: 2025-10-31 Upstream: https://github.com/selwynpolit/d9book Topics synced: 53 # about **Source**: [Drupal at Your Fingertips - about](https://drupalatyourfingertips.com/about) **Author**: Selwyn Polit --- ## Full Documentation **View online**: https://drupalatyourfingertips.com/about This chapter covers: - Detailed explanations with code examples - Best practices and common patterns - Step-by-step implementation guides - Troubleshooting and debugging tips --- --- **Last verified**: 2025-10-31 # actions **Source**: [Drupal at Your Fingertips - actions](https://drupalatyourfingertips.com/actions) **Author**: Selwyn Polit --- ## Full Documentation **View online**: https://drupalatyourfingertips.com/actions This chapter covers: - Detailed explanations with code examples - Best practices and common patterns - Step-by-step implementation guides - Troubleshooting and debugging tips --- --- **Last verified**: 2025-10-31 # ai **Source**: [Drupal at Your Fingertips - ai](https://drupalatyourfingertips.com/ai) **Author**: Selwyn Polit --- ## Full Documentation **View online**: https://drupalatyourfingertips.com/ai This chapter covers: - Detailed explanations with code examples - Best practices and common patterns - Step-by-step implementation guides - Troubleshooting and debugging tips --- --- **Last verified**: 2025-10-31 # AJAX **Source**: [Drupal at Your Fingertips - ajax](https://drupalatyourfingertips.com/ajax) **Author**: Selwyn Polit Quick reference for AJAX in Drupal with practical code examples. --- ## Core Concept AJAX in Drupal enables partial page updates without full page refreshes. Use the `#ajax` property on form elements to trigger callbacks that return AJAX commands (replace, append, remove, etc.) to manipulate the page. ## AJAX in Forms **Basic pattern**: ```php $form['category'] = [ '#type' => 'select', '#title' => $this->t('Category'), '#options' => ['tech' => 'Tech', 'news' => 'News'], '#ajax' => [ 'callback' => '::updateItems', // Method name 'wrapper' => 'items-wrapper', // HTML ID to replace 'event' => 'change', // Trigger event (default: change) ], ]; $form['items'] = [ '#type' => 'select', '#title' => $this->t('Items'), '#prefix' => '<div id="items-wrapper">', '#suffix' => '</div>', ]; ``` **AJAX callback**: ```php public function updateItems(array &$form, FormStateInterface $form_state) { // Return the element to replace return $form['items']; } ``` --- ## AJAX Properties **Common #ajax properties**: | Property | Purpose | Default | |----------|---------|---------| | `callback` | Method to call | Required | | `wrapper` | HTML ID to replace | Required | | `event` | JavaScript event | 'change' | | `method` | HTTP method | 'POST' | | `progress` | Progress indicator | `['type' => 'throbber']` | | `effect` | jQuery effect | 'fade' | | `speed` | Effect speed | 'slow' | **Progress indicators**: ```php '#ajax' => [ 'callback' => '::myCallback', 'wrapper' => 'my-wrapper', // Throbber (default) 'progress' => ['type' => 'throbber'], // Full page progress bar 'progress' => ['type' => 'fullscreen'], // Custom message 'progress' => [ 'type' => 'throbber', 'message' => $this->t('Loading...'), ], // No progress indicator 'progress' => ['type' => 'none'], ], ``` --- ## AJAX Responses **Return render array** (most common): ```php public function callback(array &$form, FormStateInterface $form_state) { // Return element to replace return $form['subcategory']; } ``` **Return AjaxResponse with commands**: ```php use Drupal\Core\Ajax\AjaxResponse; use Drupal\Core\Ajax\ReplaceCommand; use Drupal\Core\Ajax\AppendCommand; public function callback(array &$form, FormStateInterface $form_state) { $response = new AjaxResponse(); // Replace element $response->addCommand(new ReplaceCommand('#items-wrapper', $form['items'])); // Append content $response->addCommand(new AppendCommand('#