Eigene Grid Boxen


Grid kann um beliebig viele eigene Boxen erweitert werden. Hierfür werden ein oder mehrere Plugins in WordPress bzw. Module in Drupal erstellt, die jeweils beliebig viele Boxen bereitstellen können.

WordPress

  1. Plugin Ordner anlegen (z. B. /wp-content/plugins/grid-boxen)
  2. In diesem Verzeichnis eine PHP Datei grid_boxes.php anlegen.
  3. grid_load_classes Action hinzufügen und in dieser Funktion die Boxen laden.

Beispiel:

<?php
/*
Plugin Name: Meine Grid Boxen
Description: Meine Projektspezifischen Grid Boxen
Version: 1.0
Author: Ich
*/
add_action( "grid_load_classes", "grid_boxes_load" );

function grid_boxes_load() {
	require "grid_meine_box_box.inc";
}

Als letztes noch eine grid_meine_box_box.inc erstellen, in der die neue Box-Typ definiert wird.

Drupal

  1. Module Ordner anlegen (z. B. /sites/all/modules/grid_boxen)
  2. Dort eine grid_boxen.info und grid_boxen.module erstellen
  3. hook_grid_load_classes() nutzen,um Boxen hinzuzufügen

Beispiel grid_boxen.info

name = Meine Grid Boxen
description = Meine Projektspezifischen Grid Boxen
package = Grid
core = 7.x
dependencies[] = "grid"

Beispiel grid_boxen.module

<?php
function boell_grid_boxes_grid_load_classes() {
	require "grid_meine_box_box.inc";
}

Als letztes noch eine grid_meine_box_box.inc erstellen, in welcher der neue Box-Typ definiert wird.

Box Klasse

<?php ... class grid_meine_box_box extends grid_static_base_box { public function type() { return 'meine_box'; } public function __construct() { $this->content = new Stdclass();
      $this->content->variable1 = '';
      ...
   }

   public function contentStructure() {
      return array(
         array(
            'key' => 'variable1',
            'label' => t( 'HTML Text' ),
            'type' => 'html',
         ),
         array(
            ...
         ),
      );
   }

   public function build( $editmode ) {
      if( $editmode ) {
         return t( "Content: " . $this->content->variable1 );
      }
      else {
         return $this->content->variable1;
      }
   }

}

Damit das Grid die Box-Klasse verwenden kann, muss diese entweder die grid_static_base_box oder die grid_list_box Klasse erweitern. Diese Implementierung entscheidet, in welchem Bereich der Toolbar (“Static content” oder “Lists”) die Box später eingeordnet wird.

type()
Diese Funktion wird zum Ermitteln der spezifischen Box-Klasse verwendet und muss den eindeutigen Typ-Namen der Box zurück geben. Der Typ-Name entspricht dem Namen der BoxKlasse ohne vorangestelltes grid_ und angehangenes _box. Dieser Wert darf später nicht mehr verändert werden.

__construct()
Im Konstruktor muss zunächst die Klassenvariable content als Objekt initialisiert werden. Danach werden alle boxspezifischen Variablen dieses Objekts mit Ihren Standardwerten initialisiert.

contentStructure()
Von dieser Funktion wird als Rückgabewert ein Array aus assoziativen Arrays erwartet, welches die Editor-Widgets definiert. Der Wert des Eintrags key muss hierbei jeweils mit dem Namen der content-Variable übereinstimmen, in welcher die Benutzereingabe des Widgets gespeichert werden soll. Alle weiteren Informationen zu den zur Verfügung stehenden Editor-Widgets finden sich hier.

build($editormode)
In dieser Funktion wird die Ausgabe der Box implementiert. Über den Parameter $editmode kann man zwischen der Ausgabe im Grid Editor und der Ausgabe im Frontend unterscheiden. Sie hat im Backend den Wert true und im Frontend der Wert false.
Die erwartete Rückgabe ist entweder ein String aus fertig gerendertem HTML oder alternativ kann z. B. das content-Objekt zurückgegeben werden, um das HTML in einem Box spezifischen Template zu bauen.