
Was sind die Drupal-Codierungsstandards und wie können Sie sie in Ihrer täglichen Arbeit nutzen?
Standardisierung hat positive Auswirkungen auf jedes Unternehmen. In der Softwarebranche gibt es bestimmte Codestandards, die für eine erfolgreiche Softwareentwicklung benötigt werden. Codestandards sind eine Reihe von Regeln und bewährten Praktiken, die Code lesbarer und einfacher zu entwickeln machen. In diesem Artikel präsentieren wir die Standards, die zur Erstellung von Drupal-Projekten verwendet werden. Wir zeigen Ihnen die grundlegenden Aspekte, auf die es sich lohnt, zu achten, und die Werkzeuge, die die Arbeit erleichtern.
Codestandards in Drupal
Die Drupal-Community definiert eine Reihe von Codestandards und Best Practices, die beim Schreiben von Code befolgt werden sollten. Sie basieren teilweise auf den PEAR-Codestandards. Die neu vorgeschlagenen Codestandards der Community werden zuerst im Coding Standards Projekt diskutiert.
Die Codestandards in Drupal sind unabhängig von der Version von Drupal, in der wir derzeit arbeiten. Alle neuen Codes sollten den aktuellen Regeln folgen. Wir finden vollständige Informationen zu den Codestandards in Drupal auf der offiziellen Drupal-Website.
Array
Arrays sollten mit kurzer Syntax formatiert werden, wobei Leerzeichen jedes Element nach einem Komma trennen. Wir sollten Leerzeichen vor und nach dem Zuweisungsoperator „=>“ hinzufügen.
$some_array = ['hello', 'world', 'foo' => 'bar'];
Wenn die Array-Deklaration 80 Zeichen überschreitet, sollten wir sie in mehrere Zeilen aufteilen.
$form['title'] = [
'#type' => 'textfield',
'#title' => t('Title'),
'#size' => 60,
'#maxlength' => 128,
'#description' => t('Der Titel Ihres Nodes.'),
];
Beachten Sie das Komma in der letzten Zeile – dies ist kein Fehler. Auf diese Weise können wir Fehler vermeiden, wenn in Zukunft neue Array-Elemente hinzugefügt werden.
Achtung! Die kurze Syntax ist in PHP ab Version 5.4 verfügbar. In älteren Versionen sollten wir die lange Syntax verwenden.
If else
Die if else-Struktur sieht aus wie im folgenden Beispiel. Beachten Sie das Arrangement von Klammern, Leerzeichen und geschweiften Klammern. Kontrollanweisungen sollten einen Leerraum zwischen der Bedingung und der öffnenden Klammer haben.
if (condition1 || condition2) {
action1;
}
elseif (condition3 && condition4) {
action2;
}
else {
standardaktion;
}
Achtung! Verwenden Sie niemals else if. Sie können stattdessen elseif verwenden.
Switch
Wir sollten in Kontrollanweisungen immer runde Klammern verwenden, auch wenn sie technisch optional sind, wie in der switch-Kontrollanweisung. Dies macht den Code lesbarer.
switch (condition) {
case 1:
action1;
break;
case 2:
action2;
break;
default:
standardaktion;
}
Do while
Nachfolgend zeigen wir ein Beispiel für die do while-Kontrollanweisung. Wir fügen ein Leerzeichen zwischen dem do und der öffnenden Klammer hinzu. Die Bedingung muss in derselben Zeile wie die schließende Klammer der Anweisung stehen, getrennt durch ein Leerzeichen.
do {
Aktionen;
} while ($condition);
Codezeilenlänge
Keine Codezeile sollte länger als 80 Zeichen sein. Eine Ausnahme kann eine Funktions-, Klassen- oder Variablendeklaration mit einem sehr langen Namen sein.
Bedingungen aufteilen
Bedingungen sollten nicht über eine einzelne Zeile hinausgehen. Drupal ermutigt uns, den Wert einer Bedingung für die Lesbarkeit in eine Variable zu setzen. Nachfolgend ein Beispiel, wie man zu lange Bedingungszeilen umarbeiten kann.
Falsch:
if ((isset($key) && !empty($user->uid) && $key == $user->uid) || (isset($user->cache) ? $user->cache : '') == ip_address() || isset($value) && $value >= time())) {
...
}
Richtig:
$is_valid_user = isset($key) && !empty($user->uid) && $key == $user->uid;
// IP muss mit dem Cache übereinstimmen, um Sitzungsmanipulation zu verhindern.
$is_valid_cache = isset($user->cache) ? $user->cache == ip_address() : FALSE;
// Alternativ, wenn der Abfrageparameter der Anfrage in der Zukunft liegt, dann
// ist er immer gültig, weil die Galaxie sowieso implodieren und kollabieren wird.
$is_valid_query = $is_valid_cache || (isset($value) && $value >= time());
if ($is_valid_user || $is_valid_query) {
...
}
Beispielfunktion
function funstuff_system($field) {
$system["description"] = t("Dieses Modul fügt zufällig lustigen Text in Beiträge ein.");
return $system[$field];
}
Argumente mit Standardwerten müssen immer am Ende stehen. Anonyme Funktionen hingegen sollten ein Leerzeichen zwischen dem "function" und ihren Parametern haben, wie im folgenden Beispiel:
array_map(function ($item) use ($id) {
return $item[$id];
}, $items);
Drupal JavaScript-Codestandards
Fügen Sie Ihre JS-Skripte immer mit Drupal.behavior hinzu. Funktionsnamen sollten mit dem Namen des Moduls oder Themas beginnen, das die Funktion deklariert, um Namenskonflikte zu vermeiden.
Drupal.behaviors.tableDrag = function (context) {
Object.keys(Drupal.settings.tableDrag).forEach(function (base) {
$('#' + base).once('tabledrag', addBehavior);
});
};
Drupal CSS-Codestandards
Im Folgenden finden Sie einige Regeln, die Ihnen beim korrekten CSS-Coding helfen.
Vermeiden Sie die Abhängigkeit von der HTML-Struktur
CSS sollte das Aussehen eines Elements an jedem Ort und an dem Ort, an dem es erscheint, definieren. Verwenden Sie niemals HTML-Sektoren.
BEM
Eine gute Praxis beim Schreiben von Styles in Drupal ist es, der BEM-Methodik zu folgen. Auf diese Weise geschriebenes CSS verhindert mehrfaches Schachteln und die Abhängigkeit von der Markup-Struktur und zu generischen Klassennamen. Die Methodik unterteilt alle Elemente in drei Kategorien:
- Blöcke – Sie sind normalerweise einzelne Komponenten, zum Beispiel Navigation. Dies sieht im Code wie eine einzelne Klasse aus, z.B. .navigation.
- Elemente – Das sind untergeordnete Teile eines Blocks, wie ein Link in der Navigation. Der Elementname sollte durch zwei Unterstriche vom Blocknamen getrennt werden, z.B. .navigation__link, .navigation__item.
- Modifikatoren – spezifische Varianten von Blöcken und Elementen. Der Name des Modifikators sollte durch zwei Bindestriche von der Basis getrennt werden, z.B.: .navigation–dark, .navigation__link–active.
Drupal Twig-Codestandards
Alle Codestandards für Twig, die Template-Engine für PHP, sind auf der offiziellen Twig-Dokumentationsseite beschrieben.
Ausdrücke
Ausdrücke in Twig sind den Ausdrücken in PHP sehr ähnlich. Sie werden am häufigsten verwendet, um zu überprüfen, ob eine Variable existiert, Schleifen zu deklarieren und neue Variablen in Templates anzulegen.
Überprüfen, ob eine Variable zum Drucken verfügbar ist:
{% if foo %}
<div>{{ foo }}</div>
{% endif %}
Schleife:
{% for key, value in items %}
<div class="{{ key }}">{{ value }}</div>
{% endfor %}
Deklaration neuer Variablen:
{% set list = ['Alice', 'Bob'] %}
{% set text = ':person ist ein Twig-Fan'|t({':person': list[0] }) %}
Filter
Einige der bekanntesten Funktionen von Drupal, wie t und url, wurden in Twig-Templates als Filter verfügbar gemacht. Sie werden mit dem Pipe-Zeichen | ausgelöst.
<div class="preview-text-wrapper">
{{ 'Original'|t }}
</div>
Wie werden Drupal-Codestandards im Alltag verwendet?
Es gibt Werkzeuge, die Ihnen helfen, Ihren Code an die Standards anzupassen. Hier sind einige der Werkzeuge, die wir während der Drupal-Entwicklung verwenden.
- Code Sniffer – Ein Tool, das Ihnen hilft, Code für Drupal oder seine Module zu schreiben. Es kann Standard-Codierungs- und Formatierungsfehler erkennen und automatisch beheben.
- Coder Drupal-Modul – Wenn es mit Code Sniffer integriert ist, hilft es, Fehler im Codestandard zu beheben.
- CSSComb – Ein Werkzeug zur Sortierung und Formatierung von CSS-Code.
Wenn Werkzeuge verwendet werden, die in die IDE integriert sind, muss der Entwickler nicht alle Codestandards auswendig kennen und kann sicher sein, dass keine unnötigen Leerzeichen oder falschen Tabulatoren im Code verbleiben. Sie werden auch sofort erfahren, ob Änderungen in die Codierkonventionen eingeführt werden.
Zusammenfassend ist es sehr wichtig, dass das Entwicklungsteam die entsprechenden Codierkonventionen und -standards einhält, die sie während der Softwareentwicklung anleiten. Dies wird helfen, die Qualität des Codes zu erhalten und die Zeit zu reduzieren, die neue Entwickler benötigen, um eine komplexe Codebasis zu verstehen.