Heim > Backend-Entwicklung > PHP-Tutorial > Bauen benutzerdefinierten CTools -Plugins in Drupal 7

Bauen benutzerdefinierten CTools -Plugins in Drupal 7

William Shakespeare
Freigeben: 2025-02-16 10:07:08
Original
824 Leute haben es durchsucht

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.

Building Custom cTools Plugins in Drupal 7

Schlüsselkonzepte:

  • ctools 'Rolle: ctools bietet einen Rahmen für wiederverwendbare Funktionen, sodass Entwickler die Geschäftslogik innerhalb isolierter Plugins in Einklang bringen können.
  • Plugin -Definition: Erstellen eines benutzerdefinierten Plugins beinhaltet das Definieren eines Plugin -Typs mit hook_ctools_plugin_type(), das Angeben des Plugin -Verzeichnisses mit hook_ctools_plugin_directory() und das Erstellen von individuellen Plugin -Dateien.
  • Blocksystemtransformation: Dieses Tutorial zeigt, wie Sie CTOOLS-Plugins nutzen, um ein Plugin-basiertes System für Drupal 7-Blöcke zu erstellen, wodurch der herkömmliche Ansatz der herkömmlichen Hook ersetzt wird.
  • optimierte Blockdefinition: Das benutzerdefinierte Plugin -System vereinfacht die Blockerstellung, indem die Notwendigkeit von Wiederholungen 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>
Nach dem Login kopieren

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'
    )
  );
}
Nach dem Login kopieren

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) ...
}
Nach dem Login kopieren

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;
  }
}
Nach dem Login kopieren

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_');
Nach dem Login kopieren

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);
}
Nach dem Login kopieren

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 Login kopieren

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage