Module Configuratie opslaan
Invoering
In het derde deel van deze serie kijken we hoe we configuratie-gegevens op te slaan for onze modules in de Prestashop database, en hoe kunnen we allow gebruikers met deze gegevens aan de module's gedrag te sturen. We zullen ook kort ingaan op hoe we output te genereren vanuit onze module om visuele feedback van de configuratie wijzigingen door te geven.
Managing gebruikersinstellingen
We gaan deze module "TutorialSecond" zodat we weer behoefte aan een nieuwe module directory en klasse-bestand te maken - die de naam "tutorialsecond" en "tutorialsecond.php" respectievelijk te bellen. De klasse-bestand (tutorialsecond.php) moet het volgende bevatten:
<? Php
klasse Tutorialsecond breidt Module
(
particuliere $ _html ='';
functie __construct ()
(
$ This-> naam = 'tutorialsecond';
ouder:: __construct ();
$ This-> tab = 'eCartService.net Tutorials';
$ This-> versie = '0 .1.0 ';
$ This-> displayName = $ this-> l ('tweede tutorial Module');
$ This-> description = $ this-> l ('Onze tweede module - Een "Hello world" redux');
)
getContent publieke functie ()
(
)
Stuur een prive-_displayForm ()
(
)
)
/ / Einde van: tutorialsecond.php U zult merken dat we nog twee nieuwe Lid-functies:: getContent () en:: _displayForm () uitgevoerd. Als u het bestand uploaden naar uw server en installeren van deze module in deze fase moet je een nieuwe optie op de modules die lijst zie scherm voor 'tweede tutorial Module'. Er zal nu een ">> Configure" link in de module binnenkomst, maar zal dit alleen maar te klikken terug een lege pagina Back Office. De aanwezigheid van de:: getContent () lid functie is verantwoordelijk voor dit omdat het de interface tussen onze module en de Back Office.
Naast deze twee nieuwe functies hebben we ook nog de $ _html private member variabele, die we later zullen gebruiken in dit artikel om de gewenste output voor weergave in de Back Office te bouwen.
Het opslaan en ophalen Configuration Data
Prestashop biedt een "Configuration" klasse die verscheidene Lid-functies biedt configuratie te manipuleren van gegevens, maar de twee belangrijkste functies die zullen worden het meest gebruikt zijn:
Configuratie:: updateValue ($ key, $ waarde, $ html = false);
Configuratie:: get ($ key, $ id_lang = NULL);
De Configuratie:: updateValue ()-functie laat ons toe om een configuratie-optie in de database op te slaan (eventueel in meerdere talen in welk geval de waarden $ parameter een array zijn) en de configuratie:: () functie te krijgen laat ons toe om configuratie-gegevens ophalen voor een geselecteerd of op te slaan standaard taal. We zullen negeren de parameters die standaard waarden voor nu, maar zal de $ html parameter in de configuratie opnieuw:: updateValue () functie in het volgende artikel als we kijken naar het onderwerp van formulier validatie.
Uitvoering van het scherm instellen
In ons bronbestand creëerden we een private member-functie _displayForm (). Dit is volledig optioneel als alle van de interface code kan worden geplaatst in de getContent () lid functie, maar het is ten zeerste aanbevolen dat u dit uit omwille van de code gemakkelijker onderhoud te scheiden. We maken een eenvoudig formulier binnen deze functie waarmee we eigenaar van de winkel input te vangen.
Stuur een prive-_displayForm ()
(
$ This-> _html .= '
<form action="'.$_SERVER['REQUEST_URI'].'" method="post">
<label> '. $ this-> l (' Boodschap aan de wereld').'</ label>
<div class="margin-form">
<input type="text" name="our_message" />
</ Div>
<input type="submit" name="submit" value="'.$this-> l ('Update').'" class = "button" />
</ Form> ';
) Je kunt zien dat het:: _displayForm gewoon () functie standaard HTML-code formulier voegt aan onze $ _html lidvariabele, met de vorm streefdoel is $ _SERVER ['REQUEST_URI']. Prestashop's Back Office architectuur zal dit onze route:: getContent klasse lid functie voor ons te hanteren wanneer het formulier wordt geplaatst.
We moeten de volgende code toevoegen aan onze:: getContent () functie om daadwerkelijk weer de vorm en het indienen van formulieren te verwerken.
getContent publieke functie ()
(
if (Tools:: isSubmit ('submit'))
(
Configuratie:: updateValue ($ this-> naam. "_message ', Tools:: getValue (' our_message '));
)
$ This-> _displayForm ();
return $ this-> _html;
) De:: getContent () functie gebruikt eerst een ander Prestashop klasse "Tools" om te testen of we de post actie afhandeling van de vorm, of dat deze functie wordt aangeroepen op een andere manier dat wil zeggen een klik op de "Configure" link in de module lijst - de parameter is de naam gaven we aan onze "update" knop in het formulier.
Als de functie wordt direct gebeld door de Back Office (in dat geval Tools:: isSubmit ('submit') keert terug false), dan noemen we de vorm rendering functie die we hierboven aangemaakt en de terugkeer van de output, gevangen in de $ this- > _html variabele, aan de Back Office voor weergave.
Als de functie wordt aangeroepen als gevolg van ons formulier worden geplaatst, dan kunnen we onze configuratie parameter op te slaan in de database met de waarde geworden op ons formulier. We hebben wederom het Tools-klasse te gebruiken om de waarde van de variabele vorm te verkrijgen met behulp van de oproep tot Tools:: getValue ('our_message') waar 'our_message' is de naam van het invoerveld in ons formulier.
Je kunt zien dat ik de naam van onze module toegevoegd aan het begin van de configuratie-item naam - dit is om ervoor te zorgen dat de configuratie sleutel is uniek als de namespace van deze toetsen wordt gedeeld voor de hele winkel.
Zodra we onze configuratie opgeslagen gegevens van het formulier wordt opnieuw weergegeven, klaar voor meer input indien nodig.
Output Module op een pagina
We hebben nu een methode voor het vastleggen van de inbreng van de eigenaar van de winkel en op te slaan in de database, dus de volgende logische stap zou zijn om iets mee te doen bijvoorbeeld weer te geven op een pagina. In deel 1 van de serie hebben we gesproken over "haken" in verband met modules toevoegen van functionaliteit. Om dit moeten we PrestaShop vertellen dat onze module zou te boek als in de front-office en we doen dit met behulp van de volgende functie (gedefinieerd in de module base class) gebruiken:
$ This-> registerHook ($ hook_name);
De $ hook_name parameter verwijst naar een van de verschillende punten die de Prestashop core modules te voegen productie en / of verwerking van gegevens, maar voor nu zullen we gebruik maken van een in het bijzonder - staat "leftColumn ', wat ons toelaat om inhoud toe te voegen in de linker kolom van alle pagina's. Met het oog op de haak moeten we de volgende nieuwe overschrijven toe te voegen in onze eigen klasse te initialiseren:
publieke functie te installeren ()
(
ouder:: install ();
if (! $ this-> registerHook ('leftColumn'))
return false;
) Dit vertelt Prestashop om onze module haak te voeren wanneer zij de inhoud rendering voor de linkerkolom van alle pagina's. We moeten naast een functie aan de haak callback handvat toe te voegen. De conventie is om de functie naam als de naam Hoek, voorafgegaan door "haak":
hookLeftColumn publieke functie ()
(
return '<div class="block"> <h4>'. Configuratie:: get ($ this-> naam. "_message '). '</ H4> </ div>';
)
In ons eenvoudige voorbeeld dat we zijn gewoon verpakking onze configuratie parameter in een aantal standaard HTML-opmaakcodes, zodat het correct wordt weergegeven op onze pagina.
Als u al hebt geïnstalleerd de module moet je nu vervolgens de installatie opnieuw installeren om ervoor te zorgen dat de haak correct is geregistreerd bij de Prestashop kern. Nu kunt u een waarde in het configuratie scherm voor de module - bijvoorbeeld 'Hello World', en het zal de uitgang van de kop van een vakje in de linkerkolom van uw winkel zijn. De volledige code voor het tweede voorbeeld ziet er nu als volgt uit:
<? Php
klasse Tutorialsecond breidt Module
(
particuliere $ _html ='';
functie __construct ()
(
$ This-> naam = 'tutorialsecond';
ouder:: __construct ();
$ This-> tab = 'eCartService.net Tutorials';
$ This-> versie = '0 .1.0 ';
$ This-> displayName = $ this-> l ('tweede tutorial Module');
$ This-> description = $ this-> l ('Onze tweede module - Een "Hello world" redux');
)
publieke functie te installeren ()
(
ouder:: install ();
if (! $ this-> registerHook ('leftColumn'))
return false;
)
getContent publieke functie ()
(
if (Tools:: isSubmit ('submit'))
(
Configuratie:: updateValue ($ this-> naam. "_message ', Tools:: getValue (' our_message '));
)
$ This-> _displayForm ();
return $ this-> _html;
)
Stuur een prive-_displayForm ()
(
$ This-> _html .= '
<form action="'.$_SERVER['REQUEST_URI'].'" method="post">
<label> '. $ this-> l (' Boodschap aan de wereld').'</ label>
<div class="margin-form">
<input type="text" name="our_message" />
</ Div>
<input type="submit" name="submit" value="'.$this-> l ('Update').'" class = "button" />
</ Form> ';
)
hookLeftColumn publieke functie ()
(
return '<div class="block"> <h4>'. Configuratie:: get ($ this-> naam. "_message '). '</ H4> </ div>';
)
)
/ / Einde van: tutorialsecond.php Overzicht
In dit artikel hebben we uitgebreid onze eerste module op een basisconfiguratie formulier hebben gebruikt en een haak functie om de uitgang weer te geven van onze module in de linkerkolom van onze pagina's. In het volgende deel van deze serie zullen we kijken naar de verbetering van de configuratie faciliteit in iets dat kan worden gebruikt in een echte module uitvoering. Dit omvat het valideren van input van de gebruiker om de vorm, pre-velden van het formulier vullen geval gebaseerd op de huidige configuratie en de weergave van module fouten en waarschuwingen in de Back Office schermen.