Het filteren van de betaalmethoden met het wagengewicht in OpenCart

Als ontwikkelaar zul je vaak geconfronteerd worden met een scenario dat je dwingt om het kerngedrag van een raamwerk te veranderen. Als dat iets is dat al wordt geleverd door de gebruikersinterface van de beheerder of iets dergelijks, bent u klaar om te gaan! Maar u zult meer dan dat nodig hebben in het geval van complexe aanpassingen - u zult de kadercode moeten veranderen.

Terwijl u dat doet, wilt u de framework-bestanden niet rechtstreeks aanpassen, omdat het een slechte gewoonte is, en het maakt de framework-upgrade ook een nachtmerrie als u veel wijzigingen in verschillende bestanden hebt aangebracht. Je moet dus op zoek naar verschillende mogelijke benaderingen om dit te bereiken zonder de kern zelf te wijzigen. De meeste frameworks bieden tegenwoordig een soort systeem waarmee je dat als onderdeel van uitbreidbaarheid kunt doen.

Vandaag bespreken we een soortgelijk scenario in de context van OpenCart. Als u actief betrokken bent bij de ontwikkeling van OpenCart, weet u waarschijnlijk dat u de betalingsmethoden kunt filteren op basis van het minimumbedrag voor het afrekenen van de winkelwagen. U kunt er bijvoorbeeld voor kiezen om de COD-methode niet te vermelden als het kassatotaal minder is dan een bepaald bedrag. Het is ingebouwd en u kunt het instellen tijdens het configureren van de betaalmethode vanaf de back-end.

In deze zelfstudie breiden we deze uit en proberen we de betaalmethoden te beperken op basis van het totale gewicht van de winkelwagen. We zullen bespreken hoe de COD-methode tijdens het afrekenen wordt gefilterd als het wagengewicht minder is dan een bepaalde vooraf gedefinieerde waarde. Om deze functionaliteit te bereiken, zijn er wijzigingen in de code nodig, omdat deze niet via de back-end zelf kunnen worden geconfigureerd.

Zoals eerder vermeld, moet u geen kernbestanden van het framework wijzigen en dat biedt ons de optie van OCMOD. Maak je geen zorgen als je er niet bekend mee bent, want ik zal het in het volgende deel introduceren.

Ik ga ervan uit dat je de nieuwste versie van OpenCart gebruikt en vanaf nu is dit OpenCart 2.2.0.0. Het OCMOD-systeem werkt ook alleen met OpenCart 2.x.x.x, dus dat geeft je nog een reden om de nieuwste versie te installeren.

Dus dat maakt dingen netjes voor ons om door te gaan. Laten we gaan!

Wat is OCMOD?

OCMOD is een XML-gebaseerd systeem voor zoeken en vervangen waarmee u de kernbestanden van het OpenCart-framework kunt wijzigen. U definieert het XML-bestand volgens de conventies van OCMOD en het doet de rest. Als je hebt gehoord van het vQmod-systeem in OpenCart 1.5.x, is het een opvolger van dat systeem.

Laten we een paar voorbeelden noemen om te begrijpen waartoe het in staat is:

  • Voeg een bepaald stuk code in vóór een bepaalde regel in het bestand.
  • Vervang een codeblok door uw aangepaste codeblok.
  • Zoek een tekenreeks in het bestand met regex en vervang deze door een andere tekenreeks.
  • Verander het schema van de OpenCart-database.
  • Veel meer…

Hoewel de volgende paar secties je moeten helpen begrijpen hoe het werkt, kun je ook een kijkje nemen bij deze diepgaande uitleg van OCMOD.

Als je niet bekend bent met vQmod of OCMOD, raad ik je aan om het bovengenoemde artikel te doorlopen, omdat deze tutorial slipt door OCMOD gebruik.

Nadat je jezelf vertrouwd hebt gemaakt met OCMOD, gaan we naar de volgende sectie die een OCMOD-module bouwt om de bovengenoemde aanpassing te bereiken.

Hoe ziet het eruit zonder OCMOD?

Laten we even kijken naar het bestand dat in ons geval moet worden gewijzigd. Ga je gang en open de catalogus / controller / checkout / payment_method.php bestand in uw favoriete teksteditor en zoek naar het volgende fragment in de inhoudsopgave methode.

$ results = $ this-> model_extension_extension-> getExtensions ('betaling');

Het haalt alle actieve betaalmethoden uit de database. Op basis van die regel kunnen we onze code invoegen zodat deze de COD-methode filtert als het totale gewicht van de winkelwagen minder is dan een bepaalde waarde. Het zou er zo uit moeten zien als we dit bestand rechtstreeks willen wijzigen.

$ results = $ this-> model_extension_extension-> getExtensions ('betaling'); / *** onze aangepaste code *** / $ totalCartWeight = $ this-> cart-> getWeight (); $ minCodWeight = 100; if ($ totalCartWeight < $minCodWeight)  $updated_results = array(); foreach ($results as $result)  if ($result['code'] != 'cod')  $updated_results[] = $result;   $results = $updated_results;  /*** our custom code ***/

Zoals u kunt zien, is onze aangepaste code ingepakt door de opmerkingen.

Eerst halen we het totale gewicht van de kar met behulp van de getWeight methode van de kar voorwerp. Om het simpel te houden, hebben we het minimale vereiste gewicht voor de COD-methode gecodeerd naar 100. Uiteraard kunt u een back-end-configuratiemodule maken zodat u deze vanaf de beheerder zelf kunt configureren.

Vervolgens is er een als voorwaarde dat het totale wagengewicht met het minimale COD-gewicht wordt gecontroleerd en op basis daarvan de COD-methode uit de $ resultaten rangschikking.

Dus dat is het voor zover het de codewijziging betreft. In de volgende sectie zullen we dit bereiken met behulp van OCMOD, en dat is wat ik je in het begin van het artikel beloofde!

Bouw en installeer de OCMOD-module

Bouw de module

Maak een filter_payment_method.ocmod.xml bestand met de volgende inhoud.

  Betaalmethoden filteren op basis van het gewicht van de winkelwagen Code_Tutsplus_Filter_Payment_Methods 1.0 Code Tutsplus http://code.tutsplus.com   model_extension_extension-> getExtensions ( 'betaling'); ]]> model_extension_extension-> getExtensions ( 'betaling'); / *** onze aangepaste code *** / $ totalCartWeight = $ this-> cart-> getWeight (); $ minCodWeight = 100; if ($ totalCartWeight < $minCodWeight)  $updated_results = array(); foreach ($results as $result)  if ($result['code'] != 'cod')  $updated_results[] = $result;   $results = $updated_results;  /*** our custom code ***/ ]]>   

Zoals u kunt zien, zijn de meeste tags vanzelfsprekend. De belangrijkste tag is , die de bestandsnaam definieert waarop de bewerking zal worden uitgevoerd. De tag wordt gebruikt om de code te doorzoeken die we zoeken en tot slot hebben we de code gebruikt label om onze code te injecteren.

Installeer de module

Ga naar het back-end en navigeer naar Extensies> Verlenging Installer. Klik op de uploaden knop en selecteer het bestand dat we in het vorige gedeelte hebben gemaakt. Als alles goed gaat, zou u een succesmelding moeten zien.

Navigeren naar Extensies> Modificaties, en je zou je OCMOD extensie op die pagina moeten zien.

U hebt de extensie met succes geïnstalleerd!

Ga naar de voorkant en voeg een paar producten toe aan de winkelwagen, zodat het totale gewicht van de winkelwagen onder de 100 blijft. Start nu de kassa en in de Betaalmethodes tab zou je moeten opmerken dat er geen KABELJAUW beschikbaar. Natuurlijk moet u ten minste één extra betaalmethode hebben ingeschakeld, anders zal OpenCart dat klagen Er zijn geen betalingsopties beschikbaar.

Dus dat is het voor vandaag! Op deze manier kunt u het OCMOD-systeem gebruiken voor elke aanpassing waarvoor u de kernbestanden moet wijzigen.

Conclusie

In dit artikel hebben we geleerd hoe het OCMOD-systeem te gebruiken om de betaalmethoden in de kassa te filteren op basis van het totale gewicht van de winkelwagen. Ik hoop dat je ervan hebt genoten en iets nieuws hebt geleerd in OpenCart.

Vergeet niet om uw gedachten en vragen te delen met behulp van de commentaarfeed hieronder.