Eelmises postituses hakkasin jagama, kuidas WordPressis (kasutades Ajaxit) JSON-i kaudu kasutajate e-posti aadresse alla laadida. Esimene artikkel käsitles:
- selleks JavaScripti registreerimine
- kasutajate e-posti aadresside hankimine,
- ja analüüsides tulemusi.
Siiski on veel teha. Nimelt:
- tagastatud teabe teisendamine JSON-iks,
- selle faili kettale kirjutamine,
- ja kuidas ülejäänud osa JavaScripti abil kokku siduda.
Ja seda selle postituse ülejäänud osa katab. Nii et kui te pole eelmist artiklit lugenud, soovitan seda mitte muul põhjusel kui koodile pilk heita, et seda seni näha.
Kasutajate e-posti aadressid JSON-i kaudu, jätkab
Peale selle, et sama protsessi käsitlemiseks on ka teisi viise (olenevalt kasutajate arvust, on mõned tõhusamad), pange tähele, et ma kasutan selleks jQueryt (vanilje JavaScripti asemel). Mõned inimesed ei ole selle tegemise fännid ja see on lahe, kuid mul pole selles postituses selle kohta näiteid.
Valin need näited, kuna jQuery tarnitakse koos WordPressiga, paljud WordPressi arendajad kasutavad seda, see sobib selle olukorraga ja mulle meeldib see endiselt. 🙂
Seda öeldes jätkan sealt, kus pooleli jäin.
1 Teisendage massiiv JSON-iks
Kui olete PHP-ga tuttav, on seda lihtne teha; aga kui ei, siis pole sellest suurt midagi. Esiteks vaadake PHP käsiraamatus üle json_encode . Pange tähele, et see võtab massiivi ja tagastab selle vormindatud stringina.
Seda ma kasutan e-posti aadresside massiivi teisendamiseks JSON-i stringiks, mis lõpuks kettale kirjutatakse. See on üks koodirida.
json_encode($user_results);
Pidage meeles, et on olemas funktsioon, mis genereerib vastavalt vajadusele kasutajatulemusi. Täpsemalt kutsusin ma funktsiooni getUserInfo ja jagan seda hetkeks.
Kuna me saadame faili kasutajale, tuleb teave kettale kirjutada.
2 Kirjutage see kettale
Sel hetkel on aeg tulemused kettale kirjutada. Sõltuvalt teie serveri õigustest võite faili kettale kirjutada otse pistikprogrammi kataloogis; vastasel juhul peate võib-olla kasutama üleslaadimiste kataloogi.
Eeldades, et kasutate esimest, näeb täisfunktsioon välja järgmine:
<?php
private function writeAddressesToDisk($addresses)
{
$path = plugin_dir_path(__FILE__). 'results.json';
if (!file_exists($path)) {
touch($path);
}
$handle = fopen($path, 'w');
fwrite($handle, json_encode($addresses));
fclose($handle);
}
Esiteks kontrollib see, kas result.json on olemas. Kui ei, loob see tühja faili. Pärast seda avab see faili kirjutamiseks, langetab JSON-vormingus massiivi sisu faili ja sulgeb seejärel ressursi.
Nüüd on fail kettal, seega on aeg see JavaScripti kasutades kasutajale saata.
3 Saatke see kasutajale
Esiteks vaatame uuesti eelmise postituse JavaScripti funktsiooni _getEmailAddresses . Siiani tehtud tööd näete selles kokkuvõttes.
Pange tähele, et esimese asjana tuleb kutsuda serveripoolne funktsioon, mille olen valinud getEmailAddresses kutsumise. Pange tähele, et see käivitab päringu, genereerib massiivi, kirjutab faili kettale ja kordab failinime JavaScripti funktsioonile (kuna WordPress nõuab Ajaxi kõnede jaoks pigem kaja, mitte tagastamist):
<?php
public function getEmailAddresses()
{
$this->writeAddressesToDisk(
$this->getUserInfo(
$this->getUserResults()) );
echo plugin_dir_url(__FILE__). 'results.json';
die;
}
Pange tähele, et tegemist on kolme funktsioonikutsega, millest igaüks võtab parameetrina teise tulemused ja kordab seejärel plugin_dir_url faili nimega, mida olen valinud kasutada (selgelt results.json ).
4 Faili saatmine JavaScripti kaudu
Siin läheb asi veidi keerulisemaks. Kood vajab:
- veenduge, et on õige vastus,
- kui jah, siis loob see dünaamiliselt peidetud ankru
- käivitab ankru kliki sündmuse, et simuleerida kasutaja sellel klõpsamist.
On loogiline? Vaadake allpool anonüümse funktsiooni tulemusi:
var _getEmailAddresses = function($elem) {
$.get(acme_email_export.ajax_url, {
security: acme_email_export.security,
action: 'getEmailAddresses'
}, function(response) {
if ('' === response) {
return;
}
// Creates the element to download the file.
$('<a></a>')
.attr('href', response)
.attr('download', 'response.json')
.attr('id', 'acme-download-emails')
.text('Download')
.attr('style', 'display:none')
.appendTo($elem.parent());
// Manually trigger clicking of the hidden element to download the file.
$('#acme-download-emails')[0].click();
});
};
See kuvab kasutajale faili allalaadimise dialoogi ja võimaldab neil kuvada selle ja eelmise postituse kaudu loodud JSON-faili.
See on see?
Sisuliselt jah. Tõsi, peate võib-olla oma veebiserveri koodi muutma, kuid üldidee jääb samaks:
- käivitage päring,
- genereerida massiiv,
- teisendage see JSON-iks,
- kirjutage see kettale,
- saata fail kasutajale
Ja jah, võite valida WordPressi kodeerimisstandardite (versus PSR2), vanilje JavaScripti (vs. jQuery) ja nii edasi.
Sellest hoolimata jääb protseduur samaks ja see on üks viis, kuidas saate WordPressis JSON-i kaudu kasutajate e-posti aadresse alla laadida.
