Installera och avinstallera krokar i OpenCart

Som modulutvecklare behöver du oftare skapa ett anpassat schema i din dagliga OpenCart anpassade modulutveckling. Det är redan, som med de andra ramarna, i form av olika krokar anordnade i OpenCarts modularkitektur.

Innan vi går vidare och utforskar ovannämnda krokar, låt oss undersöka begreppet utvidgningar i OpenCart. Titta på toppen, det är en förlängning i OpenCart som gör att du kan berika OpenCarts kärnfunktionalitet. Genom att installera det lägger du till funktioner i front-end-butiken, vare sig det är ett enkelt bildgalleri eller någon snygg drag-och-släppfunktion.

Vidare är förlängningarna, beroende på vilken funktionalitet de tillhandahåller, kategoriserade i logiska grupper. Som ett snabbt exempel lägger till betalningsutvidgningen nya betalningsmetoder i fronten-kassan, medan det är en förlängning av bedrägerier som gör det möjligt att upptäcka spamaktiviteter i din butik. Gå över till baksidan och kolla på listan under Extensions meny som visar olika typer av tillägg som stöds i OpenCart.

Du kommer bli förvånad att veta att a modul är också bara en annan typ av förlängning i OpenCart. Varje förlängning bygger på det gemensamma arbetsflödet av hur saker ska fungera i OpenCart ekosystem. Med krokar kan du utföra vissa åtgärder baserat på specifika händelser, oavsett om det körs en installationskrok under modulen aktivering eller städning av sopor under avinstallation.

Det kommer att installeras och avinstallera krokar som kommer att diskuteras under hela denna artikels gång. Även om de kommer att diskuteras inom ramen för moduler ser jag inte något som hindrar dig att använda samma metod för andra typer av tillägg också, så gärna utforska dessa filer på egen hand.

Det är den senaste versionen av OpenCart som ger utdragna spridningar över denna handledning. Som att skriva detta är det 2.1.0.2 stabila versionen.

Gå igenom installationshaken

I det här avsnittet undersöker vi vad exakt installationshaken används för. Gå vidare och öppna admin / styrenheten / förlängning / module.php i din favorit textredigerare och hitta Installera metod. Det borde se ut så här:

last> språk ( 'förlängning / modul'); $ This-> dokument-> setTitle ($ this-> språk-> get ( 'HEADING_TITLE')); $ This-> last> modellen ( 'förlängning / förlängning'); $ This-> last> modell ( 'förlängning / modul'); om ($ this-> validate ()) $ this-> model_extension_extension-> installera ('modul', $ this-> request-> få ['extension']); $ This-> last> modell ( 'användaren / USER_GROUP'); $ this-> model_user_user_group-> addPermission ($ this-> user-> getGroupId (), 'access', 'module /'. $ this-> request-> få ['förlängning']); $ this-> model_user_user_group-> addPermission ($ this-> user-> getGroupId (), 'modify', 'module /'. $ this-> request-> få ['extension']); // Call installeringsmetod om den finns $ this-> load-> controller ('module /'. $ This-> request-> få ['extension']. '/ Install'); $ this-> session-> data ['success'] = $ this-> language-> get ('text_success'); $ this-> response-> omdirigera ($ this-> url-> länk ('extension / module', 'token ='. $ this-> session-> data ['token'], 'SSL'));  $ this-> getList ();  ...?>

Det är den generiska installationskroken för modulen som kommer att ringas när du försöker installera någon modul från baksidan. Låt oss gå igenom viktiga delar av denna metod.

Först laddar det de modellfiler som krävs för de efterföljande aktiviteterna. De $ This-> model_extension_extension-> installera metodsamtal säkerställer att en post läggs till i databasen för den här modulen.

Efter det finns det några ACL-saker, och det uppnås genom att ringa addPermission metod. Det säkerställer att den nuvarande användaren, admin, ska kunna komma åt de modulspecifika inställningarna och ändra dem.

Slutligen kallas det Installera metod för modulen som installeras. Bli inte förvirrad med installationsmetoden vi redan är i-det kommer att ringa modulen specifik Installera metod om det existerar.

Om du till exempel försöker installera Logga in med PayPal modul, kallas det en installationsmetod som definieras i filen admin / styrenheten / modul / pp_login.php enligt nedanstående.

last> modellen ( 'förlängning / händelse'); $ this-> model_extension_event-> addEvent ('pp_login', 'post.customer.logout', 'module / pp_login / logout');  ...?>

Sedan introduktionen av OpenCart 2.x finns det några spännande funktioner, och händelseobservatören är en av dem. Det låter dig lägga till modulspecifika händelser, och andra moduler kan skapa observatörer för den här händelsen så att de kan köra någon godtycklig kod när den aktuella händelsen avfyras. Och det är precis vad som visas i ovanstående installationsmetod, som lägger till post.customer.logout anpassad händelse!

I fallet med Logga in med PayPal modulen, det var ganska enkla saker, men ibland behöver du mer om du vill injicera ett anpassat schema eller något liknande. Låt oss dra in vår installationsmetod från PayPal Express Checkout betalningsförlängning. Gå vidare och öppna admin / styrenheten / betalning / pp_express.php.

last> modellen ( 'betalning / pp_express'); $ This-> model_payment_pp_express-> installera ();  ...?>

Först laddar den motsvarande modellfilen och använder den som den kallar Installera metod av modellen. Som en tumregel, när du vill manipulera ett schema, bör du implementera den koden i modellens installationsmetod, istället för att direkt lägga den i regulatorns installationsmetod.

Låt oss nu snabbt dra in installationsmetoden som definieras i modellfilen admin / modell / betalning / pp_express.php.

db-> fråga ("CREATE TABLE IF NOT EXISTS".) DB_PREFIX. "paypal_order" ('paypal_order_id' int (11) INTE NULL AUTO_INCREMENT, 'order_id' int (11) INTE NULL, 'date_added' DATETIME NOT NULL, 'date_modified 'DATUM INTE NULL,' capture_status 'ENUM (' Complete ',' NotComplete ') DEFAULT NULL,' currency_code 'CHAR (3) INTE NULL,' authorization_id 'VARCHAR (30) INTE NULL,' totalt 'DECIMAL (10, 2) NOT NULL, PRIMARY KEY ('paypal_order_id')) ENGINE = MyISAM DEFAULT COLLATE = utf8_general_ci; "); $ this-> db-> fråga ("CREATE TABLE IF NOT EXISTS".) DB_PREFIX. "paypal_order_transaction" ('paypal_order_transaction_id' int (11) INTE NULL AUTO_INCREMENT, 'paypal_order_id' int (11) INTE NULL, 'transaction_id' CHAR 20) INTE NULL, 'parent_transaction_id' CHAR (20) INTE NULL, 'date_added' DATETID INTE NULL, 'notera' VARCHAR (255) INTE NULL, 'msgsubid' CHAR (38) INTE NULL, 'kvitto_id' CHAR (20) INTE NULL, 'payment_type' ENUM ('ingen', 'echeck', 'instant', 'refund', 'void') DEFAULT NULL, 'betalningsstatus' CHAR (20) INTE NULL, 'väntar_reason' CHAR (50) INTE NULL, 'transaction_entity' CHAR (50) INTE NULL, 'belopp' DECIMAL (10, 2) INTE NULL, 'debug_data' TEXT INTE NULL, 'call_data' TEXT INTE NULL, PRIMARY KEY ('paypal_order_transaction_id')) ENGINE = MyISAM DEFAULT COLLATE = utf8_general_ci; ");  ...?>

Slutligen finns det något att heja om! Som du kan se skapas ett par anpassade MySQL-tabeller med hjälp av databas API för OpenCart. Så, det här är sättet att tillämpa databasrelaterade ändringar med hjälp av modellens installationsmetod.

Så det är så långt som installationskroken är oroad. Jag hoppas att det inte är så komplicerat som det verkar vara vid första anblicken. Låt oss säga det här sättet. Processen påbörjas genom att utlösa en förlängningsspecifik installationsmetod som i sin tur kallar installationsmetoden för förlängningen installerad om den existerar. Slutligen kallas modellens installationsmetod från regulatorns installationsmetod om databasmanipulation behövs av den förlängningen.

Gå igenom avinstallationshaken

Det här avsnittet, motsatsen till föregående avsnitt, belyser händelserna i avinstallationshaken. Vi fortsätter på samma sätt som vi gjorde för installationsmetoden i föregående avsnitt, så låt oss genast ta tag i koden för avinstallera krok från filen admin / styrenheten / förlängning / module.php.

last> språk ( 'förlängning / modul'); $ This-> dokument-> setTitle ($ this-> språk-> get ( 'HEADING_TITLE')); $ This-> last> modell ( 'förlängning / förlängning'); $ This-> last> modell ( 'förlängning / modul'); om ($ this-> validate ()) $ this-> model_extension_extension-> avinstallera ('modul', $ this-> request-> få ['extension']); $ This-> model_extension_module-> deleteModulesByCode ($ this-> begäran-> få [ 'utvidgning']); $ This-> last> modell ( 'inställning / inställning'); $ This-> model_setting_setting-> deleteSetting ($ this-> begäran-> få [ 'utvidgning']); // Ring avinstallationsmetod om det finns $ this-> load-> controller ('module /'. $ This-> request-> få ['extension']. '/ Avinstallera'); $ this-> session-> data ['success'] = $ this-> language-> get ('text_success'); $ this-> response-> omdirigera ($ this-> url-> länk ('extension / module', 'token ='. $ this-> session-> data ['token'], 'SSL'));  $ this-> getList ();  ...?>

Återigen ska det se lite bekant ut eftersom det mesta är kedjeplattkoden. Det viktiga fragmentet som ska börja med är samtalet till avinstallera metod som tar bort inmatningen av den aktuella tillägget avinstalleras från förlängning MySQL-tabellen.

Därefter ringer det deleteModulesByCode, vilken tar bort de moduler som är kopplade till förlängningen. Det är en speciell metod som bara finns i detta modul typ av förlängning-du hittar den inte i de andra tilläggen som betalning, frakt, bedrägeri osv.

Anledningen är att du kan kopiera varje modul för att skapa flera instanser. Du kan till exempel visa olika baner moduler på olika sidor. Å andra sidan har det ingen mening att replikera den andra typen av tillägg. Återigen som exempel är det bara en instans som krävs för PayPal betalningsförlängning i fronten.

Därefter raderas konfigurationsvariablerna relaterade till modulen genom att ringa deleteSetting metod. Slutligen kallas det avinstallera metod för modulen som avinstalleras.

Låt oss öppna admin / styrenheten / modul / pp_login.php för att se hur avinstallationsmetoden ser ut.

last> modellen ( 'förlängning / händelse'); $ This-> model_extension_event-> deleteEvent (pp_login ');  ...?>

Ganska enkelt, va? Det är bara att ångra de saker som injicerades i installationsmetoden för Logga in med PayPal modul. Kom ihåg att vi skapade en ny händelse post.customer.logout under installationen så det är uppenbart att vi måste radera det under avinstallationen för att se till att vi inte lämnar några modulspecifika sopor.

Låt oss också snabbt titta på avinstallationsmetoden för PayPal Express Checkout betalningsförlängning när vi gick igenom installationsmetoden i det tidigare avsnittet. Ta tag i följande utdrag av admin / styrenheten / betalning / pp_express.php.

last> modellen ( 'betalning / pp_express'); $ This-> model_payment_pp_express-> avinstallera ();  ...?>

Riktigt förväntade saker-det laddar modellen och kallar avinstallationsmetoden. Det ger oss också en stark anledning att öppna modellfilen admin / modell / betalning / pp_express.php och utforska avinstallationsmetoden också.

db-> fråga ("DROP TABLE IF EXISTS" ". DB_PREFIX." paypal_order_transaction '; "); $ this-> db-> fråga ("DROP TABLE IF EXISTS" ". DB_PREFIX." paypal_order ";");  ...?>

Vi släpper bara MySQL-tabellerna som skapades tidigare, eftersom vi inte vill att någon ska fråga oss, "Hur kunde du lämna detta skräp?"

Så det var historien, förhoppningsvis snygg, att installera och avinstallera krokar i OpenCart. Nästa och sista avsnittet snabbar snabbt upp de begrepp som hittills hittats i en enkel men ändå fungerande anpassad modul, eftersom det är något trevligt att ha i din kattpost teori session.

Skapa / släpp ett anpassat schema med hjälp av Installera / avinstallera krokar

I det här avsnittet skapar vi en administratormodul demo Det kommer inte att göra mycket förutom att skapa ett nytt schema under installationen och släppa det under avinstallationen.

Låt oss först skapa en språkfil så att modulen hämtas i back-end. Gå vidare och skapa en fil admin / språk / engelska / modul / demo.php med följande innehåll.

Därefter måste vi skapa en modellfil som innehåller den faktiska och intressanta koden för vår anpassade modul. Modelfilen ska placeras på admin / modell / modul / demo.php. Det skapar en demo MySQL bord i Installera metod och droppar den i avinstallera metod.

db-> fråga ("CREATE TABLE IF NOT EXISTS". DB_PREFIX. "demo" ("demo_id" int (11) INTE NULL AUTO_INCREMENT, "namn" VARCHAR (100) INTE NULL, PRIMÄR KEY ('demo_id') MOTOR = MyISAM DEFAULT COLLATE = utf8_general_ci; ");  avinstallation av offentlig funktion () $ this-> db-> fråga ("DROP TABLE IF EXISTS" ". DB_PREFIX." demo ";"); 

Slutligen, fortsätt och skapa en kontrollerfil admin / styrenheten / modul / demo.php med följande innehåll.

last> modell ( 'modul / demo'); $ This-> model_module_demo-> installera ();  avinstallation av offentlig funktion () $ this-> load-> model ('module / demo'); $ This-> model_module_demo-> avinstallera (); 

Det är rakt, som det borde vara - det laddar modellen och kallar motsvarande metoder beroende på vilka åtgärder som utförs.

Fortsätt och prova. Det bör listas som en Demomodul under Extensions> Moduler. Installera det och du bör se demo MySQL-tabellen skapades i back-end, och förstås glöm inte att avinstallera den för att släppa tabellen.

Slutsats

Idag har vi diskuterat en viktig aspekt av OpenCart installationsprocessen, installera och avinstallera krokar. Vi gick igenom detaljerna i dessa krokar och i den senare delen av artikeln byggde vi en enkel modul som ett bevis på konceptet.

Naturligtvis är frågor och kommentarer alltid välkomna!