48
drupal #drupal

drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

  • Upload
    others

  • View
    8

  • Download
    0

Embed Size (px)

Citation preview

Page 1: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

drupal

#drupal

Page 2: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

Inhaltsverzeichnis

Über 1

Kapitel 1: Erste Schritte mit Drupal 2

Bemerkungen 2

Examples 2

Drupal mit Drush installieren 2

Installation von Drupal 8 mit Drupal Console 2

Drupal-Konzepte 3

Kapitel 2: Beispiel für die Drupal 8-Warteschlangen-API und die Stapel-API 6

Examples 6

Ein Beispielmodul zum besseren Verständnis der Warteschlangen-API und der Stapel-API in Dr 6

Kapitel 3: Das Ansichten-Modul 12

Einführung 12

Examples 12

Eine Ansicht, die über die Ansichten-Benutzeroberfläche angezeigt wird 12

Kapitel 4: Das Regelmodul 14

Einführung 14

Bemerkungen 14

Ressourcen 14

Examples 14

Eine benutzerdefinierte Regel, die mithilfe der Regelbenutzeroberfläche angezeigt wird 14

Eine benutzerdefinierte Regel, die im Regelexportformat angezeigt wird 15

Feldsammelelemente mit Regeln bearbeiten 16

Regelevent: 17

Regeln Bedingung: 17

Regeln Aktionen: 17

Show Time ... 18

Mehr Info 18

Kapitel 5: Drupal 8-Objekt-API 19

Einführung 19

Examples 19

Page 3: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

Erstellen Sie ein Inhaltselement mit der Drupal Console 19

Schritt 1: Erzeugen Sie ein Modul 19

Schritt 2: Generieren Sie eine Inhaltsentität 19

Kapitel 6: Drupal Cache und Performace 20

Einführung 20

Examples 20

Aktivieren Sie die Drupal-Site und blockieren Sie den Cache 20

Kapitel 7: Drush 21

Bemerkungen 21

Was ist Drush? 21

Examples 21

Drush-Befehle 21

Drush-Status 21

Passwort für jeden Benutzer zurücksetzen 21

Generieren Sie eine einmalige Admin-Anmelde-URL 21

Die Caches löschen 22

Module aktivieren 22

Mainteneace 22

Konfiguration exportieren 23

Drush installieren 23

Manuelle globale Installation 23

Composer-globale Installation 24

Drush installieren 24

Manuelle Installation 24

Komponist 24

Kapitel 8: Feldformatierer 26

Einführung 26

Bemerkungen 26

Examples 27

Verschleierter Email-Formatierer 27

Kapitel 9: Modulentwicklung - Drupal 7 30

Page 4: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

Bemerkungen 30

Examples 30

Grundmodul mit einer einfachen Seite 30

Basismodul, das einen benutzerdefinierten Block bereitstellt 30

Grundlegendes benutzerdefiniertes Formular zur Aufnahme in Seiten- oder Blockbeispiele. 31

Basismodul, das einen benutzerdefinierten Block bereitstellt 33

Grundlegendes benutzerdefiniertes Formular zur Aufnahme in Seiten- oder Blockbeispiele. 34

Beispieldatei custom_module.install zum Erstellen einer Datenbanktabelle 35

Kapitel 10: Themenentwicklung - Drupal 7 37

Examples 37

.Info-Dateien schreiben 37

Theme .info-Datei 38

Kapitel 11: Zweig 40

Einführung 40

Examples 40

Zweigfilter 40

Abhängigkeitsinjektion in Twig-Erweiterungen 41

Credits 44

Page 5: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

Über

You can share this PDF with anyone you feel could benefit from it, downloaded the latest version from: drupal

It is an unofficial and free drupal ebook created for educational purposes. All the content is extracted from Stack Overflow Documentation, which is written by many hardworking individuals at Stack Overflow. It is neither affiliated with Stack Overflow nor official drupal.

The content is released under Creative Commons BY-SA, and the list of contributors to each chapter are provided in the credits section at the end of this book. Images may be copyright of their respective owners unless otherwise specified. All trademarks and registered trademarks are the property of their respective company owners.

Use the content presented in this book at your own risk; it is not guaranteed to be correct nor accurate, please send your feedback and corrections to [email protected]

https://riptutorial.com/de/home 1

Page 6: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

Kapitel 1: Erste Schritte mit Drupal

Bemerkungen

Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu sein, sodass Entwickler eine Vielzahl von Websites erstellen können, von Blogs und Websites im Broschürenstil bis hin zu komplexen E-Commerce-Plattformen. Durch seine Community-basierte modulare Architektur kann Drupal Tools zur Erweiterung der Kernfunktionen bereitstellen, um die Entwicklung großer und komplexer Projekte zu beschleunigen.

Derzeit gibt es zwei unterstützte Versionen von Drupal: 7 und 8. Drupal 8 basiert auf Komponenten des Symfony-Frameworks und vielen anderen Bibliotheken von Drittanbietern, um moderne Entwicklungsstrukturen bereitzustellen.

Examples

Drupal mit Drush installieren

drush dl drupal --drupal-project-rename=example cd example drush site-install standard --db-url='mysql://[db_user]:[db_pass]@localhost/[db_name]' --site-name=Example

Installation von Drupal 8 mit Drupal Console

Drupal-Konsole

Die neue CLI für Drupal. Ein Tool zum Generieren von Boilerplate-Code, zum Interagieren mit Drupal und zum Debuggen

Zunächst müssen wir die Drupal Console installieren.

Drupal Console wird nicht nur für diese Zeit benötigt, sondern für zukünftige Installationen.

# Run this in your terminal to get the latest project version: curl https://drupalconsole.com/installer -L -o drupal.phar # Or if you don't have curl: php -r "readfile('https://drupalconsole.com/installer');" > drupal.phar # Accessing from anywhere on your system: mv drupal.phar /usr/local/bin/drupal # Apply executable permissions on the downloaded file: chmod +x /usr/local/bin/drupal # Copy configuration files to user home directory: drupal init --override

https://riptutorial.com/de/home 2

Page 7: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

# Check and validate system requirements drupal check

Sie können die drupal list , um alle verfügbaren Befehle drupal list .

Im nächsten Schritt laden wir den Drupal-Quellcode herunter

drupal site:new

Console fordert Sie auf, einen Ordner zum Herunterladen von Drupal auszuwählen. Im nächsten Schritt werden Sie aufgefordert, die Version von Drupal zum Herunterladen auszuwählen. Ich empfehle die letzte zu wählen.

Wenn Drupal heruntergeladen wird, müssen Sie es installieren.

drupal site:install

Nach wenigen einfachen Schritten ist Ihre Drupal-Site fertig.

Bei dieser Methode dauert eine Drupal-Neuinstallation zwischen 5 und 7 Minuten von der Befehlszeile.

Drupal-Konzepte

Versionen

Release Date

Ausführung Veröffentlichungsdatum

8.2.4 7. Dezember 2016

7,53 7. Dezember 2016

6,38 (nicht unterstützt) 24. Februar 2016

5.23 (nicht unterstützt) 11. August 2010

Entitätstypen

In früheren Drupal-Versionen wurde das Feldsystem nur für Inhaltstypen verwendet. Dank der Entity-API können wir anderen Dingen, beispielsweise Kommentaren, Felder hinzufügen. Feldfähige Entitäten machen Drupal äußerst flexibel. Ein Entitätstyp ist eine nützliche Abstraktion zum Gruppieren von Feldern. Nachfolgend sind die Entity-Typen im Drupal-Kern aufgeführt:

Knoten (Inhalt)•Bemerkungen•

https://riptutorial.com/de/home 3

Page 8: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

Dateien•Taxonomie-Begriffe•Taxonomie-Vokabulare•Benutzer•

Sie können auch neue Arten von Entitätstypen erstellen, bei denen die oben genannten Optionen nicht Ihren Anforderungen entsprechen.

Bündel

Bundles sind eine Implementierung eines Entitätstyps, an den Felder angehängt werden können. Sie können Bundles als Subtypen eines Entitätstyps betrachten. Mit Inhaltsknoten (Entitätstyp) können Sie beispielsweise Bündel (Subtypen) wie Artikel, Blogbeiträge oder Produkte generieren. Nicht alle Entitätstypen verfügen jedoch über Pakete. Beispielsweise verfügen Benutzer nicht über separate Bundles (Untertypen). Für die Entitätstypen, die Bundles zulassen, können Sie beliebig viele Bundles (Subtypes) erstellen. Mit dem Feldsystem können Sie dann zu jedem Bundle unterschiedliche Felder hinzufügen. Beispiele sind ein Dateidownloadfeld auf Basis-Seiten und ein Untertitelfeld auf Artikeln.

Felder

Ein Feld ist ein wiederverwendbarer Inhalt. Technisch gesehen ist jedes Feld ein primitiver Datentyp mit benutzerdefinierten Validatoren und Widgets zum Bearbeiten und Formatieren der Anzeige. Weitere Informationen finden Sie in der Anleitung eines Entwicklers zur Verwendung der Drupal 7 Fields-API .

Bei Entitäten ist es wichtig zu wissen, dass zu jedem Bundle (oder Entitätstyp) Felder hinzugefügt werden können, um die Daten zu organisieren.

Angenommen, Sie erstellen einen Inhaltstyp mit einem unstrukturierten Textfeld und verwenden HTML, um Teile davon zu strukturieren, beispielsweise einen Zusammenfassungsabschnitt oder Preise. Dies würde es dann schwieriger machen, die Anzeige dieser Elemente zu steuern oder Verbindungen zwischen verschiedenen Arten von verwandten Inhalten herzustellen.

Hier ist die Verwendung von Feldern unerlässlich. Sie können ein zusammenfassendes Feld vom Typ Langtext sowie Preisfelder vom Typ Dezimal anlegen.

Entität

Eine Entität wäre eine Instanz eines bestimmten Entitätstyps, beispielsweise ein Kommentar, ein Taxonomiebegriff oder ein Benutzerprofil, oder ein Bündel, beispielsweise ein Blogbeitrag, ein Artikel oder ein Produkt.

Sie können entity_load verwenden , um eine beliebige Entität zu laden. Beachten Sie jedoch, dass der Kern keine Speicher- oder Löschfunktion bietet, aber dank des Entity-API- Moduls werden die fehlenden Teile hinzugefügt (entity_create (), entity_save (), entity_delete (), entity_view () und entity_access ()).

Dies in objektorientiertes Design / Programmierbegriffe setzen ...

https://riptutorial.com/de/home 4

Page 9: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

Wenn Sie aus einem OOD / P-Hintergrund stammen und versuchen, die Schlüsselkonzepte besser zu verstehen, kann die folgende vorgeschlagene Zuordnung hilfreich sein (wenn auch nicht aus puristischer Sicht streng zutreffend): -

Ein Entitätstyp ist eine Basisklasse•Ein Bundle ist eine erweiterte Klasse•Ein Feld ist ein Klassenmitglied , eine Eigenschaft , eine Variable oder eine Feldinstanz (abhängig von Ihrer Namensgebung).

Eine Entität ist ein Objekt oder eine Instanz einer Basis- oder erweiterten Klasse•

Alle diese vier OOD / P-Konzepte zeichnen sich dadurch aus, dass sie serialisierbar sind (gespeichert werden - z. B. in einer Datenbank oder Datei). Die Serialisierung erfolgt über die Entity-API.

Erste Schritte mit Drupal online lesen: https://riptutorial.com/de/drupal/topic/1135/erste-schritte-mit-drupal

https://riptutorial.com/de/home 5

Page 10: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

Kapitel 2: Beispiel für die Drupal 8-Warteschlangen-API und die Stapel-API

Examples

Ein Beispielmodul zum besseren Verständnis der Warteschlangen-API und der Stapel-API in Drupal 8

xml_import_example.info.yml

type: module name: XML import example package: Examples description: "This module helps understanding the Batch API and Queue API with an XML import example" core: 8.x

xml_import_example.permissions.yml

import content from xml: title: 'Import content from xml' description: 'With this permission user can import contents from a XML source' restrict access: TRUE

xml_import_example.routing.yml

# Get contents from the xml source xml_import_example.get_contents_from_xml: path: '/get-contents-from-xml' defaults: { _controller: '\Drupal\xml_import_example\Controller\ImportContentFromXML::getContentsFromXMLPage' } requirements: _permission: 'import content from xml' # Process all queue items with batch xml_import_example.process_all_queue_items_with_batch: path: '/process-all-queue-items' defaults: { _controller: '\Drupal\xml_import_example\Controller\ImportContentFromXML::processAllQueueItemsWithBatch' } requirements: _permission: 'import content from xml'

src / Controller / ImportContentFromXML.php

<?php /** * @file * Contains \Drupal\xml_import_example\Controller\ImportContentFromXML. */ namespace Drupal\xml_import_example\Controller;

https://riptutorial.com/de/home 6

Page 11: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

use Symfony\Component\DependencyInjection\ContainerInterface; use Drupal\Core\Controller\ControllerBase; use Drupal\Core\Queue\QueueWorkerManager; use Drupal\Core\Queue\QueueFactory; /** * You can use this constant to set how many queued items * you want to be processed in one batch operation */ define("IMPORT_XML_BATCH_SIZE", 1); class ImportContentFromXML extends ControllerBase { /** * We add QueueFactory and QueueWorkerManager services with the Dependency Injection solution */ /** * @var QueueFactory */ protected $queueFactory; /** * @var QueueWorkerManager */ protected $queueManager; /** * {@inheritdoc} */ public function __construct(QueueFactory $queue_factory, QueueWorkerManager $queue_manager) { $this->queue_factory = $queue_factory; $this->queue_manager = $queue_manager; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container) { $queue_factory = $container->get('queue'); $queue_manager = $container->get('plugin.manager.queue_worker'); return new static($queue_factory, $queue_manager); } /** * Get XML from the API and convert it to */ protected function getContentsFromXML() { // Here you should get the XML content and convert it to an array of content arrays for example // I use now an example array of contents: $contents = array(); for ($i = 1; $i <= 20; $i++) { $contents[] = array( 'title' => 'Test title ' . $i, 'body' => 'Test body ' . $i,

https://riptutorial.com/de/home 7

Page 12: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

); } // Return with the contents return $contents; } /** * Page where the xml source is preprocessed */ public function getContentsFromXMLPage() { // Get contents array $contents = $this->getContentsFromXML(); foreach ($contents as $content) { // Get the queue implementation for import_content_from_xml queue $queue = $this->queue_factory->get('import_content_from_xml'); // Create new queue item $item = new \stdClass(); $item->data = $content; $queue->createItem($item); } return array( '#type' => 'markup', '#markup' => $this->t('@count queue items are created.', array('@count' => count($contents))), ); } /** * Process all queue items with batch */ public function processAllQueueItemsWithBatch() { // Create batch which collects all the specified queue items and process them one after another $batch = array( 'title' => $this->t("Process all XML Import queues with batch"), 'operations' => array(), 'finished' => 'Drupal\xml_import_example\Controller\ImportContentFromXML::batchFinished', ); // Get the queue implementation for import_content_from_xml queue $queue_factory = \Drupal::service('queue'); $queue = $queue_factory->get('import_content_from_xml'); // Count number of the items in this queue, and create enough batch operations for($i = 0; $i < ceil($queue->numberOfItems() / IMPORT_XML_BATCH_SIZE); $i++) { // Create batch operations $batch['operations'][] = array('Drupal\xml_import_example\Controller\ImportContentFromXML::batchProcess', array()); } // Adds the batch sets batch_set($batch); // Process the batch and after redirect to the frontpage return batch_process('<front>'); }

https://riptutorial.com/de/home 8

Page 13: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

/** * Common batch processing callback for all operations. */ public static function batchProcess(&$context) { // We can't use here the Dependency Injection solution // so we load the necessary services in the other way $queue_factory = \Drupal::service('queue'); $queue_manager = \Drupal::service('plugin.manager.queue_worker'); // Get the queue implementation for import_content_from_xml queue $queue = $queue_factory->get('import_content_from_xml'); // Get the queue worker $queue_worker = $queue_manager->createInstance('import_content_from_xml'); // Get the number of items $number_of_queue = ($queue->numberOfItems() < IMPORT_XML_BATCH_SIZE) ? $queue->numberOfItems() : IMPORT_XML_BATCH_SIZE; // Repeat $number_of_queue times for ($i = 0; $i < $number_of_queue; $i++) { // Get a queued item if ($item = $queue->claimItem()) { try { // Process it $queue_worker->processItem($item->data); // If everything was correct, delete the processed item from the queue $queue->deleteItem($item); } catch (SuspendQueueException $e) { // If there was an Exception trown because of an error // Releases the item that the worker could not process. // Another worker can come and process it $queue->releaseItem($item); break; } } } } /** * Batch finished callback. */ public static function batchFinished($success, $results, $operations) { if ($success) { drupal_set_message(t("The contents are successfully imported from the XML source.")); } else { $error_operation = reset($operations); drupal_set_message(t('An error occurred while processing @operation with arguments : @args', array('@operation' => $error_operation[0], '@args' => print_r($error_operation[0], TRUE)))); } } }

src / Plugin / QueueWorker / ImportContentFromXMLQueueBase.php

<?php

https://riptutorial.com/de/home 9

Page 14: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

/** * @file * Contains Drupal\xml_import_example\Plugin\QueueWorker\ImportContentFromXMLQueueBase */ namespace Drupal\xml_import_example\Plugin\QueueWorker; use Drupal\Core\Plugin\ContainerFactoryPluginInterface; use Drupal\Core\Queue\QueueWorkerBase; use Drupal\Core\Queue\SuspendQueueException; use Symfony\Component\DependencyInjection\ContainerInterface; use Drupal\node\Entity\Node; /** * Provides base functionality for the Import Content From XML Queue Workers. */ abstract class ImportContentFromXMLQueueBase extends QueueWorkerBase implements ContainerFactoryPluginInterface { // Here we don't use the Dependency Injection, // but the create method and __construct method are necessary to implement /** * {@inheritdoc} */ public function __construct() {} /** * {@inheritdoc} */ public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { return new static(); } /** * {@inheritdoc} */ public function processItem($item) { // Get the content array $content = $item->data; // Create node from the array $this->createContent($content); } /** * Create content * * @return int */ protected function createContent($content) { // Create node object from the $content array $node = Node::create(array( 'type' => 'page', 'title' => $content['title'], 'body' => array( 'value' => $content['body'], 'format' => 'basic_html', ), ));

https://riptutorial.com/de/home 10

Page 15: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

$node->save(); } }

src / Plugin / QueueWorker / ImportContentFromXMLQueue.php

<?php namespace Drupal\xml_import_example\Plugin\QueueWorker; /** * Create node object from the imported XML content * * @QueueWorker( * id = "import_content_from_xml", * title = @Translation("Import Content From XML"), * cron = {"time" = 60} * ) */ class ImportContentFromXMLQueue extends ImportContentFromXMLQueueBase {}

Das ist also das Arbeitsmodul, das Sie an Ihrem Standort testen können.

Wenn Sie die URL / get-contents-from-xml besuchen, werden 20 Warteschlangenelemente aus einem Inhaltsarray erstellt.

Die Datei src / Plugin / QueueWorker / ImportContentFromXMLQueue.php enthält diese Anmerkung: cron = {"time" = 60}

Wenn Sie also cron ausführen, werden die Warteschlangenelemente maximal 60 Sekunden lang verarbeitet. Sie können diese Zeit mit dieser Anmerkung erhöhen oder verringern.

Wenn Sie die Zeile cron = {"time" = 60} entfernen, können Sie nichts mit Ihren Warteschlangenelementen tun.

Wenn Sie alle Warteschlangenelemente in Ihrem Browser bearbeiten möchten, müssen Sie die folgende URL aufrufen: / process-all-queue-items

Es sammelt alle Ihre Warteschlangenelemente, erstellt daraus Stapelvorgänge und verarbeitet anschließend einen nach dem anderen.

Beispiel für die Drupal 8-Warteschlangen-API und die Stapel-API online lesen: https://riptutorial.com/de/drupal/topic/3786/beispiel-fur-die-drupal-8-warteschlangen-api-und-die-stapel-api

https://riptutorial.com/de/home 11

Page 16: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

Kapitel 3: Das Ansichten-Modul

Einführung

Das Views- Modul ist eine Berichts-Engine, mit der Site-Builder alle Arten von Listen erstellen können. Diese Listen können entweder als Block oder als Seite formatiert werden.

Um eine Ansicht zu erstellen (zu entwerfen), müssen die gewünschten Spezifikationen wie Felder, Beziehungen, Filter, Sortierkriterien, Anzeigen usw. eingegeben werden.

Examples

Eine Ansicht, die über die Ansichten-Benutzeroberfläche angezeigt wird

https://riptutorial.com/de/home 12

Page 17: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

Das Ansichten-Modul online lesen: https://riptutorial.com/de/drupal/topic/9553/das-ansichten-modul

https://riptutorial.com/de/home 13

Page 18: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

Kapitel 4: Das Regelmodul

Einführung

Das Rules- Modul ist eine Engine, mit der Site-Administratoren Aktionen automatisieren können, die entweder programmgesteuert oder als Reaktion auf vorbestimmte Ereignisse ausgeführt werden.

Regeln können auf Regelereignisse reagieren, die auf einer Drupal-Site auftreten, z. B. wenn sich ein Benutzer anmeldet. Außerdem können benutzerdefinierte Folgeaktionen für Regelaktionen ausgeführt werden , z. B. das Weiterleiten auf eine bestimmte Seite, die bedingt ausgeführt werden müssen, wenn bestimmte Regelbedingungen erfüllt sind .

Bemerkungen

Ressourcen

Video-Tutorials : Johan Falk hat in den frühen 7 Tagen von Drupal einen tollen Job gemacht, indem er eine beeindruckende Reihe von Tutorials zum " Learn the Rules Framework " mit über 30 Videos und verwandten Blogposts erstellt hat, die auf nodeone.se gehostet nodeone.se (Lizenz = Attribution-Noncommercial) -Share Alike 3.0 ).

Die nodeone.se-Domäne hostet sie jedoch nicht mehr. Learn Rules ist ein Versuch, diese wertvollen Blogposts wiederherzustellen (mit verwandten Links zu den entsprechenden Videos).

Die Tiny Book of Rules ist ein (15 Seiten) kurbeln über die Rules - Modul.•

Examples

Eine benutzerdefinierte Regel, die mithilfe der Regelbenutzeroberfläche angezeigt wird

https://riptutorial.com/de/home 14

Page 19: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

Eine benutzerdefinierte Regel, die im Regelexportformat angezeigt wird

Hier ein Beispiel für eine Regel im Regelexportformat :

{ "rules_display_userpoints_after_updating_content" : { "LABEL" : "Display userpoints after updating content", "PLUGIN" : "reaction rule", "OWNER" : "rules", "REQUIRES" : [ "userpoints_rules", "rules", "rules_conditional" ], "ON" : { "node_update" : [] }, "DO" : [

https://riptutorial.com/de/home 15

Page 20: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

{ "userpoints_rules_get_current_points" : { "USING" : { "user" : [ "site:current-user" ], "tid" : "all" }, "PROVIDE" : { "loaded_points" : { "total_points" : "Number of points in all categories together" } } } }, { "drupal_message" : { "message" : "You now have [total-points:value] points" } }, { "CONDITIONAL" : [ { "IF" : { "NOT data_is" : { "data" : [ "total-points" ], "op" : "\u003C", "value" : "20" } }, "DO" : [ { "drupal_message" : { "message" : "You have sufficient points (you still have [total-points:value] ...)." } } ] }, { "ELSE" : [ { "drupal_message" : { "message" : "You DO NOT have sufficient points (you only have [total-points:value] ...)." } } ] } ] } ] } }

Es ruft als erste Regelaktion (nicht Regelbedingung!) Die aktuelle Anzahl von Benutzerpunkten eines Benutzers ab. Wenn der Betrag mindestens 20 beträgt, wird eine Nachricht angezeigt, die mit "Sie haben genügend Punkte ..." beginnen, ansonsten beginnt die Nachricht mit "Sie haben NICHT genügend Punkte ..."

Feldsammelelemente mit Regeln bearbeiten

Verarbeitung von Feld Sammlung Artikel mit Regeln ist Spaß, wirklich! Schauen Sie sich diese Regel an (im Exportformat für Regeln):

{ "rules_calculate_sum_of_prices_in_all_field_collection_items" : { "LABEL" : "Calculate sum of prices in all field collection items", "PLUGIN" : "reaction rule", "OWNER" : "rules", "REQUIRES" : [ "rules" ], "ON" : { "node_view--article" : { "bundle" : "article" } }, "IF" : [ { "entity_has_field" : { "entity" : [ "node" ], "field" : "field_article_details" } } ], "DO" : [ { "drupal_message" : { "message" : "\u003Cstrong\u003EDrupal calculator\u003C\/strong\u003E started ..." } }, { "variable_add" : { "USING" : { "type" : "decimal", "value" : "0" }, "PROVIDE" : { "variable_added" : { "total_price" : "Price total" } } } }, { "LOOP" : { "USING" : { "list" : [ "node:field-article-details" ] }, "ITEM" : { "article_details_item" : "Article details item" },

https://riptutorial.com/de/home 16

Page 21: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

"DO" : [ { "data_calc" : { "USING" : { "input_1" : [ "total-price" ], "op" : "+", "input_2" : [ "article-details-item:field-price" ] }, "PROVIDE" : { "result" : { "calculation_result" : "Calculation result" } } } }, { "data_set" : { "data" : [ "total-price" ], "value" : [ "calculation-result" ] } }, { "drupal_message" : { "message" : "After adding a price of \u003Cstrong\u003E[article-details-item:field-price]\u003C\/strong\u003E for field collection item with id \u003Cstrong\u003E[article-details-item:item-id]\u003C\/strong\u003E, subtotal is \u003Cstrong\u003E[calculation-result:value]\u003C\/strong\u003E." } } ] } }, { "drupal_message" : { "message" : "The \u003Cstrong\u003ETotal price\u003C\/strong\u003E for all prices included as field collection items is \u003Cstrong\u003E[total-price:value]\u003C\/strong\u003E." } }, { "drupal_message" : { "message" : "\u003Cstrong\u003EDrupal calculator\u003C\/strong\u003E ended ..." } } ] } }

Weitere Details zu dieser Regel finden Sie unten ...

Regelevent:

Inhalt wird angezeigt (vom Typ "Artikel"), passen Sie den Computernamen des article für den Inhaltstyp an, oder passen Sie ein beliebiges anderes Regelereignis an.

Regeln Bedingung:

Entität hat ein Feld, während die Entität "Knoten" ist und der Computername meines field_article_details (passen Sie diesen Maschinennamen an, was passt, aber stellen Sie sicher, dass Sie das field_article_details selbst verwenden).

Regeln Aktionen:

Wach auf, hier wird der Zauber (Spaß?) Stattfinden ... Hier sind die Regelaktionen beteiligt:

Zeigen Sie eine Nachricht auf der Website mit der folgenden Nachricht:1.

Drupal-Rechner gestartet ...

Fügen Sie eine Variable hinzu , wobei es sich um eine Variable mit dem Namen total_price , dezimal (2 Stellen), Anfangswert 0.

2.

Fügen Sie eine Schleife hinzu , um jedes Element meines field_article_details (mit dem Maschinennamen field_article_details ) zu field_article_details und die

3.

https://riptutorial.com/de/home 17

Page 22: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

field_article_details für jede Iteration auszuführen:

Berechnen Sie einen Wert , der die Summe aus total_price (in total_price Aktion 2 oben definiert) und article-details-item:field-price berechnet: total_price (Dies ist der Maschinenname des Felds in der Feldsammlung, der die Preise enthält, dezimal mit 2 Ziffern) ) und speichert das Ergebnis (Summe) in variablen calculation_result .

Legen Sie einen Datenwert fest , der einfach den in der Variable calculation_result gespeicherten Wert in meinen total_price (oben in total_price 2 definiert). Anmerkung: Nicht sicher (nicht getestet), aber möglicherweise kann diese calculation_result direkt durch total_price (in der vorherigen Aktion) ersetzt werden, sodass Sie diese Aktion nicht benötigen.

Zeigen Sie eine Nachricht auf der Website mit der folgenden Nachricht:

Nach dem Hinzufügen eines Preises von 3,40 für den Feldsammelartikel mit der ID 3 beträgt die Zwischensumme 15,00.

Zeigen Sie eine Nachricht auf der Website mit der folgenden Nachricht:4.

Der Gesamtpreis für alle als Feldsammelartikel enthaltenen Preise beträgt 26,23.

Zeigen Sie eine Nachricht auf der Website mit der folgenden Nachricht:5.

Drupal-Rechner beendet ...

Diese Regel ist offensichtlich eher ein Prototyp. Wenn Sie überzeugt sind, dass es ordnungsgemäß funktioniert, entfernen Sie einfach alle Regelaktionen mit Eine Nachricht auf der Website anzeigen . Somit bleiben nur die Punkte 2 und 3 (ohne den letzten Unterpunkt) als Regelaktionen übrig.

Show Time ...

Hier ist ein Beispiel meiner Testergebnisse, dh der angezeigten Drupal-Nachrichten:

Drupal calculator started ... After adding a price of 2.45 for field collection item with id 1, subtotal is 2.45. After adding a price of 9.15 for field collection item with id 2, subtotal is 11.60. After adding a price of 3.40 for field collection item with id 3, subtotal is 15.00. After adding a price of 1.23 for field collection item with id 4, subtotal is 16.23. The Total price for all prices included as field collection items is 26.23. Drupal calculator ended ...

Mehr Info

Wenn Sie mit Feldsammlungen nicht vertraut sind, versuchen Sie zunächst, die Antwort auf " diese Frage " zu finden.

Das Regelmodul online lesen: https://riptutorial.com/de/drupal/topic/8921/das-regelmodul

https://riptutorial.com/de/home 18

Page 23: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

Kapitel 5: Drupal 8-Objekt-API

Einführung

Mit dem Entity System in Drupal 8 können Entwickler auf einfache Weise benutzerdefinierte Inhaltstypen erstellen und Datenbeziehungen modellieren. Die umfangreiche API unterstützt die Generierung von Formularen, Datenvalidierung, Konfiguration, Routing und viele andere Funktionen.

Examples

Erstellen Sie ein Inhaltselement mit der Drupal Console

Die Drupal-Konsole bietet ein Gerüst für das Drupal-Ökosystem und vereinfacht die Generierung einer Inhaltsentität.

In den meisten Fällen ist es einfacher, mit einer benutzerdefinierten Entität in einem benutzerdefinierten Modul zu arbeiten.

Schritt 1: Erzeugen Sie ein Modul

vendor/bin/drupal generate:module

Folgen Sie den Anweisungen und erstellen Sie Ihr benutzerdefiniertes Modul.

Schritt 2: Generieren Sie eine Inhaltsentität

vendor/bin/drupal generate:entity:content

Folgen Sie den Anweisungen in der Befehlszeile, und stellen Sie sicher, dass Sie das im vorherigen Schritt erstellte benutzerdefinierte Modul auswählen.

Drupal 8-Objekt-API online lesen: https://riptutorial.com/de/drupal/topic/10681/drupal-8-objekt-api

https://riptutorial.com/de/home 19

Page 24: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

Kapitel 6: Drupal Cache und Performace

Einführung

Cache wurde für die Site oder das System verwendet, um die Inhaltsbereitstellung für die Endbenutzer schnell zu verbessern. Dieses Thema wurde erstellt, um den eingebauten Caching-Mechanismus von Drupal kennenzulernen und Informationen zur Verwendung dieses Mechanismus zu erhalten. Wir müssen die eingebaute Caching-Funktion von Drupal mit den externen Modulen wie Varnish, Memcache, Authcache, Dateicache usw. erkunden, die zur Verbesserung der Website-Performance verfügbar sind. In diesem Thema finden Sie die am besten geeigneten Beispiel- und Caching-Optionen für Ihre Site.

Examples

Aktivieren Sie die Drupal-Site und blockieren Sie den Cache

Drupal selbst bietet gute Caching-Optionen, um die Seitengeschwindigkeit zu erhöhen und Seiten schnell für Endbenutzer bereitzustellen. Caches werden verwendet, um die Leistung Ihrer Drupal-Site zu verbessern. Es hat jedoch auch den Nachteil, dass es manchmal zu "veralteten" Daten führen kann. Dies bedeutet, dass das System manchmal die alten Seiten aus dem Cache bereitstellt.

Wie kann ich die Drupal-Site aktivieren und den Cache für verschiedene Drupal-Versionen blockieren? Antworten finden Sie unten: Drupal 6:

Gehen Sie zu Verwalten -> Standortkonfiguration -> Leistung.1. Aktivieren Sie die Cache-Optionen2. Aktivieren Sie die Aggregation der JS / CSS-Dateien und speichern Sie sie.3.

Drupal 7:

Gehen Sie zu Verwalten -> Konfigurieren -> Entwicklung -> Leistung.1. Aktivieren Sie die Cache-Optionen2. Aktivieren Sie die Aggregation der JS / CSS-Dateien und speichern Sie sie.3.

Drupal Cache und Performace online lesen: https://riptutorial.com/de/drupal/topic/10082/drupal-cache-und-performace

https://riptutorial.com/de/home 20

Page 25: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

Kapitel 7: Drush

Bemerkungen

Was ist Drush?

Drush ist eine Befehlszeilenschnittstelle für Drupal-Sites. Es ermöglicht die Befehlszeilenverwaltung von Drupal-Sites.

Examples

Drush-Befehle

Drush-Status

drush status

Dadurch erhalten Sie einen Überblick über Ihre Drupal-Site. Version, URI, Datenbankpfad, Dateipfad, Standarddesign usw. Wenn Sie diesen Befehl verwenden und diese Informationen nicht anzeigen, befinden Sie sich in einem falschen Ordner, und Drush weiß nicht, auf welche Drupal-Site Sie sich beziehen.

Passwort für jeden Benutzer zurücksetzen

drush upwd admin --password="newpassword"

Dabei ist "admin" ein vorhandener Benutzername und "newpassword" das gewünschte Passwort.

Generieren Sie eine einmalige Admin-Anmelde-URL

drush uli

Erzeugt eine URL, über die Sie sich im Admin-Bereich anmelden können. Die URL hat ein einmaliges Verwendungstoken. Das Ergebnis sollte so aussehen:

http://example.com/user/reset/1/1469178712/MEn1QOXo3YGKAUHCknFQF0rEPJ_itkS-a6I8LJwaNYs/login

Manchmal ist der Hostname oder die IP-Adresse nicht auflösbar und das Ergebnis ist eine Warnung wie die folgende:

https://riptutorial.com/de/home 21

Page 26: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

default does not appear to be a resolvable hostname or IP, not starting browser. [warning] You may need to use the --uri option in your command or site alias to indicate the correct URL of this site. http://default/user/reset/1/1469178629/-zFS_0u8is2N2uCKuLUdGBpJ3cZzV9am5_irsbtVAOs/login

Die Lösung verwendet den Parameter "--url" wie im folgenden Beispiel:

drush uli --uri="http://example.com/"

Die Caches löschen

drush cache-rebuild

Stellt den Cache für Drupal 8 wieder her. Für Drupal 7 können Sie verwenden

drush cache-clear

Diese Befehle sind auch mit kürzer verfügbar

drush cr

oder

drush cc // optionally pass all to clear all the caches

Module aktivieren

drush pm-enable mymodule

Aktivieren Sie "mymodule" wie das Aktivieren eines Moduls in der Administrationsoberfläche

Diese Befehle sind auch mit kürzer verfügbar

drush en mymodule // optionally pass the -y option to avoid the interactive question

Mainteneace

Um den Wartungsmodus mit Drush zu aktivieren, können Sie diesen Befehl verwenden:

drush vset maintenance_mode 1 // pass 0 to disable the maintenance

Denken Sie daran, die Caches zu löschen, nachdem Sie den Wartungsmodus aktiviert / deaktiviert haben.

https://riptutorial.com/de/home 22

Page 27: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

Konfiguration exportieren

In Drupal 7 und niedriger wird Ihre Konfiguration wahrscheinlich mit dem Funktionsmodul gespeichert. Verwenden Sie diesen Befehl, um eine Funktion mit Änderungen aus den Datenbanken zu aktualisieren:

drush features-update [feature-name] // e.g. drush features-update content_type_news

Sie können auch diese Abkürzung verwenden:

drush fu [feature-name]

Drupal 8 mit "Konfigurationsverwaltung". Verwenden Sie diesen Befehl, um Ihre Konfiguration mit Drush zu exportieren

drush config-export // optionally add -y to not have to verify it

Sie können auch den Kurzbefehl verwenden

drush cex -y

Drush installieren

Manuelle globale Installation

Für OS X und Linux:

Rufen Sie Terminal, Bash oder Ihre normale Shell auf.1.

Geben Sie Folgendes in Terminal / Bash ein:

# Download latest stable release using the code below or browse to github.com/drush-ops/drush/releases. php -r "readfile('http://files.drush.org/drush.phar');" > drush # Or use our upcoming release: php -r "readfile('http://files.drush.org/drush-unstable.phar');" > drush # Test your install. php drush core-status # Make `drush` executable as a command from anywhere. Destination can be anywhere on $PATH. chmod +x drush sudo mv drush /usr/local/bin # Optional. Enrich the bash startup file with completion and aliases. drush init

2.

Für Windows:

https://riptutorial.com/de/home 23

Page 28: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

Laden Sie Drush von GitHub herunter.1. Extrahieren Sie die komprimierte Datei in das gewünschte Laufwerk, z.

C:\

2.

Installieren Sie Drush, definieren Sie den extrahierten Ordnerpfad in der Umgebungspfadvariablen, die auch Apache, PHP and MySQL .

C:\xampp\apache\bin;C:\xampp\mysql\bin;C:\xampp\php;C:\drush;

3.

Stellen Sie sicher, dass Drush funktioniert:

drush status

4.

Composer-globale Installation

Installieren Sie Composer global .1. Fügen Sie dem Systempfad das bin Verzeichnis von Composer hinzu, indem Sie den export PATH="$HOME/.composer/vendor/bin:$PATH" in Ihr ~ / .bash_profile (OS X) oder ~ / .bashrc (Linux) einfügen.

2.

Drush installieren:

composer global require drush/drush

3.

Stellen Sie sicher, dass Drush funktioniert:

drush status

4.

Weitere Details zu Drush Docs

Drush installieren

Manuelle Installation

Geben Sie die folgenden Befehle in Terminal ein.

php -r "readfile('http://files.drush.org/drush.phar');" > drush chmod +x drush sudo mv drush /usr/local/bin drush init # Add alias in bash startup file.

Komponist

Vorausgesetzt, Composer ist installiert.

composer global require drush/drush:dev-master

https://riptutorial.com/de/home 24

Page 29: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

Drush online lesen: https://riptutorial.com/de/drupal/topic/2062/drush

https://riptutorial.com/de/home 25

Page 30: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

Kapitel 8: Feldformatierer

Einführung

Ein Feldformatierer gibt an, wie ein Feld in Drupal-Vorlagen dargestellt wird. Das von jedem Feld verwendete Formatierungsprogramm kann auf der Registerkarte Anzeige verwalten konfiguriert werden, die dem von Ihnen konfigurierten Entitätstyp zugeordnet ist.

Felder können je nach angezeigtem Anzeigemodus unterschiedliche Formatierungen haben. So können Sie steuern, wie ein Feld in verschiedenen Teilen Ihrer Website dargestellt wird.

Bemerkungen

Bei der Implementierung eines Field Formatter sind einige Dinge zu beachten.

Die Implementierung Ihres Formatierers muss sich in Ihrem Modul im Ordner src/Plugin/Field/FieldFormatter . Die Anmerkungen sind auch wichtig, da sie Ihr Modul identifizieren und auf welche Feldtypen es anwendbar ist.

In diesem Beispiel gilt dieses Formatierungsprogramm nur für Felder des Typs email . Sie können Ihren Formatierer bei Bedarf auf eine Reihe von Feldern anwenden. Wenn Ihr Formatierungsprogramm aus irgendeinem Grund auf E-Mail- und Datumsfelder anwendbar wäre:

field_type = { "email", "date", }

Bei der ersten Implementierung von Feldformatierern mit Einstellungen bestand eine Gefahr darin, dass die Einstellungen nicht gespeichert wurden, wenn sie geändert wurden. Es gibt keine explizite Speichermethode. Die Lösung besteht darin, die Methode defaultSettings() zu implementieren und die defaultSettings() anzugeben, aus denen sich Ihr Konfigurationsformular zusammensetzt. Vergessen Sie auch nicht, den #default_value in der settingsForm Methode #default_value .

Wenn Sie eine bestimmte TWIG Vorlage für Ihre Formatter haben wollen ist es so einfach wie eine Konfiguration #theme Taste , während das Array in der Render Aufbau viewElements Methode dann in Ihrer .module Datei implementieren hook_theme

function obfuscator_field_formatter_theme() { return [ 'obfuscator_field_formatter' => [ 'variables' => array('title' => NULL, 'url' => NULL), 'template' => 'obfuscator-field-formatter' ], ]; }

https://riptutorial.com/de/home 26

Page 31: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

Erstellen Sie dann den templates im Stammverzeichnis Ihres Moduls und erstellen Sie eine Datei mit dem Namen obfuscator-field-formatter.twig.html in der Sie das gewünschte Markup ausgeben. In diesem Beispiel stehen die Variablen #title und #url zur Verfügung.

Examples

Verschleierter Email-Formatierer

In unserem Beispiel erstellen wir ein benutzerdefiniertes Formatierungsprogramm für E-Mail-Adressen, das es uns ermöglicht, verschleierte E-Mail-Adressen anzuzeigen, um diese unangenehmen Spammer zu täuschen.

Das Formatierungsprogramm verfügt über einige Konfigurationsoptionen, mit denen wir steuern können, wie die E-Mail-Adresse verschleiert wird:

Entfernen Sie @ und. und sie durch ein Leerzeichen ersetzen,•Ersetzen Sie @ durch at und. durch punkt,•

Bitte beachten Sie, dass dies nur ein akademisches Beispiel ist, um zu zeigen, wie Feldformatierer angezeigt und konfiguriert werden. Dies ist offensichtlich nicht sehr nützlich für das eigentliche Spam-Schutz.

In diesem Beispiel wird davon ausgegangen, dass Sie ein Modul mit dem Namen obfuscator_field_formatter ordnungsgemäß konfiguriert und aktiviert haben.

namespace Drupal\obfuscator_field_formatter\Plugin\Field\FieldFormatter; use Drupal\Core\Field\FieldDefinitionInterface; use Drupal\Core\Field\FieldItemInterface; use Drupal\Core\Field\FieldItemListInterface; use Drupal\Core\Field\FormatterBase; use Drupal\Core\Form\FormStateInterface; /** * Plugin implementation of the 'example_field_formatter' formatter. * * @FieldFormatter( * id = "email_obfuscator_field_formatter", * label = @Translation("Obfuscated Email"), * field_types = { * "email" * } * ) */ class ObfuscatorFieldFormatter extends FormatterBase { private $options = []; public function __construct($plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, $label, $view_mode, array $third_party_settings) { parent::__construct($plugin_id, $plugin_definition, $field_definition, $settings, $label, $view_mode, $third_party_settings); $this->options = [ 'remove_chars' => $this->t('Remove @ and . and replace them with a space'),

https://riptutorial.com/de/home 27

Page 32: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

'replace_chars' => $this->t('Replace @ by at and . by dot'), ]; } public static function defaultSettings() { return [ 'obfuscator_formatter_type' => '', ] + parent::defaultSettings(); } public function settingsForm(array $form, FormStateInterface $form_state) { return [ 'obfuscator_formatter_type' => [ '#type' => 'select', '#title' => $this->t('Obfuscation Type'), '#options' => $this->options, '#default_value' => $this->getSetting('obfuscator_formatter_type'), ] ] + parent::settingsForm($form, $form_state); } public function settingsSummary() { $summary = parent::settingsSummary(); $type = $this->getSetting('obfuscator_formatter_type'); if(!is_null($type) && !empty($type)) { $summary[] = $this->t('Obfuscation: @value', ['@value' => $this->options[$type]]); } return $summary; } public function viewElements(FieldItemListInterface $items, $langcode) { $elements = []; foreach ($items as $delta => $item) { $elements[$delta] = [ '#type' => 'inline_template', '#template' => '{{ value|nl2br }}', '#context' => ['value' => $this->viewValue($item)], ]; } return $elements; } protected function viewValue(FieldItemInterface $item) { $obfuscated = $item->value; $type = $this->getSetting('obfuscator_formatter_type'); switch($type) { case 'remove_chars': { $obfuscated = str_ireplace(['@', '.'], ' ', $item->value); break; } case 'replace_chars': { $obfuscated = str_ireplace(['@', '.'], [' AT ', ' DOT '], $item->value); break; } }

https://riptutorial.com/de/home 28

Page 33: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

return $obfuscated; } }

Feldformatierer online lesen: https://riptutorial.com/de/drupal/topic/8792/feldformatierer

https://riptutorial.com/de/home 29

Page 34: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

Kapitel 9: Modulentwicklung - Drupal 7

Bemerkungen

Beispiele für Entwickler- Module sollten idealerweise als Referenz für die Modulentwicklung verwendet werden. Es enthält Erklärungen zu allen wichtigen APIs sowie eine gut dokumentierte Verwendung. Anfänger können die Entwicklung von Modulen verstehen.

Examples

Grundmodul mit einer einfachen Seite

really_neat.info

name = Really Neat Module description = Provides a really neat page for your site core = 7.x

really_neat.module

<?php /** * @file * Hook implementation and shared functions for the Really Neat Module. */ /** * Implements hook_menu(). */ function really_neat_menu() { $items = array(); $items ['really/neat'] = array( 'title' => 'A Really Neat Page', 'page_callback' => 'really_neat_page', 'access_callback' => TRUE, //Anyone can access. // Or replace with array([name-of-permission]), ), return $items; } /** * Page callback: Displays something really neat */ function really_neat_page() { return "Really Neat!" }

Basismodul, das einen benutzerdefinierten Block bereitstellt

https://riptutorial.com/de/home 30

Page 35: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

custom_module.info

name = Custom Module description = Creates a block containing a custom output. core = 7.x

custom_module.module

/** * Initiates hook_block_info. * * Registers the block with Drupal. */ function custom_module_block_info() { $blocks = array(); //Registers the machine name of the block. $blocks['custom_block'] = array( //Sets the human readable, administration name. 'info' => t('My Custom Block'), //Tells Drupal not to cache this block. //Used if there is dynamic content. 'cache' => DRUPAL_NO_CACHE, ); return $blocks; } /** * Initiates hook_block_view(). * * Sets the block title and content callback. */ function custom_module_block_view($delta = '') { $block = array(); switch ($delta) { //Must be the machine name defined in the hook_block_info. case 'custom_block': //The blocks title. $block['subject'] = 'My custom block'; //The string or function that will provide the content of the block. $block['content'] = custom_module_block_content(); break; } return $block; } /** * Returns the content of the custom block. */ function custom_module_block_content() { $content = "This function only returns a string, but could do anything." return $content; }

Grundlegendes benutzerdefiniertes Formular zur Aufnahme in Seiten- oder Blockbeispiele.

https://riptutorial.com/de/home 31

Page 36: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

Einfache Formular-, Validierungs- und Übermittlungsfunktionen zum Erstellen einer Funktion "Mailing-Liste". Dies kann dann entweder auf die Grundseite oder auf grundlegende Blockbeispiele angewendet werden.

Angenommen, Sie haben in der Drupal-Datenbank eine Tabelle mit dem Namen "mailing_list" mit den Feldern Vorname, Nachname und E-Mail-Adresse erstellt.

Zusätzliche Informationen zur Formular-API und zusätzliche Feldoptionen: https://api.drupal.org/api/drupal/developer!topics!forms_api_reference.html/7.x/

function custom_module_form($form, &$form_state) { $form['first_name'] = array ( '#type' => 'textfield', '#title' => 'First Name', '#required' => TRUE, ); $form['last_name'] = array ( '#type' => 'textfield', '#title' => 'Last Name', '#required' => TRUE, ); $form['email'] = array ( '#type' => 'textfield', '#title' => 'First Name', '#required' => TRUE, ); return $form; } function custom_module_form_validate($form, &$form_state) { if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { form_set_error('email', t('Please provide a valid email address.')); } } function custom_module_form_submit($form, &$form_state) { //Useful function for just getting the submitted form values form_state_values_clean($form_state); //Save time later by assigning the form values to variables. $first_name = $form_state['values']['first_name']; $last_name = $form_state['values']['last_name']; $email = $form_state['values']['email']; //Insert the submitted data to the mailing_list database table. db_insert('mailing_list') ->fields(array( 'first name' => $first_name, 'last name' => $last_name, 'email' => $email, )) ->execute(); //Set a thank you message. drupal_set_message('Thank you for subscribing to our mailing list!'); //drupal_goto() could be used here to redirect to another page or omitted to reload the same page. //If used, drupal_goto() must come AFTER drupal_set_message() for the message to be

https://riptutorial.com/de/home 32

Page 37: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

displayed on the new page. }

Basismodul, das einen benutzerdefinierten Block bereitstellt

custom_module.info

name = Custom Module description = Creates a block containing a custom output. core = 7.x

custom_module.module

/** * Initiates hook_block_info. * * Registers the block with Drupal. */ function custom_module_block_info() { $blocks = array(); //Registers the machine name of the block. $blocks['custom_block'] = array( //Sets the human readable, administration name. 'info' => t('Titania Price Widget'), //Tells Drupal not to cache this block. //Used if there is dynamic content. 'cache' => DRUPAL_NO_CACHE, ); return $blocks; } /** * Initiates hook_block_view(). * * Sets the block title and content callback. */ function custom_module_block_view($delta = '') { $block = array(); switch ($delta) { //Must be the machine name defined in the hook_block_info. case 'custom_block': //The blocks title. $block['subject'] = 'My custom block'; //The string or function that will provide the content of the block. $block['content'] = custom_module_block_content(); break; } return $block; } /** * Returns the content of the custom block. */ function custom_module_block_content() { $content = "This function only returns a string, but could do anything."

https://riptutorial.com/de/home 33

Page 38: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

return $content; }

Grundlegendes benutzerdefiniertes Formular zur Aufnahme in Seiten- oder Blockbeispiele.

Einfache Formular-, Validierungs- und Übermittlungsfunktionen zum Erstellen einer Funktion "Mailing-Liste". Dies kann dann entweder auf die Grundseite oder auf grundlegende Blockbeispiele angewendet werden.

Angenommen, Sie haben in der Drupal-Datenbank eine Tabelle mit dem Namen "mailing_list" mit den Feldern Vorname, Nachname und E-Mail-Adresse erstellt.

Zusätzliche Informationen zur Formular-API und zusätzliche Feldoptionen: https://api.drupal.org/api/drupal/developer!topics!forms_api_reference.html/7.x/

function custom_module_form($form, &$form_state) { $form['first_name'] = array ( '#type' => 'textfield', '#title' => 'First Name', '#required' => TRUE, ); $form['last_name'] = array ( '#type' => 'textfield', '#title' => 'Last Name', '#required' => TRUE, ); $form['email'] = array ( '#type' => 'textfield', '#title' => 'First Name', '#required' => TRUE, ); return $form; } function custom_module_form_validate($form, &$form_state) { if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { form_set_error('email', t('Please provide a valid email address.')); } } function custom_module_form_submit($form, &$form_state) { //Useful function for just getting the submitted form values form_state_values_clean($form_state); //Save time later by assigning the form values to variables. $first_name = $form_state['values']['first_name']; $last_name = $form_state['values']['last_name']; $email = $form_state['values']['email']; //Insert the submitted data to the mailing_list database table. db_insert('mailing_list') ->fields(array( 'first name' => $first_name, 'last name' => $last_name, 'email' => $email,

https://riptutorial.com/de/home 34

Page 39: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

)) ->execute(); //Set a thank you message. drupal_set_message('Thank you for subscribing to our mailing list!'); //drupal_goto() could be used here to redirect to another page or omitted to reload the same page. //If used, drupal_goto() must come AFTER drupal_set_message() for the message to be displayed on the new page. }

Beispieldatei custom_module.install zum Erstellen einer Datenbanktabelle

Kann in Verbindung mit dem benutzerdefinierten Formularbeispiel verwendet werden , um eine Tabelle in der Drupal-Datenbank für eine Mailinglistenfunktion zu erstellen.

Dieses Beispiel durch die Schaffung der Tabelle direkt in meiner Entwicklung Datenbank hergestellt wurde, erstellt dann die Daten für hook_schema () mit dem Schema - Modul .

Dies ermöglicht die automatische Tabellenerstellung während der Modulinstallation an Staging- und Produktionsstandorten.

custom_module.install

/** * Installs the database schema. */ function custom_module_install() { drupal_install_schema('mailing_list'); } /** * Uninstalls the database schema. */ function custom_module_uninstall() { drupal_uninstall_schema('mailing_list'); } /** * Creates the tables using the schema API. */ function custom_module_schema() { $schema['mailing_list'] = array( 'description' => 'TODO: please describe this table!', 'fields' => array( 'first name' => array( 'description' => 'TODO: please describe this field!', 'type' => 'int', 'not null' => TRUE, ), 'last name' => array( 'description' => 'TODO: please describe this field!', 'type' => 'int', 'not null' => TRUE, ), 'email' => array( 'description' => 'TODO: please describe this field!',

https://riptutorial.com/de/home 35

Page 40: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

'type' => 'int', 'not null' => TRUE, ), ), ); }

Modulentwicklung - Drupal 7 online lesen: https://riptutorial.com/de/drupal/topic/2456/modulentwicklung---drupal-7

https://riptutorial.com/de/home 36

Page 41: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

Kapitel 10: Themenentwicklung - Drupal 7

Examples

.Info-Dateien schreiben

Die .info-Datei ist eine statische Textdatei zum Definieren und Konfigurieren eines Designs. Jede Zeile in der .info-Datei ist ein Schlüssel-Wert-Paar mit dem Schlüssel links und dem Wert rechts mit einem "Gleichheitszeichen" zwischen ihnen (z. B. name = mein_theme ).

Semikolons werden verwendet, um eine Zeile auszukommentieren. Einige Schlüssel verwenden eine spezielle Syntax mit eckigen Klammern, um eine Liste der zugehörigen Werte zu erstellen, die als "Array" bezeichnet werden. Wenn Sie mit Arrays nicht vertraut sind, werfen Sie einen Blick auf die Standard-.info-Dateien, die mit Drupal geliefert werden, und lesen Sie die Erklärungen der folgenden Beispiele. Obwohl die Dateierweiterung .info nicht direkt von einer Anwendung geöffnet wird, können Sie TextEdit auf einem Mac oder Notepad auf einem Windows-Computer verwenden, um die Änderungen anzuzeigen, zu bearbeiten und zu speichern.

Anforderungen an den Themennamen

Der Name sollte mit einem Buchstaben beginnen, kann Zahlen und Unterstriche enthalten, jedoch keine Bindestriche, Leerzeichen oder Satzzeichen. Der Name wird von Drupal bei der Erstellung verschiedener Funktionen in PHP verwendet und hat daher die gleichen Einschränkungen.

Wählen Sie keine Namen, die bereits von installierten Modulen verwendet werden , da alle installierten Komponenten eindeutige Namen haben müssen.

Eine der bewährten Methoden ist die Verwendung von Präfixen bei der Benennung des benutzerdefinierten Designs einer Site, um eindeutige Namen für Designs zu gewährleisten. Eine Site namens example.com kann Themennamen wie ex_themename verwenden.

Da die .info-Datei zwischengespeichert wird, müssen Sie den Cache löschen, bevor Änderungen auf Ihrer Site angezeigt werden.

Die .info-Datei kann auch angeben, auf welche Designeinstellungen über die Drupal-Administrationsoberfläche zugegriffen werden soll, wie Sie bald sehen werden.

Codierung

Die Datei muss als UTF-8 ohne Byte Order Mark (BOM) gespeichert werden.

Inhalt

Drupal versteht die unten aufgeführten Schlüssel. Drupal verwendet Standardwerte für die optionalen Schlüssel, die nicht in der .info-Datei vorhanden sind. Siehe die Beispiele für Kernthemen.

https://riptutorial.com/de/home 37

Page 42: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

Name erforderlich•Beschreibung empfohlen•Bildschirmfoto•Version entmutigt•Kern erforderlich•Motor•Grundthema•Regionen•Eigenschaften•Themen Einstellungen•Stylesheets•Skripte•php•

Theme .info-Datei

name = MyCompany Theme description = A Bootstrap Sub-theme. core = 7.x base theme = bootstrap ;;;;;;;;;;;;;;;;;;;;; ;; Regions ;;;;;;;;;;;;;;;;;;;;; regions[navigation] = 'Navigation' regions[header] = 'Top Bar' regions[highlighted] = 'Highlighted' regions[help] = 'Help' regions[content] = 'Content' regions[sidebar_first] = 'Primary' regions[sidebar_second] = 'Secondary' regions[footer] = 'Footer' regions[page_top] = 'Page top' regions[page_bottom] = 'Page bottom' ;;;;;;;;;;;;;;;;;;;;; ;; MyCompany Custom Regions ;;;;;;;;;;;;;;;;;;;;; regions[footer_menu_left] = 'Footer menu left' regions[footer_menu_right] = 'Footer menu right' ;;;;;;;;;;;;;;;;;;;;; ;; CSS ;; these css files will be included on every page ;;;;;;;;;;;;;;;;;;;;; stylesheets[all][] = css/bootstrap.min.css stylesheets[all][] = css/MyCompany.css ;;;;;;;;;;;;;;;;;;;;; ;; JS ;; this JS file will be included on every page ;;;;;;;;;;;;;;;;;;;;; scripts[] = js/MyCompany.min.js

https://riptutorial.com/de/home 38

Page 43: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

Themenentwicklung - Drupal 7 online lesen: https://riptutorial.com/de/drupal/topic/2715/themenentwicklung---drupal-7

https://riptutorial.com/de/home 39

Page 44: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

Kapitel 11: Zweig

Einführung

Twig ist die Vorlagen-Engine, die Teil von Drupal 8 ist. In Drupal 8 haben Twig-Dateien die Erweiterung .html.twig und werden in jedem Aspekt des Drupal-Themings verwendet. Entitäten, Felder und Ansichten können alle mit .html.twig Dateien gerendert werden.

In diesem Thema besteht das Ziel darin, ein Kochbuch zur Zusammenarbeit mit Twig im Rahmen von Drupal zu haben. Wenn Sie mehr über die Syntax oder die verfügbaren Funktionen erfahren möchten, lesen Sie die Dokumentation .

Examples

Zweigfilter

Im Gegensatz zu Drupal 7 können Sie in Ihren Vorlagen keine regulären PHP-Funktionen aufrufen. In Drupal 8 können Sie Filter und Funktionen erstellen.

Sie sollten einen Filter verwenden, wenn: Sie die Daten konvertieren möchten, die Sie anzeigen möchten. Stellen Sie sich vor, Sie haben einen Titel, den Sie immer in Großbuchstaben verwenden möchten. Zum Beispiel hat Zweig der capitalize Filter standardmäßig , dass Sie einen beliebigen Text in seine entsprechenden Großbuchstaben umwandeln können.

In diesem Beispiel erstellen wir einen Filter, mit dem wir einen String mischen können. Das Erstellen von Filtern und Funktionen entspricht genau dem von Twig .

Der Hauptunterschied zwischen regulären Twig und Drupal 8 Twig besteht darin, dass Sie in Drupal 8 eine Service-Definition der Klasse erstellen müssen, die Sie erstellen, und die Klasse auch zu einem Namespace gehören muss, da sie sonst nicht als Twig-Filter in der Drupal-Umgebung registriert wird .

In diesem Beispiel wird davon twig_shuffle_extension dass Sie über ein Modul namens " twig_shuffle_extension " twig_shuffle_extension .

Dies ist die grundlegende twig_shuffle_extension.services.yml

services: twig_shuffle_extension.twig_extension: class: Drupal\twig_shuffle_extension\TwigExtension\TwigShuffleExtension tags: - { name: twig.extension }

Der tags Schlüssel ist ebenfalls zwingend erforderlich und gibt Drupal an, was diese Klasse tun soll (dh sie als Twig-Erweiterung registrieren).

Und jetzt den Quellcode, der in den Pfad eingefügt werden muss, der im class der Service-

https://riptutorial.com/de/home 40

Page 45: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

Definition definiert ist.

// Don't forget the namespace! namespace Drupal\twig_shuffle_extension\TwigExtension; use Twig_Extension; use Twig_SimpleFilter; class TwigShuffleExtension extends Twig_Extension { /** * This is the same name we used on the services.yml file */ public function getName() { return 'twig_shuffle_extension.twig_extension'; } // Basic definition of the filter. You can have multiple filters of course. // Just make sure to create a more generic class name ;) public function getFilters() { return [ new Twig_SimpleFilter('shuffle', [$this, 'shuffleFilter']), ]; } // The actual implementation of the filter. public function shuffleFilter($context) { if(is_string($context)) { $context = str_shuffle($context); } return $context; } }

Löschen Sie Ihre Caches. Wenn nun alles nach Plan läuft, können Sie den Filter in Ihren Vorlagen verwenden.

{{ "shuffle me!" | shuffle }}

Abhängigkeitsinjektion in Twig-Erweiterungen

Dieses Beispiel zeigt Ihnen, wie Sie mit Dependency Inject andere Dienste nutzen können, die in der Drupal-Umgebung registriert sind.

Stellen Sie sich vor, Sie haben eine SVG-Bilddatei, die die Farben in Abhängigkeit von einigen zufälligen CSS / Javascript-Elementen in Ihrem Projekt ändert. Um die SVG-Datei mit CSS ansprechen zu können, muss die SVG-Datei tatsächlich im DOM vorhanden sein. Sie erstellen also eine Basis-SVG-Datei ohne Farben und legen diese in Ihrem Designordner ab.

Natürlich könnten Sie einfach den Inhalt der Datei in die Twig-Vorlage einfügen, aber das wäre nicht nett. Sie können eine Twig-Erweiterung erstellen, aber Sie möchten Ihren Designpfad nicht im Quellcode der Erweiterung fest codieren.

Das bedeutet, dass wir den Pfad dynamisch erhalten müssen. Sie haben zwei Möglichkeiten:

https://riptutorial.com/de/home 41

Page 46: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

Verwenden Sie das Äquivalent zu einer globalen Variablen, indem Sie \Drupal::theme()->getActiveTheme()->getPath();

1.

ThemeManager Sie den ThemeManager (angegeben durch \Drupal::theme() ) in Ihre Erweiterungsklasse ein

2.

In diesem Beispiel nehmen wir das zweite Beispiel, weil es für jeden Dienst weit verbreitet sein kann (Sie importieren die Anfrage oder die Datenbankverbindung, wenn Sie möchten).

Dies setzt voraus, dass Sie über ein Modul namens twig_svg_extension und eine twig_svg_extension.services.yml Datei twig_svg_extension.services.yml :

services: twig_svg_extension.twig_extension: class: Drupal\twig_svg_extension\TwigExtension\TwigSvgExtension arguments: ['@theme.manager'] tags: - { name: twig.extension }

Bitte nicht den arguments , der Drupal den Dienst mitteilt.

namespace Drupal\twig_svg_Extension\TwigExtension; use Drupal\Core\Theme\ThemeManager; use Twig_Extension; use Twig_SimpleFilter; class TwigSvgExtension extends Twig_Extension { private $theme; // Dependency injection at work! public function __construct(ThemeManager $theme) { $this->theme = $theme; } public function getFilters() { return [ 'svg' =>new Twig_SimpleFilter('svg', [$this, 'svgFilter']), ]; } public function getName() { return 'twig_svg_extension.twig_extension'; } public function svgFilter(string $filepath) { $realpath = realpath($this->theme->getActiveTheme()->getPath().DIRECTORY_SEPARATOR.$filepath); $pathinfo = pathinfo($realpath); if($realpath !== false && strtolower($pathinfo['extension']) === 'svg') { return file_get_contents($realpath); } return '"'.$filepath.'" does not exist or is not an SVG'; } }

https://riptutorial.com/de/home 42

Page 47: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

Beachten Sie den Konstruktor, der die Abhängigkeit enthält, die wir in der Servicekonfiguration svgFilter , sowie den svgFilter , der den aktuell aktiven Themenpfad svgFilter .

$filepath sollte ein relativer Pfad zum Themes-Ordner sein. Die Erweiterung konvertiert den Dateipfad in den Inhalt der Datei, auf die sie verweist.

Zweig online lesen: https://riptutorial.com/de/drupal/topic/8804/zweig

https://riptutorial.com/de/home 43

Page 48: drupal - RIP Tutorial · 2019-01-18 · Drupal ist ein Open-Source-Content-Management-System, das in PHP integriert ist. Drupal wurde entwickelt, um flexibel und leistungsstark zu

Credits

S. No

Kapitel Contributors

1Erste Schritte mit Drupal

acrosman, Adrian Cid Almaguer, chx, Community, dobeerman, Jimmy Ko, Karl Buys, kiamlaluno, Mika A., Morsok, pal4life, Pierre Buyle, Sidney Gijzen

2

Beispiel für die Drupal 8-Warteschlangen-API und die Stapel-API

David Czinege

3Das Ansichten-Modul

Pierre.Vriens

4 Das Regelmodul Pierre.Vriens

5 Drupal 8-Objekt-API Bernard Nandwa

6Drupal Cache und Performace

Anurag

7 DrushAdrian Cid Almaguer, darc1n, Jimmy Ko, lastYorsh, L-four, Mark Conroy, Morsok, pbonnefoi, Rishi Kulshreshtha, Sjoerd van der Vis, Wade Burelbach

8 Feldformatierer Ricardo Velhote

9Modulentwicklung - Drupal 7

Ajit S, doublejosh, Hermann Döppes, Jimmy Ko, Jimmyb_1991, Morsok, Pierre Buyle

10Themenentwicklung - Drupal 7

Adrian Cid Almaguer, Sam Thompson

11 Zweig Ricardo Velhote

https://riptutorial.com/de/home 44