Som modulutvikler må du ofte opprette et tilpasset skjema i din daglige OpenCart tilpassede modulutvikling. Det er allerede gitt, som med de andre rammene, i form av forskjellige kroker i modularkitekturen til OpenCart.
Før vi går videre og undersøker de nevnte krokene, la oss utforske utvidelsesbegrepet i OpenCart. Ser fra toppen, det er en forlengelse i OpenCart som gjør at du kan berike kjernefunksjonaliteten til OpenCart. Ved å installere det, legger du til funksjoner i front-end-butikken, enten det er et enkelt bildegalleri eller noe fancy utseende dra-og-slipp-funksjonalitet.
Videre er utvidelsene, avhengig av funksjonaliteten de oppgir, kategorisert i logiske grupper. Som et raskt eksempel legger betalingsutvidelsen til nye betalingsmåter i front-end-kassen, mens det er en utvidelse mot svindel som lar deg oppdage spamaktiviteter i butikken din. Gå over til bakenden og se på listen under utvidelser menyen som viser de forskjellige typer utvidelser som støttes i OpenCart.
Du vil bli overrasket over å vite at a modul er også bare en annen type utvidelse i OpenCart. Hver utvidelse er bygget rundt den vanlige arbeidsflyten av hvordan ting skal fungere i OpenCart-økosystemet. Og kroker gir deg mulighet til å utføre bestemte handlinger basert på bestemte hendelser, om det kjører en installasjonshook under modulaktivering eller rydding av søppel under avinstallasjon.
Det vil være de som installerer og avinstallerer kroker som vil bli diskutert i løpet av denne artikkelen. Selv om de blir diskutert i sammenheng med moduler, ser jeg ikke noe som hindrer at du bruker samme metode til andre typer utvidelser, så vær så snill å utforske disse filene på egen hånd.
Det er den nyeste versjonen av OpenCart som gir utdragene spredt over denne opplæringen. Som ved å skrive dette, er det den 2.1.0.2 stabile versjonen.
I denne delen skal vi undersøke nøyaktig hva installasjonskroken brukes til. Gå videre og åpne admin / styreenhet / forlengelse / module.php
i din favoritt tekstredigerer, og finn installere
metode. Det skal se slik ut:
last> språk ( 'forlengelse / modul'); $ Dette-> dokument-> setTitle ($ dette-> Språk> får ( 'HEADING_TITLE')); $ Dette-> last> modell ( 'forlengelse / forlengelse'); $ Dette-> last> modell ( 'forlengelse / modul'); hvis ($ this-> validate ()) $ this-> model_extension_extension-> installer ('modul', $ this-> request-> get ['extension']); $ Dette-> last> modell ( 'bruker / user_group'); $ this-> model_user_user_group-> addPermission ($ this-> user-> getGroupId (), 'access', 'module /'. $ this-> request-> få ['forlengelse']); $ this-> model_user_user_group-> addPermission ($ this-> user-> getGroupId (), 'modifiser', 'modul /'. $ this-> request-> get ['extension']); // Call installeringsmetode hvis den eksisterer $ this-> load-> controller ('module /'. $ This-> request-> få ['forlengelse']. '/ Install'); $ this-> session-> data ['success'] = $ this-> language-> get ('text_success'); $ this-> response-> omdirigere ($ this-> url-> link ('forlengelse / modul', 'token ='. $ this-> session-> data ['token'], 'SSL')); $ this-> getList (); ...?>
Det er den generiske installasjonshaken for modulen som vil bli kalt når du prøver å installere en hvilken som helst modul fra baksiden. La oss gå gjennom viktige deler av denne metoden.
Først laster det modellfiler som kreves for de påfølgende aktivitetene. De $ Dette-> model_extension_extension-> installere
Metode samtale sørger for at en oppføring legges til databasen for denne modulen.
Etter det er det noen ACL ting, og det er oppnådd ved å ringe addPermission
metode. Det sørger for at den nåværende brukeren, admin, skal kunne få tilgang til modulspesifikke innstillingene og endre dem.
Til slutt kalles det installere
Metode for modulen som installeres. Ikke bli forvirret med installasjonsmetoden vi allerede er i-det vil ringe modulen spesifikk installere
metode hvis den eksisterer.
For eksempel, hvis du prøver å installere Logg inn med PayPal modul, kalles det en installasjonsmetode som er definert i filen admin / styreenhet / modul / pp_login.php
som vist under.
last> modell ( 'forlengelse / event'); $ this-> model_extension_event-> addEvent ('pp_login', 'post.customer.logout', 'modul / pp_login / logout'); ...?>
Siden introduksjonen av OpenCart 2.x er det noen spennende funksjoner inkludert, og event-observatør er en av dem. Det lar deg legge til modulspesifikke hendelser, og andre moduler kan sette opp observatører for denne hendelsen, slik at de kan kjøre noen vilkårlig kode når den aktuelle hendelsen blir avfyrt. Og det er akkurat det som er demonstrert i installasjonsmetoden ovenfor, som legger til post.customer.logout
tilpasset arrangement!
I tilfelle av Logg inn med PayPal modulen, det var ganske enkle ting, men noen ganger trenger du mer hvis du ønsker å injisere et tilpasset skjema eller noe lignende. La oss trekke inn vår installasjonsmetode fra PayPal Express Checkout betalingsutvidelse. Gå videre og åpne admin / controller / betaling / pp_express.php
.
last> modell ( 'betaling / pp_express'); $ Dette-> model_payment_pp_express-> installere (); ...?>
Først laster den den tilhørende modellfilen, og bruker det den ringer til installere
metode av modellen. Som en tommelfingerregel, når du vil manipulere et skjema, bør du implementere denne koden i modellens installasjonsmetode, i stedet for å sette den direkte i kontrollerens installasjonsmetode.
La oss nå raskt trekke inn installeringsmetoden som er definert i modellfilen admin / modell / betaling / pp_express.php
.
db-> forespørsel ("CREATE TABLE IF NOT EXISTS". DB_PREFIX. "paypal_order" ('paypal_order_id' int (11) IKKE NULL AUTO_INCREMENT, 'order_id' int (11) IKKE NULL, 'date_added' DATETID NOT NULL, 'date_modified 'DATO DID NOT NULL', 'capture_status' ENUM ('Complete', 'NotComplete') DEFAULT NULL, 'valuta_kode' CHAR (3) IKKE NULL, 'authorization_id' VARCHAR (30) IKKE NULL, 'totalt' DECIMAL (10, 2) IKKE NULL, PRIMARY KEY ('paypal_order_id')) ENGINE = MyISAM DEFAULT COLLATE = utf8_general_ci; "); $ this-> db-> forespørsel ("CREATE TABLE IF NOT EXISTS". DB_PREFIX. "paypal_order_transaction" ('paypal_order_transaction_id' int (11) IKKE NULL AUTO_INCREMENT, 'paypal_order_id' int (11) IKKE NULL, 'transaction_id' CHAR 20) IKKE NULL, 'parent_transaction_id' CHAR (20) IKKE NULL, 'date_added' DATETID IKKE NULL, 'notat' VARCHAR (255) IKKE NULL, 'msgsubid' CHAR (38) IKKE NULL, 'receipt_id' CHAR (20) IKKE NULL, 'payment_type' ENUM ('ingen', 'echeck', 'instant', 'refund', 'void') DEFAULT NULL, 'payment_status' CHAR (20) IKKE NULL, 'venter_reason' CHAR (50) IKKE NULL, 'transaction_entity' CHAR (50) IKKE NULL, 'beløp' DECIMAL (10, 2) IKKE NULL, 'debug_data' TEKST IKKE NULL, 'call_data' TEKST IKKE NULL, PRIMARY KEY ('paypal_order_transaction_id')) ENGINE = MyISAM DEFAULT COLLATE = utf8_general_ci; "); ...?>
Til slutt er det noe å heie om! Som du kan se, er et par egendefinerte MySQL-tabeller opprettet ved hjelp av database API for OpenCart. Så, dette er måten å bruke databaselaterte endringer ved hjelp av installasjonsmetoden til modellen.
Så det er det så langt som installasjonskroken er opptatt av. Jeg håper det ikke er så komplisert som det ser ut til å være ved første øyekast. La oss si det på denne måten. Prosessen påbegynnes ved å utløse en utvidelsesspesifikk installasjonsmetode som igjen kalles installasjonsmetoden for utvidelsen installeres hvis den eksisterer. Til slutt kalles installasjonsmetoden til modellen fra regulatorens installasjonsmetode dersom databasemanipulering er nødvendig av den utvidelsen.
Denne delen, motparten av den forrige delen, fremhever hendelsene i avinstalleringshaken. Vi fortsetter på samme måte som vi gjorde for installasjonsmetoden i den forrige delen, så la oss straks ta tak i koden til avinstallere
krok fra filen admin / styreenhet / forlengelse / module.php
.
last> språk ( 'forlengelse / modul'); $ Dette-> dokument-> setTitle ($ dette-> Språk> får ( 'HEADING_TITLE')); $ Dette-> last> modell ( 'forlengelse / forlengelse'); $ Dette-> last> modell ( 'forlengelse / modul'); hvis ($ this-> validate ()) $ this-> model_extension_extension-> avinstallere ('modul', $ this-> request-> få ['forlengelse']); $ Dette-> model_extension_module-> deleteModulesByCode ($ dette-> forespørsel-> få [ 'forlengelse']); $ Dette-> last> modell ( 'innstilling / innstilling'); $ Dette-> model_setting_setting-> deleteSetting ($ dette-> forespørsel-> få [ 'forlengelse']); // Ring avinstalleringsmetode hvis den eksisterer $ this-> load-> controller ('module /'. $ This-> request-> få ['forlengelse']. '/ Avinstallere'); $ this-> session-> data ['success'] = $ this-> language-> get ('text_success'); $ this-> response-> omdirigere ($ this-> url-> link ('forlengelse / modul', 'token ='. $ this-> session-> data ['token'], 'SSL')); $ this-> getList (); ...?>
Igjen, det burde se litt kjent ut som det meste av det er boilerplate-koden. Den viktige brikken til å begynne med er anropet til avinstallere
metode som sletter oppføringen av den nåværende utvidelsen blir avinstallert fra forlengelse MySQL-tabellen.
Deretter ringer det deleteModulesByCode
, som sletter modulene knyttet til utvidelsen. Det er en spesiell metode som bare finnes i dette modul slags utvidelse-du finner det ikke i de andre utvidelsene som betaling, frakt, svindel, osv.
Årsaken er at du kan kopiere hver modul for å lage flere forekomster. For eksempel kan du vise annerledes banner moduler på forskjellige sider. På den annen side har det ingen mening å replikere den andre typen utvidelser. Igjen som et eksempel, er det bare en forekomst som kreves for PayPal betalingsforlengelse i fronten.
Deretter slettes det konfigurasjonsvariablene knyttet til modulen ved å ringe deleteSetting
metode. Til slutt kalles det avinstallere
metode for modulen som avinstalleres.
La oss åpne admin / styreenhet / modul / pp_login.php
for å se hvordan avinstalleringsmetoden ser ut.
last> modell ( 'forlengelse / event'); $ Dette-> model_extension_event-> deleteEvent ( 'pp_login'); ...?>
Ganske enkelt, va? Det er bare å angre ting som ble injisert i installasjonsmetoden til Logg inn med PayPal modul. Husk at vi opprettet en ny begivenhet post.customer.logout under installasjonen, så det er åpenbart at vi må slette det under avinstallasjon for å sikre at vi ikke forlater noen modulsspesifikke søppel.
La oss også se på avinstalleringsmetoden til PayPal Express Checkout betalingsutvidelse ettersom vi gikk gjennom installeringsmetoden i den tidligere delen. Ta tak i følgende utdrag av admin / controller / betaling / pp_express.php
.
last> modell ( 'betaling / pp_express'); $ Dette-> model_payment_pp_express-> Avinstaller (); ...?>
Ganske forventede ting-det laster modellen og kaller avinstalleringsmetoden. Det gir oss også en sterk grunn til å åpne modellfilen admin / modell / betaling / pp_express.php
og utforske avinstalleringsmetoden også.
db-> spørring ("DROP TABLE IF EXISTS". DB_PREFIX. "paypal_order_transaction ';"); $ this-> db-> spørring ("DROP TABLE IF EXISTS '". DB_PREFIX. "paypal_order';"); ...?>
Vi slipper bare MySQL-tabellene som ble opprettet tidligere, da vi ikke vil at noen skal spørre oss, "Hvordan kunne du forlate dette søppelet?"
Så det var historien, forhåpentligvis hyggelig, å installere og avinstallere kroker i OpenCart. Den neste og siste delen bryter raskt opp de konseptene som læres så langt i en enkel, men likevel tilpasset modul, som det er noe hyggelig å ha i kitty post teori økt.
I denne delen lager vi en adminmodul demo det vil ikke gjøre mye unntatt for å lage et nytt skjema under installasjonen og slippe det under avinstallasjon.
La oss først lage en språkfil slik at modulen hentes i back-end. Gå videre og lag en fil admin / language / engelsk / modul / demo.php
med følgende innhold.
Deretter må vi opprette en modellfil som inneholder den aktuelle og interessante koden til vår tilpassede modul. Modellfilen skal plasseres på
admin / modell / modul / demo.php
. Det skaper en demo MySQL-tabellen iinstallere
metode og faller den iavinstallere
metode.db-> forespørsel ("CREATE TABLE IF NOT EXISTS". DB_PREFIX. "demo" ('demo_id' int (11) IKKE NULL AUTO_INCREMENT, 'navn' VARCHAR (100) IKKE NULL, PRIMARY KEY ('demo_id')) MOTOR = MyISAM DEFAULT COLLATE = utf8_general_ci; "); offentlig funksjon avinstallere () $ this-> db-> spørring ("DROP TABLE IF EXISTS". DB_PREFIX. "demo"; ");Til slutt, gå videre og opprett en kontrollerfil
admin / styreenhet / modul / demo.php
med følgende innhold.last> modell ( '-modulen / demo'); $ Dette-> model_module_demo-> installere (); offentlig funksjon avinstallere () $ this-> load-> modell ('modul / demo'); $ Dette-> model_module_demo-> Avinstaller ();Det er greit, som det burde være - det laster modellen og kaller tilsvarende metoder avhengig av handlingene som utføres.
Gå videre og prøv det. Det bør være oppført som en Demomodul under Utvidelser> Moduler. Installer den og du bør se demo MySQL-tabell opprettet i back-end, og selvfølgelig ikke glem å avinstallere den for å slippe tabellen.
Konklusjon
I dag har vi diskutert et viktig aspekt av OpenCart installasjonsprosessen, installer og avinstaller kroker. Vi gikk gjennom detaljene i disse krokene, og i den senere delen av artikkelen bygde vi en enkel modul som et bevis på konsept.
Selvfølgelig er spørsmål og kommentarer alltid velkomne!