In deze zelfstudie gaan we kijken hoe de beheerder van ProcessWire kan worden uitgebreid met aangepaste modules. Met drie voorbeeldmodules zal ik u een klein voorproefje geven van de kracht van de ProcessWire-modules voor het toevoegen van nieuwe functionaliteit aan de beheerder.
Het maken van pagina's voor uw website in ProcessWire (PW) kan niet eenvoudiger, maar hoe zit het met het maken van aangepaste pagina's in de CMS? Stel dat u een aangepaste instellingenpagina, veelgestelde vragen of een videopagina wilt maken?
Lees verder, we hebben je terug.
De module ProcessSimpleAdminPage laat eenvoudig zien om een module te maken die de klasse Process uitbreidt om een nieuw admin-proces toe te voegen en vervolgens een pagina voor het nieuwe proces te maken. Werkwijze is de basisklasse voor de beheerder van de PW zodat we deze kunnen gebruiken om een pagina te maken die onze inhoud laat zien.
Tip: Uw nieuwe procesuitbreidingsmodule kan ook formulieren en andere functionaliteit weergeven en inhoud retourneren.
We gaan een nieuw proces maken dat inhoud retourneert en vervolgens een nieuwe pagina maken in de beheerdersnavigatie om die inhoud te bereiken (in dit voorbeeld heb ik de pagina "Veelgestelde vragen over CMS" genoemd). Om onze module te bouwen, beginnen we met het aanmaken van een bestand met de naam "ProcessSimpleAdminPage.module" en slaan we onze modulegegevens op..
klasse ProcessSimpleAdminPage breidt proces uit public static function getModuleInfo () return array ('title' => 'Process Simple Admin Page', 'summary' => 'Simple Process-module die een nieuwe beheerderspagina toevoegt met', 'version' => 001 ,); public function execute () return 'Bewerk de tekst hier in de module
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam mattis eros vitae metus sodales eget suscipit purus rhoncus. Proin ultrices gravida dolor, non porttitor enim interdum vitae. Integer feugiat lacinia tincidunt. Nulla laoreet tristique tristique. Sed elementum justo a nisl elementum zit amet accumsan nisi tempor. Nulla quis eros et massa dignissim imperdiet a vitae purus.
';
Op dit punt zouden we, als we onze module zouden installeren, alles hebben wat we nodig hebben om ons nieuwe Proces te creëren ProcessSimpleAdminPage en retourneer de inhoud. Er is momenteel echter geen pagina om onze code uit te voeren. We hebben verschillende opties om dit te doen:
pagina
attribuut aan de modules getModuleInfo ()
matrix. Als de module het proces uitbreidt (wat het onze doet), dan voegt het een toe pagina
attribuutarray met minstens een naam en ouder bij installatie maakt automatisch een nieuwe beheerderspagina onderuw opgegeven ouder met de module als het proces. Hier is een voorbeeld uit de hello-module.installeren()
en verwijderen ()
functies en voeg de nieuwe pagina toe. Dit wordt hieronder beschreven om u te laten zien hoe u een pagina zou kunnen toevoegen:public function install () // nieuwe pagina maken om toe te voegen aan CMS $ page = new Page (); // paginakenmerken toevoegen, ik heb deze pagina CMS FAQ '$ page-> template = "admin" genoemd; $ page-> name = "cms-faq"; $ page-> title = "CMS FAQ"; $ Pagina-> save (); // stel deze module in als het paginaproces, hierdoor kunnen we de bovenstaande $ page-> process = 'ProcessSimpleAdminPage' weergeven; // krijg admin pagina en stel in als page parent $ admin = $ this-> pages-> get ("id = 2"); $ page-> parent = $ admin; // save page $ page-> save (); openbare functie de-installatie () // verwijder gemaakte pagina $ page = $ this-> pages-> get ("name = cms-faq"); if (count ($ page)) $ this-> pages-> delete ($ page, true);
Ga verder en maak beheerderspagina's voor uw website!
Door Textformatters te gebruiken, kunt u de invoer van tekstvelden manipuleren met de PW-beheerder. Stel dat u codefragmenten wilt maken die zijn toegevoegd in plaats van iemand zijn eigen fragmenten te typen, het is perfect mogelijk (op dezelfde manier als de hana-codeplug-in voor Wordpress).
Deze keer heb ik een module gemaakt die een andere basisklasse Textformatter uitbreidt om onze nieuwe module te maken TextformatterFindReplace en creëerde een apart configuratiebestand:
class TextformatterFindReplace breidt Textformatter implementaties uit Module public static function getModuleInfo () return array ('title' => 'TextformatterFindReplace', 'version' => 0.1, 'summary' => "Zoekt en vervangt elk exemplaar van config-invoer naar config-uitvoer ", 'singulier' => waar,); / ** * Zoek en vervang de invoerreeks * * @param string $ str Het tekstblok om te parseren * * De inkomende string wordt vervangen door de geformatteerde versie van zichzelf. ** / public function format (& $ str) $ find = $ this-> findStr; $ str = preg_replace_callback ($ find, array ($ this, "replace"), $ str); // toevoeging van drie underscores aan een functie staat andere modules toe om het te haken public function ___ replace ($ match) return $ this-> replaceStr;
class TextformatterFindReplaceConfig breidt ModuleConfig uit openbare functie getDefaults () return array ('findStr' => '----', 'replaceStr' => 'VERVANGTE TEKST',); / * * getInputfields () * return: $ inputfields * / // create form binnen PW admin om configuratie van module public function in te schakelen getInputfields () // ontvang module getInputfields set config class $ inputfields = parent :: getInputfields (); // krijg InputfieldText-module $ f = $ this-> modules-> get ('InputfieldText'); $ f-> attr ('name', 'findStr'); $ f-> label = 'Zoek in tekst'; $ f-> description = 'Voeg een woord of patroon toe om te vinden en te vervangen binnen uw tekst.'; // add User role input om config config $ inputfields-> add ($ f) te vormen; // krijg nieuwe InputfieldText-module $ f = $ this-> modules-> get ('InputfieldText'); $ f-> attr ('naam', 'replaceStr'); $ f-> label = 'Tekst vervangen'; $ f-> description = 'tekst die aan de voorkant wordt weergegeven.'; // voeg Pagina omleiden input toe aan formulier config $ inputfields-> add ($ f); // return-module config-ingangen geven $ invoervelden terug;
In de module-instellingen kan ik een overeenkomende string specificeren, en een string om mee te vervangen (in ons voorbeeld hierboven is de standaard find: ----
en vervangen door VERVANGTE TEKST
).
Alles wat ik dan moet doen is onze nieuwe TextFormatter toevoegen aan een tekstveld binnen het tabblad met details van het veld. Nu elke keer dat ik typ ----
Ik zal de vervangen tekststring krijgen.
Omdat de PW-beheerder zelf is gemaakt met de API-achtige bibliotheek van PW, hebben PW-modules vrijwel overal toegang tot waar u maar wilt.
Voor mijn laatste voorbeeld over het uitbreiden van PW's admin heb ik een module gemaakt die knoppen toevoegt aan de bewerkingspagina en pagetree, maakt twee nieuwe velden en voegt deze globaal toe aan elke pagina. Het vereist een andere module, LazyCron, om te bedienen.
De module PageDeferredPublish, door op een van de te klikken Later publiceren knoppen, stelt LazyCron in om elke minuut de aftelprocedure van die pagina te controleren en publiceert de pagina wanneer het aftellen 0 bereikt. Dit betekent dat ik een pagina ongeveer 24 uur van tevoren kan publiceren (uiteraard kunnen het controle-interval en de vertragingstijd worden aangepast aan uw vereisten).
Ik deed dit door:
installeren()
functie: een selectievakje om in te stellen op true wanneer een knop is aangevinkt om aan te geven dat de pagina moet aftellen, en een countdown-veld om het aantal seconden op te slaan voor die specifieke pagina.Het resultaat is een module met instellingen (het tijdsinterval om te controleren en op een later tijdstip te publiceren), haakt in de admin via knoppen en velden en stelt ons in staat om andere modules te gebruiken die zijn geïnstalleerd in PW (d.w.z. LazyCron).
Vaak is een module die u nodig hebt al gemaakt en kan deze worden gedownload van de modulepagina van PW. Als u echter merkt dat u in nood verkeert, is het prettig om te weten dat het betrekkelijk eenvoudig is om in te springen, een kernklasse uit te breiden en nieuwe functionaliteit te creëren die uw probleem oplost of de standaardoplossing van PW verandert.
Ik hoop dat je deze kleine voorproefje van de kracht van uitbreiding van PW nuttig hebt gevonden en bekijk de andere ProcessWire-tutorials over Envato Tuts + voor meer tips en trucs.