In diesem Lernprogramm werden wir die Erweiterung von ProcessWire-Admin mit benutzerdefinierten Modulen untersuchen. Mit drei Beispielmodulen werde ich Ihnen einen kleinen Einblick in die Leistungsfähigkeit geben, die ProcessWire-Module für das Hinzufügen neuer Funktionen zum Administrator bieten.
Das Erstellen von Seiten für Ihre Website in ProcessWire (PW) könnte nicht einfacher sein, aber wie sieht es mit dem Erstellen benutzerdefinierter Seiten im CMS aus? Angenommen, Sie möchten eine Seite mit benutzerdefinierten Einstellungen, FAQs oder Videoseite erstellen?
Lesen Sie weiter, wir haben Ihren Rücken.
Das Modul ProcessSimpleAdminPage Zeigt einfach ein Modul an, das die Klasse Process erweitert, um einen neuen Verwaltungsprozess hinzuzufügen, und erstellt dann eine Seite für den neuen Prozess. Verarbeiten ist die Basisklasse für den PW-Administrator, so dass wir eine Seite erstellen können, die unseren Inhalt zeigt.
Spitze: Ihr neues Modul zur Prozesserweiterung kann auch Formulare und andere Funktionen anzeigen sowie Inhalte zurückgeben.
Wir werden einen neuen Prozess erstellen, der einige Inhalte zurückgibt, und dann eine neue Seite in der Admin-Navigation erstellen, um auf diesen Inhalt zuzugreifen (in diesem Beispiel habe ich die Seite "CMS-FAQ" genannt). Um unser Modul zu erstellen, erstellen wir zunächst eine Datei mit dem Namen "ProcessSimpleAdminPage.module" und speichern unsere Moduldetails darin.
Die Klasse ProcessSimpleAdminPage erweitert den Prozess public static function getModuleInfo () return array ('title' => 'Simple Admin-Seite verarbeiten', 'summary' => 'Simple Process-Modul, das eine neue Admin-Seite mit', 'version' => 001 hinzufügt ,); public function execute () return 'Bearbeiten Sie den Text hier im Modul
Lorem ipsum dolor sitzt amet, consectetur adipiscing elit. Eritus vitae metus sodales wird durch einen purus rhoncus ersetzt. Proin ultrices gravida dolor, nicht porttitor enim interdum vitae. Ganzzahlige Lacinia tincidunt. Nulla laoreet tristique tristique. Sed Elementum Justo a Nisl Elementum sitzen amet accumsan nisi tempor. Nulla quis eros und massa dignissim imperdiet a vitae purus.
';
An diesem Punkt hätten wir, wenn wir unser Modul installiert hätten, alles, was wir brauchen, um unseren neuen Prozess zu erstellen ProcessSimpleAdminPage und den Inhalt zurückgeben. Es gibt jedoch derzeit keine Seite, um unseren Code auszuführen. Dafür haben wir mehrere Möglichkeiten:
Seite
Attribut zu den Modulen getModuleInfo ()
Array. Wenn das Modul den Prozess erweitert (was bei uns der Fall ist), fügen Sie ein Seite
Attributfeld mit mindestens einem Name und Elternteil Bei der Installation wird automatisch eine neue Admin-Seite erstelltIhre Angabe Elternteil mit dem Modul als Prozess. Hier ist ein Beispiel aus dem Hallo-Modul.Installieren()
und deinstallieren ()
Funktionen und fügen Sie die neue Seite hinzu. Nachfolgend finden Sie eine detaillierte Beschreibung, wie Sie eine Seite hinzufügen können:public function install () // Neue Seite erstellen, um sie dem CMS hinzuzufügen $ page = new Page (); // Seitenattribute hinzufügen, ich habe diese Seite aufgerufen CMS FAQ '$ page-> template = "admin"; $ page-> name = "cms-faq"; $ page-> title = "CMS-FAQ"; $ page-> save (); // Dieses Modul als Seitenprozess festlegen. Dies ermöglicht uns die Anzeige der obigen $ page-> process = 'ProcessSimpleAdminPage'; // Admin-Seite abrufen und als übergeordnete Seite festlegen $ admin = $ this-> pages-> get ("id = 2"); $ page-> parent = $ admin; // Seite speichern $ page-> save (); public function uninstall () // Erstellte Seite löschen $ page = $ this-> pages-> get ("name = cms-faq"); if (count ($ page)) $ this-> pages-> delete ($ page, true);
Gehen Sie vor und erstellen Sie Admin-Seiten für Ihre Website!
Durch die Verwendung von Textformaten können Sie die Eingabe von Textfeldern mit dem PW-Administrator bearbeiten. Angenommen, Sie möchten Code-Snippets erstellen, die hinzugefügt werden, anstatt dass jemand eigene eigene Snippets eingibt. Dies ist durchaus möglich (ähnlich wie beim hana-Code-Plugin für Wordpress)..
Dieses Mal habe ich ein Modul erstellt, das eine weitere Basisklasse Textformatter erweitert, um unser neues Modul zu erstellen TextformatterFindReplace und erstellte eine separate Konfigurationsdatei:
Klasse TextformatterFindReplace erweitert Textformatter implementiert das Modul public static function getModuleInfo () return array ('title' => 'TextformatterFindReplace', 'version' => 0.1, 'summary' => "Findet und ersetzt jede Instanz der Konfigurationseingabe in der Konfigurationsausgabe ", 'singular' => true,); / ** * Suchen und Ersetzen der Eingabezeichenfolge * * @param Zeichenfolge $ str Der zu analysierende Textblock * * Die eingehende Zeichenfolge wird durch die formatierte Version von sich selbst ersetzt. ** / public Funktionsformat (& $ str) $ find = $ this-> findStr; $ str = preg_replace_callback ($ find, array ($ this, "replace"), $ str); // Das Hinzufügen von drei Unterstrichen zu einer Funktion ermöglicht es anderen Modulen, sie zu verknüpfen. public function ___ replace ($ match) return $ this-> replaceStr;
Klasse TextformatterFindReplaceConfig erweitert ModuleConfig public function getDefaults () return array ('findStr' => '----', 'replaceStr' => 'ERSETZTER TEXT',); / * * getInputfields () * return: $ inputfields * / // Formular in PW-Admin erstellen, um die Konfiguration des Moduls public function zu aktivieren getInputfields () // get module getInputfields set Konfigurationsklasse $ inputfields = parent :: getInputfields (); // get InputfieldText-Modul $ f = $ this-> modules-> get ('InputfieldText'); $ f-> attr ('name', 'findStr'); $ f-> label = 'In Text suchen'; $ f-> description = 'Fügen Sie ein Wort oder Muster hinzu, um es in Ihrem Text zu suchen und zu ersetzen.'; // Benutzerrolleneingabe zur Form config hinzufügen $ inputfields-> add ($ f); // neues InputfieldText-Modul erhalten $ f = $ this-> modules-> get ('InputfieldText'); $ f-> attr ('name', 'replaceStr'); $ f-> label = 'Text ersetzen'; $ f-> description = 'Text, der im Frontend angezeigt werden soll.'; // Add Page Redirect-Eingabe zur Form config $ inputfields-> add ($ f); // return modul config eingaben return $ inputfields;
Jetzt kann ich in den Moduleinstellungen eine passende Zeichenfolge und eine Zeichenfolge angeben, durch die sie ersetzt werden soll (in unserem obigen Beispiel lautet der Standardwert find: ----
und durch ersetzen ERSETZTER TEXT
).
Alles, was ich dann tun muss, ist unser neues TextFormatter zu einem Textfeld auf der Registerkarte "Details" des Feldes hinzuzufügen. Jetzt jedes Mal, wenn ich tippe ----
Ich werde die ersetzte Textzeichenfolge erhalten.
Da der PW-Administrator selbst mit der API-ähnlichen Bibliothek von PW erstellt wird, können PW-Module praktisch überall eingesetzt werden.
Für mein letztes Beispiel zur Erweiterung von PWs Admin habe ich ein Modul erstellt, das der Bearbeitungsseite und dem Seitenbaum Schaltflächen hinzufügt, zwei neue Felder erstellt und sie global zu jeder Seite hinzufügt. Zum Betrieb ist ein anderes Modul, LazyCron, erforderlich.
Das Modul PageDeferredPublish, beim Klicken auf einen der Später veröffentlichen Schaltflächen, legt LazyCron fest, um den Countdown dieser Seite jede Minute zu überprüfen, und veröffentlicht die Seite, wenn der Countdown 0 ist. Dies bedeutet, dass ich eine Seite ungefähr 24 Stunden im Voraus veröffentlichen kann (natürlich können das Überprüfungsintervall und die Verzögerungszeit an Ihre Anforderungen angepasst werden)..
Ich habe das gemacht von:
Installieren()
Funktion: Ein Kontrollkästchen, das auf true gesetzt wird, wenn eine Schaltfläche markiert ist, um anzuzeigen, dass die Seite einen Countdown hat, und ein Countdown-Feld, um die Anzahl der Sekunden für diese bestimmte Seite zu speichern.Das Ergebnis ist ein Modul, das über Einstellungen verfügt (Zeitintervall, das zu einem späteren Zeitpunkt überprüft und veröffentlicht werden soll), sich mithilfe von Schaltflächen und Feldern mit dem Administrator verbindet und die Verwendung anderer in PW installierter Module (d. H. LazyCron) ermöglicht..
Häufig wurde ein von Ihnen benötigtes Modul bereits erstellt und kann von der Modulseite von PW heruntergeladen werden. Wenn Sie sich jedoch in Not befinden, ist es schön zu wissen, dass es relativ einfach ist, einzusteigen, eine Kernklasse zu erweitern und neue Funktionen zu erstellen, die Ihr Problem lösen oder die Standardlösung von PW ändern.
Ich hoffe, dass Sie diesen kleinen Vorgeschmack auf die Erweiterungsmöglichkeiten von PW als nützlich empfunden haben. Weitere Tipps und Tricks finden Sie in den anderen ProcessWire-Tutorials zu Envato Tuts +.