ctools: Ein tiefes Eintauchen in die kundenspezifische Plugin -Erstellung in Drupal 7
ctools ist ein unverzichtbares Drupal 7 -Modul, das die Grundlage für zahlreiche andere Module wie Ansichten und Panels bildet. Seine umfangreichen APIs und Funktionen rationalisieren die Entwicklung der Modul, indem sie Funktionen wie Objekte Caching, Konfigurationsexportierbarkeit, Formularassistent, Dialoge und ein robustes Plugin -System anbieten. In diesem Artikel werden CTOOLS -Plugins untersucht und sich auf die Erstellung von benutzerdefinierten Plugins konzentrieren. Wir werden ein Modul erstellen, das Drupal 7 -Blockdefinition vereinfacht und den optimierteren Ansatz von Drupal 8 spiegelt.
Schlüsselkonzepte:
hook_ctools_plugin_type()
, das Angeben des Plugin -Verzeichnisses mit hook_ctools_plugin_directory()
und das Erstellen von individuellen Plugin -Dateien. hook_block_info()
und hook_block_view()
Implementierungen beseitigt wird. Erstellen des block_plugin
-Moduls:
Wir erstellen ein Modul, das das Blocksystem von Drupal 7 in eine Plugin-basierte Architektur umwandelt. Erstellen Sie mit der block_plugin.info
Datei:
<code>name = Block Plugin description = Simplifies Drupal 7 block definition using cTools plugins. core = 7.x dependencies[] = ctools</code>
Als nächstes definieren wir in block_plugin.module
unseren Plugin -Typ mit hook_ctools_plugin_type()
:
function block_plugin_ctools_plugin_type() { return array( 'block' => array( 'label' => 'Block', 'use hooks' => FALSE, 'process' => 'block_plugin_process_plugin' ) ); }
Der process
Callback, block_plugin_process_plugin()
, erstellt Plugin -Daten:
function block_plugin_process_plugin(&$plugin, $info) { // ... (Code to generate admin title, set 'show title', and define view/configure/save callbacks as shown in the original example) ... }
Wir brauchen auch hook_ctools_plugin_directory()
, um CTools zu sagen, wo wir unsere Plugins finden können:
function block_plugin_ctools_plugin_directory($module, $plugin) { if ($module == 'block_plugin' && in_array($plugin, array_keys(block_plugin_ctools_plugin_type()))) { return 'plugins/' . $plugin; } }
Integration in das Drupal -Block -System:
Jetzt verbinden wir unser Plugin -System mit dem Blocksystem von Drupal. hook_block_info()
registriert unsere Plugins als Blöcke:
function block_plugin_block_info() { $blocks = array(); $plugins = block_plugin_get_all_plugins(); // Helper function to fetch all plugins foreach ($plugins as $plugin) { $blocks[DELTA_PREFIX . $plugin['name']] = array( 'info' => $plugin['admin title'], ); } return $blocks; } // Helper function to get all plugins function block_plugin_get_all_plugins() { return ctools_get_plugins('block_plugin', 'block'); } define('DELTA_PREFIX', 'block_plugin_');
hook_block_view()
rendert den Blockinhalt:
function block_plugin_block_view($delta = '') { $plugin = block_plugin_plugin_from_delta($delta); // Helper to get plugin from delta if (!$plugin) { return; } $block = array(); if (isset($plugin['title']) && $plugin['show title'] !== FALSE) { $block['subject'] = $plugin['title']; } $block['content'] = $plugin['view']($delta); return $block; } // Helper function to get plugin from delta function block_plugin_plugin_from_delta($delta) { $prefix_length = strlen(DELTA_PREFIX); $name = substr($delta, $prefix_length); $plugin = block_plugin_get_plugin($name); return $plugin ? $plugin : FALSE; } // Helper function to get a single plugin function block_plugin_get_plugin($name) { return ctools_get_plugins('block_plugin', 'block', $name); }
Erstellen eines Block -Plugins:
Erstellen Sie eine Datei (z. B. my_block.inc
) im Verzeichnis plugins/block
:
<?php $plugin = array( 'title' => t('My Custom Block'), ); function block_plugin_my_block_view($delta) { return array( '#type' => 'markup', '#markup' => 'This is my custom block content!', ); }
Nach dem Löschen von Drupal -Cache wird Ihr benutzerdefinierter Block in der Blockadministrationsschnittstelle angezeigt.
Schlussfolgerung:
Diese verbesserte Erklärung bietet ein umfassenderes Verständnis für das Erstellen von benutzerdefinierten CTOOLS -Plugins in Drupal 7 und demonstriert ihre Anwendung bei der Vereinfachung der Drupal -Block -Management. Denken Sie daran, die CTOOLS -Dokumentation zu konsultieren, um weitere Details und erweiterte Funktionen zu erhalten.
Das obige ist der detaillierte Inhalt vonBauen benutzerdefinierten CTools -Plugins in Drupal 7. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!